1ch 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/termui/table-tag.ts","../src/termui/scroll-tag.ts","../src/termui/base.ts","../src/termui/text.ts","../src/termui/layout.ts","../src/termui/table.ts","../src/termui/widgets.ts","../src/termui/json.ts","../src/termui/tree-list.ts","../src/termui/code-diff.ts","../src/tokenize.ts","../src/theme.ts","../src/termui/chart.ts","../src/document/common.ts","../src/document/markdown.ts","../src/document/html.ts","../src/document/json.ts","../src/document/index.ts","../src/theme-provider.tsx","../src/render.tsx","../src/reconciler.ts","../src/term-react.tsx","../src/hooks.ts"],"sourcesContent":["import type { Line } from \"./base\";\n\nconst TABLE_TAG = Symbol(\"tableLine\");\ntype TableTaggedLine = Line & { [TABLE_TAG]?: true };\n\nfunction toTaggedLine(line: Line): TableTaggedLine {\n return line as TableTaggedLine;\n}\n\nexport function markTableLine(line: Line): Line {\n toTaggedLine(line)[TABLE_TAG] = true;\n return line;\n}\n\nexport function isTableLine(line: Line): boolean {\n return toTaggedLine(line)[TABLE_TAG] === true;\n}\n\nexport function preserveTableTag(source: Line, target: Line): void {\n if (toTaggedLine(source)[TABLE_TAG]) toTaggedLine(target)[TABLE_TAG] = true;\n}\n","import type { Line } from \"./base\";\n\nconst SCROLL_KEY = Symbol(\"scrollRegion\");\n\nexport type ScrollRegionMeta = {\n onScroll: (offset: number) => void;\n totalLines: number;\n maxHeight: number;\n offset: number;\n};\n\ntype ScrollTaggedLine = Line & { [SCROLL_KEY]?: ScrollRegionMeta };\n\nfunction toTagged(line: Line): ScrollTaggedLine {\n return line as ScrollTaggedLine;\n}\n\nexport function markScrollRegion(line: Line, meta: ScrollRegionMeta): Line {\n toTagged(line)[SCROLL_KEY] = meta;\n return line;\n}\n\nexport function getScrollRegionMeta(line: Line): ScrollRegionMeta | undefined {\n return toTagged(line)[SCROLL_KEY];\n}\n\nexport function preserveScrollTag(source: Line, target: Line): void {\n const meta = toTagged(source)[SCROLL_KEY];\n if (meta) toTagged(target)[SCROLL_KEY] = meta;\n}\n","export type Style = {\n text: string;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n onClick?: () => void;\n noSelect?: boolean;\n cell?: number;\n};\n\nexport type Segment = string | Style;\nexport type Line = Segment[];\nexport type Block = Line[];\nexport type LayoutFn = (width: number) => Block;\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemePreference = ThemeMode | \"system\";\n\nexport type ThemePalette = {\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n};\n\nexport type ThemeSemantic = {\n frameBg: string;\n frameFg: string;\n frameMuted: string;\n border: string;\n borderStrong: string;\n inverseFg: string;\n inverseBg: string;\n info: string;\n success: string;\n warn: string;\n danger: string;\n};\n\nexport type ThemeSyntax = {\n default: string;\n keyword: string;\n string: string;\n number: string;\n comment: string;\n punctuation: string;\n function: string;\n type: string;\n};\n\nexport type ThemeMarkdown = {\n headingMarker: string;\n headingBoldMaxLevel: number;\n headings: {\n h1: string;\n h2: string;\n h3: string;\n h4: string;\n h5: string;\n h6: string;\n };\n paragraph: string;\n unorderedBullet: string;\n orderedMarker: string;\n tableHeader: string;\n tableBorder: string;\n quoteMarker: string;\n quoteText: string;\n separator: string;\n codeText: string;\n codeEmpty: string;\n codeBorder: string;\n};\n\nexport type ThemeComponents = {\n tabs: {\n activeFg: string;\n activeBg: string;\n inactiveFg: string;\n separator: string;\n };\n statusbar: {\n fg: string;\n bg: string;\n };\n badge: {\n fg: string;\n bg: string;\n };\n button: {\n fg: string;\n bg: string;\n };\n};\n\nexport type Theme = {\n id: string;\n label: string;\n version: number;\n mode: ThemeMode;\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n\n // Convenience aliases for the most common color paths.\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n border: string;\n bg: string;\n};\n\nexport function normalizedWidth(width: number): number {\n if (!Number.isFinite(width)) return 0;\n return Math.max(0, Math.floor(width));\n}\n","import { type Line, type Segment } from \"./base\";\nimport { normalizedWidth } from \"./base\";\n\nexport function pad(s: string, w: number, right?: boolean): string {\n if (s.length >= w) return s.slice(0, w);\n const space = \" \".repeat(w - s.length);\n return right ? space + s : s + space;\n}\n\nexport function hl(n: number): string {\n return \"\\u2500\".repeat(normalizedWidth(n));\n}\n\nexport function bar(val: number, max: number, w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0) return \"\";\n if (!Number.isFinite(max) || max <= 0) return \"\\u2591\".repeat(width);\n\n const ratio = Number.isFinite(val) ? val / max : 0;\n const filled = Math.round(Math.min(1, Math.max(0, ratio)) * width);\n return \"\\u2588\".repeat(filled) + \"\\u2591\".repeat(width - filled);\n}\n\nexport function spark(data: number[], w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0 || data.length === 0) return \"\";\n\n const ticks = \"\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588\";\n const v = data.slice(-width);\n const mn = Math.min(...v);\n const mx = Math.max(...v);\n const rg = mx - mn || 1;\n return v.map((x) => ticks[Math.round(((x - mn) / rg) * 7)]).join(\"\");\n}\n\nfunction segLen(seg: Segment): number {\n return typeof seg === \"string\" ? seg.length : seg.text.length;\n}\n\nfunction lineLen(line: Line): number {\n let n = 0;\n for (const seg of line) n += segLen(seg);\n return n;\n}\n\nfunction sliceSeg(seg: Segment, end: number): Segment | null {\n if (end <= 0) return null;\n if (typeof seg === \"string\") {\n const text = seg.slice(0, end);\n return text.length > 0 ? text : null;\n }\n const text = seg.text.slice(0, end);\n if (text.length === 0) return null;\n return { ...seg, text };\n}\n\nfunction truncateLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const out: Line = [];\n let remaining = w;\n\n for (const seg of line) {\n if (remaining <= 0) break;\n const len = segLen(seg);\n if (len <= remaining) {\n out.push(seg);\n remaining -= len;\n continue;\n }\n const clipped = sliceSeg(seg, remaining);\n if (clipped) out.push(clipped);\n remaining = 0;\n }\n\n return out;\n}\n\nexport function padLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const used = lineLen(line);\n if (used > w) return truncateLine(line, w);\n if (used === w) return line;\n return [...line, { text: \" \".repeat(w - used), noSelect: true }];\n}\n\nexport function truncate(text: string, width: number, ellipsis = \"\\u2026\"): string {\n if (text.length <= width) return text;\n if (width <= ellipsis.length) return ellipsis.slice(0, width);\n return text.slice(0, width - ellipsis.length) + ellipsis;\n}\n\nexport function wrapText(text: string, w: number): string[] {\n if (w <= 0) return [\"\"];\n if (text.length <= w) return [text];\n\n const result: string[] = [];\n let pos = 0;\n while (pos < text.length) {\n if (pos + w >= text.length) {\n result.push(text.slice(pos));\n break;\n }\n let breakAt = text.lastIndexOf(\" \", pos + w);\n if (breakAt <= pos) {\n // No word boundary — hard break\n result.push(text.slice(pos, pos + w));\n pos += w;\n } else {\n result.push(text.slice(pos, breakAt));\n pos = breakAt + 1;\n }\n }\n return result.length > 0 ? result : [\"\"];\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { hl, padLine } from \"./text\";\nimport { markScrollRegion } from \"./scroll-tag\";\n\nexport type BoxAction = { label: string; onClick: () => void; color?: string };\n\ntype BorderTopOpts = { title?: string; color?: string; action?: BoxAction };\n\nfunction borderTop(w: number, opts?: BorderTopOpts): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u250c\", color: opts?.color, noSelect: true }];\n\n const { title, color, action } = opts ?? {};\n const innerWidth = width - 2; // minus corners\n\n // Title prefix: \"─ title \" (3 chars of framing + title length)\n // Reserve 1 extra char so there's always at least one dash of fill.\n const titleBudget = innerWidth - (action ? action.label.length + 2 : 0) - 4;\n let titleStr = \"\";\n if (title) {\n const safeTitle = title.length > titleBudget ? title.slice(0, Math.max(0, titleBudget)) : title;\n titleStr = safeTitle.length > 0 ? \"\\u2500 \" + safeTitle + \" \" : \"\";\n }\n\n const fillWidth = Math.max(0, innerWidth - titleStr.length - (action ? action.label.length + 2 : 0));\n\n if (!action) {\n return [{ text: \"\\u250c\" + titleStr + hl(fillWidth) + \"\\u2510\", color, noSelect: true }];\n }\n\n return [\n { text: \"\\u250c\" + titleStr + hl(fillWidth), color, noSelect: true },\n { text: \" \" + action.label + \" \", color: action.color ?? color, onClick: action.onClick, noSelect: true },\n { text: \"\\u2510\", color, noSelect: true },\n ];\n}\n\nfunction borderBottom(w: number, color?: string): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u2514\", color, noSelect: true }];\n return [{ text: \"\\u2514\" + hl(width - 2) + \"\\u2518\", color, noSelect: true }];\n}\n\nexport function lines(\n content: Line[] | ((w: number) => Line[]),\n): LayoutFn {\n return (w) => {\n const ls = typeof content === \"function\" ? content(w) : content;\n return ls.map((line) => padLine(line, w));\n };\n}\n\nexport function box(\n content: LayoutFn,\n opts?: { title?: string; borderColor?: string; action?: BoxAction },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n if (width < 2) return content(width);\n\n const bc = opts?.borderColor;\n const inner = width - 2;\n const contentBlock = content(inner);\n const result: Block = [];\n result.push(borderTop(width, { title: opts?.title, color: bc, action: opts?.action }));\n for (const line of contentBlock) {\n result.push([\n { text: \"\\u2502\", color: bc, noSelect: true },\n ...padLine(line, inner),\n { text: \"\\u2502\", color: bc, noSelect: true },\n ]);\n }\n result.push(borderBottom(width, bc));\n return result;\n };\n}\n\nexport function hstack(\n children: LayoutFn[],\n opts?: { gap?: number; widths?: number[] },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const n = children.length;\n if (n === 0) return [];\n const gap = normalizedWidth(opts?.gap ?? 1);\n const totalGap = gap * (n - 1);\n\n let childWidths: number[];\n if (opts?.widths && opts.widths.length === n) {\n childWidths = opts.widths.map((cw) => normalizedWidth(cw));\n } else {\n const available = Math.max(0, width - totalGap);\n const base = Math.floor(available / n);\n const remainder = available - base * n;\n childWidths = children.map((_, i) => base + (i < remainder ? 1 : 0));\n }\n\n const blocks = children.map((child, i) => child(childWidths[i]!));\n const maxLines = Math.max(...blocks.map((b) => b.length));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n\n const result: Block = [];\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < blocks.length; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const childLine = blocks[j]![i];\n if (childLine) {\n line.push(...padLine(childLine, childWidths[j]!));\n } else {\n line.push(\" \".repeat(childWidths[j]!));\n }\n }\n result.push(line);\n }\n return result;\n };\n}\n\nexport function vstack(...children: LayoutFn[]): LayoutFn {\n return (w) => {\n const result: Block = [];\n for (const child of children) {\n result.push(...child(w));\n }\n return result;\n };\n}\n\nexport function separator(color?: string, char?: string): LayoutFn {\n return (w) => {\n const c = char ?? \"\\u2500\";\n return [[{ text: c.repeat(normalizedWidth(w)), color, noSelect: true }]];\n };\n}\n\nexport function blank(count = 1): LayoutFn {\n return (w) => {\n const line = [\" \".repeat(normalizedWidth(w))];\n const result: Block = [];\n for (let i = 0; i < count; i++) result.push(line);\n return result;\n };\n}\n\nexport function divider(\n label: string,\n opts?: { color?: string; char?: string; labelColor?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const c = opts?.char ?? \"\\u2500\";\n const padded = ` ${label} `;\n if (padded.length >= width) {\n const lc = opts?.labelColor ?? opts?.color;\n return [[lc ? { text: padded.slice(0, width), color: lc } : padded.slice(0, width)]];\n }\n const remaining = width - padded.length;\n const leftLen = Math.floor(remaining / 2);\n const rightLen = remaining - leftLen;\n const lineColor = opts?.color;\n const labelColor = opts?.labelColor ?? opts?.color;\n const line: Line = [\n { text: c.repeat(leftLen), color: lineColor, noSelect: true },\n labelColor ? { text: padded, color: labelColor } : padded,\n { text: c.repeat(rightLen), color: lineColor, noSelect: true },\n ];\n return [line];\n };\n}\n\nexport function grid(\n cells: LayoutFn[],\n opts: { cols: number; gap?: number; rowGap?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const cols = Math.max(1, opts.cols);\n const gap = normalizedWidth(opts.gap ?? 1);\n const rowGap = normalizedWidth(opts.rowGap ?? 0);\n const totalGap = gap * (cols - 1);\n const cellWidth = Math.max(1, Math.floor((width - totalGap) / cols));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n const result: Block = [];\n\n for (let rowStart = 0; rowStart < cells.length; rowStart += cols) {\n if (rowStart > 0 && rowGap > 0) {\n const emptyLine: Line = [\" \".repeat(width)];\n for (let g = 0; g < rowGap; g++) result.push(emptyLine);\n }\n const rowCells = cells.slice(rowStart, rowStart + cols);\n const blocks = rowCells.map((cell) => cell(cellWidth));\n const maxLines = Math.max(0, ...blocks.map((b) => b.length));\n\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < cols; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const block = blocks[j];\n if (block && block[i]) {\n line.push(...padLine(block[i]!, cellWidth));\n } else {\n line.push(\" \".repeat(cellWidth));\n }\n }\n result.push(padLine(line, width));\n }\n }\n\n return result;\n };\n}\n\nexport function scroll(\n content: LayoutFn,\n opts: { maxHeight: number; offset?: number; scrollbarColor?: string; onScroll?: (offset: number) => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const maxH = normalizedWidth(opts.maxHeight);\n const contentW = Math.max(1, width - 1);\n const fullBlock = content(contentW);\n const totalLines = fullBlock.length;\n\n if (totalLines <= maxH) {\n return fullBlock.map((line) => padLine(line, width));\n }\n\n const maxOffset = Math.max(0, totalLines - maxH);\n const offset = Math.min(maxOffset, Math.max(0, opts.offset ?? 0));\n const visible = fullBlock.slice(offset, offset + maxH);\n\n const thumbHeight = Math.max(1, Math.round((maxH / totalLines) * maxH));\n const thumbStart = Math.round((offset / maxOffset) * (maxH - thumbHeight));\n\n const result: Block = [];\n for (let i = 0; i < visible.length; i++) {\n const inThumb = i >= thumbStart && i < thumbStart + thumbHeight;\n const scrollChar = inThumb ? \"\\u2588\" : \"\\u2591\";\n const line: Line = [\n ...padLine(visible[i]!, contentW),\n { text: scrollChar, color: opts.scrollbarColor, noSelect: true },\n ];\n if (opts.onScroll) {\n markScrollRegion(line, { onScroll: opts.onScroll, totalLines, maxHeight: maxH, offset });\n }\n result.push(line);\n }\n\n return result;\n };\n}\n\nexport function padding(\n content: LayoutFn,\n opts?: { x?: number; y?: number; top?: number; bottom?: number; left?: number; right?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const t = normalizedWidth(opts?.top ?? opts?.y ?? 0);\n const b = normalizedWidth(opts?.bottom ?? opts?.y ?? 0);\n const l = normalizedWidth(opts?.left ?? opts?.x ?? 0);\n const r = normalizedWidth(opts?.right ?? opts?.x ?? 0);\n const innerW = Math.max(1, width - l - r);\n const block = content(innerW);\n const result: Block = [];\n const emptyLine: Line = [\" \".repeat(width)];\n for (let i = 0; i < t; i++) result.push(emptyLine);\n const leftPad = l > 0 ? \" \".repeat(l) : \"\";\n for (const line of block) {\n const padded: Line = leftPad ? [leftPad, ...line] : line;\n result.push(padLine(padded, width));\n }\n for (let i = 0; i < b; i++) result.push(emptyLine);\n return result;\n };\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { markTableLine } from \"./table-tag\";\nimport { hl, pad, wrapText } from \"./text\";\nimport { normalizedWidth } from \"./base\";\n\nfunction tableSep(\n ws: number[],\n l: string,\n m: string,\n r: string,\n color?: string,\n): Line {\n const line: Line = [{ text: l, color, noSelect: true }];\n for (let i = 0; i < ws.length; i++) {\n line.push({ text: hl(ws[i]!), color, noSelect: true, cell: i });\n line.push({ text: i < ws.length - 1 ? m : r, color, noSelect: true });\n }\n return line;\n}\n\nfunction tableTop(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u250c\", \"\\u252c\", \"\\u2510\", color);\n}\n\nfunction tableMid(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u251c\", \"\\u253c\", \"\\u2524\", color);\n}\n\nfunction tableBot(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u2514\", \"\\u2534\", \"\\u2518\", color);\n}\n\nexport type Column<T extends Record<string, unknown> = Record<string, unknown>> = {\n key: keyof T & string;\n title?: string;\n width?: number;\n align?: \"left\" | \"right\";\n headerColor?: string;\n headerBold?: boolean;\n color?: string | ((value: unknown, row: T) => string | undefined);\n dim?: boolean | ((value: unknown, row: T) => boolean);\n onClick?: (value: unknown, row: T) => void;\n};\n\nexport function table<T extends Record<string, unknown>>(\n columns: Column<T>[],\n data: T[],\n opts?: { borderColor?: string; fillWidth?: boolean; headerColor?: string; cellPadding?: number },\n): LayoutFn {\n return (w) => {\n const bc = opts?.borderColor;\n const hc = opts?.headerColor;\n const cp = normalizedWidth(opts?.cellPadding ?? 1);\n const nSep = columns.length + 1; // separators: │col│col│...│\n const minColWidth = 1;\n const widthBudget = Math.max(0, normalizedWidth(w) - nSep);\n const padStr = \" \".repeat(cp);\n\n // Compute column widths\n const ws = columns.map((col) => {\n if (col.width) return Math.max(minColWidth, col.width);\n const displayTitle = col.title ?? col.key;\n const titleW = displayTitle.length + 2 * cp;\n const dataW = Math.max(\n ...data.map((row) => String(row[col.key] ?? \"\").length + 2 * cp),\n 0,\n );\n return Math.max(minColWidth, titleW, dataW);\n });\n\n // If fillWidth, distribute remaining space\n if (opts?.fillWidth && widthBudget > 0) {\n const used = ws.reduce((a, b) => a + b, 0);\n const remaining = widthBudget - used;\n if (remaining > 0 && ws.length > 0) {\n const even = Math.floor(remaining / ws.length);\n const rem = remaining % ws.length;\n for (let i = 0; i < ws.length; i++) {\n ws[i] = ws[i]! + even + (i < rem ? 1 : 0);\n }\n }\n }\n\n if (widthBudget > 0) {\n let used = ws.reduce((a, b) => a + b, 0);\n let overflow = used - widthBudget;\n while (overflow > 0) {\n let idx = -1;\n let widest = 0;\n for (let i = 0; i < ws.length; i++) {\n if (ws[i]! > minColWidth && ws[i]! > widest) {\n widest = ws[i]!;\n idx = i;\n }\n }\n if (idx === -1) break;\n ws[idx] = ws[idx]! - 1;\n overflow -= 1;\n }\n }\n\n const result: Block = [];\n\n // Top border\n result.push(tableTop(ws, bc));\n\n // Header row\n const headerLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const displayTitle = col.title ?? col.key;\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(displayTitle, innerW, col.align === \"right\") + padStr;\n headerLine.push({\n text,\n color: col.headerColor ?? hc,\n bold: col.headerBold ?? true,\n cell: i,\n });\n headerLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(headerLine);\n\n // Mid separator\n result.push(tableMid(ws, bc));\n\n // Data rows — wrap cell text instead of truncating\n for (const row of data) {\n const wrapped: string[][] = columns.map((col, ci) => {\n const val = String(row[col.key] ?? \"\");\n const innerW = Math.max(1, ws[ci]! - 2 * cp);\n return wrapText(val, innerW);\n });\n const rowHeight = Math.max(...wrapped.map((c) => c.length), 1);\n\n for (let ln = 0; ln < rowHeight; ln++) {\n const dataLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const cellLine = wrapped[i]![ln] ?? \"\";\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(cellLine, innerW, col.align === \"right\") + padStr;\n const color =\n typeof col.color === \"function\"\n ? col.color(row[col.key], row)\n : col.color;\n const dim =\n typeof col.dim === \"function\"\n ? col.dim(row[col.key], row)\n : col.dim;\n const cellClick = typeof col.onClick === \"function\" ? () => col.onClick!(row[col.key], row) : undefined;\n dataLine.push({ text, color: color || undefined, dim: dim || undefined, onClick: cellClick, cell: i });\n dataLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(dataLine);\n }\n }\n\n // Bottom border\n result.push(tableBot(ws, bc));\n\n // Tag all lines so the renderer can emit HTML <table>\n for (const line of result) markTableLine(line);\n return result;\n };\n}\n","import type { Block, LayoutFn, Line, Segment, Theme } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { pad, padLine, wrapText } from \"./text\";\n\nexport function statusbar(\n left: Segment[],\n right: Segment[],\n opts?: { bg?: string; color?: string; theme?: Theme },\n): LayoutFn {\n return (w) => {\n const rightLen = right.reduce(\n (acc, s) => acc + (typeof s === \"string\" ? s.length : s.text.length),\n 0,\n );\n const leftWidth = Math.max(0, w - rightLen);\n const paddedLeft = padLine(left, leftWidth);\n\n const theme = opts?.theme;\n const bg = opts?.bg ?? theme?.components.statusbar.bg;\n const color = opts?.color ?? theme?.components.statusbar.fg;\n const line: Line = [...paddedLeft, ...right].map((seg) => {\n if (typeof seg === \"string\") {\n return bg || color ? { text: seg, bg, color } : seg;\n }\n return { ...seg, bg: seg.bg ?? bg, color: seg.color ?? color };\n });\n return [padLine(line, w)];\n };\n}\n\nexport function tabs(\n names: string[],\n active: number,\n opts?: {\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n onSelect?: (index: number) => void;\n onClicks?: ((() => void) | undefined)[];\n theme?: Theme;\n },\n): LayoutFn {\n return (w) => {\n const line: Line = [];\n const onSelect = opts?.onSelect;\n const t = opts?.theme;\n for (let i = 0; i < names.length; i++) {\n const isActive = i === active;\n const name = names[i]!;\n const label = \" \" + (isActive ? name.toUpperCase() : name) + \" \";\n const onClick = opts?.onClicks?.[i] ?? (onSelect ? () => onSelect(i) : undefined);\n\n if (isActive) {\n line.push({\n text: label,\n color: opts?.activeColor ?? t?.components.tabs.activeFg,\n bg: opts?.activeBg ?? t?.components.tabs.activeBg,\n onClick,\n });\n } else {\n line.push({\n text: label,\n color: opts?.inactiveColor ?? t?.components.tabs.inactiveFg,\n onClick,\n });\n }\n\n if (i < names.length - 1) {\n line.push({ text: \"\\u2502\", color: opts?.separatorColor ?? t?.components.tabs.separator, noSelect: true });\n }\n }\n return [padLine(line, w)];\n };\n}\n\nexport function badge(\n label: string,\n opts?: { color?: string; bg?: string; onClick?: () => void; theme?: Theme },\n): Segment {\n const t = opts?.theme;\n return {\n text: label,\n color: opts?.color ?? t?.components.badge.fg,\n bg: opts?.bg ?? t?.components.badge.bg,\n onClick: opts?.onClick,\n };\n}\n\nexport type KVPair = {\n key: string;\n value: string | Segment[];\n keyColor?: string;\n valueColor?: string;\n onClick?: () => void;\n};\n\nexport function kv(\n pairs: KVPair[],\n opts?: { separator?: string; keyColor?: string; valueColor?: string; keyWidth?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const sep = opts?.separator ?? \" \";\n const maxKey = opts?.keyWidth ?? Math.max(0, ...pairs.map((p) => p.key.length));\n const result: Line[] = [];\n\n for (const pair of pairs) {\n const keyText = pad(pair.key, maxKey);\n const keyColor = pair.keyColor ?? opts?.keyColor;\n const keySeg: Segment = keyColor ? { text: keyText, color: keyColor } : keyText;\n\n if (typeof pair.value === \"string\") {\n const valColor = pair.valueColor ?? opts?.valueColor;\n const valSeg: Segment =\n valColor || pair.onClick\n ? { text: pair.value, color: valColor, onClick: pair.onClick }\n : pair.value;\n result.push(padLine([keySeg, sep, valSeg], width));\n } else {\n result.push(padLine([keySeg, sep, ...pair.value], width));\n }\n }\n\n return result;\n };\n}\n\nexport function callout(\n content: LayoutFn | string,\n opts?: { color?: string; accent?: string; label?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const accent = opts?.accent ?? opts?.color;\n const innerWidth = Math.max(1, width - 2);\n\n let block: Block;\n if (typeof content === \"string\") {\n const wrapped = wrapText(content, innerWidth);\n block = wrapped.map((line) => {\n const seg: Line = opts?.color ? [{ text: line, color: opts.color }] : [line];\n return padLine(seg, innerWidth);\n });\n } else {\n block = content(innerWidth);\n }\n\n const result: Block = [];\n\n if (opts?.label) {\n const labelLine: Line = [\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n { text: opts.label, color: accent, bold: true },\n ];\n result.push(padLine(labelLine, width));\n }\n\n for (const line of block) {\n result.push([\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n ...padLine(line, innerWidth),\n ]);\n }\n\n return result;\n };\n}\n\nexport function checkbox(\n checked: boolean,\n label: string,\n opts?: { color?: string; checkColor?: string; onClick?: () => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const check = checked ? \"\\u2713\" : \" \";\n const boxSeg: Segment = {\n text: `[${check}]`,\n color: opts?.checkColor ?? opts?.color,\n onClick: opts?.onClick,\n };\n const labelSeg: Segment = opts?.onClick\n ? { text: ` ${label}`, color: opts.color, onClick: opts.onClick }\n : opts?.color\n ? { text: ` ${label}`, color: opts.color }\n : ` ${label}`;\n return [padLine([boxSeg, labelSeg], width)];\n };\n}\n\nexport function inputField(\n value: string,\n opts?: {\n placeholder?: string;\n width?: number;\n focused?: boolean;\n color?: string;\n borderColor?: string;\n onClick?: () => void;\n },\n): LayoutFn {\n return (w) => {\n const totalWidth = normalizedWidth(opts?.width ?? w);\n const innerWidth = Math.max(1, totalWidth - 2);\n const bc = opts?.borderColor;\n const focused = opts?.focused ?? false;\n\n const display = value || opts?.placeholder || \"\";\n const isPlaceholder = !value && opts?.placeholder;\n\n const textTruncated =\n display.length > innerWidth\n ? display.slice(display.length - innerWidth)\n : display;\n const padded = pad(textTruncated + (focused ? \"\\u2588\" : \"\"), innerWidth);\n\n const line: Line = [\n { text: focused ? \"\\u2502\" : \"[\", color: bc, noSelect: true },\n isPlaceholder\n ? { text: padded, dim: true, color: opts?.color, onClick: opts?.onClick }\n : opts?.color || opts?.onClick\n ? { text: padded, color: opts?.color, onClick: opts?.onClick }\n : padded,\n { text: focused ? \"\\u2502\" : \"]\", color: bc, noSelect: true },\n ];\n return [padLine(line, w)];\n };\n}\n","import type { LayoutFn, Line, Segment } from \"./base\";\nimport { bar } from \"./text\";\nimport { blank, box, hstack, lines, separator, vstack } from \"./layout\";\nimport { type Column, table } from \"./table\";\nimport { statusbar, tabs } from \"./widgets\";\n\nexport type JsonNode =\n | { type: \"vstack\"; children: JsonNode[] }\n | { type: \"hstack\"; gap?: number; widths?: number[]; children: JsonNode[] }\n | { type: \"box\"; title?: string; borderColor?: string; children: JsonNode[] }\n | { type: \"lines\"; content: Line[] }\n | { type: \"separator\"; color?: string }\n | { type: \"blank\" }\n | {\n type: \"table\";\n columns: Column[];\n data: Record<string, unknown>[];\n borderColor?: string;\n fillWidth?: boolean;\n }\n | {\n type: \"statusbar\";\n left: Segment[];\n right: Segment[];\n bg?: string;\n color?: string;\n }\n | {\n type: \"tabs\";\n names: string[];\n active: number;\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n }\n | { type: \"bar\"; value: number; max: number; color?: string; label?: string }\n | { type: \"text\"; segments: Segment[] };\n\nexport function fromJsonNode(node: JsonNode): LayoutFn {\n switch (node.type) {\n case \"vstack\":\n return vstack(...node.children.map(fromJsonNode));\n\n case \"hstack\":\n return hstack(node.children.map(fromJsonNode), {\n gap: node.gap,\n widths: node.widths,\n });\n\n case \"box\":\n return box(vstack(...node.children.map(fromJsonNode)), {\n title: node.title,\n borderColor: node.borderColor,\n });\n\n case \"lines\":\n return lines(node.content);\n\n case \"separator\":\n return separator(node.color);\n\n case \"blank\":\n return blank();\n\n case \"table\":\n return table(node.columns, node.data, {\n borderColor: node.borderColor,\n fillWidth: node.fillWidth,\n });\n\n case \"statusbar\":\n return statusbar(node.left, node.right, {\n bg: node.bg,\n color: node.color,\n });\n\n case \"tabs\":\n return tabs(node.names, node.active, {\n activeColor: node.activeColor,\n activeBg: node.activeBg,\n inactiveColor: node.inactiveColor,\n separatorColor: node.separatorColor,\n });\n\n case \"bar\":\n return (w) => {\n const labelStr = node.label ? \" \" + node.label : \"\";\n const barW = Math.max(0, w - 1 - labelStr.length); // 1 for leading space\n return [[\" \", { text: bar(node.value, node.max, barW), color: node.color }, labelStr]];\n };\n\n case \"text\":\n return lines([node.segments]);\n }\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { padLine, wrapText } from \"./text\";\n\nexport type TreeNode = {\n label: string;\n onClick?: () => void;\n children?: TreeNode[];\n};\n\nexport function tree(\n data: TreeNode[],\n opts?: { color?: string; branchColor?: string; leafColor?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n function walk(nodes: TreeNode[], prefix: string) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!;\n const last = i === nodes.length - 1;\n const hasKids = node.children && node.children.length > 0;\n const connector = last ? \"\\u2514\\u2500\\u2500 \" : \"\\u251c\\u2500\\u2500 \";\n const line: Line = [];\n if (prefix) line.push({ text: prefix, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: connector, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: node.label, color: hasKids ? opts?.color : (opts?.leafColor ?? opts?.color), onClick: node.onClick });\n result.push(padLine(line, w));\n if (hasKids) {\n walk(node.children!, prefix + (last ? \" \" : \"\\u2502 \"));\n }\n }\n }\n walk(data, \"\");\n return result;\n };\n}\n\nexport type ListItem = string | { text: string; color?: string; onClick?: () => void };\n\nexport function list(\n items: ListItem[],\n opts?: { ordered?: boolean; bulletColor?: string; color?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n const ordered = opts?.ordered ?? false;\n const digits = String(items.length).length;\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const text = typeof item === \"string\" ? item : item.text;\n const itemColor = typeof item === \"string\" ? opts?.color : (item.color ?? opts?.color);\n const itemClick = typeof item === \"string\" ? undefined : item.onClick;\n const prefix = ordered\n ? ` ${String(i + 1).padStart(digits, \" \")}. `\n : \" * \";\n const indent = \" \".repeat(prefix.length);\n const wrapped = wrapText(text, w - prefix.length);\n for (let j = 0; j < wrapped.length; j++) {\n const line: Line = [];\n if (j === 0) {\n line.push({ text: prefix, color: opts?.bulletColor });\n } else {\n line.push(indent);\n }\n line.push(itemColor || itemClick ? { text: wrapped[j]!, color: itemColor, onClick: itemClick } : wrapped[j]!);\n result.push(padLine(line, w));\n }\n }\n return result;\n };\n}\n","import { createPatch } from \"diff\";\nimport { tokenize, type TokenType } from \"../tokenize\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"./base\";\nimport { box, lines, type BoxAction } from \"./layout\";\n\nexport function tokenColor(type: TokenType, theme: Theme): string {\n switch (type) {\n case \"keyword\": return theme.syntax.keyword;\n case \"string\": return theme.syntax.string;\n case \"number\": return theme.syntax.number;\n case \"comment\": return theme.syntax.comment;\n case \"punctuation\": return theme.syntax.punctuation;\n case \"function\": return theme.syntax.function;\n case \"type\": return theme.syntax.type;\n default: return theme.syntax.default;\n }\n}\n\nexport function code(\n source: string,\n opts?: { language?: string; title?: string; borderColor?: string; theme?: Theme; copyable?: boolean; action?: BoxAction },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const tokens = tokenize(source, opts?.language);\n const copyAction = opts?.copyable !== false\n ? { label: \"cp\", onClick: () => navigator.clipboard.writeText(source), color: t.semantic.frameMuted }\n : undefined;\n return box(\n lines(\n tokens.length > 0\n ? tokens.map((lineTokens) =>\n lineTokens.length === 0\n ? [{ text: \" \", color: t.markdown.codeEmpty }]\n : lineTokens.map((tok) => ({ text: tok.text, color: tokenColor(tok.type, t) })),\n )\n : [[{ text: \" \", color: t.markdown.codeEmpty, dim: true }]],\n ),\n {\n title: opts?.title ?? (opts?.language ? `code:${opts.language}` : \"code\"),\n borderColor: opts?.borderColor ?? t.markdown.codeBorder,\n action: opts?.action ?? copyAction,\n },\n );\n}\n\nexport function unifiedDiff(\n value: string,\n opts?: { addColor?: string; removeColor?: string; metaColor?: string; theme?: Theme },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const addC = opts?.addColor ?? t.semantic.success;\n const remC = opts?.removeColor ?? t.semantic.danger;\n const metC = opts?.metaColor ?? t.semantic.info;\n return lines((_) => {\n return value.replace(/\\r\\n/g, \"\\n\").split(\"\\n\").map((row) => {\n if (row.startsWith(\"@@\")) return [{ text: row, color: metC }];\n if (row.startsWith(\"+\")) return [{ text: row, color: addC }];\n if (row.startsWith(\"-\")) return [{ text: row, color: remC }];\n return [{ text: row, dim: true }];\n });\n });\n}\n\nexport function computeDiff(\n before: string,\n after: string,\n opts?: { context?: number; addColor?: string; removeColor?: string; metaColor?: string; theme?: Theme },\n): LayoutFn {\n const patch = createPatch(\"\", before, after, \"\", \"\", { context: opts?.context ?? 3 });\n // Strip the header lines (Index, ===, ---, +++) to get just the hunks\n const hunks = patch.replace(/\\r\\n/g, \"\\n\").split(\"\\n\").filter((l) =>\n !l.startsWith(\"Index:\") && !l.startsWith(\"====\") && !l.startsWith(\"---\") && !l.startsWith(\"+++\"),\n ).join(\"\\n\").trim();\n return unifiedDiff(hunks, opts);\n}\n","// termui — regex-based syntax tokenizer for TCode\n\nexport type TokenType =\n | \"keyword\"\n | \"string\"\n | \"number\"\n | \"comment\"\n | \"punctuation\"\n | \"function\"\n | \"type\"\n | \"default\";\n\nexport type Token = { text: string; type: TokenType };\n\ntype Rule = { pattern: RegExp; type: TokenType };\n\nfunction rules(pairs: [RegExp, TokenType][]): Rule[] {\n return pairs.map(([pattern, type]) => ({\n pattern: new RegExp(pattern.source, \"y\"),\n type,\n }));\n}\n\nconst JS_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/\\/\\*[\\s\\S]*?\\*\\//, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/`(?:[^`\\\\]|\\\\.)*`/, \"string\"],\n [/\\b(?:const|let|var|function|return|if|else|for|while|do|class|import|export|from|async|await|new|throw|try|catch|finally|typeof|instanceof|in|of|void|delete|switch|case|break|continue|default|yield|extends|implements|interface|type|as|this|super|null|undefined|true|false)\\b/, \"keyword\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/\\b[a-zA-Z_$][\\w$]*(?=\\s*\\()/, \"function\"],\n [/=>/, \"punctuation\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nconst JSON_RULES = rules([\n [/\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/, \"function\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/\\b(?:true|false|null)\\b/, \"keyword\"],\n [/-?\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/[{}\\[\\]:,]/, \"punctuation\"],\n]);\n\nconst BASH_RULES = rules([\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'[^']*'/, \"string\"],\n [/\\$\\{[^}]*\\}/, \"type\"],\n [/\\$[A-Za-z_]\\w*/, \"type\"],\n [/\\b(?:if|then|else|elif|fi|for|do|done|while|until|case|esac|function|in|return|exit|echo|export|local|readonly|source|alias|cd|ls|rm|cp|mv|mkdir|grep|sed|awk|cat|chmod|chown|sudo|apt|brew|npm|npx|bun|yarn|git|docker|curl|wget|pipe)\\b/, \"keyword\"],\n [/\\b\\d+\\b/, \"number\"],\n [/[|;&<>()\\[\\]{}]/, \"punctuation\"],\n]);\n\nconst GENERIC_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nfunction rulesFor(lang?: string): Rule[] {\n if (!lang) return GENERIC_RULES;\n const l = lang.toLowerCase();\n if (l === \"json\" || l === \"jsonc\") return JSON_RULES;\n if (l === \"bash\" || l === \"sh\" || l === \"zsh\" || l === \"shell\") return BASH_RULES;\n if (l === \"js\" || l === \"jsx\" || l === \"ts\" || l === \"tsx\" || l === \"javascript\" || l === \"typescript\") return JS_RULES;\n return GENERIC_RULES;\n}\n\nfunction tokenizeLine(line: string, langRules: Rule[]): Token[] {\n const tokens: Token[] = [];\n let pos = 0;\n while (pos < line.length) {\n // Skip whitespace as default\n if (line[pos] === \" \" || line[pos] === \"\\t\") {\n let ws = pos;\n while (ws < line.length && (line[ws] === \" \" || line[ws] === \"\\t\")) ws++;\n tokens.push({ text: line.slice(pos, ws), type: \"default\" });\n pos = ws;\n continue;\n }\n let matched = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) {\n tokens.push({ text: m[0], type: rule.type });\n pos += m[0].length;\n matched = true;\n break;\n }\n }\n if (!matched) {\n // Consume one char as default\n const start = pos;\n pos++;\n while (pos < line.length && line[pos] !== \" \" && line[pos] !== \"\\t\") {\n let anyMatch = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) { anyMatch = true; break; }\n }\n if (anyMatch) break;\n pos++;\n }\n tokens.push({ text: line.slice(start, pos), type: \"default\" });\n }\n }\n return tokens;\n}\n\nexport function tokenize(source: string, language?: string): Token[][] {\n const langRules = rulesFor(language);\n return source.split(\"\\n\").map((line) => tokenizeLine(line, langRules));\n}\n","import type {\n Theme,\n ThemeComponents,\n ThemeMarkdown,\n ThemeMode,\n ThemePalette,\n ThemePreference,\n ThemeSemantic,\n ThemeSyntax,\n} from \"./termui/base\";\n\nexport type ThemeModeTokens = {\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n};\n\nexport type ThemeSpec = {\n id: string;\n label: string;\n version: number;\n modes: Record<ThemeMode, ThemeModeTokens>;\n};\n\nexport type ThemeValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type ThemeValidationResult = {\n ok: boolean;\n issues: ThemeValidationIssue[];\n theme?: ThemeSpec;\n};\n\nconst DARK_PALETTE: ThemePalette = {\n black: \"#0c0c0c\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n magenta: \"#c678dd\",\n cyan: \"#56b6c2\",\n white: \"#cccccc\",\n brightBlack: \"#555555\",\n brightWhite: \"#ffffff\",\n};\n\nconst DARK_SEMANTIC: ThemeSemantic = {\n frameBg: \"#0c0c0c\",\n frameFg: \"#cccccc\",\n frameMuted: \"#555555\",\n border: \"#555555\",\n borderStrong: \"#808080\",\n inverseFg: \"#0c0c0c\",\n inverseBg: \"#ffffff\",\n info: \"#56b6c2\",\n success: \"#98c379\",\n warn: \"#e5c07b\",\n danger: \"#e06c75\",\n};\n\nconst DARK_SYNTAX: ThemeSyntax = {\n default: \"#ffffff\",\n keyword: \"#c678dd\",\n string: \"#98c379\",\n number: \"#e5c07b\",\n comment: \"#555555\",\n punctuation: \"#555555\",\n function: \"#61afef\",\n type: \"#56b6c2\",\n};\n\nconst DARK_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#555555\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#e5c07b\",\n h2: \"#56b6c2\",\n h3: \"#98c379\",\n h4: \"#c678dd\",\n h5: \"#cccccc\",\n h6: \"#cccccc\",\n },\n paragraph: \"#cccccc\",\n unorderedBullet: \"#56b6c2\",\n orderedMarker: \"#56b6c2\",\n tableHeader: \"#56b6c2\",\n tableBorder: \"#555555\",\n quoteMarker: \"#555555\",\n quoteText: \"#555555\",\n separator: \"#555555\",\n codeText: \"#ffffff\",\n codeEmpty: \"#555555\",\n codeBorder: \"#555555\",\n};\n\nconst DARK_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#0c0c0c\",\n activeBg: \"#e5c07b\",\n inactiveFg: \"#555555\",\n separator: \"#555555\",\n },\n statusbar: {\n fg: \"#0c0c0c\",\n bg: \"#98c379\",\n },\n badge: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n button: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n};\n\nconst LIGHT_PALETTE: ThemePalette = {\n black: \"#1f2328\",\n red: \"#cf222e\",\n green: \"#1a7f37\",\n yellow: \"#9a6700\",\n blue: \"#0969da\",\n magenta: \"#8250df\",\n cyan: \"#1b7c83\",\n white: \"#30363d\",\n brightBlack: \"#6e7781\",\n brightWhite: \"#0f172a\",\n};\n\nconst LIGHT_SEMANTIC: ThemeSemantic = {\n frameBg: \"#f6f8fa\",\n frameFg: \"#1f2328\",\n frameMuted: \"#6e7781\",\n border: \"#d0d7de\",\n borderStrong: \"#8c959f\",\n inverseFg: \"#f6f8fa\",\n inverseBg: \"#0f172a\",\n info: \"#0969da\",\n success: \"#1a7f37\",\n warn: \"#9a6700\",\n danger: \"#cf222e\",\n};\n\nconst LIGHT_SYNTAX: ThemeSyntax = {\n default: \"#1f2328\",\n keyword: \"#8250df\",\n string: \"#116329\",\n number: \"#9a6700\",\n comment: \"#6e7781\",\n punctuation: \"#6e7781\",\n function: \"#0969da\",\n type: \"#1b7c83\",\n};\n\nconst LIGHT_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#6e7781\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#9a6700\",\n h2: \"#0969da\",\n h3: \"#1a7f37\",\n h4: \"#8250df\",\n h5: \"#1f2328\",\n h6: \"#1f2328\",\n },\n paragraph: \"#1f2328\",\n unorderedBullet: \"#0969da\",\n orderedMarker: \"#0969da\",\n tableHeader: \"#0969da\",\n tableBorder: \"#d0d7de\",\n quoteMarker: \"#6e7781\",\n quoteText: \"#6e7781\",\n separator: \"#d0d7de\",\n codeText: \"#1f2328\",\n codeEmpty: \"#6e7781\",\n codeBorder: \"#d0d7de\",\n};\n\nconst LIGHT_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#f6f8fa\",\n activeBg: \"#0969da\",\n inactiveFg: \"#6e7781\",\n separator: \"#8c959f\",\n },\n statusbar: {\n fg: \"#f6f8fa\",\n bg: \"#0969da\",\n },\n badge: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n button: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n};\n\nexport const defaultThemeSpec: ThemeSpec = {\n id: \"termui-default\",\n label: \"TermUI Default\",\n version: 1,\n modes: {\n dark: {\n palette: DARK_PALETTE,\n semantic: DARK_SEMANTIC,\n syntax: DARK_SYNTAX,\n markdown: DARK_MARKDOWN,\n components: DARK_COMPONENTS,\n },\n light: {\n palette: LIGHT_PALETTE,\n semantic: LIGHT_SEMANTIC,\n syntax: LIGHT_SYNTAX,\n markdown: LIGHT_MARKDOWN,\n components: LIGHT_COMPONENTS,\n },\n },\n};\n\nexport const builtinThemes = {\n default: defaultThemeSpec,\n} as const;\n\nexport function resolveThemeMode(\n preference: ThemePreference,\n systemMode: ThemeMode = \"dark\",\n): ThemeMode {\n return preference === \"system\" ? systemMode : preference;\n}\n\nexport function resolveTheme(\n spec: ThemeSpec,\n preference: ThemePreference = \"dark\",\n opts?: { systemMode?: ThemeMode },\n): Theme {\n const mode = resolveThemeMode(preference, opts?.systemMode ?? \"dark\");\n const modeTokens = spec.modes[mode] ?? defaultThemeSpec.modes[mode];\n\n return {\n id: spec.id,\n label: spec.label,\n version: spec.version,\n mode,\n palette: modeTokens.palette,\n semantic: modeTokens.semantic,\n syntax: modeTokens.syntax,\n markdown: modeTokens.markdown,\n components: modeTokens.components,\n black: modeTokens.palette.black,\n red: modeTokens.palette.red,\n green: modeTokens.palette.green,\n yellow: modeTokens.palette.yellow,\n blue: modeTokens.palette.blue,\n magenta: modeTokens.palette.magenta,\n cyan: modeTokens.palette.cyan,\n white: modeTokens.palette.white,\n brightBlack: modeTokens.palette.brightBlack,\n brightWhite: modeTokens.palette.brightWhite,\n border: modeTokens.semantic.border,\n bg: modeTokens.semantic.frameBg,\n };\n}\n\nexport const dark = resolveTheme(defaultThemeSpec, \"dark\");\nexport const light = resolveTheme(defaultThemeSpec, \"light\");\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n return {\n \"--termui-bg\": theme.semantic.frameBg,\n \"--termui-fg\": theme.semantic.frameFg,\n \"--termui-muted\": theme.semantic.frameMuted,\n \"--termui-border\": theme.semantic.border,\n \"--termui-border-strong\": theme.semantic.borderStrong,\n \"--termui-info\": theme.semantic.info,\n \"--termui-success\": theme.semantic.success,\n \"--termui-warn\": theme.semantic.warn,\n \"--termui-danger\": theme.semantic.danger,\n \"--termui-inverse-fg\": theme.semantic.inverseFg,\n \"--termui-inverse-bg\": theme.semantic.inverseBg,\n };\n}\n\nexport function parseThemeSpec(json: string): ThemeValidationResult {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch (error) {\n return {\n ok: false,\n issues: [{ path: \"$\", message: error instanceof Error ? error.message : \"Invalid JSON\" }],\n };\n }\n return validateThemeSpec(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction issue(path: string, message: string): ThemeValidationIssue {\n return { path, message };\n}\n\nfunction isColorValue(value: string): boolean {\n const v = value.trim();\n if (!v) return false;\n if (/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(v)) return true;\n if (/^(?:rgb|rgba|hsl|hsla|oklch|oklab|lab|lch|color)\\(.+\\)$/i.test(v)) return true;\n if (/^var\\(--[a-zA-Z0-9-_]+\\)$/.test(v)) return true;\n if (/^[a-zA-Z]+$/.test(v)) return true;\n return false;\n}\n\nfunction validateColorField(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"string\") {\n issues.push(issue(path, \"Expected a string color value\"));\n return;\n }\n if (!isColorValue(value)) {\n issues.push(issue(path, \"Invalid CSS color value\"));\n }\n}\n\nfunction validateHeadingBoldMaxLevel(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n return;\n }\n if (value < 1 || value > 6) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n }\n}\n\nfunction validateTokenGroup(\n value: unknown,\n path: string,\n fields: readonly string[],\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n for (const field of fields) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateMarkdownTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateColorField(value.headingMarker, `${path}.headingMarker`, issues);\n validateHeadingBoldMaxLevel(value.headingBoldMaxLevel, `${path}.headingBoldMaxLevel`, issues);\n\n if (!isRecord(value.headings)) {\n issues.push(issue(`${path}.headings`, \"Expected an object\"));\n } else {\n for (const level of [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const) {\n validateColorField(value.headings[level], `${path}.headings.${level}`, issues);\n }\n }\n\n for (const field of [\n \"paragraph\",\n \"unorderedBullet\",\n \"orderedMarker\",\n \"tableHeader\",\n \"tableBorder\",\n \"quoteMarker\",\n \"quoteText\",\n \"separator\",\n \"codeText\",\n \"codeEmpty\",\n \"codeBorder\",\n ] as const) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateComponentTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.tabs,\n `${path}.tabs`,\n [\"activeFg\", \"activeBg\", \"inactiveFg\", \"separator\"],\n issues,\n );\n validateTokenGroup(value.statusbar, `${path}.statusbar`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.badge, `${path}.badge`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.button, `${path}.button`, [\"fg\", \"bg\"], issues);\n}\n\nfunction validateModeTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.palette,\n `${path}.palette`,\n [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightWhite\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.semantic,\n `${path}.semantic`,\n [\n \"frameBg\",\n \"frameFg\",\n \"frameMuted\",\n \"border\",\n \"borderStrong\",\n \"inverseFg\",\n \"inverseBg\",\n \"info\",\n \"success\",\n \"warn\",\n \"danger\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.syntax,\n `${path}.syntax`,\n [\n \"default\",\n \"keyword\",\n \"string\",\n \"number\",\n \"comment\",\n \"punctuation\",\n \"function\",\n \"type\",\n ],\n issues,\n );\n\n validateMarkdownTokens(value.markdown, `${path}.markdown`, issues);\n validateComponentTokens(value.components, `${path}.components`, issues);\n}\n\nexport function validateThemeSpec(value: unknown): ThemeValidationResult {\n const issues: ThemeValidationIssue[] = [];\n if (!isRecord(value)) {\n return { ok: false, issues: [issue(\"$\", \"Expected an object\")] };\n }\n\n if (typeof value.id !== \"string\" || !value.id.trim()) {\n issues.push(issue(\"$.id\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.label !== \"string\" || !value.label.trim()) {\n issues.push(issue(\"$.label\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.version !== \"number\" || !Number.isInteger(value.version) || value.version < 1) {\n issues.push(issue(\"$.version\", \"Expected a positive integer\"));\n }\n\n if (!isRecord(value.modes)) {\n issues.push(issue(\"$.modes\", \"Expected an object with light/dark modes\"));\n } else {\n validateModeTokens(value.modes.dark, \"$.modes.dark\", issues);\n validateModeTokens(value.modes.light, \"$.modes.light\", issues);\n }\n\n if (issues.length > 0) {\n return { ok: false, issues };\n }\n\n return {\n ok: true,\n issues: [],\n theme: value as ThemeSpec,\n };\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { padLine } from \"./text\";\n\nfunction fmtNum(n: number): string {\n if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1) + \"k\";\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(1);\n}\n\nexport function chart(\n data: number[],\n opts?: { height?: number; color?: string; axisColor?: string; fill?: boolean },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const height = opts?.height ?? 8;\n const color = opts?.color;\n const axisColor = opts?.axisColor;\n\n if (data.length === 0 || width < 4 || height < 2) return [padLine([], width)];\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const minLabel = fmtNum(min);\n const maxLabel = fmtNum(max);\n const labelW = Math.max(minLabel.length, maxLabel.length);\n const axisW = labelW + 2;\n const plotW = Math.max(1, width - axisW);\n\n // Resample data to plotW points\n const points: number[] = [];\n if (data.length === 1) {\n for (let i = 0; i < plotW; i++) points.push(data[0]!);\n } else {\n for (let i = 0; i < plotW; i++) {\n const idx = (i / (plotW - 1)) * (data.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.min(lo + 1, data.length - 1);\n const t = idx - lo;\n points.push(data[lo]! * (1 - t) + data[hi]! * t);\n }\n }\n\n // Map to row indices (0 = bottom, height-1 = top)\n const rows = points.map((v) => Math.round(((v - min) / range) * (height - 1)));\n\n const result: Block = [];\n for (let row = height - 1; row >= 0; row--) {\n const line: Line = [];\n\n // Y axis\n let label = \"\";\n if (row === height - 1) label = maxLabel;\n else if (row === 0) label = minLabel;\n line.push({ text: label.padStart(labelW) + \" \\u2502\", color: axisColor, noSelect: true });\n\n // Plot area\n let text = \"\";\n for (let col = 0; col < plotW; col++) {\n const val = rows[col]!;\n if (val === row) text += \"\\u2584\";\n else if (opts?.fill && val > row) text += \"\\u2588\";\n else text += \" \";\n }\n line.push(color ? { text, color } : text);\n result.push(padLine(line, width));\n }\n\n // X axis\n const xAxis: Line = [\n { text: \" \".repeat(labelW) + \" \\u2514\" + \"\\u2500\".repeat(plotW), color: axisColor, noSelect: true },\n ];\n result.push(padLine(xAxis, width));\n\n return result;\n };\n}\n","import type { Line, Segment, Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\nfunction headingLevelKey(level: number): keyof Theme[\"markdown\"][\"headings\"] {\n if (level <= 1) return \"h1\";\n if (level === 2) return \"h2\";\n if (level === 3) return \"h3\";\n if (level === 4) return \"h4\";\n if (level === 5) return \"h5\";\n return \"h6\";\n}\n\nexport function headingColor(level: number, theme: Theme, overrides?: MarkdownThemeOverrides): string {\n const key = headingLevelKey(level);\n return overrides?.headings?.[key] ?? theme.markdown.headings[key];\n}\n\nexport function isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n return /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed);\n}\n\nexport function wrapText(text: string, maxWidth: number): string[] {\n const width = Math.max(1, maxWidth);\n const normalized = text.replace(/\\s+/g, \" \").trim();\n if (!normalized) return [\"\"];\n\n const linesOut: string[] = [];\n let rest = normalized;\n\n while (rest.length > width) {\n const slice = rest.slice(0, width + 1);\n const splitAt = slice.lastIndexOf(\" \");\n const end = splitAt > 0 ? splitAt : width;\n linesOut.push(rest.slice(0, end).trimEnd());\n rest = rest.slice(end).trimStart();\n }\n\n linesOut.push(rest);\n return linesOut;\n}\n\nexport function renderPrefixedText(\n text: string,\n width: number,\n prefix: Segment,\n continuationPrefix: string,\n textStyle?: Omit<Exclude<Segment, string>, \"text\" | \"onClick\">,\n): Line[] {\n const prefixText = typeof prefix === \"string\" ? prefix : prefix.text;\n const wrapped = wrapText(text, width - prefixText.length);\n\n return wrapped.map((chunk, index) => {\n if (index === 0) {\n return [prefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n }\n return [continuationPrefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n });\n}\n\nexport function normalizeHtmlText(text: string): string {\n return text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction getValueByPath(source: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = source;\n for (const part of parts) {\n if (!isRecord(current)) return undefined;\n current = current[part];\n }\n return current;\n}\n\nexport function resolveThemeColor(value: string | null | undefined, theme: Theme): string | undefined {\n if (!value) return undefined;\n const raw = value.trim();\n if (!raw) return undefined;\n const topLevel = theme[raw as keyof Theme];\n if (typeof topLevel === \"string\") return topLevel;\n const nested = getValueByPath(theme, raw);\n if (typeof nested === \"string\") return nested;\n return raw;\n}\n\nexport function getColorAttr(el: Element, theme: Theme, names: string[]): string | undefined {\n for (const name of names) {\n const value = resolveThemeColor(el.getAttribute(name), theme);\n if (value) return value;\n }\n return undefined;\n}\n\nexport function parseIntegerAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function parseCodeLanguage(el: Element): string | undefined {\n const explicit = el.getAttribute(\"language\") ?? el.getAttribute(\"data-language\");\n if (explicit && explicit.trim()) return explicit.trim();\n\n const klass = el.getAttribute(\"class\") ?? \"\";\n const match = klass.match(/\\blanguage-([\\w+-]+)\\b/);\n return match?.[1];\n}\n","import {\n blank,\n box,\n lines,\n separator,\n table,\n type Column,\n type LayoutFn,\n type Line,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"./common\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\ntype MarkdownBlock =\n | { type: \"heading\"; level: number; text: string }\n | { type: \"paragraph\"; text: string }\n | { type: \"unordered-list\"; items: string[] }\n | { type: \"ordered-list\"; start: number; items: string[] }\n | { type: \"table\"; headers: string[]; rows: string[][] }\n | { type: \"code\"; language?: string; lines: string[] }\n | { type: \"quote\"; lines: string[] }\n | { type: \"separator\" };\n\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (/^#{1,6}\\s+/.test(trimmed)) return true;\n if (/^```/.test(trimmed)) return true;\n if (/^>\\s?/.test(trimmed)) return true;\n if (/^[-*+]\\s+/.test(trimmed)) return true;\n if (/^\\d+\\.\\s+/.test(trimmed)) return true;\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n return /^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed);\n}\n\nfunction parsePipeCells(line: string): string[] | null {\n const trimmed = line.trim();\n if (!trimmed.includes(\"|\")) return null;\n\n let core = trimmed;\n if (core.startsWith(\"|\")) core = core.slice(1);\n if (core.endsWith(\"|\")) core = core.slice(0, -1);\n const cells = core.split(\"|\").map((cell) => cell.trim());\n return cells.length >= 2 ? cells : null;\n}\n\nfunction isTableDividerLine(line: string): boolean {\n const cells = parsePipeCells(line);\n if (!cells) return false;\n return cells.every((cell) => /^:?-{3,}:?$/.test(cell));\n}\n\nfunction parseMarkdown(markdown: string): MarkdownBlock[] {\n const rows = markdown.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: MarkdownBlock[] = [];\n\n let i = 0;\n while (i < rows.length) {\n const raw = rows[i] ?? \"\";\n const trimmed = raw.trim();\n\n if (!trimmed) {\n i += 1;\n continue;\n }\n\n const codeStart = trimmed.match(/^```([\\w+-]+)?\\s*$/);\n if (codeStart) {\n i += 1;\n const codeLines: string[] = [];\n while (i < rows.length && !(rows[i] ?? \"\").trim().startsWith(\"```\")) {\n codeLines.push((rows[i] ?? \"\").replace(/\\t/g, \" \"));\n i += 1;\n }\n if (i < rows.length) i += 1;\n blocks.push({\n type: \"code\",\n language: codeStart[1],\n lines: codeLines,\n });\n continue;\n }\n\n const heading = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (heading) {\n blocks.push({\n type: \"heading\",\n level: heading[1]!.length,\n text: heading[2]!.trim(),\n });\n i += 1;\n continue;\n }\n\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n if (/^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed)) {\n blocks.push({ type: \"separator\" });\n i += 1;\n continue;\n }\n\n const maybeHeaderCells = parsePipeCells(raw);\n const nextLine = rows[i + 1] ?? \"\";\n if (maybeHeaderCells && isTableDividerLine(nextLine)) {\n const headers = maybeHeaderCells;\n i += 2; // consume header + divider\n const dataRows: string[][] = [];\n while (i < rows.length) {\n const rowCells = parsePipeCells(rows[i] ?? \"\");\n if (!rowCells) break;\n const normalized = headers.map((_, idx) => rowCells[idx] ?? \"\");\n dataRows.push(normalized);\n i += 1;\n }\n blocks.push({ type: \"table\", headers, rows: dataRows });\n continue;\n }\n\n if (/^>\\s?/.test(trimmed)) {\n const quoteLines: string[] = [];\n while (i < rows.length) {\n const m = (rows[i] ?? \"\").match(/^\\s*>\\s?(.*)$/);\n if (!m) break;\n quoteLines.push(m[1]!);\n i += 1;\n }\n blocks.push({ type: \"quote\", lines: quoteLines });\n continue;\n }\n\n const ulStart = trimmed.match(/^[-*+]\\s+(.*)$/);\n if (ulStart) {\n const items: string[] = [];\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^[-*+]\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"unordered-list\", items });\n continue;\n }\n\n const olStart = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (olStart) {\n const items: string[] = [];\n const start = Number(olStart[1]);\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^\\d+\\.\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"ordered-list\", start, items });\n continue;\n }\n\n const paragraphRows: string[] = [trimmed];\n i += 1;\n while (i < rows.length) {\n const nextRaw = rows[i] ?? \"\";\n const next = (rows[i] ?? \"\").trim();\n const maybeTableStart =\n parsePipeCells(nextRaw) !== null && isTableDividerLine(rows[i + 1] ?? \"\");\n if (!next || isBlockStart(next) || maybeTableStart) break;\n paragraphRows.push(next);\n i += 1;\n }\n blocks.push({ type: \"paragraph\", text: paragraphRows.join(\" \") });\n }\n\n return blocks;\n}\n\nfunction renderMarkdownBlock(\n block: MarkdownBlock,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const md = theme.markdown;\n\n switch (block.type) {\n case \"heading\":\n return (w) =>\n renderPrefixedText(\n block.text,\n w,\n {\n text: \"#\".repeat(block.level) + \" \",\n color: overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(block.level + 1),\n {\n color: headingColor(block.level, theme, overrides),\n bold: block.level <= (overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n\n case \"paragraph\":\n return (w) =>\n wrapText(block.text, w).map((line) => [\n { text: line, color: overrides?.paragraph ?? md.paragraph },\n ]);\n\n case \"unordered-list\":\n return (w) => {\n const out: Line[] = [];\n for (const item of block.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out;\n };\n\n case \"ordered-list\":\n return (w) => {\n const out: Line[] = [];\n const lastNumber = block.start + block.items.length - 1;\n const digits = String(Math.max(block.start, lastNumber)).length;\n for (let i = 0; i < block.items.length; i++) {\n const n = String(block.start + i).padStart(digits, \" \");\n const prefix = {\n text: `${n}. `,\n color: overrides?.orderedMarker ?? md.orderedMarker,\n };\n out.push(...renderPrefixedText(block.items[i]!, w, prefix, \" \".repeat(digits + 2)));\n }\n return out;\n };\n\n case \"table\": {\n const keys = block.headers.map((_, i) => `c${i}`);\n const columns: Column[] = block.headers.map((header, i) => ({\n key: keys[i]!,\n title: header || `col_${i + 1}`,\n align: block.rows.every((row) => isNumericValue(row[i] ?? \"\")) ? \"right\" : \"left\",\n headerColor: overrides?.tableHeader ?? md.tableHeader,\n }));\n\n const data = block.rows.map((row) => {\n const out: Record<string, string> = {};\n keys.forEach((key, i) => {\n out[key] = row[i] ?? \"\";\n });\n return out;\n });\n\n return table(columns, data, {\n borderColor: overrides?.tableBorder ?? md.tableBorder,\n });\n }\n\n case \"quote\":\n return (w) => {\n const out: Line[] = [];\n for (const quoteLine of block.lines) {\n out.push(\n ...renderPrefixedText(\n quoteLine,\n w,\n { text: \"▌ \", color: overrides?.quoteMarker ?? md.quoteMarker },\n \" \",\n { color: overrides?.quoteText ?? md.quoteText, dim: true },\n ),\n );\n }\n return out;\n };\n\n case \"separator\":\n return separator(overrides?.separator ?? md.separator);\n\n case \"code\": {\n const codeSource = block.lines.join(\"\\n\");\n return box(\n lines(\n block.lines.length > 0\n ? block.lines.map((line) => [{ text: line || \" \", color: overrides?.codeText ?? md.codeText }])\n : [[{ text: \" \", color: overrides?.codeEmpty ?? md.codeEmpty, dim: true }]],\n ),\n {\n title: block.language ? `code:${block.language}` : \"code\",\n borderColor: overrides?.codeBorder ?? md.codeBorder,\n action: {\n label: \"cp\",\n onClick: () => navigator.clipboard.writeText(codeSource),\n color: theme.semantic.frameMuted,\n },\n },\n );\n }\n }\n}\n\nexport function fromMarkdown(\n markdown: string,\n opts?: { theme?: Theme; overrides?: MarkdownThemeOverrides },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const blocks = parseMarkdown(markdown);\n const layouts = blocks.map((block) => renderMarkdownBlock(block, theme, opts?.overrides));\n\n return (w) => {\n if (layouts.length === 0) return blank()(w);\n\n const out: Line[] = [];\n layouts.forEach((layout, index) => {\n if (index > 0) out.push(...blank()(w));\n out.push(...layout(w));\n });\n return out;\n };\n}\n","import {\n blank,\n box,\n lines,\n separator,\n table,\n type Column,\n type LayoutFn,\n type Line,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport {\n getColorAttr,\n headingColor,\n isNumericValue,\n normalizeHtmlText,\n parseCodeLanguage,\n parseIntegerAttr,\n renderPrefixedText,\n wrapText,\n} from \"./common\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\nfunction htmlParagraph(text: string, color?: string): LayoutFn {\n return (w) => {\n const wrapped = wrapText(text, w);\n if (!color) return wrapped.map((line) => [line]);\n return wrapped.map((line) => [{ text: line, color }]);\n };\n}\n\nfunction htmlHeading(\n level: number,\n text: string,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n markerColor?: string,\n): LayoutFn {\n const md = theme.markdown;\n return (w) =>\n renderPrefixedText(\n text,\n w,\n {\n text: \"#\".repeat(level) + \" \",\n color: markerColor ?? overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(level + 1),\n {\n color: headingColor(level, theme, overrides),\n bold: level <= (overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n}\n\nfunction collectDirectChildElements(el: Element): Element[] {\n return Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n}\n\nfunction collectHtmlChildLayouts(\n el: Element,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn[] {\n const layouts: LayoutFn[] = [];\n\n for (const child of Array.from(el.childNodes)) {\n const layout = renderHtmlNode(child, theme, overrides);\n if (layout) layouts.push(layout);\n }\n\n return layouts;\n}\n\nfunction htmlContainer(\n el: Element,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const layouts = collectHtmlChildLayouts(el, theme, overrides);\n if (layouts.length === 0) return blank();\n\n const withSpacing: LayoutFn[] = [];\n layouts.forEach((layout, index) => {\n if (index > 0) withSpacing.push(blank());\n withSpacing.push(layout);\n });\n\n return (w) => withSpacing.flatMap((layout) => layout(w));\n}\n\nfunction htmlList(\n el: Element,\n ordered: boolean,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const items = collectDirectChildElements(el).filter(\n (child) => child.tagName.toLowerCase() === \"li\",\n );\n\n if (items.length === 0) return blank();\n\n return (w) => {\n const out: Line[] = [];\n const start = ordered ? parseIntegerAttr(el, \"start\") ?? 1 : 1;\n const digits = ordered ? String(start + items.length - 1).length : 0;\n\n items.forEach((item, index) => {\n const text = normalizeHtmlText(item.textContent ?? \"\");\n if (!text) return;\n\n if (ordered) {\n const n = String(start + index).padStart(digits, \" \");\n const prefix = {\n text: `${n}. `,\n color: overrides?.orderedMarker ?? theme.markdown.orderedMarker,\n };\n out.push(...renderPrefixedText(text, w, prefix, \" \".repeat(digits + 2)));\n } else {\n out.push(\n ...renderPrefixedText(\n text,\n w,\n { text: \" • \", color: overrides?.unorderedBullet ?? theme.markdown.unorderedBullet },\n \" \",\n ),\n );\n }\n });\n\n return out.length > 0 ? out : blank()(w);\n };\n}\n\nfunction collectTableRowElements(tableEl: Element): Element[] {\n const rows: Element[] = [];\n for (const child of collectDirectChildElements(tableEl)) {\n const tag = child.tagName.toLowerCase();\n if (tag === \"tr\") {\n rows.push(child);\n continue;\n }\n if (tag === \"thead\" || tag === \"tbody\" || tag === \"tfoot\") {\n for (const row of collectDirectChildElements(child)) {\n if (row.tagName.toLowerCase() === \"tr\") rows.push(row);\n }\n }\n }\n return rows;\n}\n\nfunction tableRowCells(rowEl: Element): { text: string; header: boolean }[] {\n const parentTag = rowEl.parentElement?.tagName.toLowerCase();\n const inHead = parentTag === \"thead\";\n const cells: { text: string; header: boolean }[] = [];\n\n for (const child of collectDirectChildElements(rowEl)) {\n const tag = child.tagName.toLowerCase();\n if (tag !== \"th\" && tag !== \"td\") continue;\n cells.push({\n text: normalizeHtmlText(child.textContent ?? \"\"),\n header: inHead || tag === \"th\",\n });\n }\n\n return cells;\n}\n\nfunction htmlTable(el: Element, theme: Theme, overrides?: MarkdownThemeOverrides): LayoutFn {\n const rowEls = collectTableRowElements(el);\n if (rowEls.length === 0) {\n return lines([[{ text: \"(empty table)\", color: theme.semantic.frameMuted, dim: true }]]);\n }\n\n const rows = rowEls.map(tableRowCells).filter((cells) => cells.length > 0);\n if (rows.length === 0) {\n return lines([[{ text: \"(empty table)\", color: theme.semantic.frameMuted, dim: true }]]);\n }\n\n const firstRow = rows[0]!;\n const hasHeader = firstRow.some((cell) => cell.header);\n const headers = hasHeader\n ? firstRow.map((cell, index) => cell.text || `col_${index + 1}`)\n : firstRow.map((_, index) => `col_${index + 1}`);\n const dataRows = rows\n .slice(hasHeader ? 1 : 0)\n .map((row) => headers.map((_, index) => row[index]?.text ?? \"\"));\n\n const keys = headers.map((_, index) => `c${index}`);\n const headerColor =\n getColorAttr(el, theme, [\"header-color\", \"data-header-color\"]) ??\n overrides?.tableHeader ??\n theme.markdown.tableHeader;\n const borderColor =\n getColorAttr(el, theme, [\"border-color\", \"data-border-color\"]) ??\n overrides?.tableBorder ??\n theme.markdown.tableBorder;\n\n const columns: Column[] = headers.map((header, i) => ({\n key: keys[i]!,\n title: header,\n align: dataRows.every((row) => isNumericValue(row[i] ?? \"\")) ? \"right\" : \"left\",\n headerColor,\n }));\n\n const data = dataRows.map((row) => {\n const out: Record<string, string> = {};\n keys.forEach((key, index) => {\n out[key] = row[index] ?? \"\";\n });\n return out;\n });\n\n return table(columns, data, { borderColor });\n}\n\nfunction htmlPre(el: Element, theme: Theme, overrides?: MarkdownThemeOverrides): LayoutFn {\n const raw = (el.textContent ?? \"\").replace(/\\r\\n/g, \"\\n\");\n const trimmed = raw.replace(/^\\n+|\\n+$/g, \"\");\n const linesOut = trimmed.length > 0 ? trimmed.split(\"\\n\").map((line) => line.replace(/\\t/g, \" \")) : [];\n const language = parseCodeLanguage(el) ?? parseCodeLanguage(el.querySelector(\"code\") ?? el);\n const textColor =\n getColorAttr(el, theme, [\"text-color\", \"data-text-color\", \"color\", \"data-color\"]) ??\n overrides?.codeText ??\n theme.markdown.codeText;\n const borderColor =\n getColorAttr(el, theme, [\"border-color\", \"data-border-color\"]) ??\n overrides?.codeBorder ??\n theme.markdown.codeBorder;\n const emptyColor = overrides?.codeEmpty ?? theme.markdown.codeEmpty;\n\n return box(\n lines(\n linesOut.length > 0\n ? linesOut.map((line) => [{ text: line || \" \", color: textColor }])\n : [[{ text: \" \", color: emptyColor, dim: true }]],\n ),\n {\n title: language ? `code:${language}` : \"code\",\n borderColor,\n },\n );\n}\n\nfunction renderHtmlNode(\n node: ChildNode,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn | null {\n if (node.nodeType === 3) {\n const text = normalizeHtmlText(node.textContent ?? \"\");\n if (!text) return null;\n return htmlParagraph(text, theme.markdown.paragraph);\n }\n\n if (node.nodeType !== 1) return null;\n const el = node as Element;\n const tag = el.tagName.toLowerCase();\n\n if (/^h[1-6]$/.test(tag)) {\n const level = Number.parseInt(tag[1] ?? \"1\", 10) || 1;\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return htmlHeading(\n level,\n text,\n theme,\n overrides,\n getColorAttr(el, theme, [\"marker-color\", \"data-marker-color\"]),\n );\n }\n\n if (tag === \"p\") {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n const color = getColorAttr(el, theme, [\"color\", \"data-color\"]) ?? overrides?.paragraph ?? theme.markdown.paragraph;\n return htmlParagraph(text, color);\n }\n\n if (tag === \"ul\") return htmlList(el, false, theme, overrides);\n if (tag === \"ol\") return htmlList(el, true, theme, overrides);\n\n if (tag === \"blockquote\") {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return (w) =>\n renderPrefixedText(\n text,\n w,\n {\n text: \"▌ \",\n color: getColorAttr(el, theme, [\"marker-color\", \"data-marker-color\"]) ??\n overrides?.quoteMarker ??\n theme.markdown.quoteMarker,\n },\n \" \",\n { color: overrides?.quoteText ?? theme.markdown.quoteText, dim: true },\n );\n }\n\n if (tag === \"hr\") {\n return separator(\n getColorAttr(el, theme, [\"color\", \"data-color\"]) ??\n overrides?.separator ??\n theme.markdown.separator,\n );\n }\n\n if (tag === \"pre\") return htmlPre(el, theme, overrides);\n if (tag === \"table\") return htmlTable(el, theme, overrides);\n\n if (\n tag === \"term\" ||\n tag === \"main\" ||\n tag === \"section\" ||\n tag === \"article\" ||\n tag === \"div\" ||\n tag === \"header\" ||\n tag === \"footer\" ||\n tag === \"nav\" ||\n tag === \"body\"\n ) {\n return htmlContainer(el, theme, overrides);\n }\n\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return htmlContainer(el, theme, overrides);\n const color = getColorAttr(el, theme, [\"color\", \"data-color\"]);\n return htmlParagraph(text, color ?? theme.markdown.paragraph);\n}\n\nexport function fromHtml(\n html: string,\n opts?: { theme?: Theme; overrides?: MarkdownThemeOverrides },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n\n if (typeof DOMParser === \"undefined\") {\n return fromMarkdown(html, { theme, overrides: opts?.overrides });\n }\n\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n const host = doc.body.querySelector(\"term\");\n const root = host ?? doc.body;\n\n if (!root) return blank();\n return htmlContainer(root, theme, opts?.overrides);\n}\n","import {\n blank,\n box,\n fromJsonNode,\n lines,\n table,\n vstack,\n type Column,\n type JsonNode,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport { isNumericValue, renderPrefixedText, wrapText } from \"./common\";\n\nconst JSON_NODE_TYPES = new Set([\n \"vstack\",\n \"hstack\",\n \"box\",\n \"lines\",\n \"separator\",\n \"blank\",\n \"table\",\n \"statusbar\",\n \"tabs\",\n \"bar\",\n \"text\",\n] as const satisfies readonly string[]);\n\nfunction isJsonNode(value: unknown): value is JsonNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" && JSON_NODE_TYPES.has(type as typeof JSON_NODE_TYPES extends Set<infer T> ? T : never);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveStyle(\n value: unknown,\n theme: Theme,\n): Omit<Exclude<Segment, string>, \"text\" | \"onClick\"> | undefined {\n if (typeof value === \"string\") return { color: theme.green };\n if (typeof value === \"number\") return { color: theme.yellow };\n if (typeof value === \"boolean\") {\n return { color: value ? theme.green : theme.red, bold: true };\n }\n if (value === null) return { color: theme.brightBlack, dim: true };\n return undefined;\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === undefined) return \"undefined\";\n return String(value);\n}\n\nfunction isPrimitiveJsonValue(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isPrimitiveArrayValue(value: unknown): value is unknown[] {\n return Array.isArray(value) && value.every((item) => isPrimitiveJsonValue(item));\n}\n\nfunction segmentLength(segment: Segment): number {\n return typeof segment === \"string\" ? segment.length : segment.text.length;\n}\n\nfunction lineLength(line: Line): number {\n let total = 0;\n for (const segment of line) total += segmentLength(segment);\n return total;\n}\n\nfunction primitiveSegment(value: unknown, theme: Theme): Segment {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n return style ? { text, ...style } : text;\n}\n\nfunction indentLayout(layout: LayoutFn, indent: number): LayoutFn {\n return (w) => {\n if (indent <= 0) return layout(w);\n const pad = \" \".repeat(indent);\n if (w <= indent) return layout(w);\n return layout(w - indent).map((line) => [pad, ...line]);\n };\n}\n\nfunction sectionHeader(title: string, theme: Theme): LayoutFn {\n return (w) => {\n const label = ` ${title} `;\n const remaining = Math.max(0, w - label.length);\n return [[\n { text: label, color: theme.brightBlack, bold: true },\n { text: \"─\".repeat(remaining), color: theme.border },\n ]];\n };\n}\n\nfunction isShallowSectionValue(value: unknown): boolean {\n if (isRecord(value)) {\n const vals = Object.values(value);\n return vals.every((item) => isPrimitiveJsonValue(item) || isPrimitiveArrayValue(item));\n }\n if (Array.isArray(value)) return value.every((item) => isPrimitiveJsonValue(item));\n return isPrimitiveJsonValue(value);\n}\n\nfunction stackWithSpacing(children: LayoutFn[]): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1) return children[0]!;\n\n const layouts: LayoutFn[] = [];\n children.forEach((child, index) => {\n if (index > 0) layouts.push(blank());\n layouts.push(child);\n });\n return vstack(...layouts);\n}\n\nfunction renderPrimitiveValue(value: unknown, theme: Theme): LayoutFn {\n return (w) => {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n const rows = text.split(\"\\n\");\n const out: Line[] = [];\n\n for (const row of rows) {\n const wrapped = wrapText(row, w);\n for (const chunk of wrapped) {\n out.push([style ? { text: chunk, ...style } : chunk]);\n }\n }\n\n return out.length > 0 ? out : [[{ text: \" \", dim: true }]];\n };\n}\n\nfunction renderStandalonePrimitiveArray(value: unknown[], theme: Theme): LayoutFn {\n return (w) => {\n if (value.length === 0) {\n return [[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]];\n }\n\n const out: Line[] = [];\n const digits = String(value.length).length;\n value.forEach((item, index) => {\n const prefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: prefix, color: theme.brightBlack },\n \" \".repeat(prefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n return out;\n };\n}\n\nfunction isTabularRecordArray(value: unknown[]): value is Record<string, unknown>[] {\n if (value.length === 0) return false;\n if (!value.every((item) => isRecord(item))) return false;\n\n const keys = Object.keys(value[0]!);\n if (keys.length < 2) return false;\n\n return value.every((row) => {\n const rowKeys = Object.keys(row);\n if (rowKeys.length !== keys.length) return false;\n if (!keys.every((key) => rowKeys.includes(key))) return false;\n return keys.every((key) => isPrimitiveJsonValue(row[key]));\n });\n}\n\nfunction renderTabularRecordArray(\n rows: Record<string, unknown>[],\n theme: Theme,\n): LayoutFn {\n const keys = Object.keys(rows[0] ?? {});\n\n const columns: Column[] = keys.map((key) => {\n const values = rows.map((row) => row[key]);\n const isBoolCol = values.every((v) => typeof v === \"boolean\");\n const isNumCol = values.every((v) => isNumericValue(v));\n\n return {\n key,\n title: key,\n align: isNumCol ? \"right\" : \"left\",\n headerColor: theme.cyan,\n color: isBoolCol\n ? (value: unknown) =>\n value === true ? theme.green : value === false ? theme.red : undefined\n : isNumCol\n ? theme.yellow\n : undefined,\n };\n });\n\n return table(columns, rows, {\n borderColor: theme.border,\n });\n}\n\nfunction renderArrayValue(value: unknown[], theme: Theme): LayoutFn {\n if (value.length === 0) {\n return lines([[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]]);\n }\n\n if (isTabularRecordArray(value)) {\n return renderTabularRecordArray(value, theme);\n }\n\n if (value.every((item) => isPrimitiveJsonValue(item))) {\n return renderStandalonePrimitiveArray(value, theme);\n }\n\n const children = value.map((item, index) =>\n renderJsonSection(`item ${index + 1}`, item, theme),\n );\n return stackWithSpacing(children);\n}\n\ntype PrimitiveRow =\n | { kind: \"primitive\"; key: string; value: unknown }\n | { kind: \"array\"; key: string; value: unknown[] };\n\nfunction renderPrimitiveRows(rows: PrimitiveRow[], theme: Theme): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const keyWidth = Math.max(...rows.map((row) => row.key.length), 0);\n\n for (const row of rows) {\n const keyPrefix = ` ${row.key.padEnd(keyWidth)}: `;\n\n if (row.kind === \"primitive\") {\n out.push(\n ...renderPrefixedText(\n primitiveText(row.value),\n w,\n { text: keyPrefix, color: theme.brightBlack },\n \" \".repeat(keyPrefix.length),\n primitiveStyle(row.value, theme),\n ),\n );\n continue;\n }\n\n if (row.value.length === 0) {\n out.push([\n { text: keyPrefix, color: theme.brightBlack },\n { text: \"(empty)\", color: theme.brightBlack, dim: true },\n ]);\n continue;\n }\n\n const inlineSegments: Segment[] = [];\n row.value.forEach((item, index) => {\n if (index > 0) inlineSegments.push({ text: \", \", color: theme.brightBlack });\n inlineSegments.push(primitiveSegment(item, theme));\n });\n const inlineLine: Line = [{ text: keyPrefix, color: theme.brightBlack }, ...inlineSegments];\n\n if (lineLength(inlineLine) <= w) {\n out.push(inlineLine);\n continue;\n }\n\n out.push([{ text: ` ${row.key}:`, color: theme.brightBlack }]);\n const digits = String(row.value.length).length;\n row.value.forEach((item, index) => {\n const listPrefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: listPrefix, color: theme.brightBlack },\n \" \".repeat(listPrefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n }\n\n return out;\n };\n}\n\nfunction renderObjectValue(value: Record<string, unknown>, theme: Theme): LayoutFn {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return lines([[{ text: \"(empty object)\", color: theme.brightBlack, dim: true }]]);\n }\n\n const groups: LayoutFn[] = [];\n let pendingRows: PrimitiveRow[] = [];\n const flushRows = () => {\n if (pendingRows.length === 0) return;\n groups.push(renderPrimitiveRows(pendingRows, theme));\n pendingRows = [];\n };\n\n for (const [key, item] of entries) {\n if (isPrimitiveJsonValue(item)) {\n pendingRows.push({ kind: \"primitive\", key, value: item });\n continue;\n }\n\n if (isPrimitiveArrayValue(item)) {\n pendingRows.push({ kind: \"array\", key, value: item });\n continue;\n }\n\n flushRows();\n groups.push(renderJsonSection(key, item, theme));\n }\n\n flushRows();\n\n return stackWithSpacing(groups);\n}\n\nfunction renderJsonContent(value: unknown, theme: Theme): LayoutFn {\n if (isRecord(value)) return renderObjectValue(value, theme);\n if (Array.isArray(value)) return renderArrayValue(value, theme);\n return renderPrimitiveValue(value, theme);\n}\n\nfunction renderJsonSection(title: string, value: unknown, theme: Theme): LayoutFn {\n if (Array.isArray(value) && isTabularRecordArray(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n if (isShallowSectionValue(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n return box(renderJsonContent(value, theme), {\n title,\n borderColor: theme.border,\n });\n}\n\nexport function fromJson(\n value: unknown,\n opts?: { theme?: Theme; title?: string },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n let parsedValue = value;\n\n if (typeof value === \"string\") {\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n }\n\n if (isJsonNode(parsedValue)) return fromJsonNode(parsedValue);\n\n const content = renderJsonContent(parsedValue, theme);\n if (opts?.title) {\n return box(content, {\n title: opts.title,\n borderColor: theme.border,\n });\n }\n return content;\n}\n","import { fromHtml } from \"./html\";\nimport { fromJson } from \"./json\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nimport type { Theme } from \"../termui\";\n\nexport { fromMarkdown } from \"./markdown\";\nexport { fromHtml } from \"./html\";\nexport { fromJson } from \"./json\";\nexport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\n\nexport function fromDocument(\n source: DocumentSource,\n opts?: {\n theme?: Theme;\n jsonTitle?: string;\n markdownOverrides?: MarkdownThemeOverrides;\n },\n) {\n if (source.format === \"markdown\") {\n return fromMarkdown(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n if (source.format === \"html\") {\n return fromHtml(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n return fromJson(source.value, {\n theme: opts?.theme,\n title: opts?.jsonTitle,\n });\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { Theme, ThemeMode, ThemePreference } from \"./termui/base\";\nimport { defaultThemeSpec, resolveTheme, type ThemeSpec } from \"./theme\";\n\nexport type TermThemeContextValue = {\n themeSpec: ThemeSpec;\n modePreference: ThemePreference;\n systemMode: ThemeMode;\n theme: Theme;\n setThemeSpec: (next: ThemeSpec) => void;\n setModePreference: (next: ThemePreference) => void;\n};\n\nconst FALLBACK_THEME = resolveTheme(defaultThemeSpec, \"dark\");\n\nconst noopThemeSpec = () => {};\nconst noopModePreference = () => {};\n\nconst TermThemeContext = createContext<TermThemeContextValue>({\n themeSpec: defaultThemeSpec,\n modePreference: \"dark\",\n systemMode: \"dark\",\n theme: FALLBACK_THEME,\n setThemeSpec: noopThemeSpec,\n setModePreference: noopModePreference,\n});\n\nfunction readSystemMode(): ThemeMode {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nexport type TermThemeProviderProps = {\n children: ReactNode;\n initialTheme?: ThemeSpec;\n initialMode?: ThemePreference;\n};\n\nexport function TermThemeProvider({\n children,\n initialTheme = defaultThemeSpec,\n initialMode = \"system\",\n}: TermThemeProviderProps) {\n const [themeSpec, setThemeSpec] = useState<ThemeSpec>(initialTheme);\n const [modePreference, setModePreference] = useState<ThemePreference>(initialMode);\n const [systemMode, setSystemMode] = useState<ThemeMode>(readSystemMode);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n const media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const onChange = (event: MediaQueryListEvent) => {\n setSystemMode(event.matches ? \"dark\" : \"light\");\n };\n if (typeof media.addEventListener === \"function\") {\n media.addEventListener(\"change\", onChange);\n return () => media.removeEventListener(\"change\", onChange);\n }\n media.addListener(onChange);\n return () => media.removeListener(onChange);\n }, []);\n\n const theme = useMemo(\n () => resolveTheme(themeSpec, modePreference, { systemMode }),\n [themeSpec, modePreference, systemMode],\n );\n\n const value = useMemo<TermThemeContextValue>(\n () => ({\n themeSpec,\n modePreference,\n systemMode,\n theme,\n setThemeSpec,\n setModePreference,\n }),\n [themeSpec, modePreference, systemMode, theme, setThemeSpec, setModePreference],\n );\n\n return <TermThemeContext.Provider value={value}>{children}</TermThemeContext.Provider>;\n}\n\nexport function useTermTheme(): TermThemeContextValue {\n return useContext(TermThemeContext);\n}\n","import {\n memo,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n type Block,\n type Line,\n type Segment,\n type Theme,\n type ThemePreference,\n isTableLine,\n preserveTableTag,\n getScrollRegionMeta,\n preserveScrollTag,\n type LayoutFn,\n type ScrollRegionMeta,\n} from \"./termui\";\nimport {\n fromDocument,\n type DocumentSource,\n type MarkdownThemeOverrides,\n} from \"./document\";\nimport { useTermTheme } from \"./theme-provider\";\nimport { resolveTheme, themeToCssVars, type ThemeSpec } from \"./theme\";\nimport {\n createTermContainer,\n updateTermContainer,\n type TermRoot,\n} from \"./reconciler\";\nimport type Reconciler from \"react-reconciler\";\n\nexport type TermUIProps = {\n block?: Block;\n children?: ReactNode;\n width?: number;\n theme?: Theme;\n themeSpec?: ThemeSpec;\n mode?: ThemePreference;\n markdownOverrides?: MarkdownThemeOverrides;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type TermDocumentProps = {\n source: DocumentSource;\n width?: number;\n theme?: Theme;\n themeSpec?: ThemeSpec;\n mode?: ThemePreference;\n jsonTitle?: string;\n markdownOverrides?: MarkdownThemeOverrides;\n className?: string;\n style?: CSSProperties;\n};\n\nfunction segmentStyle(seg: Exclude<Segment, string>, theme: Theme): CSSProperties {\n const style: CSSProperties = {};\n if (seg.inverted) {\n style.color = seg.color ?? theme.semantic.inverseFg;\n style.backgroundColor = seg.bg ?? theme.semantic.inverseBg;\n } else {\n if (seg.color) style.color = seg.color;\n if (seg.bg) style.backgroundColor = seg.bg;\n }\n if (seg.bold) style.fontWeight = \"bold\";\n if (seg.dim) style.opacity = 0.6;\n if (seg.blink) style.animation = \"bk 1s step-end infinite\";\n if (seg.onClick) style.cursor = \"pointer\";\n if (seg.noSelect) style.userSelect = \"none\";\n return style;\n}\n\ntype TermSegmentProps = {\n seg: Segment;\n theme: Theme;\n};\n\nconst TermSegment = memo(\n function TermSegment({ seg, theme }: TermSegmentProps) {\n if (typeof seg === \"string\") return <span>{seg}</span>;\n const style = segmentStyle(seg, theme);\n\n return (\n <span className={seg.onClick ? \"termui-clickable\" : undefined} style={style} onClick={seg.onClick}>\n {seg.text}\n </span>\n );\n },\n (prev, next) => prev.seg === next.seg && prev.theme === next.theme,\n);\n\nfunction renderSegment(seg: Segment, key: number, theme: Theme) {\n return (\n <TermSegment key={key} seg={seg} theme={theme} />\n );\n}\n\nfunction sameSegment(a: Segment, b: Segment): boolean {\n if (typeof a === \"string\" || typeof b === \"string\") return a === b;\n return (\n a.text === b.text &&\n a.color === b.color &&\n a.bg === b.bg &&\n a.bold === b.bold &&\n a.dim === b.dim &&\n a.inverted === b.inverted &&\n a.blink === b.blink &&\n a.onClick === b.onClick &&\n a.noSelect === b.noSelect &&\n a.cell === b.cell\n );\n}\n\nfunction sameLine(a: Line, b: Line): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!sameSegment(a[i]!, b[i]!)) return false;\n }\n return true;\n}\n\nfunction reconcileLine(prevLine: Line | undefined, nextLine: Line): Line {\n if (!prevLine || prevLine.length === 0) return nextLine;\n if (sameLine(prevLine, nextLine)) return prevLine;\n\n const reconciled: Line = new Array(nextLine.length);\n for (let i = 0; i < nextLine.length; i++) {\n const nextSeg = nextLine[i]!;\n const prevSeg = prevLine[i];\n reconciled[i] = prevSeg !== undefined && sameSegment(prevSeg, nextSeg) ? prevSeg : nextSeg;\n }\n preserveTableTag(nextLine, reconciled);\n preserveScrollTag(nextLine, reconciled);\n return reconciled;\n}\n\nfunction reconcileBlock(prevBlock: Block | undefined, nextBlock: Block): Block {\n if (!prevBlock) return nextBlock;\n let changed = prevBlock.length !== nextBlock.length;\n const next: Block = new Array(nextBlock.length);\n for (let i = 0; i < nextBlock.length; i++) {\n const line = reconcileLine(prevBlock[i], nextBlock[i]!);\n next[i] = line;\n if (!changed && line !== prevBlock[i]) changed = true;\n }\n return changed ? next : prevBlock;\n}\n\nfunction useReconciledBlock(block: Block): Block {\n const prevRef = useRef<Block | null>(null);\n\n return useMemo(() => {\n const prev = prevRef.current;\n if (!prev) {\n prevRef.current = block;\n return block;\n }\n\n const next = reconcileBlock(prev, block);\n prevRef.current = next;\n return next;\n }, [block]);\n}\n\ntype TermLineProps = {\n line: Line;\n theme: Theme;\n};\n\nconst TermLine = memo(function TermLine({ line, theme }: TermLineProps) {\n return (\n <div className=\"termui-line\">\n {line.map((seg, i) => renderSegment(seg, i, theme))}\n </div>\n );\n});\n\n//\n// Content rows: each logical column becomes one <td> containing\n// <span user-select:none>│</span> + content text (trimmed).\n// Border rows: single <td colspan> with the full decorative text.\n// Column widths are locked via <colgroup>.\n\nfunction isAllNoSelect(line: Line): boolean {\n for (const seg of line) {\n if (typeof seg === \"string\") return false;\n if (!seg.noSelect) return false;\n }\n return true;\n}\n\nfunction segText(seg: Segment): string {\n return typeof seg === \"string\" ? seg : seg.text;\n}\n\nfunction trimSeg(seg: Segment): Segment {\n if (typeof seg === \"string\") {\n const t = seg.trimEnd();\n return t === seg ? seg : t;\n }\n const t = seg.text.trimEnd();\n return t === seg.text ? seg : { ...seg, text: t };\n}\n\ntype ColInfo = { totalWidth: number };\n\nfunction getTableCols(lines: Line[]): { cols: ColInfo[]; rightBorderW: number } | null {\n const row = lines.find((l) => !isAllNoSelect(l));\n if (!row) return null;\n\n const cols: ColInfo[] = [];\n for (let i = 0; i < row.length; i++) {\n const seg = row[i]!;\n if (typeof seg !== \"string\" && seg.cell !== undefined && !seg.noSelect) {\n const prev = row[i - 1];\n const bw = prev ? segText(prev).length : 0;\n cols.push({ totalWidth: bw + seg.text.length });\n }\n }\n\n const last = row[row.length - 1];\n const rightBorderW = last ? segText(last).length : 1;\n return { cols, rightBorderW };\n}\n\nconst TermTableBorderRow = memo(function TermTableBorderRow({\n line,\n totalCols,\n theme,\n}: {\n line: Line;\n totalCols: number;\n theme: Theme;\n}) {\n return (\n <tr className=\"termui-line\">\n <td colSpan={totalCols} className=\"termui-border-cell\">\n {line.map((seg, i) => renderSegment(seg, i, theme))}\n </td>\n </tr>\n );\n});\n\nconst TermTableContentRow = memo(function TermTableContentRow({ line, theme }: TermLineProps) {\n // Line structure: [border, content, border, content, ..., border]\n // Each content <td> = left border span + trimmed content.\n // Last segment is the right border in its own <td>.\n const cells: ReactNode[] = [];\n for (let i = 0; i < line.length; i++) {\n const seg = line[i]!;\n if (typeof seg !== \"string\" && seg.cell !== undefined && !seg.noSelect) {\n const prev = line[i - 1];\n const borderChar = prev ? segText(prev) : \"\";\n const borderColor = prev && typeof prev !== \"string\" ? prev.color : undefined;\n cells.push(\n <td key={seg.cell} className=\"termui-cell\">\n <span className=\"termui-border-span\" style={borderColor ? { color: borderColor } : undefined}>{borderChar}</span>\n {renderSegment(trimSeg(seg), 0, theme)}\n </td>,\n );\n }\n }\n\n // Right border\n const last = line[line.length - 1];\n if (last && typeof last !== \"string\" && last.noSelect) {\n cells.push(\n <td key=\"rb\" className=\"termui-border-cell\">\n {renderSegment(last, 0, theme)}\n </td>,\n );\n }\n\n return <tr className=\"termui-line\">{cells}</tr>;\n});\n\ntype TermTableProps = {\n lines: Line[];\n theme: Theme;\n};\n\nconst TermTable = memo(\n function TermTable({ lines, theme }: TermTableProps) {\n const info = getTableCols(lines);\n if (!info) {\n // All border rows — fall back to regular lines\n return (\n <>\n {lines.map((line, i) => (\n <TermLine key={i} line={line} theme={theme} />\n ))}\n </>\n );\n }\n\n const totalCols = info.cols.length + 1; // +1 for right border column\n\n return (\n <table className=\"termui-table\">\n <colgroup>\n {info.cols.map((col, i) => (\n <col key={i} style={{ width: col.totalWidth + \"ch\" }} />\n ))}\n <col key=\"rb\" style={{ width: info.rightBorderW + \"ch\" }} />\n </colgroup>\n <tbody>\n {lines.map((line, i) => {\n if (isAllNoSelect(line)) {\n return <TermTableBorderRow key={i} line={line} totalCols={totalCols} theme={theme} />;\n }\n return <TermTableContentRow key={i} line={line} theme={theme} />;\n })}\n </tbody>\n </table>\n );\n },\n (prev, next) => {\n if (prev.theme !== next.theme) return false;\n const a = prev.lines, b = next.lines;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n },\n);\n\ntype TermScrollRegionProps = {\n lines: Line[];\n meta: ScrollRegionMeta;\n theme: Theme;\n};\n\nconst TermScrollRegion = memo(function TermScrollRegion({ lines, meta, theme }: TermScrollRegionProps) {\n return (\n <div\n className=\"termui-scroll-region\"\n onWheel={(e) => {\n e.preventDefault();\n const step = e.deltaY > 0 ? 1 : -1;\n const maxOffset = Math.max(0, meta.totalLines - meta.maxHeight);\n const newOffset = Math.min(maxOffset, Math.max(0, meta.offset + step));\n if (newOffset !== meta.offset) meta.onScroll(newOffset);\n }}\n >\n {lines.map((line, i) => (\n <TermLine key={i} line={line} theme={theme} />\n ))}\n </div>\n );\n});\n\ntype TermBlockProps = {\n block: Block;\n theme: Theme;\n};\n\nconst TermBlock = memo(\n function TermBlock({ block, theme }: TermBlockProps) {\n const elements: ReactNode[] = [];\n let tableLines: Line[] | null = null;\n let tableStart = 0;\n let scrollLines: Line[] | null = null;\n let scrollStart = 0;\n let scrollMeta: ScrollRegionMeta | null = null;\n\n const flushTable = () => {\n if (tableLines) {\n elements.push(<TermTable key={`t${tableStart}`} lines={tableLines} theme={theme} />);\n tableLines = null;\n }\n };\n\n const flushScroll = () => {\n if (scrollLines && scrollMeta) {\n elements.push(\n <TermScrollRegion key={`s${scrollStart}`} lines={scrollLines} meta={scrollMeta} theme={theme} />,\n );\n scrollLines = null;\n scrollMeta = null;\n }\n };\n\n for (let i = 0; i < block.length; i++) {\n const line = block[i]!;\n const sm = getScrollRegionMeta(line);\n\n if (isTableLine(line)) {\n flushScroll();\n if (!tableLines) {\n tableLines = [];\n tableStart = i;\n }\n tableLines.push(line);\n } else if (sm) {\n flushTable();\n if (!scrollLines) {\n scrollLines = [];\n scrollStart = i;\n scrollMeta = sm;\n }\n scrollLines.push(line);\n } else {\n flushTable();\n flushScroll();\n elements.push(<TermLine key={i} line={line} theme={theme} />);\n }\n }\n flushTable();\n flushScroll();\n\n return <>{elements}</>;\n },\n (prev, next) => prev.block === next.block && prev.theme === next.theme,\n);\n\ntype TermFrameProps = {\n width: number;\n theme: Theme;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n};\n\nfunction TermFrame({ width, theme, className, style, children }: TermFrameProps) {\n const frameStyle: CSSProperties = {\n width: width + \"ch\",\n ...(themeToCssVars(theme) as CSSProperties),\n ...style,\n };\n return (\n <div\n className={`termui-frame${className ? ` ${className}` : \"\"}`}\n style={frameStyle}\n >\n {children}\n </div>\n );\n}\n\ntype TermContainerRef = {\n root: TermRoot;\n container: Reconciler.OpaqueRoot;\n};\n\nfunction TermUIBase({\n block,\n children,\n width = 80,\n theme,\n themeSpec,\n mode,\n markdownOverrides,\n className,\n style,\n}: TermUIProps) {\n const themeContext = useTermTheme();\n const resolvedTheme = useMemo(() => {\n if (theme) return theme;\n if (!themeSpec && !mode) return themeContext.theme;\n return resolveTheme(themeSpec ?? themeContext.themeSpec, mode ?? themeContext.modePreference, {\n systemMode: themeContext.systemMode,\n });\n }, [\n theme,\n themeSpec,\n mode,\n themeContext.theme,\n themeContext.themeSpec,\n themeContext.modePreference,\n themeContext.systemMode,\n ]);\n\n // Lazy-init reconciler container\n const containerRef = useRef<TermContainerRef | null>(null);\n if (!containerRef.current && children) {\n containerRef.current = createTermContainer(resolvedTheme, markdownOverrides);\n }\n\n const root = containerRef.current?.root;\n const container = containerRef.current?.container;\n\n // Subscribe to reconciler output\n const layoutFn = useSyncExternalStore(\n root?.subscribe ?? noopSubscribe,\n root?.getLayoutFn ?? getBlankLayout,\n root?.getLayoutFn ?? getBlankLayout,\n );\n\n // Keep resolved theme/markdown overrides and children in sync with the custom reconciler.\n useLayoutEffect(() => {\n if (!root || !container) return;\n root.theme = resolvedTheme;\n root.markdownOverrides = markdownOverrides;\n updateTermContainer(container, children ?? null);\n }, [root, container, children, resolvedTheme, markdownOverrides]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (containerRef.current) {\n updateTermContainer(containerRef.current.container, null);\n }\n };\n }, []);\n\n // Compute block\n const computedBlock = block ?? (children ? layoutFn(width) : []);\n const reconciledBlock = useReconciledBlock(computedBlock);\n\n return (\n <TermFrame width={width} theme={resolvedTheme} className={className} style={style}>\n <TermBlock block={reconciledBlock} theme={resolvedTheme} />\n </TermFrame>\n );\n}\n\nconst _blankLayout: LayoutFn = () => [];\nfunction noopSubscribe() {\n return () => {};\n}\nfunction getBlankLayout() {\n return _blankLayout;\n}\n\nconst TermUI = memo(TermUIBase);\n\nexport default TermUI;\n\nexport function TermDocument({\n source,\n width = 80,\n theme,\n themeSpec,\n mode,\n jsonTitle,\n markdownOverrides,\n className,\n style,\n}: TermDocumentProps) {\n const themeContext = useTermTheme();\n const resolvedTheme = useMemo(() => {\n if (theme) return theme;\n if (!themeSpec && !mode) return themeContext.theme;\n return resolveTheme(themeSpec ?? themeContext.themeSpec, mode ?? themeContext.modePreference, {\n systemMode: themeContext.systemMode,\n });\n }, [\n theme,\n themeSpec,\n mode,\n themeContext.theme,\n themeContext.themeSpec,\n themeContext.modePreference,\n themeContext.systemMode,\n ]);\n\n const layout = useMemo(\n () => fromDocument(source, { theme: resolvedTheme, jsonTitle, markdownOverrides }),\n [source, resolvedTheme, jsonTitle, markdownOverrides],\n );\n const block = useMemo(() => layout(width), [layout, width]);\n return <TermUI block={block} width={width} theme={resolvedTheme} className={className} style={style} />;\n}\n","// termui — custom React reconciler\n//\n// Renders T* component trees into a TermNode tree. On commit, the tree is\n// compiled into a LayoutFn (reusing the layout engine from termui.ts).\n\nimport type { ReactNode } from \"react\";\nimport Reconciler from \"react-reconciler\";\nimport { DefaultEventPriority } from \"react-reconciler/constants\";\nimport {\n bar,\n blank,\n box,\n callout,\n chart,\n checkbox,\n code,\n unifiedDiff,\n computeDiff,\n divider,\n grid,\n hstack,\n inputField,\n kv,\n lines,\n list,\n padding,\n scroll,\n separator,\n spark,\n statusbar,\n table,\n tabs,\n tree,\n vstack,\n type Block,\n type BoxAction,\n type Column,\n type KVPair,\n type LayoutFn,\n type ListItem,\n type Segment,\n type Theme,\n type TreeNode,\n} from \"./termui\";\nimport {\n fromHtml,\n fromJson,\n fromMarkdown,\n type MarkdownThemeOverrides,\n} from \"./document\";\n\ntype TermProps = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction asBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction asStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction asNumberArray(value: unknown): number[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: number[] = [];\n for (const item of value) {\n if (typeof item !== \"number\") return undefined;\n out.push(item);\n }\n return out;\n}\n\nfunction asRecordArray(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) return [];\n const out: Record<string, unknown>[] = [];\n for (const item of value) {\n if (isRecord(item)) out.push(item);\n }\n return out;\n}\n\nfunction asBoxAction(value: unknown): BoxAction | undefined {\n if (!isRecord(value)) return undefined;\n const label = asString(value.label);\n const onClick = typeof value.onClick === \"function\" ? (value.onClick as () => void) : undefined;\n if (!label || !onClick) return undefined;\n return { label, onClick, color: asString(value.color) };\n}\n\nfunction isMarkdownOverrides(value: unknown): value is MarkdownThemeOverrides {\n if (!isRecord(value)) return false;\n if (value.headingMarker !== undefined && typeof value.headingMarker !== \"string\") return false;\n if (value.headingBoldMaxLevel !== undefined && typeof value.headingBoldMaxLevel !== \"number\") return false;\n if (value.paragraph !== undefined && typeof value.paragraph !== \"string\") return false;\n if (value.unorderedBullet !== undefined && typeof value.unorderedBullet !== \"string\") return false;\n if (value.orderedMarker !== undefined && typeof value.orderedMarker !== \"string\") return false;\n if (value.tableHeader !== undefined && typeof value.tableHeader !== \"string\") return false;\n if (value.tableBorder !== undefined && typeof value.tableBorder !== \"string\") return false;\n if (value.quoteMarker !== undefined && typeof value.quoteMarker !== \"string\") return false;\n if (value.quoteText !== undefined && typeof value.quoteText !== \"string\") return false;\n if (value.separator !== undefined && typeof value.separator !== \"string\") return false;\n if (value.codeText !== undefined && typeof value.codeText !== \"string\") return false;\n if (value.codeEmpty !== undefined && typeof value.codeEmpty !== \"string\") return false;\n if (value.codeBorder !== undefined && typeof value.codeBorder !== \"string\") return false;\n if (value.headings !== undefined) {\n if (!isRecord(value.headings)) return false;\n if (\n Object.values(value.headings).some(\n (headingColor) => typeof headingColor !== \"string\",\n )\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction asMarkdownOverrides(value: unknown): MarkdownThemeOverrides | undefined {\n return isMarkdownOverrides(value) ? value : undefined;\n}\n\nfunction isSegment(value: unknown): value is Segment {\n if (typeof value === \"string\") return true;\n if (!isRecord(value)) return false;\n if (typeof value.text !== \"string\") return false;\n if (value.color !== undefined && typeof value.color !== \"string\") return false;\n if (value.bg !== undefined && typeof value.bg !== \"string\") return false;\n if (value.bold !== undefined && typeof value.bold !== \"boolean\") return false;\n if (value.dim !== undefined && typeof value.dim !== \"boolean\") return false;\n if (value.inverted !== undefined && typeof value.inverted !== \"boolean\") return false;\n if (value.blink !== undefined && typeof value.blink !== \"boolean\") return false;\n if (value.onClick !== undefined && typeof value.onClick !== \"function\") return false;\n if (value.noSelect !== undefined && typeof value.noSelect !== \"boolean\") return false;\n if (value.cell !== undefined && typeof value.cell !== \"number\") return false;\n return true;\n}\n\nfunction isColumn(value: unknown): value is Column<Record<string, unknown>> {\n if (!isRecord(value)) return false;\n if (typeof value.key !== \"string\") return false;\n if (value.title !== undefined && typeof value.title !== \"string\") return false;\n if (value.width !== undefined && typeof value.width !== \"number\") return false;\n if (\n value.align !== undefined &&\n value.align !== \"left\" &&\n value.align !== \"right\"\n ) return false;\n if (value.headerColor !== undefined && typeof value.headerColor !== \"string\") return false;\n if (value.headerBold !== undefined && typeof value.headerBold !== \"boolean\") return false;\n if (\n value.color !== undefined &&\n typeof value.color !== \"string\" &&\n typeof value.color !== \"function\"\n ) return false;\n if (\n value.dim !== undefined &&\n typeof value.dim !== \"boolean\" &&\n typeof value.dim !== \"function\"\n ) return false;\n return true;\n}\n\nfunction asColumns(value: unknown): Column<Record<string, unknown>>[] {\n if (!Array.isArray(value)) return [];\n const out: Column<Record<string, unknown>>[] = [];\n for (const item of value) {\n if (isColumn(item)) out.push(item);\n }\n return out;\n}\n\nfunction isTreeNode(value: unknown): value is TreeNode {\n if (!isRecord(value)) return false;\n if (typeof value.label !== \"string\") return false;\n if (value.children === undefined) return true;\n if (!Array.isArray(value.children)) return false;\n return value.children.every((child) => isTreeNode(child));\n}\n\nfunction asTreeNodes(value: unknown): TreeNode[] {\n if (!Array.isArray(value)) return [];\n const out: TreeNode[] = [];\n for (const item of value) {\n if (isTreeNode(item)) out.push(item);\n }\n return out;\n}\n\nfunction isLayoutFn(value: unknown): value is LayoutFn {\n return typeof value === \"function\";\n}\n\nfunction isSelectHandler(value: unknown): value is (index: number) => void {\n return typeof value === \"function\";\n}\n\nexport class TermNode {\n type: string;\n props: TermProps;\n children: TermNode[] = [];\n parent: TermNode | null = null;\n text: string | undefined;\n\n constructor(type: string, props: TermProps) {\n this.type = type;\n this.props = props;\n }\n\n appendChild(child: TermNode) {\n child.parent = this;\n this.children.push(child);\n }\n\n removeChild(child: TermNode) {\n const idx = this.children.indexOf(child);\n if (idx !== -1) {\n this.children.splice(idx, 1);\n child.parent = null;\n }\n }\n\n insertBefore(child: TermNode, before: TermNode) {\n child.parent = this;\n const idx = this.children.indexOf(before);\n if (idx !== -1) {\n this.children.splice(idx, 0, child);\n } else {\n this.children.push(child);\n }\n }\n}\n\nexport class TermRoot {\n children: TermNode[] = [];\n theme: Theme;\n markdownOverrides: MarkdownThemeOverrides | undefined;\n\n private _layoutFn: LayoutFn = blank();\n private _listeners = new Set<() => void>();\n\n constructor(theme: Theme, markdownOverrides?: MarkdownThemeOverrides) {\n this.theme = theme;\n this.markdownOverrides = markdownOverrides;\n }\n\n appendChild(child: TermNode) {\n child.parent = null;\n this.children.push(child);\n }\n\n removeChild(child: TermNode) {\n const idx = this.children.indexOf(child);\n if (idx !== -1) {\n this.children.splice(idx, 1);\n child.parent = null;\n }\n }\n\n insertBefore(child: TermNode, before: TermNode) {\n child.parent = null;\n const idx = this.children.indexOf(before);\n if (idx !== -1) {\n this.children.splice(idx, 0, child);\n } else {\n this.children.push(child);\n }\n }\n\n commitTree() {\n this._layoutFn = compileTermChildren(\n this.children,\n this.theme,\n this.markdownOverrides,\n );\n for (const cb of this._listeners) cb();\n }\n\n subscribe = (listener: () => void) => {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n };\n\n getLayoutFn = () => this._layoutFn;\n}\n\nfunction extractTermText(children: TermNode[]): string {\n return children\n .map((c) => {\n if (c.type === \"t-text\") return c.text ?? \"\";\n return extractTermText(c.children);\n })\n .join(\"\");\n}\n\nfunction stackWithGap(children: LayoutFn[], gap = 0): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1 && gap <= 0) return children[0]!;\n\n const layouts: LayoutFn[] = [];\n for (let i = 0; i < children.length; i++) {\n if (i > 0) {\n for (let j = 0; j < gap; j++) layouts.push(blank());\n }\n layouts.push(children[i]!);\n }\n return vstack(...layouts);\n}\n\nfunction compileTermChildren(\n children: TermNode[],\n theme: Theme,\n mdOverrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const out: LayoutFn[] = [];\n for (const child of children) {\n const layout = compileTermNode(child, theme, mdOverrides);\n if (layout) out.push(layout);\n }\n if (out.length === 0) return blank();\n if (out.length === 1) return out[0]!;\n return vstack(...out);\n}\n\n// Tab handler cache — keeps segment identity stable across commits\nconst tabHandlerCache = new WeakMap<\n (index: number) => void,\n Map<number, () => void>\n>();\n\nfunction cachedTabHandler(\n onSelect: (index: number) => void,\n index: number,\n): () => void {\n let map = tabHandlerCache.get(onSelect);\n if (!map) {\n map = new Map();\n tabHandlerCache.set(onSelect, map);\n }\n let handler = map.get(index);\n if (!handler) {\n handler = () => onSelect(index);\n map.set(index, handler);\n }\n return handler;\n}\n\nfunction toSegments(value: unknown): Segment[] {\n if (typeof value === \"string\") return [value];\n if (!Array.isArray(value)) return [];\n const out: Segment[] = [];\n for (const segment of value) {\n if (isSegment(segment)) out.push(segment);\n }\n return out;\n}\n\nfunction compileRaw(\n p: TermProps,\n children: TermNode[],\n): LayoutFn {\n const color = asString(p.color);\n const bg = asString(p.bg);\n const bold = asBoolean(p.bold);\n const dim = asBoolean(p.dim);\n const blink = asBoolean(p.blink);\n const inverted = asBoolean(p.inverted);\n const onClick = typeof p.onClick === \"function\" ? (p.onClick as () => void) : undefined;\n const rawText = asString(p.text) ?? extractTermText(children);\n const text = rawText.replace(/\\r\\n/g, \"\\n\");\n const rows = text.length > 0 ? text.split(\"\\n\") : [\" \"];\n\n if (\n !color &&\n !bg &&\n bold === undefined &&\n dim === undefined &&\n blink === undefined &&\n inverted === undefined &&\n !onClick\n ) {\n return lines(rows.map((row) => [row]));\n }\n\n return lines(\n rows.map((row) => [\n {\n text: row,\n color,\n bg,\n bold,\n dim,\n blink,\n inverted,\n onClick,\n },\n ]),\n );\n}\n\ntype InheritedStyle = {\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n onClick?: () => void;\n};\n\nfunction compileSpanSegments(children: TermNode[], inherited?: InheritedStyle): Segment[] {\n const segments: Segment[] = [];\n for (const child of children) {\n if (child.type === \"t-text\") {\n const text = child.text ?? \"\";\n if (inherited && (inherited.color || inherited.bg || inherited.bold !== undefined || inherited.dim !== undefined || inherited.inverted !== undefined || inherited.blink !== undefined || inherited.onClick)) {\n segments.push({ text, ...inherited });\n } else {\n segments.push(text);\n }\n continue;\n }\n if (child.type === \"t-span\") {\n const cp = child.props;\n const color = asString(cp.color) ?? inherited?.color;\n const bg = asString(cp.bg) ?? inherited?.bg;\n const bold = asBoolean(cp.bold) ?? inherited?.bold;\n const dim = asBoolean(cp.dim) ?? inherited?.dim;\n const inverted = asBoolean(cp.inverted) ?? inherited?.inverted;\n const blink = asBoolean(cp.blink) ?? inherited?.blink;\n const onClick = (typeof cp.onClick === \"function\" ? (cp.onClick as () => void) : undefined) ?? inherited?.onClick;\n const style: InheritedStyle = { color, bg, bold, dim, inverted, blink, onClick };\n\n if (cp.text) {\n const text = asString(cp.text)!;\n if (color || bg || bold !== undefined || dim !== undefined || inverted !== undefined || blink !== undefined || onClick) {\n segments.push({ text, ...style });\n } else {\n segments.push(text);\n }\n } else if (child.children.length > 0) {\n segments.push(...compileSpanSegments(child.children, style));\n }\n } else {\n // Unknown child — extract text\n const text = extractTermText(child.children);\n if (inherited && (inherited.color || inherited.bg || inherited.bold !== undefined || inherited.dim !== undefined || inherited.inverted !== undefined || inherited.blink !== undefined || inherited.onClick)) {\n segments.push({ text, ...inherited });\n } else {\n segments.push(text);\n }\n }\n }\n return segments;\n}\n\nfunction compileLine(children: TermNode[]): LayoutFn {\n return lines([compileSpanSegments(children)]);\n}\n\nfunction compileTermNode(\n node: TermNode,\n theme: Theme,\n mdOverrides?: MarkdownThemeOverrides,\n): LayoutFn | null {\n if (node.type === \"t-text\") {\n return node.text ? lines([[node.text]]) : null;\n }\n\n const p = node.props;\n\n switch (node.type) {\n case \"t-vstack\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n const gap = asNumber(p.gap) ?? 0;\n return stackWithGap(ch, gap);\n }\n\n case \"t-hstack\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n if (ch.length === 0) return blank();\n return hstack(ch, {\n gap: asNumber(p.gap),\n widths: asNumberArray(p.widths),\n });\n }\n\n case \"t-box\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n const gap = asNumber(p.gap) ?? 0;\n return box(stackWithGap(ch, gap), {\n title: asString(p.title),\n borderColor: asString(p.borderColor) ?? theme.semantic.border,\n action: asBoxAction(p.action),\n });\n }\n\n case \"t-pad\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n return padding(ch.length > 0 ? stackWithGap(ch, 0) : blank(), {\n x: asNumber(p.x),\n y: asNumber(p.y),\n top: asNumber(p.top),\n bottom: asNumber(p.bottom),\n left: asNumber(p.left),\n right: asNumber(p.right),\n });\n }\n\n case \"t-separator\":\n return separator(asString(p.color) ?? theme.semantic.border, asString(p.char));\n\n case \"t-blank\":\n return blank(asNumber(p.lines) ?? 1);\n\n case \"t-raw\":\n return compileRaw(p, node.children);\n\n case \"t-line\":\n return compileLine(node.children);\n\n case \"t-layout\": {\n const layout = p.layout;\n return isLayoutFn(layout) ? layout : blank();\n }\n\n case \"t-table\": {\n const columns = asColumns(p.columns);\n const data = asRecordArray(p.data);\n return table(columns, data, {\n borderColor: asString(p.borderColor) ?? theme.semantic.border,\n fillWidth: asBoolean(p.fillWidth),\n headerColor: asString(p.headerColor),\n cellPadding: asNumber(p.cellPadding),\n });\n }\n\n case \"t-tab\":\n // Only meaningful as a child of t-tabs; compiled there.\n return null;\n\n case \"t-tabs\": {\n const tabNodes = node.children.filter((c) => c.type === \"t-tab\");\n const names = tabNodes.map((t) => asString(t.props.name) ?? \"\");\n const active = asNumber(p.active) ?? 0;\n const onSelect = isSelectHandler(p.onSelect) ? p.onSelect : undefined;\n const onClicks = onSelect\n ? names.map((_, i) => cachedTabHandler(onSelect, i))\n : undefined;\n const tabBar = tabs(names, active, {\n activeColor: asString(p.activeColor),\n activeBg: asString(p.activeBg),\n inactiveColor: asString(p.inactiveColor),\n separatorColor: asString(p.separatorColor),\n onClicks,\n theme,\n });\n const activeNode = tabNodes[active];\n if (!activeNode || activeNode.children.length === 0) return tabBar;\n const content = compileChildLayouts(activeNode.children, theme, mdOverrides);\n if (content.length === 0) return tabBar;\n return vstack(tabBar, stackWithGap(content, 0));\n }\n\n case \"t-statusbar\":\n return statusbar(toSegments(p.left), toSegments(p.right), {\n bg: asString(p.bg),\n color: asString(p.color),\n theme,\n });\n\n case \"t-markdown\":\n return fromMarkdown(asString(p.value) ?? \"\", {\n theme,\n overrides: asMarkdownOverrides(p.themeOverrides) ?? mdOverrides,\n });\n\n case \"t-json\":\n return fromJson(p.value, {\n theme,\n title: asString(p.title),\n });\n\n case \"t-html\":\n return fromHtml(asString(p.value) ?? \"\", {\n theme,\n overrides: asMarkdownOverrides(p.themeOverrides) ?? mdOverrides,\n });\n\n case \"t-tree\":\n return tree(asTreeNodes(p.data), {\n color: asString(p.color),\n branchColor: asString(p.branchColor) ?? theme.semantic.border,\n leafColor: asString(p.leafColor),\n });\n\n case \"t-code\":\n return code(asString(p.code) ?? \"\", {\n language: asString(p.language),\n title: asString(p.title),\n borderColor: asString(p.borderColor) ?? theme.markdown.codeBorder,\n theme,\n copyable: asBoolean(p.copyable),\n action: asBoxAction(p.action),\n });\n\n case \"t-diff\":\n return unifiedDiff(asString(p.value) ?? \"\", {\n addColor: asString(p.addColor),\n removeColor: asString(p.removeColor),\n metaColor: asString(p.metaColor),\n theme,\n });\n\n case \"t-diff-compute\":\n return computeDiff(asString(p.before) ?? \"\", asString(p.after) ?? \"\", {\n context: asNumber(p.context),\n addColor: asString(p.addColor),\n removeColor: asString(p.removeColor),\n metaColor: asString(p.metaColor),\n theme,\n });\n\n case \"t-bar\": {\n const label = asString(p.label) ?? \"\";\n const value = asNumber(p.value) ?? 0;\n const max = asNumber(p.max) ?? 100;\n const barColor = asString(p.color);\n return (w: number): Block => {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 0;\n const safeValue = Number.isFinite(value) ? value : 0;\n const pct = safeMax > 0 ? Math.round((safeValue / safeMax) * 100) : 0;\n const pctStr = `${String(pct).padStart(3)}%`;\n const barW = Math.max(0, w - label.length - 2 - 1 - pctStr.length);\n const barStr = bar(safeValue, safeMax, barW);\n const segments: Segment[] = [\n ` ${label} `,\n barColor ? { text: barStr, color: barColor } : barStr,\n ` ${pctStr}`,\n ];\n return [segments];\n };\n }\n\n case \"t-spark\": {\n const data = Array.isArray(p.data)\n ? p.data.filter((value): value is number => typeof value === \"number\")\n : [];\n const sparkColor = asString(p.color);\n return (w: number): Block => {\n const sparkW = Math.max(0, w - 2);\n const sparkStr = spark(data, sparkW);\n const segments: Segment[] = [\n \" \",\n sparkColor ? { text: sparkStr, color: sparkColor } : sparkStr,\n ];\n return [segments];\n };\n }\n\n case \"t-list\":\n return list(Array.isArray(p.items) ? (p.items as ListItem[]) : [], {\n ordered: asBoolean(p.ordered),\n bulletColor: asString(p.bulletColor),\n color: asString(p.color),\n });\n\n case \"t-button\": {\n const label = asString(p.label) ?? \"\";\n const btnColor = asString(p.color);\n const btnBg = asString(p.bg);\n const btnBold = asBoolean(p.bold);\n const btnDim = asBoolean(p.dim);\n const onClick = typeof p.onClick === \"function\" ? (p.onClick as () => void) : undefined;\n const resolvedBtnColor = btnColor ?? theme.components.button.fg;\n const resolvedBtnBg = btnBg ?? theme.components.button.bg;\n const decorated = `[ ${label} ]`;\n return (w: number): Block => {\n const lp = Math.max(0, Math.floor((w - decorated.length) / 2));\n const rp = Math.max(0, w - lp - decorated.length);\n const segments: Segment[] = [];\n if (lp > 0) segments.push(\" \".repeat(lp));\n segments.push({ text: decorated, color: resolvedBtnColor, bg: resolvedBtnBg, bold: btnBold, dim: btnDim, onClick });\n if (rp > 0) segments.push(\" \".repeat(rp));\n return [segments];\n };\n }\n\n case \"t-badge\": {\n const label = asString(p.label) ?? \"\";\n const badgeColor = asString(p.color) ?? theme.components.badge.fg;\n const badgeBg = asString(p.bg) ?? theme.components.badge.bg;\n const onClick = typeof p.onClick === \"function\" ? (p.onClick as () => void) : undefined;\n return lines([[{ text: ` ${label} `, color: badgeColor, bg: badgeBg, onClick }]]);\n }\n\n case \"t-divider\":\n return divider(asString(p.label) ?? \"\", {\n color: asString(p.color) ?? theme.semantic.border,\n char: asString(p.char),\n labelColor: asString(p.labelColor),\n });\n\n case \"t-kv\":\n return kv(Array.isArray(p.pairs) ? (p.pairs as KVPair[]) : [], {\n separator: asString(p.separator),\n keyColor: asString(p.keyColor),\n valueColor: asString(p.valueColor),\n keyWidth: asNumber(p.keyWidth),\n });\n\n case \"t-callout\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n const text = asString(p.text);\n const content = text ?? (ch.length > 0 ? stackWithGap(ch, 0) : blank());\n return callout(content, {\n color: asString(p.color),\n accent: asString(p.accent),\n label: asString(p.label),\n });\n }\n\n case \"t-chart\":\n return chart(\n Array.isArray(p.data) ? p.data.filter((v): v is number => typeof v === \"number\") : [],\n {\n height: asNumber(p.height),\n color: asString(p.color),\n axisColor: asString(p.axisColor) ?? theme.semantic.border,\n fill: asBoolean(p.fill),\n },\n );\n\n case \"t-scroll\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n const content = ch.length > 0 ? stackWithGap(ch, 0) : blank();\n const onScroll = typeof p.onScroll === \"function\" ? (p.onScroll as (offset: number) => void) : undefined;\n return scroll(content, {\n maxHeight: asNumber(p.maxHeight) ?? 10,\n offset: asNumber(p.offset),\n scrollbarColor: asString(p.scrollbarColor) ?? theme.semantic.border,\n onScroll,\n });\n }\n\n case \"t-grid\": {\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n return grid(ch, {\n cols: asNumber(p.cols) ?? 2,\n gap: asNumber(p.gap),\n rowGap: asNumber(p.rowGap),\n });\n }\n\n case \"t-checkbox\": {\n const checked = asBoolean(p.checked) ?? false;\n const label = asString(p.label) ?? \"\";\n const onChange = typeof p.onChange === \"function\" ? (p.onChange as (v: boolean) => void) : undefined;\n const onClick = typeof p.onClick === \"function\"\n ? (p.onClick as () => void)\n : onChange\n ? () => onChange(!checked)\n : undefined;\n return checkbox(checked, label, {\n color: asString(p.color),\n checkColor: asString(p.checkColor),\n onClick,\n });\n }\n\n case \"t-input\":\n return inputField(asString(p.value) ?? \"\", {\n placeholder: asString(p.placeholder),\n width: asNumber(p.width),\n focused: asBoolean(p.focused),\n color: asString(p.color),\n borderColor: asString(p.borderColor) ?? theme.semantic.border,\n onClick: typeof p.onClick === \"function\" ? (p.onClick as () => void) : undefined,\n });\n\n default: {\n // Unknown host element — try to compile children\n const ch = compileChildLayouts(node.children, theme, mdOverrides);\n return ch.length > 0 ? stackWithGap(ch, 0) : null;\n }\n }\n}\n\nfunction compileChildLayouts(\n children: TermNode[],\n theme: Theme,\n mdOverrides?: MarkdownThemeOverrides,\n): LayoutFn[] {\n const out: LayoutFn[] = [];\n for (const child of children) {\n const layout = compileTermNode(child, theme, mdOverrides);\n if (layout) out.push(layout);\n }\n return out;\n}\n\nconst noop = () => {};\n\n// Priority tracking (required by React 19 reconciler)\nlet currentUpdatePriority: number = 0;\n\nconst hostTransitionContext = {\n $$typeof: Symbol.for(\"react.context\"),\n Consumer: null as never,\n Provider: null as never,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n};\n\nconst hostConfig: Reconciler.HostConfig<\n string, // Type\n TermProps, // Props\n TermRoot, // Container\n TermNode, // Instance\n TermNode, // TextInstance\n never, // SuspenseInstance\n never, // HydratableInstance\n never, // FormInstance\n TermNode, // PublicInstance\n {}, // HostContext\n never, // ChildSet\n ReturnType<typeof setTimeout>, // TimeoutHandle\n -1, // NoTimeout\n null // TransitionStatus\n> = {\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n isPrimaryRenderer: false,\n\n // ── Core ────────────────────────────────────────────────────\n\n createInstance(type, props) {\n return new TermNode(type, { ...props });\n },\n\n createTextInstance(text) {\n const node = new TermNode(\"t-text\", {});\n node.text = text;\n return node;\n },\n\n appendInitialChild(parent, child) {\n parent.appendChild(child);\n },\n\n finalizeInitialChildren() {\n return false;\n },\n\n shouldSetTextContent() {\n return false;\n },\n\n getRootHostContext() {\n return {};\n },\n\n getChildHostContext(ctx) {\n return ctx;\n },\n\n getPublicInstance(instance) {\n return instance;\n },\n\n prepareForCommit() {\n return null;\n },\n\n resetAfterCommit(container) {\n container.commitTree();\n },\n\n preparePortalMount: noop,\n\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1 as const,\n\n supportsMicrotasks: true,\n scheduleMicrotask: queueMicrotask,\n\n // ── Mutation ────────────────────────────────────────────────\n\n appendChild(parent, child) {\n parent.appendChild(child);\n },\n\n appendChildToContainer(container, child) {\n container.appendChild(child);\n },\n\n removeChild(parent, child) {\n parent.removeChild(child);\n },\n\n removeChildFromContainer(container, child) {\n container.removeChild(child);\n },\n\n insertBefore(parent, child, before) {\n parent.insertBefore(child, before);\n },\n\n insertInContainerBefore(container, child, before) {\n container.insertBefore(child, before);\n },\n\n commitUpdate(instance, _type, _prevProps, nextProps) {\n instance.props = { ...nextProps };\n },\n\n commitTextUpdate(textInstance, _oldText, newText) {\n textInstance.text = newText;\n },\n\n hideInstance: noop,\n hideTextInstance: noop,\n unhideInstance: noop,\n unhideTextInstance: noop,\n\n clearContainer(container) {\n container.children.length = 0;\n },\n\n // ── Required stubs (React 19) ─────────────────────────────\n\n getInstanceFromNode() {\n return null;\n },\n beforeActiveInstanceBlur: noop,\n afterActiveInstanceBlur: noop,\n prepareScopeUpdate: noop,\n getInstanceFromScope() {\n return null;\n },\n detachDeletedInstance: noop,\n\n // Priority\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n return currentUpdatePriority || DefaultEventPriority;\n },\n\n // Forms\n resetFormInstance: noop,\n\n // Paint callback\n requestPostPaintCallback: noop,\n\n // Transitions\n shouldAttemptEagerTransition() {\n return false;\n },\n trackSchedulerEvent: noop,\n\n // Events\n resolveEventType() {\n return null;\n },\n resolveEventTimeStamp() {\n return Date.now();\n },\n\n // Suspense commit\n maySuspendCommit() {\n return false;\n },\n preloadInstance() {\n return true;\n },\n startSuspendingCommit: noop,\n suspendInstance: noop,\n waitForCommitToBeReady() {\n return null;\n },\n\n NotPendingTransition: null,\n HostTransitionContext: hostTransitionContext,\n};\n\nconst reconciler = Reconciler(hostConfig);\n\nexport function createTermContainer(\n theme: Theme,\n markdownOverrides?: MarkdownThemeOverrides,\n) {\n const root = new TermRoot(theme, markdownOverrides);\n const container = reconciler.createContainer(\n root,\n 0, // LegacyRoot\n null,\n false,\n null,\n \"\",\n (err: unknown) => console.error(\"termui uncaught:\", err),\n (err: unknown) => console.error(\"termui caught:\", err),\n (err: unknown) => console.error(\"termui recoverable:\", err),\n noop,\n );\n return { root, container };\n}\n\nexport function updateTermContainer(\n container: Reconciler.OpaqueRoot,\n element: ReactNode,\n) {\n reconciler.updateContainer(element, container, null, null);\n}\n\nexport function flushTermSync(fn?: () => void) {\n if (fn) {\n reconciler.flushSync(fn);\n } else {\n reconciler.flushSync();\n }\n}\n\nimport type {\n TVStackProps,\n THStackProps,\n TBoxProps,\n TSeparatorProps,\n TRawProps,\n TTableProps,\n TTabProps,\n TTabsProps,\n TStatusbarProps,\n TMarkdownProps,\n TJsonProps,\n THtmlProps,\n TLineProps,\n TSpanProps,\n TLayoutProps,\n TTreeProps,\n TCodeProps,\n TUnifiedDiffProps,\n TDiffComputeProps,\n TBarProps,\n TSparkProps,\n TListProps,\n TButtonProps,\n TDividerProps,\n TKVProps,\n TCalloutProps,\n TChartProps,\n TScrollProps,\n TGridProps,\n TCheckboxProps,\n TInputProps,\n} from \"./term-react\";\n\ndeclare module \"react\" {\n namespace JSX {\n interface IntrinsicElements {\n \"t-vstack\": TVStackProps;\n \"t-hstack\": THStackProps;\n \"t-box\": TBoxProps;\n \"t-separator\": TSeparatorProps;\n \"t-blank\": {};\n \"t-raw\": TRawProps;\n \"t-table\": TTableProps;\n \"t-tab\": TTabProps;\n \"t-tabs\": TTabsProps;\n \"t-statusbar\": TStatusbarProps;\n \"t-markdown\": TMarkdownProps;\n \"t-json\": TJsonProps;\n \"t-html\": THtmlProps;\n \"t-line\": TLineProps;\n \"t-span\": TSpanProps;\n \"t-layout\": TLayoutProps;\n \"t-tree\": TTreeProps;\n \"t-code\": TCodeProps;\n \"t-diff\": TUnifiedDiffProps;\n \"t-diff-compute\": TDiffComputeProps;\n \"t-bar\": TBarProps;\n \"t-spark\": TSparkProps;\n \"t-list\": TListProps;\n \"t-button\": TButtonProps;\n \"t-divider\": TDividerProps;\n \"t-kv\": TKVProps;\n \"t-callout\": TCalloutProps;\n \"t-chart\": TChartProps;\n \"t-scroll\": TScrollProps;\n \"t-grid\": TGridProps;\n \"t-checkbox\": TCheckboxProps;\n \"t-input\": TInputProps;\n }\n }\n}\n","import { createElement, useCallback, useEffect, useState, type ReactNode } from \"react\";\nimport {\n type BoxAction,\n type Column,\n type KVPair,\n type LayoutFn,\n type ListItem,\n type Segment,\n type Theme,\n type ThemePreference,\n type TreeNode,\n} from \"./termui\";\nimport type { MarkdownThemeOverrides } from \"./document\";\nimport {\n defaultThemeSpec,\n resolveTheme,\n type ThemeSpec,\n} from \"./theme\";\nimport {\n createTermContainer,\n updateTermContainer,\n flushTermSync,\n} from \"./reconciler\";\n\ntype BaseProps = {\n children?: ReactNode;\n};\n\nexport type TVStackProps = BaseProps & {\n gap?: number;\n};\n\nexport type THStackProps = BaseProps & {\n gap?: number;\n widths?: number[];\n};\n\nexport type TBoxProps = BaseProps & {\n title?: string;\n borderColor?: string;\n gap?: number;\n action?: BoxAction;\n};\n\nexport type TSeparatorProps = {\n color?: string;\n char?: string;\n};\n\nexport type TRawProps = {\n text?: string;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n blink?: boolean;\n inverted?: boolean;\n onClick?: () => void;\n children?: ReactNode;\n};\n\nexport type TTableProps<T extends Record<string, unknown> = Record<string, unknown>> = {\n columns: Column<T>[];\n data: T[];\n borderColor?: string;\n fillWidth?: boolean;\n headerColor?: string;\n cellPadding?: number;\n};\n\nexport type TTabProps = {\n name: string;\n children?: ReactNode;\n};\n\nexport type TTabsProps = {\n active: number;\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n onSelect?: (index: number) => void;\n children?: ReactNode;\n};\n\nexport type TStatusbarProps = {\n left: string | Segment[];\n right: string | Segment[];\n bg?: string;\n color?: string;\n};\n\nexport type TMarkdownProps = {\n value: string;\n themeOverrides?: MarkdownThemeOverrides;\n};\n\nexport type TJsonProps = {\n value: unknown;\n title?: string;\n};\n\nexport type THtmlProps = {\n value: string;\n themeOverrides?: MarkdownThemeOverrides;\n};\n\nexport type TLineProps = {\n children?: ReactNode;\n};\n\nexport type TSpanProps = {\n text?: string;\n children?: ReactNode;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n onClick?: () => void;\n};\n\nexport type TPadProps = BaseProps & {\n x?: number;\n y?: number;\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n};\n\nexport type TLayoutProps = {\n layout: LayoutFn;\n};\n\nexport type TTreeProps = {\n data: TreeNode[];\n color?: string;\n branchColor?: string;\n leafColor?: string;\n};\n\nexport type TCodeProps = {\n code: string;\n language?: string;\n title?: string;\n borderColor?: string;\n action?: BoxAction;\n copyable?: boolean;\n};\n\nexport type TUnifiedDiffProps = {\n value: string;\n addColor?: string;\n removeColor?: string;\n metaColor?: string;\n};\n\nexport type TDiffComputeProps = {\n before: string;\n after: string;\n context?: number;\n addColor?: string;\n removeColor?: string;\n metaColor?: string;\n};\n\nexport type TBarProps = {\n label: string;\n value: number;\n max?: number;\n color?: string;\n};\n\nexport type TSparkProps = {\n data: number[];\n color?: string;\n};\n\nexport type TListProps = {\n items: ListItem[];\n ordered?: boolean;\n bulletColor?: string;\n color?: string;\n};\n\nexport type TButtonProps = {\n label: string;\n onClick?: () => void;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n};\n\nexport type RenderTermOptions = {\n theme?: Theme;\n themeSpec?: ThemeSpec;\n mode?: ThemePreference;\n markdownOverrides?: MarkdownThemeOverrides;\n};\n\nexport function TVStack({ children, gap }: TVStackProps) {\n return createElement(\"t-vstack\", { gap }, children);\n}\n\nexport function THStack({ children, gap, widths }: THStackProps) {\n return createElement(\"t-hstack\", { gap, widths }, children);\n}\n\nexport function TBox({ children, title, borderColor, gap, action }: TBoxProps) {\n return createElement(\"t-box\", { title, borderColor, gap, action }, children);\n}\n\nexport function TSeparator({ color, char }: TSeparatorProps) {\n return createElement(\"t-separator\", { color, char });\n}\n\nexport type TBlankProps = {\n lines?: number;\n};\n\nexport function TBlank({ lines }: TBlankProps = {}) {\n return createElement(\"t-blank\", { lines });\n}\n\nexport type TBadgeProps = {\n label: string;\n color?: string;\n bg?: string;\n onClick?: () => void;\n};\n\nexport function TBadge({ label, color, bg, onClick }: TBadgeProps) {\n return createElement(\"t-badge\", { label, color, bg, onClick });\n}\n\nexport function TRaw({ children, text, color, bg, bold, dim, blink, inverted, onClick }: TRawProps) {\n return createElement(\n \"t-raw\",\n { text, color, bg, bold, dim, blink, inverted, onClick },\n children,\n );\n}\n\nexport function TTable<T extends Record<string, unknown>>({\n columns,\n data,\n borderColor,\n fillWidth,\n headerColor,\n cellPadding,\n}: TTableProps<T>) {\n return createElement(\"t-table\", {\n columns,\n data,\n borderColor,\n fillWidth,\n headerColor,\n cellPadding,\n });\n}\n\nexport function TTab({ name, children }: TTabProps) {\n return createElement(\"t-tab\", { name }, children);\n}\n\nexport function TTabs({\n children,\n active,\n activeColor,\n activeBg,\n inactiveColor,\n separatorColor,\n onSelect,\n}: TTabsProps) {\n return createElement(\"t-tabs\", {\n active,\n activeColor,\n activeBg,\n inactiveColor,\n separatorColor,\n onSelect,\n }, children);\n}\n\nexport function TStatusbar({ left, right, bg, color }: TStatusbarProps) {\n return createElement(\"t-statusbar\", { left, right, bg, color });\n}\n\nexport function TMarkdown({ value, themeOverrides }: TMarkdownProps) {\n return createElement(\"t-markdown\", { value, themeOverrides });\n}\n\nexport function TJson({ value, title }: TJsonProps) {\n return createElement(\"t-json\", { value, title });\n}\n\nexport function THtml({ value, themeOverrides }: THtmlProps) {\n return createElement(\"t-html\", { value, themeOverrides });\n}\n\nexport function TLine({ children }: TLineProps) {\n return createElement(\"t-line\", {}, children);\n}\n\nexport function TSpan({ children, text, color, bg, bold, dim, inverted, blink, onClick }: TSpanProps) {\n return createElement(\n \"t-span\",\n { text, color, bg, bold, dim, inverted, blink, onClick },\n children,\n );\n}\n\nexport function TPad({ children, x, y, top, bottom, left, right }: TPadProps) {\n return createElement(\"t-pad\", { x, y, top, bottom, left, right }, children);\n}\n\nexport function TLayout({ layout }: TLayoutProps) {\n return createElement(\"t-layout\", { layout });\n}\n\nexport function TTree({ data, color, branchColor, leafColor }: TTreeProps) {\n return createElement(\"t-tree\", { data, color, branchColor, leafColor });\n}\n\nexport function TCode({ code, language, title, borderColor, action, copyable }: TCodeProps) {\n return createElement(\"t-code\", { code, language, title, borderColor, action, copyable });\n}\n\nexport function TUnifiedDiff({ value, addColor, removeColor, metaColor }: TUnifiedDiffProps) {\n return createElement(\"t-diff\", { value, addColor, removeColor, metaColor });\n}\n\nexport function TDiffCompute({ before, after, context, addColor, removeColor, metaColor }: TDiffComputeProps) {\n return createElement(\"t-diff-compute\", { before, after, context, addColor, removeColor, metaColor });\n}\n\nexport function TBar({ label, value, max, color }: TBarProps) {\n return createElement(\"t-bar\", { label, value, max, color });\n}\n\nexport function TSpark({ data, color }: TSparkProps) {\n return createElement(\"t-spark\", { data, color });\n}\n\nexport function TList({ items, ordered, bulletColor, color }: TListProps) {\n return createElement(\"t-list\", { items, ordered, bulletColor, color });\n}\n\nexport function TButton({ label, onClick, color, bg, bold, dim }: TButtonProps) {\n return createElement(\"t-button\", { label, onClick, color, bg, bold, dim });\n}\n\nexport type TDividerProps = {\n label: string;\n color?: string;\n char?: string;\n labelColor?: string;\n};\n\nexport function TDivider({ label, color, char, labelColor }: TDividerProps) {\n return createElement(\"t-divider\", { label, color, char, labelColor });\n}\n\nexport type TKVProps = {\n pairs: KVPair[];\n separator?: string;\n keyColor?: string;\n valueColor?: string;\n keyWidth?: number;\n};\n\nexport function TKV({ pairs, separator, keyColor, valueColor, keyWidth }: TKVProps) {\n return createElement(\"t-kv\", { pairs, separator, keyColor, valueColor, keyWidth });\n}\n\nexport type TCalloutProps = BaseProps & {\n text?: string;\n color?: string;\n accent?: string;\n label?: string;\n};\n\nexport function TCallout({ children, text, color, accent, label }: TCalloutProps) {\n return createElement(\"t-callout\", { text, color, accent, label }, children);\n}\n\nexport type TChartProps = {\n data: number[];\n height?: number;\n color?: string;\n axisColor?: string;\n fill?: boolean;\n};\n\nexport function TChart({ data, height, color, axisColor, fill }: TChartProps) {\n return createElement(\"t-chart\", { data, height, color, axisColor, fill });\n}\n\nexport type TScrollProps = BaseProps & {\n maxHeight: number;\n offset?: number;\n onScroll?: (offset: number) => void;\n scrollbarColor?: string;\n};\n\nexport function TScroll({ children, maxHeight, offset: controlledOffset, onScroll: externalOnScroll, scrollbarColor }: TScrollProps) {\n const [internalOffset, setInternalOffset] = useState(0);\n const isControlled = controlledOffset !== undefined;\n const offset = isControlled ? controlledOffset : internalOffset;\n\n const handleScroll = useCallback((newOffset: number) => {\n if (!isControlled) setInternalOffset(newOffset);\n externalOnScroll?.(newOffset);\n }, [isControlled, externalOnScroll]);\n\n return createElement(\"t-scroll\", { maxHeight, offset, scrollbarColor, onScroll: handleScroll }, children);\n}\n\nexport type TGridProps = BaseProps & {\n cols: number;\n gap?: number;\n rowGap?: number;\n};\n\nexport function TGrid({ children, cols, gap, rowGap }: TGridProps) {\n return createElement(\"t-grid\", { cols, gap, rowGap }, children);\n}\n\nexport type TCheckboxProps = {\n checked: boolean;\n label: string;\n color?: string;\n checkColor?: string;\n onChange?: (checked: boolean) => void;\n onClick?: () => void;\n};\n\nexport function TCheckbox({ checked, label, color, checkColor, onChange, onClick }: TCheckboxProps) {\n return createElement(\"t-checkbox\", { checked, label, color, checkColor, onChange, onClick });\n}\n\nexport type TInputProps = {\n value: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n width?: number;\n focused?: boolean;\n color?: string;\n borderColor?: string;\n onClick?: () => void;\n};\n\nexport function TInput({ value, onChange, onSubmit, placeholder, width, focused: controlledFocused, color, borderColor, onClick }: TInputProps) {\n const [internalFocused, setInternalFocused] = useState(false);\n const focused = controlledFocused ?? internalFocused;\n\n useEffect(() => {\n if (!focused || !onChange) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setInternalFocused(false);\n return;\n }\n if (e.key === \"Enter\") {\n setInternalFocused(false);\n onSubmit?.(value);\n return;\n }\n if (e.key === \"Backspace\") {\n e.preventDefault();\n onChange(value.slice(0, -1));\n return;\n }\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n onChange(value + e.key);\n }\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [focused, value, onChange, onSubmit]);\n\n const handleClick = () => {\n setInternalFocused(true);\n onClick?.();\n };\n\n return createElement(\"t-input\", { value, placeholder, width, focused, color, borderColor, onClick: handleClick });\n}\n\nexport function renderTermReact(\n tree: ReactNode,\n opts?: RenderTermOptions,\n): LayoutFn {\n const resolvedTheme =\n opts?.theme ??\n resolveTheme(opts?.themeSpec ?? defaultThemeSpec, opts?.mode ?? \"dark\");\n\n const { root, container } = createTermContainer(\n resolvedTheme,\n opts?.markdownOverrides,\n );\n flushTermSync(() => updateTermContainer(container, tree));\n const layout = root.getLayoutFn();\n // Cleanup\n updateTermContainer(container, null);\n return (w) => layout(w);\n}\n","import { useState, useEffect, useRef, type RefObject } from \"react\";\n\nconst FRAMES = [\"\\u280b\", \"\\u2819\", \"\\u2839\", \"\\u2838\", \"\\u2834\", \"\\u2826\", \"\\u2827\", \"\\u2807\", \"\\u280f\"];\n\nexport function useSpinner(ms = 80): string {\n const [frame, setFrame] = useState(0);\n useEffect(() => {\n const id = setInterval(() => setFrame((v) => (v + 1) % FRAMES.length), ms);\n return () => clearInterval(id);\n }, [ms]);\n return FRAMES[frame % FRAMES.length]!;\n}\n\nexport function useTick(ms = 500): number {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const id = setInterval(() => setTick((v) => v + 1), ms);\n return () => clearInterval(id);\n }, [ms]);\n return tick;\n}\n\nexport function useTermWidth(\n ref: RefObject<HTMLElement | null>,\n fallback = 80,\n): number {\n const [width, setWidth] = useState(fallback);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const m = document.createElement(\"span\");\n m.style.cssText = \"font:inherit;visibility:hidden;position:absolute;white-space:pre\";\n m.textContent = \"0\".repeat(100);\n el.appendChild(m);\n const ch = m.getBoundingClientRect().width / 100;\n el.removeChild(m);\n if (ch <= 0) return;\n const update = () => setWidth(Math.floor(el.clientWidth / ch) || fallback);\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, fallback]);\n return width;\n}\n\nexport function useStreamingText(\n text: string,\n lerp = 0.08,\n): string {\n const visibleRef = useRef(0);\n const prevTextRef = useRef(\"\");\n const [sliceEnd, setSliceEnd] = useState(0);\n\n // Detect replacement (not append) — snap immediately\n if (!text.startsWith(prevTextRef.current)) {\n visibleRef.current = text.length;\n }\n prevTextRef.current = text;\n\n useEffect(() => {\n const target = text.length;\n if (visibleRef.current >= target) {\n setSliceEnd(target);\n return;\n }\n\n let raf: number;\n let lastTime = performance.now();\n\n const tick = (now: number) => {\n const dt = (now - lastTime) / 16.67; // normalize to ~60fps\n lastTime = now;\n\n const current = visibleRef.current;\n const diff = target - current;\n\n if (diff < 0.5) {\n visibleRef.current = target;\n setSliceEnd(target);\n return;\n }\n\n const step = Math.max(1, diff * lerp * dt);\n visibleRef.current = Math.min(current + step, target);\n\n const next = Math.floor(visibleRef.current);\n setSliceEnd((prev) => (prev !== next ? next : prev));\n\n raf = requestAnimationFrame(tick);\n };\n\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [text.length, lerp]);\n\n return text.slice(0, sliceEnd);\n}\n"],"mappings":"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","names":["text","wrapText","isRecord","wrapText","wrapText","text","color","isRecord","pad","wrapText","useEffect","useMemo","isRecord","isRecord","headingColor","jsx","TermSegment","useMemo","TermLine","t","lines","TermTableBorderRow","TermTableContentRow","TermTable","TermScrollRegion","TermBlock","useEffect","useEffect","useState","lines","code","separator","useState","useEffect","tree","useState","useEffect","useRef"]}
1
+ {"version":3,"sources":["../src/termui/table-tag.ts","../src/termui/scroll-tag.ts","../src/termui/base.ts","../src/termui/text.ts","../src/termui/layout.ts","../src/termui/table.ts","../src/termui/widgets.ts","../src/termui/json.ts","../src/termui/tree-list.ts","../src/tokenize.ts","../src/theme.ts","../src/termui/code.ts","../src/termui/chart.ts","../src/document/common.ts","../src/core/html-compiler.ts","../src/document/json.ts","../src/document/markdown.ts","../src/core/ir-layout.ts","../src/document/html.ts","../src/document/index.ts","../src/dom-render.ts","../src/term-element.ts"],"sourcesContent":["import type { Line } from \"./base\";\n\nconst TABLE_TAG = Symbol(\"tableLine\");\ntype TableTaggedLine = Line & { [TABLE_TAG]?: true };\n\nfunction toTaggedLine(line: Line): TableTaggedLine {\n return line as TableTaggedLine;\n}\n\nexport function markTableLine(line: Line): Line {\n toTaggedLine(line)[TABLE_TAG] = true;\n return line;\n}\n\nexport function isTableLine(line: Line): boolean {\n return toTaggedLine(line)[TABLE_TAG] === true;\n}\n\nexport function preserveTableTag(source: Line, target: Line): void {\n if (toTaggedLine(source)[TABLE_TAG]) toTaggedLine(target)[TABLE_TAG] = true;\n}\n","import type { Line } from \"./base\";\n\nconst SCROLL_KEY = Symbol(\"scrollRegion\");\n\nexport type ScrollRegionMeta = {\n onScroll: (offset: number) => void;\n totalLines: number;\n maxHeight: number;\n offset: number;\n};\n\ntype ScrollTaggedLine = Line & { [SCROLL_KEY]?: ScrollRegionMeta };\n\nfunction toTagged(line: Line): ScrollTaggedLine {\n return line as ScrollTaggedLine;\n}\n\nexport function markScrollRegion(line: Line, meta: ScrollRegionMeta): Line {\n toTagged(line)[SCROLL_KEY] = meta;\n return line;\n}\n\nexport function getScrollRegionMeta(line: Line): ScrollRegionMeta | undefined {\n return toTagged(line)[SCROLL_KEY];\n}\n\nexport function preserveScrollTag(source: Line, target: Line): void {\n const meta = toTagged(source)[SCROLL_KEY];\n if (meta) toTagged(target)[SCROLL_KEY] = meta;\n}\n","export type Style = {\n text: string;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n interactionId?: string;\n onClick?: () => void;\n noSelect?: boolean;\n cell?: number;\n};\n\nexport type Segment = string | Style;\nexport type Line = Segment[];\nexport type Block = Line[];\nexport type LayoutFn = (width: number) => Block;\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemePreference = ThemeMode | \"system\";\n\nexport type ThemePalette = {\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n};\n\nexport type ThemeSemantic = {\n frameBg: string;\n frameFg: string;\n frameMuted: string;\n border: string;\n borderStrong: string;\n inverseFg: string;\n inverseBg: string;\n info: string;\n success: string;\n warn: string;\n danger: string;\n};\n\nexport type ThemeSyntax = {\n default: string;\n keyword: string;\n string: string;\n number: string;\n comment: string;\n punctuation: string;\n function: string;\n type: string;\n};\n\nexport type ThemeMarkdown = {\n headingMarker: string;\n headingBoldMaxLevel: number;\n headings: {\n h1: string;\n h2: string;\n h3: string;\n h4: string;\n h5: string;\n h6: string;\n };\n paragraph: string;\n unorderedBullet: string;\n orderedMarker: string;\n tableHeader: string;\n tableBorder: string;\n quoteMarker: string;\n quoteText: string;\n separator: string;\n codeText: string;\n codeEmpty: string;\n codeBorder: string;\n};\n\nexport type ThemeComponents = {\n tabs: {\n activeFg: string;\n activeBg: string;\n inactiveFg: string;\n separator: string;\n };\n statusbar: {\n fg: string;\n bg: string;\n };\n badge: {\n fg: string;\n bg: string;\n };\n button: {\n fg: string;\n bg: string;\n };\n};\n\nexport type Theme = {\n id: string;\n label: string;\n version: number;\n mode: ThemeMode;\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n\n // Convenience aliases for the most common color paths.\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n border: string;\n bg: string;\n};\n\nexport function normalizedWidth(width: number): number {\n if (!Number.isFinite(width)) return 0;\n return Math.max(0, Math.floor(width));\n}\n","import { type Line, type Segment } from \"./base\";\nimport { normalizedWidth } from \"./base\";\n\nexport function pad(s: string, w: number, right?: boolean): string {\n if (s.length >= w) return s.slice(0, w);\n const space = \" \".repeat(w - s.length);\n return right ? space + s : s + space;\n}\n\nexport function hl(n: number): string {\n return \"\\u2500\".repeat(normalizedWidth(n));\n}\n\nexport function bar(val: number, max: number, w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0) return \"\";\n if (!Number.isFinite(max) || max <= 0) return \"\\u2591\".repeat(width);\n\n const ratio = Number.isFinite(val) ? val / max : 0;\n const filled = Math.round(Math.min(1, Math.max(0, ratio)) * width);\n return \"\\u2588\".repeat(filled) + \"\\u2591\".repeat(width - filled);\n}\n\nexport function spark(data: number[], w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0 || data.length === 0) return \"\";\n\n const ticks = \"\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588\";\n const v = data.slice(-width);\n const mn = Math.min(...v);\n const mx = Math.max(...v);\n const rg = mx - mn || 1;\n return v.map((x) => ticks[Math.round(((x - mn) / rg) * 7)]).join(\"\");\n}\n\nfunction segLen(seg: Segment): number {\n return typeof seg === \"string\" ? seg.length : seg.text.length;\n}\n\nfunction lineLen(line: Line): number {\n let n = 0;\n for (const seg of line) n += segLen(seg);\n return n;\n}\n\nfunction sliceSeg(seg: Segment, end: number): Segment | null {\n if (end <= 0) return null;\n if (typeof seg === \"string\") {\n const text = seg.slice(0, end);\n return text.length > 0 ? text : null;\n }\n const text = seg.text.slice(0, end);\n if (text.length === 0) return null;\n return { ...seg, text };\n}\n\nfunction truncateLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const out: Line = [];\n let remaining = w;\n\n for (const seg of line) {\n if (remaining <= 0) break;\n const len = segLen(seg);\n if (len <= remaining) {\n out.push(seg);\n remaining -= len;\n continue;\n }\n const clipped = sliceSeg(seg, remaining);\n if (clipped) out.push(clipped);\n remaining = 0;\n }\n\n return out;\n}\n\nexport function padLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const used = lineLen(line);\n if (used > w) return truncateLine(line, w);\n if (used === w) return line;\n return [...line, { text: \" \".repeat(w - used), noSelect: true }];\n}\n\nexport function truncate(text: string, width: number, ellipsis = \"\\u2026\"): string {\n if (text.length <= width) return text;\n if (width <= ellipsis.length) return ellipsis.slice(0, width);\n return text.slice(0, width - ellipsis.length) + ellipsis;\n}\n\nexport function wrapText(text: string, w: number): string[] {\n if (w <= 0) return [\"\"];\n if (text.length <= w) return [text];\n\n const result: string[] = [];\n let pos = 0;\n while (pos < text.length) {\n if (pos + w >= text.length) {\n result.push(text.slice(pos));\n break;\n }\n let breakAt = text.lastIndexOf(\" \", pos + w);\n if (breakAt <= pos) {\n // No word boundary — hard break\n result.push(text.slice(pos, pos + w));\n pos += w;\n } else {\n result.push(text.slice(pos, breakAt));\n pos = breakAt + 1;\n }\n }\n return result.length > 0 ? result : [\"\"];\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { hl, padLine } from \"./text\";\nimport { markScrollRegion } from \"./scroll-tag\";\n\nexport type BoxAction = { label: string; onClick: () => void; color?: string };\n\ntype BorderTopOpts = { title?: string; color?: string; action?: BoxAction };\n\nfunction borderTop(w: number, opts?: BorderTopOpts): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u250c\", color: opts?.color, noSelect: true }];\n\n const { title, color, action } = opts ?? {};\n const innerWidth = width - 2; // minus corners\n\n // Title prefix: \"─ title \" (3 chars of framing + title length)\n // Reserve 1 extra char so there's always at least one dash of fill.\n const titleBudget = innerWidth - (action ? action.label.length + 2 : 0) - 4;\n let titleStr = \"\";\n if (title) {\n const safeTitle = title.length > titleBudget ? title.slice(0, Math.max(0, titleBudget)) : title;\n titleStr = safeTitle.length > 0 ? \"\\u2500 \" + safeTitle + \" \" : \"\";\n }\n\n const fillWidth = Math.max(0, innerWidth - titleStr.length - (action ? action.label.length + 2 : 0));\n\n if (!action) {\n return [{ text: \"\\u250c\" + titleStr + hl(fillWidth) + \"\\u2510\", color, noSelect: true }];\n }\n\n return [\n { text: \"\\u250c\" + titleStr + hl(fillWidth), color, noSelect: true },\n { text: \" \" + action.label + \" \", color: action.color ?? color, onClick: action.onClick, noSelect: true },\n { text: \"\\u2510\", color, noSelect: true },\n ];\n}\n\nfunction borderBottom(w: number, color?: string): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u2514\", color, noSelect: true }];\n return [{ text: \"\\u2514\" + hl(width - 2) + \"\\u2518\", color, noSelect: true }];\n}\n\nexport function lines(\n content: Line[] | ((w: number) => Line[]),\n): LayoutFn {\n return (w) => {\n const ls = typeof content === \"function\" ? content(w) : content;\n return ls.map((line) => padLine(line, w));\n };\n}\n\nexport function box(\n content: LayoutFn,\n opts?: { title?: string; borderColor?: string; action?: BoxAction },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n if (width < 2) return content(width);\n\n const bc = opts?.borderColor;\n const inner = width - 2;\n const contentBlock = content(inner);\n const result: Block = [];\n result.push(borderTop(width, { title: opts?.title, color: bc, action: opts?.action }));\n for (const line of contentBlock) {\n result.push([\n { text: \"\\u2502\", color: bc, noSelect: true },\n ...padLine(line, inner),\n { text: \"\\u2502\", color: bc, noSelect: true },\n ]);\n }\n result.push(borderBottom(width, bc));\n return result;\n };\n}\n\nexport function hstack(\n children: LayoutFn[],\n opts?: { gap?: number; widths?: number[] },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const n = children.length;\n if (n === 0) return [];\n const gap = normalizedWidth(opts?.gap ?? 1);\n const totalGap = gap * (n - 1);\n\n let childWidths: number[];\n if (opts?.widths && opts.widths.length === n) {\n childWidths = opts.widths.map((cw) => normalizedWidth(cw));\n } else {\n const available = Math.max(0, width - totalGap);\n const base = Math.floor(available / n);\n const remainder = available - base * n;\n childWidths = children.map((_, i) => base + (i < remainder ? 1 : 0));\n }\n\n const blocks = children.map((child, i) => child(childWidths[i]!));\n const maxLines = Math.max(...blocks.map((b) => b.length));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n\n const result: Block = [];\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < blocks.length; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const childLine = blocks[j]![i];\n if (childLine) {\n line.push(...padLine(childLine, childWidths[j]!));\n } else {\n line.push(\" \".repeat(childWidths[j]!));\n }\n }\n result.push(line);\n }\n return result;\n };\n}\n\nexport function vstack(...children: LayoutFn[]): LayoutFn {\n return (w) => {\n const result: Block = [];\n for (const child of children) {\n result.push(...child(w));\n }\n return result;\n };\n}\n\nexport function separator(color?: string, char?: string): LayoutFn {\n return (w) => {\n const c = char ?? \"\\u2500\";\n return [[{ text: c.repeat(normalizedWidth(w)), color, noSelect: true }]];\n };\n}\n\nexport function blank(count = 1): LayoutFn {\n return (w) => {\n const line = [\" \".repeat(normalizedWidth(w))];\n const result: Block = [];\n for (let i = 0; i < count; i++) result.push(line);\n return result;\n };\n}\n\nexport function divider(\n label: string,\n opts?: { color?: string; char?: string; labelColor?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const c = opts?.char ?? \"\\u2500\";\n const padded = ` ${label} `;\n if (padded.length >= width) {\n const lc = opts?.labelColor ?? opts?.color;\n return [[lc ? { text: padded.slice(0, width), color: lc } : padded.slice(0, width)]];\n }\n const remaining = width - padded.length;\n const leftLen = Math.floor(remaining / 2);\n const rightLen = remaining - leftLen;\n const lineColor = opts?.color;\n const labelColor = opts?.labelColor ?? opts?.color;\n const line: Line = [\n { text: c.repeat(leftLen), color: lineColor, noSelect: true },\n labelColor ? { text: padded, color: labelColor } : padded,\n { text: c.repeat(rightLen), color: lineColor, noSelect: true },\n ];\n return [line];\n };\n}\n\nexport function grid(\n cells: LayoutFn[],\n opts: { cols: number; gap?: number; rowGap?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const cols = Math.max(1, opts.cols);\n const gap = normalizedWidth(opts.gap ?? 1);\n const rowGap = normalizedWidth(opts.rowGap ?? 0);\n const totalGap = gap * (cols - 1);\n const cellWidth = Math.max(1, Math.floor((width - totalGap) / cols));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n const result: Block = [];\n\n for (let rowStart = 0; rowStart < cells.length; rowStart += cols) {\n if (rowStart > 0 && rowGap > 0) {\n const emptyLine: Line = [\" \".repeat(width)];\n for (let g = 0; g < rowGap; g++) result.push(emptyLine);\n }\n const rowCells = cells.slice(rowStart, rowStart + cols);\n const blocks = rowCells.map((cell) => cell(cellWidth));\n const maxLines = Math.max(0, ...blocks.map((b) => b.length));\n\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < cols; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const block = blocks[j];\n if (block && block[i]) {\n line.push(...padLine(block[i]!, cellWidth));\n } else {\n line.push(\" \".repeat(cellWidth));\n }\n }\n result.push(padLine(line, width));\n }\n }\n\n return result;\n };\n}\n\nexport function scroll(\n content: LayoutFn,\n opts: { maxHeight: number; offset?: number; scrollbarColor?: string; onScroll?: (offset: number) => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const maxH = normalizedWidth(opts.maxHeight);\n const contentW = Math.max(1, width - 1);\n const fullBlock = content(contentW);\n const totalLines = fullBlock.length;\n\n if (totalLines <= maxH) {\n return fullBlock.map((line) => padLine(line, width));\n }\n\n const maxOffset = Math.max(0, totalLines - maxH);\n const offset = Math.min(maxOffset, Math.max(0, opts.offset ?? 0));\n const visible = fullBlock.slice(offset, offset + maxH);\n\n const thumbHeight = Math.max(1, Math.round((maxH / totalLines) * maxH));\n const thumbStart = Math.round((offset / maxOffset) * (maxH - thumbHeight));\n\n const result: Block = [];\n for (let i = 0; i < visible.length; i++) {\n const inThumb = i >= thumbStart && i < thumbStart + thumbHeight;\n const scrollChar = inThumb ? \"\\u2588\" : \"\\u2591\";\n const line: Line = [\n ...padLine(visible[i]!, contentW),\n { text: scrollChar, color: opts.scrollbarColor, noSelect: true },\n ];\n if (opts.onScroll) {\n markScrollRegion(line, { onScroll: opts.onScroll, totalLines, maxHeight: maxH, offset });\n }\n result.push(line);\n }\n\n return result;\n };\n}\n\nexport function padding(\n content: LayoutFn,\n opts?: { x?: number; y?: number; top?: number; bottom?: number; left?: number; right?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const t = normalizedWidth(opts?.top ?? opts?.y ?? 0);\n const b = normalizedWidth(opts?.bottom ?? opts?.y ?? 0);\n const l = normalizedWidth(opts?.left ?? opts?.x ?? 0);\n const r = normalizedWidth(opts?.right ?? opts?.x ?? 0);\n const innerW = Math.max(1, width - l - r);\n const block = content(innerW);\n const result: Block = [];\n const emptyLine: Line = [\" \".repeat(width)];\n for (let i = 0; i < t; i++) result.push(emptyLine);\n const leftPad = l > 0 ? \" \".repeat(l) : \"\";\n for (const line of block) {\n const padded: Line = leftPad ? [leftPad, ...line] : line;\n result.push(padLine(padded, width));\n }\n for (let i = 0; i < b; i++) result.push(emptyLine);\n return result;\n };\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { markTableLine } from \"./table-tag\";\nimport { hl, pad, wrapText } from \"./text\";\nimport { normalizedWidth } from \"./base\";\n\nfunction tableSep(\n ws: number[],\n l: string,\n m: string,\n r: string,\n color?: string,\n): Line {\n const line: Line = [{ text: l, color, noSelect: true }];\n for (let i = 0; i < ws.length; i++) {\n line.push({ text: hl(ws[i]!), color, noSelect: true, cell: i });\n line.push({ text: i < ws.length - 1 ? m : r, color, noSelect: true });\n }\n return line;\n}\n\nfunction tableTop(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u250c\", \"\\u252c\", \"\\u2510\", color);\n}\n\nfunction tableMid(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u251c\", \"\\u253c\", \"\\u2524\", color);\n}\n\nfunction tableBot(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u2514\", \"\\u2534\", \"\\u2518\", color);\n}\n\nexport type Column<T extends Record<string, unknown> = Record<string, unknown>> = {\n key: keyof T & string;\n title?: string;\n width?: number;\n align?: \"left\" | \"right\";\n headerColor?: string;\n headerBold?: boolean;\n color?: string | ((value: unknown, row: T) => string | undefined);\n dim?: boolean | ((value: unknown, row: T) => boolean);\n onClick?: (value: unknown, row: T) => void;\n};\n\nexport function table<T extends Record<string, unknown>>(\n columns: Column<T>[],\n data: T[],\n opts?: { borderColor?: string; fillWidth?: boolean; headerColor?: string; cellPadding?: number },\n): LayoutFn {\n return (w) => {\n const bc = opts?.borderColor;\n const hc = opts?.headerColor;\n const cp = normalizedWidth(opts?.cellPadding ?? 1);\n const nSep = columns.length + 1; // separators: │col│col│...│\n const minColWidth = 1;\n const widthBudget = Math.max(0, normalizedWidth(w) - nSep);\n const padStr = \" \".repeat(cp);\n\n // Compute column widths\n const ws = columns.map((col) => {\n if (col.width) return Math.max(minColWidth, col.width);\n const displayTitle = col.title ?? col.key;\n const titleW = displayTitle.length + 2 * cp;\n const dataW = Math.max(\n ...data.map((row) => String(row[col.key] ?? \"\").length + 2 * cp),\n 0,\n );\n return Math.max(minColWidth, titleW, dataW);\n });\n\n // If fillWidth, distribute remaining space\n if (opts?.fillWidth && widthBudget > 0) {\n const used = ws.reduce((a, b) => a + b, 0);\n const remaining = widthBudget - used;\n if (remaining > 0 && ws.length > 0) {\n const even = Math.floor(remaining / ws.length);\n const rem = remaining % ws.length;\n for (let i = 0; i < ws.length; i++) {\n ws[i] = ws[i]! + even + (i < rem ? 1 : 0);\n }\n }\n }\n\n if (widthBudget > 0) {\n let used = ws.reduce((a, b) => a + b, 0);\n let overflow = used - widthBudget;\n while (overflow > 0) {\n let idx = -1;\n let widest = 0;\n for (let i = 0; i < ws.length; i++) {\n if (ws[i]! > minColWidth && ws[i]! > widest) {\n widest = ws[i]!;\n idx = i;\n }\n }\n if (idx === -1) break;\n ws[idx] = ws[idx]! - 1;\n overflow -= 1;\n }\n }\n\n const result: Block = [];\n\n // Top border\n result.push(tableTop(ws, bc));\n\n // Header row\n const headerLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const displayTitle = col.title ?? col.key;\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(displayTitle, innerW, col.align === \"right\") + padStr;\n headerLine.push({\n text,\n color: col.headerColor ?? hc,\n bold: col.headerBold ?? true,\n cell: i,\n });\n headerLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(headerLine);\n\n // Mid separator\n result.push(tableMid(ws, bc));\n\n // Data rows — wrap cell text instead of truncating\n for (const row of data) {\n const wrapped: string[][] = columns.map((col, ci) => {\n const val = String(row[col.key] ?? \"\");\n const innerW = Math.max(1, ws[ci]! - 2 * cp);\n return wrapText(val, innerW);\n });\n const rowHeight = Math.max(...wrapped.map((c) => c.length), 1);\n\n for (let ln = 0; ln < rowHeight; ln++) {\n const dataLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const cellLine = wrapped[i]![ln] ?? \"\";\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(cellLine, innerW, col.align === \"right\") + padStr;\n const color =\n typeof col.color === \"function\"\n ? col.color(row[col.key], row)\n : col.color;\n const dim =\n typeof col.dim === \"function\"\n ? col.dim(row[col.key], row)\n : col.dim;\n const cellClick = typeof col.onClick === \"function\" ? () => col.onClick!(row[col.key], row) : undefined;\n dataLine.push({ text, color: color || undefined, dim: dim || undefined, onClick: cellClick, cell: i });\n dataLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(dataLine);\n }\n }\n\n // Bottom border\n result.push(tableBot(ws, bc));\n\n // Tag all lines so the renderer can emit HTML <table>\n for (const line of result) markTableLine(line);\n return result;\n };\n}\n","import type { Block, LayoutFn, Line, Segment, Theme } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { pad, padLine, wrapText } from \"./text\";\n\nexport function statusbar(\n left: Segment[],\n right: Segment[],\n opts?: { bg?: string; color?: string; theme?: Theme },\n): LayoutFn {\n return (w) => {\n const rightLen = right.reduce(\n (acc, s) => acc + (typeof s === \"string\" ? s.length : s.text.length),\n 0,\n );\n const leftWidth = Math.max(0, w - rightLen);\n const paddedLeft = padLine(left, leftWidth);\n\n const theme = opts?.theme;\n const bg = opts?.bg ?? theme?.components.statusbar.bg;\n const color = opts?.color ?? theme?.components.statusbar.fg;\n const line: Line = [...paddedLeft, ...right].map((seg) => {\n if (typeof seg === \"string\") {\n return bg || color ? { text: seg, bg, color } : seg;\n }\n return { ...seg, bg: seg.bg ?? bg, color: seg.color ?? color };\n });\n return [padLine(line, w)];\n };\n}\n\nexport function tabs(\n names: string[],\n active: number,\n opts?: {\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n onSelect?: (index: number) => void;\n onClicks?: ((() => void) | undefined)[];\n interactionIds?: (string | undefined)[];\n theme?: Theme;\n },\n): LayoutFn {\n return (w) => {\n const line: Line = [];\n const onSelect = opts?.onSelect;\n const t = opts?.theme;\n for (let i = 0; i < names.length; i++) {\n const isActive = i === active;\n const name = names[i]!;\n const label = \" \" + (isActive ? name.toUpperCase() : name) + \" \";\n const onClick = opts?.onClicks?.[i] ?? (onSelect ? () => onSelect(i) : undefined);\n const interactionId = onClick ? opts?.interactionIds?.[i] : undefined;\n\n if (isActive) {\n line.push({\n text: label,\n color: opts?.activeColor ?? t?.components.tabs.activeFg,\n bg: opts?.activeBg ?? t?.components.tabs.activeBg,\n interactionId,\n onClick,\n });\n } else {\n line.push({\n text: label,\n color: opts?.inactiveColor ?? t?.components.tabs.inactiveFg,\n interactionId,\n onClick,\n });\n }\n\n if (i < names.length - 1) {\n line.push({ text: \"\\u2502\", color: opts?.separatorColor ?? t?.components.tabs.separator, noSelect: true });\n }\n }\n return [padLine(line, w)];\n };\n}\n\nexport function badge(\n label: string,\n opts?: { color?: string; bg?: string; onClick?: () => void; theme?: Theme },\n): Segment {\n const t = opts?.theme;\n return {\n text: label,\n color: opts?.color ?? t?.components.badge.fg,\n bg: opts?.bg ?? t?.components.badge.bg,\n onClick: opts?.onClick,\n };\n}\n\nexport type KVPair = {\n key: string;\n value: string | Segment[];\n keyColor?: string;\n valueColor?: string;\n onClick?: () => void;\n};\n\nexport function kv(\n pairs: KVPair[],\n opts?: { separator?: string; keyColor?: string; valueColor?: string; keyWidth?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const sep = opts?.separator ?? \" \";\n const maxKey = opts?.keyWidth ?? Math.max(0, ...pairs.map((p) => p.key.length));\n const result: Line[] = [];\n\n for (const pair of pairs) {\n const keyText = pad(pair.key, maxKey);\n const keyColor = pair.keyColor ?? opts?.keyColor;\n const keySeg: Segment = keyColor ? { text: keyText, color: keyColor } : keyText;\n\n if (typeof pair.value === \"string\") {\n const valColor = pair.valueColor ?? opts?.valueColor;\n const valSeg: Segment =\n valColor || pair.onClick\n ? { text: pair.value, color: valColor, onClick: pair.onClick }\n : pair.value;\n result.push(padLine([keySeg, sep, valSeg], width));\n } else {\n result.push(padLine([keySeg, sep, ...pair.value], width));\n }\n }\n\n return result;\n };\n}\n\nexport function callout(\n content: LayoutFn | string,\n opts?: { color?: string; accent?: string; label?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const accent = opts?.accent ?? opts?.color;\n const innerWidth = Math.max(1, width - 2);\n\n let block: Block;\n if (typeof content === \"string\") {\n const wrapped = wrapText(content, innerWidth);\n block = wrapped.map((line) => {\n const seg: Line = opts?.color ? [{ text: line, color: opts.color }] : [line];\n return padLine(seg, innerWidth);\n });\n } else {\n block = content(innerWidth);\n }\n\n const result: Block = [];\n\n if (opts?.label) {\n const labelLine: Line = [\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n { text: opts.label, color: accent, bold: true },\n ];\n result.push(padLine(labelLine, width));\n }\n\n for (const line of block) {\n result.push([\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n ...padLine(line, innerWidth),\n ]);\n }\n\n return result;\n };\n}\n\nexport function checkbox(\n checked: boolean,\n label: string,\n opts?: { color?: string; checkColor?: string; onClick?: () => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const check = checked ? \"\\u2713\" : \" \";\n const boxSeg: Segment = {\n text: `[${check}]`,\n color: opts?.checkColor ?? opts?.color,\n onClick: opts?.onClick,\n };\n const labelSeg: Segment = opts?.onClick\n ? { text: ` ${label}`, color: opts.color, onClick: opts.onClick }\n : opts?.color\n ? { text: ` ${label}`, color: opts.color }\n : ` ${label}`;\n return [padLine([boxSeg, labelSeg], width)];\n };\n}\n\nexport function inputField(\n value: string,\n opts?: {\n placeholder?: string;\n width?: number;\n focused?: boolean;\n color?: string;\n borderColor?: string;\n onClick?: () => void;\n },\n): LayoutFn {\n return (w) => {\n const totalWidth = normalizedWidth(opts?.width ?? w);\n const innerWidth = Math.max(1, totalWidth - 2);\n const bc = opts?.borderColor;\n const focused = opts?.focused ?? false;\n\n const display = value || opts?.placeholder || \"\";\n const isPlaceholder = !value && opts?.placeholder;\n\n const textTruncated =\n display.length > innerWidth\n ? display.slice(display.length - innerWidth)\n : display;\n const padded = pad(textTruncated + (focused ? \"\\u2588\" : \"\"), innerWidth);\n\n const line: Line = [\n { text: focused ? \"\\u2502\" : \"[\", color: bc, noSelect: true },\n isPlaceholder\n ? { text: padded, dim: true, color: opts?.color, onClick: opts?.onClick }\n : opts?.color || opts?.onClick\n ? { text: padded, color: opts?.color, onClick: opts?.onClick }\n : padded,\n { text: focused ? \"\\u2502\" : \"]\", color: bc, noSelect: true },\n ];\n return [padLine(line, w)];\n };\n}\n","import type { LayoutFn, Line, Segment } from \"./base\";\nimport { bar } from \"./text\";\nimport { blank, box, hstack, lines, separator, vstack } from \"./layout\";\nimport { type Column, table } from \"./table\";\nimport { statusbar, tabs } from \"./widgets\";\n\nexport type JsonNode =\n | { type: \"vstack\"; children: JsonNode[] }\n | { type: \"hstack\"; gap?: number; widths?: number[]; children: JsonNode[] }\n | { type: \"box\"; title?: string; borderColor?: string; children: JsonNode[] }\n | { type: \"lines\"; content: Line[] }\n | { type: \"separator\"; color?: string }\n | { type: \"blank\" }\n | {\n type: \"table\";\n columns: Column[];\n data: Record<string, unknown>[];\n borderColor?: string;\n fillWidth?: boolean;\n }\n | {\n type: \"statusbar\";\n left: Segment[];\n right: Segment[];\n bg?: string;\n color?: string;\n }\n | {\n type: \"tabs\";\n names: string[];\n active: number;\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n }\n | { type: \"bar\"; value: number; max: number; color?: string; label?: string }\n | { type: \"text\"; segments: Segment[] };\n\nexport function fromJsonNode(node: JsonNode): LayoutFn {\n switch (node.type) {\n case \"vstack\":\n return vstack(...node.children.map(fromJsonNode));\n\n case \"hstack\":\n return hstack(node.children.map(fromJsonNode), {\n gap: node.gap,\n widths: node.widths,\n });\n\n case \"box\":\n return box(vstack(...node.children.map(fromJsonNode)), {\n title: node.title,\n borderColor: node.borderColor,\n });\n\n case \"lines\":\n return lines(node.content);\n\n case \"separator\":\n return separator(node.color);\n\n case \"blank\":\n return blank();\n\n case \"table\":\n return table(node.columns, node.data, {\n borderColor: node.borderColor,\n fillWidth: node.fillWidth,\n });\n\n case \"statusbar\":\n return statusbar(node.left, node.right, {\n bg: node.bg,\n color: node.color,\n });\n\n case \"tabs\":\n return tabs(node.names, node.active, {\n activeColor: node.activeColor,\n activeBg: node.activeBg,\n inactiveColor: node.inactiveColor,\n separatorColor: node.separatorColor,\n });\n\n case \"bar\":\n return (w) => {\n const labelStr = node.label ? \" \" + node.label : \"\";\n const barW = Math.max(0, w - 1 - labelStr.length); // 1 for leading space\n return [[\" \", { text: bar(node.value, node.max, barW), color: node.color }, labelStr]];\n };\n\n case \"text\":\n return lines([node.segments]);\n }\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { padLine, wrapText } from \"./text\";\n\nexport type TreeNode = {\n label: string;\n onClick?: () => void;\n children?: TreeNode[];\n};\n\nexport function tree(\n data: TreeNode[],\n opts?: { color?: string; branchColor?: string; leafColor?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n function walk(nodes: TreeNode[], prefix: string) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!;\n const last = i === nodes.length - 1;\n const hasKids = node.children && node.children.length > 0;\n const connector = last ? \"\\u2514\\u2500\\u2500 \" : \"\\u251c\\u2500\\u2500 \";\n const line: Line = [];\n if (prefix) line.push({ text: prefix, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: connector, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: node.label, color: hasKids ? opts?.color : (opts?.leafColor ?? opts?.color), onClick: node.onClick });\n result.push(padLine(line, w));\n if (hasKids) {\n walk(node.children!, prefix + (last ? \" \" : \"\\u2502 \"));\n }\n }\n }\n walk(data, \"\");\n return result;\n };\n}\n\nexport type ListItem = string | { text: string; color?: string; onClick?: () => void };\n\nexport function list(\n items: ListItem[],\n opts?: { ordered?: boolean; bulletColor?: string; color?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n const ordered = opts?.ordered ?? false;\n const digits = String(items.length).length;\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const text = typeof item === \"string\" ? item : item.text;\n const itemColor = typeof item === \"string\" ? opts?.color : (item.color ?? opts?.color);\n const itemClick = typeof item === \"string\" ? undefined : item.onClick;\n const prefix = ordered\n ? ` ${String(i + 1).padStart(digits, \" \")}. `\n : \" * \";\n const indent = \" \".repeat(prefix.length);\n const wrapped = wrapText(text, w - prefix.length);\n for (let j = 0; j < wrapped.length; j++) {\n const line: Line = [];\n if (j === 0) {\n line.push({ text: prefix, color: opts?.bulletColor });\n } else {\n line.push(indent);\n }\n line.push(itemColor || itemClick ? { text: wrapped[j]!, color: itemColor, onClick: itemClick } : wrapped[j]!);\n result.push(padLine(line, w));\n }\n }\n return result;\n };\n}\n","// termui — regex-based syntax tokenizer for TCode\n\nexport type TokenType =\n | \"keyword\"\n | \"string\"\n | \"number\"\n | \"comment\"\n | \"punctuation\"\n | \"function\"\n | \"type\"\n | \"default\";\n\nexport type Token = { text: string; type: TokenType };\n\ntype Rule = { pattern: RegExp; type: TokenType };\n\nfunction rules(pairs: [RegExp, TokenType][]): Rule[] {\n return pairs.map(([pattern, type]) => ({\n pattern: new RegExp(pattern.source, \"y\"),\n type,\n }));\n}\n\nconst JS_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/\\/\\*[\\s\\S]*?\\*\\//, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/`(?:[^`\\\\]|\\\\.)*`/, \"string\"],\n [/\\b(?:const|let|var|function|return|if|else|for|while|do|class|import|export|from|async|await|new|throw|try|catch|finally|typeof|instanceof|in|of|void|delete|switch|case|break|continue|default|yield|extends|implements|interface|type|as|this|super|null|undefined|true|false)\\b/, \"keyword\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/\\b[a-zA-Z_$][\\w$]*(?=\\s*\\()/, \"function\"],\n [/=>/, \"punctuation\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nconst JSON_RULES = rules([\n [/\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/, \"function\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/\\b(?:true|false|null)\\b/, \"keyword\"],\n [/-?\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/[{}\\[\\]:,]/, \"punctuation\"],\n]);\n\nconst BASH_RULES = rules([\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'[^']*'/, \"string\"],\n [/\\$\\{[^}]*\\}/, \"type\"],\n [/\\$[A-Za-z_]\\w*/, \"type\"],\n [/\\b(?:if|then|else|elif|fi|for|do|done|while|until|case|esac|function|in|return|exit|echo|export|local|readonly|source|alias|cd|ls|rm|cp|mv|mkdir|grep|sed|awk|cat|chmod|chown|sudo|apt|brew|npm|npx|bun|yarn|git|docker|curl|wget|pipe)\\b/, \"keyword\"],\n [/\\b\\d+\\b/, \"number\"],\n [/[|;&<>()\\[\\]{}]/, \"punctuation\"],\n]);\n\nconst GENERIC_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nfunction rulesFor(lang?: string): Rule[] {\n if (!lang) return GENERIC_RULES;\n const l = lang.toLowerCase();\n if (l === \"json\" || l === \"jsonc\") return JSON_RULES;\n if (l === \"bash\" || l === \"sh\" || l === \"zsh\" || l === \"shell\") return BASH_RULES;\n if (l === \"js\" || l === \"jsx\" || l === \"ts\" || l === \"tsx\" || l === \"javascript\" || l === \"typescript\") return JS_RULES;\n return GENERIC_RULES;\n}\n\nfunction tokenizeLine(line: string, langRules: Rule[]): Token[] {\n const tokens: Token[] = [];\n let pos = 0;\n while (pos < line.length) {\n // Skip whitespace as default\n if (line[pos] === \" \" || line[pos] === \"\\t\") {\n let ws = pos;\n while (ws < line.length && (line[ws] === \" \" || line[ws] === \"\\t\")) ws++;\n tokens.push({ text: line.slice(pos, ws), type: \"default\" });\n pos = ws;\n continue;\n }\n let matched = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) {\n tokens.push({ text: m[0], type: rule.type });\n pos += m[0].length;\n matched = true;\n break;\n }\n }\n if (!matched) {\n // Consume one char as default\n const start = pos;\n pos++;\n while (pos < line.length && line[pos] !== \" \" && line[pos] !== \"\\t\") {\n let anyMatch = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) { anyMatch = true; break; }\n }\n if (anyMatch) break;\n pos++;\n }\n tokens.push({ text: line.slice(start, pos), type: \"default\" });\n }\n }\n return tokens;\n}\n\nexport function tokenize(source: string, language?: string): Token[][] {\n const langRules = rulesFor(language);\n return source.split(\"\\n\").map((line) => tokenizeLine(line, langRules));\n}\n","import type {\n Theme,\n ThemeComponents,\n ThemeMarkdown,\n ThemeMode,\n ThemePalette,\n ThemePreference,\n ThemeSemantic,\n ThemeSyntax,\n} from \"./termui/base\";\n\nexport type ThemeModeTokens = {\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n};\n\nexport type ThemeSpec = {\n id: string;\n label: string;\n version: number;\n modes: Record<ThemeMode, ThemeModeTokens>;\n};\n\nexport type ThemeValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type ThemeValidationResult = {\n ok: boolean;\n issues: ThemeValidationIssue[];\n theme?: ThemeSpec;\n};\n\nconst DARK_PALETTE: ThemePalette = {\n black: \"#0c0c0c\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n magenta: \"#c678dd\",\n cyan: \"#56b6c2\",\n white: \"#cccccc\",\n brightBlack: \"#555555\",\n brightWhite: \"#ffffff\",\n};\n\nconst DARK_SEMANTIC: ThemeSemantic = {\n frameBg: \"#0c0c0c\",\n frameFg: \"#cccccc\",\n frameMuted: \"#555555\",\n border: \"#555555\",\n borderStrong: \"#808080\",\n inverseFg: \"#0c0c0c\",\n inverseBg: \"#ffffff\",\n info: \"#56b6c2\",\n success: \"#98c379\",\n warn: \"#e5c07b\",\n danger: \"#e06c75\",\n};\n\nconst DARK_SYNTAX: ThemeSyntax = {\n default: \"#ffffff\",\n keyword: \"#c678dd\",\n string: \"#98c379\",\n number: \"#e5c07b\",\n comment: \"#555555\",\n punctuation: \"#555555\",\n function: \"#61afef\",\n type: \"#56b6c2\",\n};\n\nconst DARK_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#555555\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#e5c07b\",\n h2: \"#56b6c2\",\n h3: \"#98c379\",\n h4: \"#c678dd\",\n h5: \"#cccccc\",\n h6: \"#cccccc\",\n },\n paragraph: \"#cccccc\",\n unorderedBullet: \"#56b6c2\",\n orderedMarker: \"#56b6c2\",\n tableHeader: \"#56b6c2\",\n tableBorder: \"#555555\",\n quoteMarker: \"#555555\",\n quoteText: \"#555555\",\n separator: \"#555555\",\n codeText: \"#ffffff\",\n codeEmpty: \"#555555\",\n codeBorder: \"#555555\",\n};\n\nconst DARK_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#0c0c0c\",\n activeBg: \"#e5c07b\",\n inactiveFg: \"#555555\",\n separator: \"#555555\",\n },\n statusbar: {\n fg: \"#0c0c0c\",\n bg: \"#98c379\",\n },\n badge: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n button: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n};\n\nconst LIGHT_PALETTE: ThemePalette = {\n black: \"#1f2328\",\n red: \"#cf222e\",\n green: \"#1a7f37\",\n yellow: \"#9a6700\",\n blue: \"#0969da\",\n magenta: \"#8250df\",\n cyan: \"#1b7c83\",\n white: \"#30363d\",\n brightBlack: \"#6e7781\",\n brightWhite: \"#0f172a\",\n};\n\nconst LIGHT_SEMANTIC: ThemeSemantic = {\n frameBg: \"#f6f8fa\",\n frameFg: \"#1f2328\",\n frameMuted: \"#6e7781\",\n border: \"#d0d7de\",\n borderStrong: \"#8c959f\",\n inverseFg: \"#f6f8fa\",\n inverseBg: \"#0f172a\",\n info: \"#0969da\",\n success: \"#1a7f37\",\n warn: \"#9a6700\",\n danger: \"#cf222e\",\n};\n\nconst LIGHT_SYNTAX: ThemeSyntax = {\n default: \"#1f2328\",\n keyword: \"#8250df\",\n string: \"#116329\",\n number: \"#9a6700\",\n comment: \"#6e7781\",\n punctuation: \"#6e7781\",\n function: \"#0969da\",\n type: \"#1b7c83\",\n};\n\nconst LIGHT_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#6e7781\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#9a6700\",\n h2: \"#0969da\",\n h3: \"#1a7f37\",\n h4: \"#8250df\",\n h5: \"#1f2328\",\n h6: \"#1f2328\",\n },\n paragraph: \"#1f2328\",\n unorderedBullet: \"#0969da\",\n orderedMarker: \"#0969da\",\n tableHeader: \"#0969da\",\n tableBorder: \"#d0d7de\",\n quoteMarker: \"#6e7781\",\n quoteText: \"#6e7781\",\n separator: \"#d0d7de\",\n codeText: \"#1f2328\",\n codeEmpty: \"#6e7781\",\n codeBorder: \"#d0d7de\",\n};\n\nconst LIGHT_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#f6f8fa\",\n activeBg: \"#0969da\",\n inactiveFg: \"#6e7781\",\n separator: \"#8c959f\",\n },\n statusbar: {\n fg: \"#f6f8fa\",\n bg: \"#0969da\",\n },\n badge: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n button: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n};\n\nexport const defaultThemeSpec: ThemeSpec = {\n id: \"termui-default\",\n label: \"TermUI Default\",\n version: 1,\n modes: {\n dark: {\n palette: DARK_PALETTE,\n semantic: DARK_SEMANTIC,\n syntax: DARK_SYNTAX,\n markdown: DARK_MARKDOWN,\n components: DARK_COMPONENTS,\n },\n light: {\n palette: LIGHT_PALETTE,\n semantic: LIGHT_SEMANTIC,\n syntax: LIGHT_SYNTAX,\n markdown: LIGHT_MARKDOWN,\n components: LIGHT_COMPONENTS,\n },\n },\n};\n\nexport const builtinThemes = {\n default: defaultThemeSpec,\n} as const;\n\nexport function resolveThemeMode(\n preference: ThemePreference,\n systemMode: ThemeMode = \"dark\",\n): ThemeMode {\n return preference === \"system\" ? systemMode : preference;\n}\n\nexport function resolveTheme(\n spec: ThemeSpec,\n preference: ThemePreference = \"dark\",\n opts?: { systemMode?: ThemeMode },\n): Theme {\n const mode = resolveThemeMode(preference, opts?.systemMode ?? \"dark\");\n const modeTokens = spec.modes[mode] ?? defaultThemeSpec.modes[mode];\n\n return {\n id: spec.id,\n label: spec.label,\n version: spec.version,\n mode,\n palette: modeTokens.palette,\n semantic: modeTokens.semantic,\n syntax: modeTokens.syntax,\n markdown: modeTokens.markdown,\n components: modeTokens.components,\n black: modeTokens.palette.black,\n red: modeTokens.palette.red,\n green: modeTokens.palette.green,\n yellow: modeTokens.palette.yellow,\n blue: modeTokens.palette.blue,\n magenta: modeTokens.palette.magenta,\n cyan: modeTokens.palette.cyan,\n white: modeTokens.palette.white,\n brightBlack: modeTokens.palette.brightBlack,\n brightWhite: modeTokens.palette.brightWhite,\n border: modeTokens.semantic.border,\n bg: modeTokens.semantic.frameBg,\n };\n}\n\nexport const dark = resolveTheme(defaultThemeSpec, \"dark\");\nexport const light = resolveTheme(defaultThemeSpec, \"light\");\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n return {\n \"--termui-bg\": theme.semantic.frameBg,\n \"--termui-fg\": theme.semantic.frameFg,\n \"--termui-muted\": theme.semantic.frameMuted,\n \"--termui-border\": theme.semantic.border,\n \"--termui-border-strong\": theme.semantic.borderStrong,\n \"--termui-info\": theme.semantic.info,\n \"--termui-success\": theme.semantic.success,\n \"--termui-warn\": theme.semantic.warn,\n \"--termui-danger\": theme.semantic.danger,\n \"--termui-inverse-fg\": theme.semantic.inverseFg,\n \"--termui-inverse-bg\": theme.semantic.inverseBg,\n };\n}\n\nexport function parseThemeSpec(json: string): ThemeValidationResult {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch (error) {\n return {\n ok: false,\n issues: [{ path: \"$\", message: error instanceof Error ? error.message : \"Invalid JSON\" }],\n };\n }\n return validateThemeSpec(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction issue(path: string, message: string): ThemeValidationIssue {\n return { path, message };\n}\n\nfunction isColorValue(value: string): boolean {\n const v = value.trim();\n if (!v) return false;\n if (/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(v)) return true;\n if (/^(?:rgb|rgba|hsl|hsla|oklch|oklab|lab|lch|color)\\(.+\\)$/i.test(v)) return true;\n if (/^var\\(--[a-zA-Z0-9-_]+\\)$/.test(v)) return true;\n if (/^[a-zA-Z]+$/.test(v)) return true;\n return false;\n}\n\nfunction validateColorField(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"string\") {\n issues.push(issue(path, \"Expected a string color value\"));\n return;\n }\n if (!isColorValue(value)) {\n issues.push(issue(path, \"Invalid CSS color value\"));\n }\n}\n\nfunction validateHeadingBoldMaxLevel(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n return;\n }\n if (value < 1 || value > 6) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n }\n}\n\nfunction validateTokenGroup(\n value: unknown,\n path: string,\n fields: readonly string[],\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n for (const field of fields) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateMarkdownTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateColorField(value.headingMarker, `${path}.headingMarker`, issues);\n validateHeadingBoldMaxLevel(value.headingBoldMaxLevel, `${path}.headingBoldMaxLevel`, issues);\n\n if (!isRecord(value.headings)) {\n issues.push(issue(`${path}.headings`, \"Expected an object\"));\n } else {\n for (const level of [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const) {\n validateColorField(value.headings[level], `${path}.headings.${level}`, issues);\n }\n }\n\n for (const field of [\n \"paragraph\",\n \"unorderedBullet\",\n \"orderedMarker\",\n \"tableHeader\",\n \"tableBorder\",\n \"quoteMarker\",\n \"quoteText\",\n \"separator\",\n \"codeText\",\n \"codeEmpty\",\n \"codeBorder\",\n ] as const) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateComponentTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.tabs,\n `${path}.tabs`,\n [\"activeFg\", \"activeBg\", \"inactiveFg\", \"separator\"],\n issues,\n );\n validateTokenGroup(value.statusbar, `${path}.statusbar`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.badge, `${path}.badge`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.button, `${path}.button`, [\"fg\", \"bg\"], issues);\n}\n\nfunction validateModeTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.palette,\n `${path}.palette`,\n [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightWhite\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.semantic,\n `${path}.semantic`,\n [\n \"frameBg\",\n \"frameFg\",\n \"frameMuted\",\n \"border\",\n \"borderStrong\",\n \"inverseFg\",\n \"inverseBg\",\n \"info\",\n \"success\",\n \"warn\",\n \"danger\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.syntax,\n `${path}.syntax`,\n [\n \"default\",\n \"keyword\",\n \"string\",\n \"number\",\n \"comment\",\n \"punctuation\",\n \"function\",\n \"type\",\n ],\n issues,\n );\n\n validateMarkdownTokens(value.markdown, `${path}.markdown`, issues);\n validateComponentTokens(value.components, `${path}.components`, issues);\n}\n\nexport function validateThemeSpec(value: unknown): ThemeValidationResult {\n const issues: ThemeValidationIssue[] = [];\n if (!isRecord(value)) {\n return { ok: false, issues: [issue(\"$\", \"Expected an object\")] };\n }\n\n if (typeof value.id !== \"string\" || !value.id.trim()) {\n issues.push(issue(\"$.id\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.label !== \"string\" || !value.label.trim()) {\n issues.push(issue(\"$.label\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.version !== \"number\" || !Number.isInteger(value.version) || value.version < 1) {\n issues.push(issue(\"$.version\", \"Expected a positive integer\"));\n }\n\n if (!isRecord(value.modes)) {\n issues.push(issue(\"$.modes\", \"Expected an object with light/dark modes\"));\n } else {\n validateModeTokens(value.modes.dark, \"$.modes.dark\", issues);\n validateModeTokens(value.modes.light, \"$.modes.light\", issues);\n }\n\n if (issues.length > 0) {\n return { ok: false, issues };\n }\n\n return {\n ok: true,\n issues: [],\n theme: value as ThemeSpec,\n };\n}\n","import { tokenize, type TokenType } from \"../tokenize\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"./base\";\nimport { box, lines, type BoxAction } from \"./layout\";\n\nexport function tokenColor(type: TokenType, theme: Theme): string {\n switch (type) {\n case \"keyword\": return theme.syntax.keyword;\n case \"string\": return theme.syntax.string;\n case \"number\": return theme.syntax.number;\n case \"comment\": return theme.syntax.comment;\n case \"punctuation\": return theme.syntax.punctuation;\n case \"function\": return theme.syntax.function;\n case \"type\": return theme.syntax.type;\n default: return theme.syntax.default;\n }\n}\n\nexport function code(\n source: string,\n opts?: { language?: string; title?: string; borderColor?: string; theme?: Theme; copyable?: boolean; action?: BoxAction },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const tokens = tokenize(source, opts?.language);\n const copyAction = opts?.copyable !== false\n ? { label: \"cp\", onClick: () => navigator.clipboard.writeText(source), color: t.semantic.frameMuted }\n : undefined;\n return box(\n lines(\n tokens.length > 0\n ? tokens.map((lineTokens) =>\n lineTokens.length === 0\n ? [{ text: \" \", color: t.markdown.codeEmpty }]\n : lineTokens.map((tok) => ({ text: tok.text, color: tokenColor(tok.type, t) })),\n )\n : [[{ text: \" \", color: t.markdown.codeEmpty, dim: true }]],\n ),\n {\n title: opts?.title ?? (opts?.language ? `code:${opts.language}` : \"code\"),\n borderColor: opts?.borderColor ?? t.markdown.codeBorder,\n action: opts?.action ?? copyAction,\n },\n );\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { padLine } from \"./text\";\n\nfunction fmtNum(n: number): string {\n if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1) + \"k\";\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(1);\n}\n\nexport function chart(\n data: number[],\n opts?: { height?: number; color?: string; axisColor?: string; fill?: boolean },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const height = opts?.height ?? 8;\n const color = opts?.color;\n const axisColor = opts?.axisColor;\n\n if (data.length === 0 || width < 4 || height < 2) return [padLine([], width)];\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const minLabel = fmtNum(min);\n const maxLabel = fmtNum(max);\n const labelW = Math.max(minLabel.length, maxLabel.length);\n const axisW = labelW + 2;\n const plotW = Math.max(1, width - axisW);\n\n // Resample data to plotW points\n const points: number[] = [];\n if (data.length === 1) {\n for (let i = 0; i < plotW; i++) points.push(data[0]!);\n } else {\n for (let i = 0; i < plotW; i++) {\n const idx = (i / (plotW - 1)) * (data.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.min(lo + 1, data.length - 1);\n const t = idx - lo;\n points.push(data[lo]! * (1 - t) + data[hi]! * t);\n }\n }\n\n // Map to row indices (0 = bottom, height-1 = top)\n const rows = points.map((v) => Math.round(((v - min) / range) * (height - 1)));\n\n const result: Block = [];\n for (let row = height - 1; row >= 0; row--) {\n const line: Line = [];\n\n // Y axis\n let label = \"\";\n if (row === height - 1) label = maxLabel;\n else if (row === 0) label = minLabel;\n line.push({ text: label.padStart(labelW) + \" \\u2502\", color: axisColor, noSelect: true });\n\n // Plot area\n let text = \"\";\n for (let col = 0; col < plotW; col++) {\n const val = rows[col]!;\n if (val === row) text += \"\\u2584\";\n else if (opts?.fill && val > row) text += \"\\u2588\";\n else text += \" \";\n }\n line.push(color ? { text, color } : text);\n result.push(padLine(line, width));\n }\n\n // X axis\n const xAxis: Line = [\n { text: \" \".repeat(labelW) + \" \\u2514\" + \"\\u2500\".repeat(plotW), color: axisColor, noSelect: true },\n ];\n result.push(padLine(xAxis, width));\n\n return result;\n };\n}\n","import type { Line, Segment, Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\nfunction headingLevelKey(level: number): keyof Theme[\"markdown\"][\"headings\"] {\n if (level <= 1) return \"h1\";\n if (level === 2) return \"h2\";\n if (level === 3) return \"h3\";\n if (level === 4) return \"h4\";\n if (level === 5) return \"h5\";\n return \"h6\";\n}\n\nexport function headingColor(level: number, theme: Theme, overrides?: MarkdownThemeOverrides): string {\n const key = headingLevelKey(level);\n return overrides?.headings?.[key] ?? theme.markdown.headings[key];\n}\n\nexport function isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n return /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed);\n}\n\nexport function wrapText(text: string, maxWidth: number): string[] {\n const width = Math.max(1, maxWidth);\n const normalized = text.replace(/\\s+/g, \" \").trim();\n if (!normalized) return [\"\"];\n\n const linesOut: string[] = [];\n let rest = normalized;\n\n while (rest.length > width) {\n const slice = rest.slice(0, width + 1);\n const splitAt = slice.lastIndexOf(\" \");\n const end = splitAt > 0 ? splitAt : width;\n linesOut.push(rest.slice(0, end).trimEnd());\n rest = rest.slice(end).trimStart();\n }\n\n linesOut.push(rest);\n return linesOut;\n}\n\nexport function renderPrefixedText(\n text: string,\n width: number,\n prefix: Segment,\n continuationPrefix: string,\n textStyle?: Omit<Exclude<Segment, string>, \"text\" | \"onClick\">,\n): Line[] {\n const prefixText = typeof prefix === \"string\" ? prefix : prefix.text;\n const wrapped = wrapText(text, width - prefixText.length);\n\n return wrapped.map((chunk, index) => {\n if (index === 0) {\n return [prefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n }\n return [continuationPrefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n });\n}\n\nexport function normalizeHtmlText(text: string): string {\n return text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction getValueByPath(source: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = source;\n for (const part of parts) {\n if (!isRecord(current)) return undefined;\n current = current[part];\n }\n return current;\n}\n\nexport function resolveThemeColor(value: string | null | undefined, theme: Theme): string | undefined {\n if (!value) return undefined;\n const raw = value.trim();\n if (!raw) return undefined;\n const topLevel = theme[raw as keyof Theme];\n if (typeof topLevel === \"string\") return topLevel;\n const nested = getValueByPath(theme, raw);\n if (typeof nested === \"string\") return nested;\n return raw;\n}\n\nexport function getColorAttr(el: Element, theme: Theme, names: string[]): string | undefined {\n for (const name of names) {\n const value = resolveThemeColor(el.getAttribute(name), theme);\n if (value) return value;\n }\n return undefined;\n}\n\nexport function parseIntegerAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function parseCodeLanguage(el: Element): string | undefined {\n const explicit = el.getAttribute(\"language\");\n if (explicit && explicit.trim()) return explicit.trim();\n\n const klass = el.getAttribute(\"class\") ?? \"\";\n const match = klass.match(/\\blanguage-([\\w+-]+)\\b/);\n return match?.[1];\n}\n","import type { Theme } from \"../termui\";\nimport {\n getColorAttr,\n normalizeHtmlText,\n parseCodeLanguage,\n parseIntegerAttr,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport { type TermAction, type TermIRNode } from \"./ir\";\n\ntype ActionSeed =\n | { type: \"action\"; id?: string; text: string }\n | { type: \"link\"; href?: string; text: string };\n\nexport type HtmlTagCompiler = (el: Element, ctx: HtmlCompileContext) => TermIRNode | null;\n\nexport type HtmlCompileContext = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n compileChildren: (el: Element) => TermIRNode[];\n compileNode: (node: ChildNode) => TermIRNode | null;\n actionFromElement: (el: Element, seed: ActionSeed) => TermAction;\n};\n\nexport type CompileHtmlToIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n containerGap?: number;\n};\n\nconst htmlTagRegistry = new Map<string, HtmlTagCompiler>();\n\nfunction stack(children: TermIRNode[], gap: number): TermIRNode {\n return { kind: \"stack\", gap, children };\n}\n\n// ---------------------------------------------------------------------------\n// CSS layout inference -- read display/gap/grid from getComputedStyle\n// ---------------------------------------------------------------------------\n\ntype CSSLayout = {\n display?: \"flex\" | \"grid\";\n direction?: \"row\" | \"column\";\n gap?: number;\n cols?: number;\n};\n\nfunction cssGapToLines(raw: string, el: Element): number | undefined {\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)\\s*(px|rem|em|ch)?/);\n if (!match) return undefined;\n const value = Number.parseFloat(match[1]!);\n const unit = (match[2] ?? \"px\").toLowerCase();\n if (unit === \"px\") {\n const lh = parseFloat(getComputedStyle(el).lineHeight);\n const cellH = Number.isFinite(lh) && lh > 0 ? lh : 16;\n return Math.max(0, Math.round(value / cellH));\n }\n return Math.max(0, Math.round(value));\n}\n\nfunction resolveLayout(el: Element): CSSLayout {\n if (!el.isConnected || typeof getComputedStyle !== \"function\") return {};\n\n const cs = getComputedStyle(el);\n const display = cs.display;\n const isFlex = display === \"flex\" || display === \"inline-flex\";\n const isGrid = display === \"grid\" || display === \"inline-grid\";\n if (!isFlex && !isGrid) return {};\n\n const result: CSSLayout = { display: isFlex ? \"flex\" : \"grid\" };\n\n if (isFlex) {\n const dir = cs.flexDirection;\n if (dir === \"row\" || dir === \"column\") result.direction = dir;\n }\n\n if (isGrid) {\n const cols = cs.gridTemplateColumns;\n if (cols && cols !== \"none\") {\n const count = cols.split(/\\s+/).filter((t) => t.length > 0).length;\n if (count > 0) result.cols = count;\n }\n }\n\n const gap = cs.gap;\n if (gap && gap !== \"normal\" && gap !== \"0px\") {\n result.gap = cssGapToLines(gap, el);\n }\n\n return result;\n}\n\nfunction parseNumericList(raw: string): number[] | undefined {\n const trimmed = raw.trim();\n if (!trimmed) return undefined;\n\n if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (!Array.isArray(parsed)) return undefined;\n const nums = parsed\n .map((value) => (typeof value === \"number\" ? value : Number(value)))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n } catch {\n return undefined;\n }\n }\n\n const nums = trimmed\n .split(/[\\s,]+/g)\n .filter((token) => token.length > 0)\n .map((token) => Number.parseFloat(token))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n}\n\nfunction parseBooleanAttr(el: Element, name: string): boolean | undefined {\n const raw = el.getAttribute(name);\n if (raw === null) return undefined;\n const value = raw.trim().toLowerCase();\n if (!value || value === \"true\" || value === \"1\" || value === \"yes\" || value === \"on\") return true;\n if (value === \"false\" || value === \"0\" || value === \"no\" || value === \"off\") return false;\n return true;\n}\n\nfunction firstAttr(el: Element, names: string[]): string | undefined {\n for (const name of names) {\n const value = el.getAttribute(name);\n if (value !== null) return value;\n }\n return undefined;\n}\n\nfunction parseIntegerAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseIntegerAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseBooleanAttrs(el: Element, names: string[]): boolean | undefined {\n for (const name of names) {\n const value = parseBooleanAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseNumericListAttrs(el: Element, names: string[]): number[] | undefined {\n for (const name of names) {\n const raw = el.getAttribute(name);\n if (!raw) continue;\n const parsed = parseNumericList(raw);\n if (parsed) return parsed;\n throw new Error(`Invalid numeric list in \"${name}\" attribute: ${raw}`);\n }\n return undefined;\n}\n\nfunction parseFloatAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseFloat(raw.trim());\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseFloatAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseFloatAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseDataAttrs(el: Element): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries((el as HTMLElement).dataset ?? {})) {\n if (typeof value === \"string\") out[key] = value;\n }\n return out;\n}\n\nfunction elementPathKey(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current) {\n const tag = current.tagName.toLowerCase();\n let ordinal = 0;\n let prev = current.previousElementSibling;\n while (prev) {\n if (prev.tagName.toLowerCase() === tag) ordinal += 1;\n prev = prev.previousElementSibling;\n }\n parts.push(`${tag}:${ordinal}`);\n current = current.parentElement;\n }\n return parts.reverse().join(\"/\");\n}\n\nfunction actionKeyFromSeed(el: Element, seed: ActionSeed): string {\n const scope = elementPathKey(el);\n if (seed.type === \"action\") {\n return seed.id ? `a:${seed.id}:${scope}` : `a:${scope}`;\n }\n return seed.href ? `l:${seed.href}:${scope}` : `l:${scope}`;\n}\n\nfunction collectDirectChildElements(el: Element): Element[] {\n return Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n}\n\nfunction parseDataChildren(el: Element): number[] | undefined {\n const dataEls = el.querySelectorAll(\":scope > data\");\n if (dataEls.length === 0) return undefined;\n const out: number[] = [];\n for (let i = 0; i < dataEls.length; i++) {\n const d = dataEls[i]!;\n const raw = d.getAttribute(\"value\");\n const v = Number.parseFloat(raw ?? \"\");\n if (!Number.isFinite(v)) {\n throw new Error(`Invalid <data> value at index ${i}: ${raw ?? \"(missing)\"}`);\n }\n out.push(v);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction controlActionId(el: Element): string | undefined {\n return firstAttr(el, [\"action\"]) ?? undefined;\n}\n\nfunction compactLabel(raw: string, max = 28): string {\n const text = normalizeHtmlText(raw);\n if (text.length <= max) return text;\n return `${text.slice(0, Math.max(1, max - 3))}...`;\n}\n\nfunction compileChartNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const dataText = (el.textContent ?? \"\").trim();\n const data =\n parseNumericListAttrs(el, [\"values\"]) ??\n parseDataChildren(el) ??\n parseNumericList(dataText) ??\n [];\n\n return {\n kind: \"chart\",\n data,\n height: parseIntegerAttrs(el, [\"height\"]),\n fill: parseBooleanAttrs(el, [\"fill\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n axisColor: getColorAttr(el, ctx.theme, [\"axis-color\"]),\n };\n}\n\nfunction compileStatusbarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n return {\n kind: \"statusbar\",\n left: firstAttr(el, [\"left\"]) ?? \"\",\n right: firstAttr(el, [\"right\"]) ?? \"\",\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"background\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n };\n}\n\nfunction compileBarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const textLabel = normalizeHtmlText(el.textContent ?? \"\");\n return {\n kind: \"bar\",\n label: firstAttr(el, [\"label\", \"aria-label\", \"title\"]) ?? (textLabel || undefined),\n value: parseFloatAttrs(el, [\"value\"]) ?? 0,\n max: parseFloatAttrs(el, [\"max\"]) ?? 100,\n width: parseIntegerAttrs(el, [\"width\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n showPercent: parseBooleanAttrs(el, [\"show-percent\"]),\n };\n}\n\nfunction registerDefaultCompilers(): void {\n if (htmlTagRegistry.size > 0) return;\n\n for (let level = 1; level <= 6; level++) {\n htmlTagRegistry.set(`h${level}`, (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"heading\",\n level,\n text,\n markerColor: getColorAttr(el, ctx.theme, [\"marker-color\"]),\n };\n });\n }\n\n htmlTagRegistry.set(\"p\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color:\n getColorAttr(el, ctx.theme, [\"color\"]) ??\n ctx.overrides?.paragraph ??\n ctx.theme.markdown.paragraph,\n };\n });\n\n htmlTagRegistry.set(\"ul\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return { kind: \"list\", ordered: false, start: 1, items };\n });\n\n htmlTagRegistry.set(\"ol\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return {\n kind: \"list\",\n ordered: true,\n start: parseIntegerAttr(el, \"start\") ?? 1,\n items,\n };\n });\n\n htmlTagRegistry.set(\"blockquote\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"blockquote\",\n text,\n markerColor:\n getColorAttr(el, ctx.theme, [\"marker-color\"]) ??\n ctx.overrides?.quoteMarker ??\n ctx.theme.markdown.quoteMarker,\n color: ctx.overrides?.quoteText ?? ctx.theme.markdown.quoteText,\n };\n });\n\n htmlTagRegistry.set(\"hr\", (el, ctx) => {\n const label = firstAttr(el, [\"label\"]);\n if (label) {\n return {\n kind: \"divider\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\"]) ?? ctx.theme.semantic.border,\n char: firstAttr(el, [\"char\"]) ?? undefined,\n labelColor: getColorAttr(el, ctx.theme, [\"label-color\"]) ?? undefined,\n };\n }\n return {\n kind: \"separator\",\n color:\n getColorAttr(el, ctx.theme, [\"color\"]) ??\n ctx.overrides?.separator ??\n ctx.theme.markdown.separator,\n };\n });\n\n htmlTagRegistry.set(\"pre\", (el, ctx) => {\n const language = parseCodeLanguage(el) ?? parseCodeLanguage(el.querySelector(\"code\") ?? el);\n const raw = (el.textContent ?? \"\").replace(/\\r\\n/g, \"\\n\");\n const trimmed = raw.replace(/^\\n+|\\n+$/g, \"\");\n\n const lines = trimmed.length > 0 ? trimmed.split(\"\\n\").map((line) => line.replace(/\\t/g, \" \")) : [];\n return {\n kind: \"pre\",\n lines,\n language,\n textColor:\n getColorAttr(el, ctx.theme, [\"text-color\", \"color\"]) ??\n ctx.overrides?.codeText ??\n ctx.theme.markdown.codeText,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.overrides?.codeBorder ??\n ctx.theme.markdown.codeBorder,\n emptyColor: ctx.overrides?.codeEmpty ?? ctx.theme.markdown.codeEmpty,\n };\n });\n\n htmlTagRegistry.set(\"table\", (el, ctx) => {\n const rowElements: Element[] = [];\n for (const child of collectDirectChildElements(el)) {\n const tag = child.tagName.toLowerCase();\n if (tag === \"tr\") {\n rowElements.push(child);\n continue;\n }\n if (tag !== \"thead\" && tag !== \"tbody\" && tag !== \"tfoot\") continue;\n for (const row of collectDirectChildElements(child)) {\n if (row.tagName.toLowerCase() === \"tr\") rowElements.push(row);\n }\n }\n\n const rows = rowElements\n .map((rowEl) => {\n const inHead = rowEl.parentElement?.tagName.toLowerCase() === \"thead\";\n return collectDirectChildElements(rowEl)\n .filter((cell) => {\n const tag = cell.tagName.toLowerCase();\n return tag === \"th\" || tag === \"td\";\n })\n .map((cell) => ({\n text: normalizeHtmlText(cell.textContent ?? \"\"),\n header: inHead || cell.tagName.toLowerCase() === \"th\",\n }));\n })\n .filter((cells) => cells.length > 0);\n\n if (rows.length === 0) {\n return {\n kind: \"paragraph\",\n text: \"(empty table)\",\n color: ctx.theme.semantic.frameMuted,\n };\n }\n\n const first = rows[0]!;\n const hasHeader = first.some((cell) => cell.header);\n const headers = hasHeader\n ? first.map((cell, index) => cell.text || `col_${index + 1}`)\n : first.map((_, index) => `col_${index + 1}`);\n const bodyRows = rows\n .slice(hasHeader ? 1 : 0)\n .map((row) => headers.map((_, index) => row[index]?.text ?? \"\"));\n\n return {\n kind: \"table\",\n headers,\n rows: bodyRows,\n headerColor:\n getColorAttr(el, ctx.theme, [\"header-color\"]) ??\n ctx.overrides?.tableHeader ??\n ctx.theme.markdown.tableHeader,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.overrides?.tableBorder ??\n ctx.theme.markdown.tableBorder,\n };\n });\n\n htmlTagRegistry.set(\"button\", (el, ctx) => {\n const label = normalizeHtmlText(el.textContent ?? el.getAttribute(\"label\") ?? \"\");\n if (!label) return null;\n const id = controlActionId(el);\n return {\n kind: \"button\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"background\"]),\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n });\n\n htmlTagRegistry.set(\"summary\", (el, ctx) => {\n const parent = el.parentElement;\n const open = parent instanceof HTMLDetailsElement ? parent.open : false;\n const id = controlActionId(parent ?? el);\n const label = compactLabel(normalizeHtmlText(el.textContent ?? \"\") || \"details\");\n const text = `${open ? \"[-]\" : \"[+]\"} ${label}`;\n return {\n kind: \"button\",\n label: text,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"details\", (el, ctx) => {\n const gap = parseIntegerAttrs(el, [\"gap\"]) ?? 1;\n const children = ctx.compileChildren(el);\n if ((el as HTMLDetailsElement).open) {\n return stack(children, gap);\n }\n const summary = children[0];\n return stack(summary ? [summary] : [], gap);\n });\n\n htmlTagRegistry.set(\"input\", (el, ctx) => {\n const input = el as HTMLInputElement;\n const type = (input.type || \"text\").toLowerCase();\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n\n if (type === \"hidden\") return null;\n\n if (type === \"checkbox\") {\n const fallback = input.name || input.id || \"checkbox\";\n const label = compactLabel(firstAttr(el, [\"label\", \"aria-label\"]) ?? fallback);\n const state = input.checked ? \"[x]\" : \"[ ]\";\n const text = label ? `${state} ${label}` : state;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n }\n\n if (type === \"radio\") {\n const fallback = input.name || input.id || \"radio\";\n const label = compactLabel(firstAttr(el, [\"label\", \"aria-label\"]) ?? fallback);\n const state = input.checked ? \"(*)\" : \"( )\";\n const text = label ? `${state} ${label}` : state;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n }\n\n if (type === \"button\" || type === \"submit\" || type === \"reset\") {\n const label = compactLabel(\n normalizeHtmlText(input.value || firstAttr(el, [\"label\", \"aria-label\"]) || type),\n );\n return {\n kind: \"button\",\n label,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n }\n\n const value = compactLabel(input.value || input.placeholder || input.name || input.id || type);\n const text = type === \"file\" ? `[file] ${value}` : `[input] ${value}`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"textarea\", (el, ctx) => {\n const area = el as HTMLTextAreaElement;\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n const value = compactLabel(area.value || area.placeholder || area.name || area.id || \"textarea\");\n const text = `[textarea] ${value}`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"select\", (el, ctx) => {\n const select = el as HTMLSelectElement;\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n const selected = select.selectedOptions[0] ?? select.options[select.selectedIndex] ?? select.options[0];\n const selectedText = compactLabel(selected?.textContent ?? \"\");\n const label = compactLabel(select.name || select.id || \"select\");\n const text = selectedText ? `${label}: ${selectedText}` : `${label}: (none)`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"progress\", (el, ctx) => compileBarNode(el, ctx));\n\n htmlTagRegistry.set(\"a\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n const href = el.getAttribute(\"href\")?.trim();\n return {\n kind: \"link\",\n text,\n color: getColorAttr(el, ctx.theme, [\"color\"]) ?? ctx.theme.semantic.info,\n action: ctx.actionFromElement(el, { type: \"link\", href: href || undefined, text }),\n };\n });\n\n // -- Smart semantic inference --\n // <article title=\"...\"> → box\n htmlTagRegistry.set(\"article\", (el, ctx) => {\n const title = el.getAttribute(\"title\") ?? undefined;\n if (title) {\n return {\n kind: \"box\",\n title,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.theme.semantic.border,\n gap: parseIntegerAttrs(el, [\"gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n }\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 1);\n });\n\n // <figure values=\"...\"> → chart; otherwise container\n htmlTagRegistry.set(\"figure\", (el, ctx) => {\n const data = parseNumericListAttrs(el, [\"values\"]);\n if (data) return compileChartNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 0);\n });\n\n // <footer left=\"...\" right=\"...\"> → statusbar; otherwise container\n htmlTagRegistry.set(\"footer\", (el, ctx) => {\n const left = firstAttr(el, [\"left\"]);\n const right = firstAttr(el, [\"right\"]);\n if (left !== undefined || right !== undefined) return compileStatusbarNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 1);\n });\n\n // <nav> → hstack (navigation is inherently horizontal)\n htmlTagRegistry.set(\"nav\", (el, ctx) => ({\n kind: \"hstack\",\n gap: parseIntegerAttrs(el, [\"gap\"]) ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\"]),\n children: ctx.compileChildren(el),\n }));\n}\n\nfunction createCompileContext(options: CompileHtmlToIROptions): {\n compileElement: (el: Element) => TermIRNode | null;\n} {\n const containerGap = options.containerGap ?? 1;\n let ctx!: HtmlCompileContext;\n\n const compileNode = (node: ChildNode): TermIRNode | null => {\n if (node.nodeType === 3) {\n const text = normalizeHtmlText(node.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color: options.overrides?.paragraph ?? options.theme.markdown.paragraph,\n };\n }\n if (node.nodeType !== 1) return null;\n return compileElement(node as Element);\n };\n\n const compileChildren = (el: Element): TermIRNode[] => {\n const out: TermIRNode[] = [];\n for (const node of Array.from(el.childNodes)) {\n const next = compileNode(node);\n if (next) out.push(next);\n }\n return out;\n };\n\n const actionFromElement = (el: Element, seed: ActionSeed): TermAction => ({\n ...seed,\n key: actionKeyFromSeed(el, seed),\n tag: el.tagName.toLowerCase(),\n dataset: parseDataAttrs(el),\n sourceElement: el,\n });\n\n const compileElement = (el: Element): TermIRNode | null => {\n const tag = el.tagName.toLowerCase();\n const compiler = htmlTagRegistry.get(tag);\n if (compiler) return compiler(el, ctx);\n\n const layout = resolveLayout(el);\n const cols = parseIntegerAttrs(el, [\"cols\"]) ?? layout.cols;\n const gap = parseIntegerAttrs(el, [\"gap\"]) ?? layout.gap;\n const children = compileChildren(el);\n const effectiveChildren = (() => {\n if (children.length > 0) return children;\n if (!(el instanceof HTMLElement)) return children;\n if (!el.shadowRoot || el.shadowRoot.mode !== \"open\") return children;\n const shadowChildren: TermIRNode[] = [];\n for (const node of Array.from(el.shadowRoot.childNodes)) {\n const next = compileNode(node);\n if (next) shadowChildren.push(next);\n }\n return shadowChildren.length > 0 ? shadowChildren : children;\n })();\n\n if (cols || layout.display === \"grid\") {\n return {\n kind: \"grid\",\n cols: cols ?? 2,\n gap: gap ?? 1,\n rowGap: parseIntegerAttrs(el, [\"row-gap\"]) ?? 0,\n children: effectiveChildren,\n };\n }\n\n if (layout.display === \"flex\" && layout.direction !== \"column\") {\n return {\n kind: \"hstack\",\n gap: gap ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\"]),\n children: effectiveChildren,\n };\n }\n\n return stack(effectiveChildren, gap ?? containerGap);\n };\n\n ctx = {\n theme: options.theme,\n overrides: options.overrides,\n compileChildren,\n compileNode,\n actionFromElement,\n };\n\n return { compileElement };\n}\n\nregisterDefaultCompilers();\n\nexport function registerHtmlTagCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerDefaultCompilers();\n htmlTagRegistry.set(tag.trim().toLowerCase(), compiler);\n}\n\nexport function compileHtmlElementToIR(root: Element, options: CompileHtmlToIROptions): TermIRNode {\n registerDefaultCompilers();\n const { compileElement } = createCompileContext(options);\n return compileElement(root) ?? stack([], options.containerGap ?? 1);\n}\n\nexport function compileHtmlToIR(html: string, options: CompileHtmlToIROptions): TermIRNode {\n if (typeof DOMParser === \"undefined\") {\n throw new Error(\"DOMParser is unavailable; HTML compilation requires a DOM environment.\");\n }\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n return compileHtmlElementToIR(doc.body, options);\n}\n","import {\n blank,\n box,\n fromJsonNode,\n lines,\n table,\n vstack,\n type Column,\n type JsonNode,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport { isNumericValue, renderPrefixedText, wrapText } from \"./common\";\n\nconst JSON_NODE_TYPES = new Set([\n \"vstack\",\n \"hstack\",\n \"box\",\n \"lines\",\n \"separator\",\n \"blank\",\n \"table\",\n \"statusbar\",\n \"tabs\",\n \"bar\",\n \"text\",\n] as const satisfies readonly string[]);\n\nfunction isJsonNode(value: unknown): value is JsonNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" && JSON_NODE_TYPES.has(type as typeof JSON_NODE_TYPES extends Set<infer T> ? T : never);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveStyle(\n value: unknown,\n theme: Theme,\n): Omit<Exclude<Segment, string>, \"text\" | \"onClick\"> | undefined {\n if (typeof value === \"string\") return { color: theme.green };\n if (typeof value === \"number\") return { color: theme.yellow };\n if (typeof value === \"boolean\") {\n return { color: value ? theme.green : theme.red, bold: true };\n }\n if (value === null) return { color: theme.brightBlack, dim: true };\n return undefined;\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === undefined) return \"undefined\";\n return String(value);\n}\n\nfunction isPrimitiveJsonValue(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isPrimitiveArrayValue(value: unknown): value is unknown[] {\n return Array.isArray(value) && value.every((item) => isPrimitiveJsonValue(item));\n}\n\nfunction segmentLength(segment: Segment): number {\n return typeof segment === \"string\" ? segment.length : segment.text.length;\n}\n\nfunction lineLength(line: Line): number {\n let total = 0;\n for (const segment of line) total += segmentLength(segment);\n return total;\n}\n\nfunction primitiveSegment(value: unknown, theme: Theme): Segment {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n return style ? { text, ...style } : text;\n}\n\nfunction indentLayout(layout: LayoutFn, indent: number): LayoutFn {\n return (w) => {\n if (indent <= 0) return layout(w);\n const pad = \" \".repeat(indent);\n if (w <= indent) return layout(w);\n return layout(w - indent).map((line) => [pad, ...line]);\n };\n}\n\nfunction sectionHeader(title: string, theme: Theme): LayoutFn {\n return (w) => {\n const label = ` ${title} `;\n const remaining = Math.max(0, w - label.length);\n return [[\n { text: label, color: theme.brightBlack, bold: true },\n { text: \"─\".repeat(remaining), color: theme.border },\n ]];\n };\n}\n\nfunction isShallowSectionValue(value: unknown): boolean {\n if (isRecord(value)) {\n const vals = Object.values(value);\n return vals.every((item) => isPrimitiveJsonValue(item) || isPrimitiveArrayValue(item));\n }\n if (Array.isArray(value)) return value.every((item) => isPrimitiveJsonValue(item));\n return isPrimitiveJsonValue(value);\n}\n\nfunction stackWithSpacing(children: LayoutFn[]): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1) return children[0]!;\n\n const layouts: LayoutFn[] = [];\n children.forEach((child, index) => {\n if (index > 0) layouts.push(blank());\n layouts.push(child);\n });\n return vstack(...layouts);\n}\n\nfunction renderPrimitiveValue(value: unknown, theme: Theme): LayoutFn {\n return (w) => {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n const rows = text.split(\"\\n\");\n const out: Line[] = [];\n\n for (const row of rows) {\n const wrapped = wrapText(row, w);\n for (const chunk of wrapped) {\n out.push([style ? { text: chunk, ...style } : chunk]);\n }\n }\n\n return out.length > 0 ? out : [[{ text: \" \", dim: true }]];\n };\n}\n\nfunction renderStandalonePrimitiveArray(value: unknown[], theme: Theme): LayoutFn {\n return (w) => {\n if (value.length === 0) {\n return [[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]];\n }\n\n const out: Line[] = [];\n const digits = String(value.length).length;\n value.forEach((item, index) => {\n const prefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: prefix, color: theme.brightBlack },\n \" \".repeat(prefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n return out;\n };\n}\n\nfunction isTabularRecordArray(value: unknown[]): value is Record<string, unknown>[] {\n if (value.length === 0) return false;\n if (!value.every((item) => isRecord(item))) return false;\n\n const keys = Object.keys(value[0]!);\n if (keys.length < 2) return false;\n\n return value.every((row) => {\n const rowKeys = Object.keys(row);\n if (rowKeys.length !== keys.length) return false;\n if (!keys.every((key) => rowKeys.includes(key))) return false;\n return keys.every((key) => isPrimitiveJsonValue(row[key]));\n });\n}\n\nfunction renderTabularRecordArray(\n rows: Record<string, unknown>[],\n theme: Theme,\n): LayoutFn {\n const keys = Object.keys(rows[0] ?? {});\n\n const columns: Column[] = keys.map((key) => {\n const values = rows.map((row) => row[key]);\n const isBoolCol = values.every((v) => typeof v === \"boolean\");\n const isNumCol = values.every((v) => isNumericValue(v));\n\n return {\n key,\n title: key,\n align: isNumCol ? \"right\" : \"left\",\n headerColor: theme.cyan,\n color: isBoolCol\n ? (value: unknown) =>\n value === true ? theme.green : value === false ? theme.red : undefined\n : isNumCol\n ? theme.yellow\n : undefined,\n };\n });\n\n return table(columns, rows, {\n borderColor: theme.border,\n });\n}\n\nfunction renderArrayValue(value: unknown[], theme: Theme): LayoutFn {\n if (value.length === 0) {\n return lines([[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]]);\n }\n\n if (isTabularRecordArray(value)) {\n return renderTabularRecordArray(value, theme);\n }\n\n if (value.every((item) => isPrimitiveJsonValue(item))) {\n return renderStandalonePrimitiveArray(value, theme);\n }\n\n const children = value.map((item, index) =>\n renderJsonSection(`item ${index + 1}`, item, theme),\n );\n return stackWithSpacing(children);\n}\n\ntype PrimitiveRow =\n | { kind: \"primitive\"; key: string; value: unknown }\n | { kind: \"array\"; key: string; value: unknown[] };\n\nfunction renderPrimitiveRows(rows: PrimitiveRow[], theme: Theme): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const keyWidth = Math.max(...rows.map((row) => row.key.length), 0);\n\n for (const row of rows) {\n const keyPrefix = ` ${row.key.padEnd(keyWidth)}: `;\n\n if (row.kind === \"primitive\") {\n out.push(\n ...renderPrefixedText(\n primitiveText(row.value),\n w,\n { text: keyPrefix, color: theme.brightBlack },\n \" \".repeat(keyPrefix.length),\n primitiveStyle(row.value, theme),\n ),\n );\n continue;\n }\n\n if (row.value.length === 0) {\n out.push([\n { text: keyPrefix, color: theme.brightBlack },\n { text: \"(empty)\", color: theme.brightBlack, dim: true },\n ]);\n continue;\n }\n\n const inlineSegments: Segment[] = [];\n row.value.forEach((item, index) => {\n if (index > 0) inlineSegments.push({ text: \", \", color: theme.brightBlack });\n inlineSegments.push(primitiveSegment(item, theme));\n });\n const inlineLine: Line = [{ text: keyPrefix, color: theme.brightBlack }, ...inlineSegments];\n\n if (lineLength(inlineLine) <= w) {\n out.push(inlineLine);\n continue;\n }\n\n out.push([{ text: ` ${row.key}:`, color: theme.brightBlack }]);\n const digits = String(row.value.length).length;\n row.value.forEach((item, index) => {\n const listPrefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: listPrefix, color: theme.brightBlack },\n \" \".repeat(listPrefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n }\n\n return out;\n };\n}\n\nfunction renderObjectValue(value: Record<string, unknown>, theme: Theme): LayoutFn {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return lines([[{ text: \"(empty object)\", color: theme.brightBlack, dim: true }]]);\n }\n\n const groups: LayoutFn[] = [];\n let pendingRows: PrimitiveRow[] = [];\n const flushRows = () => {\n if (pendingRows.length === 0) return;\n groups.push(renderPrimitiveRows(pendingRows, theme));\n pendingRows = [];\n };\n\n for (const [key, item] of entries) {\n if (isPrimitiveJsonValue(item)) {\n pendingRows.push({ kind: \"primitive\", key, value: item });\n continue;\n }\n\n if (isPrimitiveArrayValue(item)) {\n pendingRows.push({ kind: \"array\", key, value: item });\n continue;\n }\n\n flushRows();\n groups.push(renderJsonSection(key, item, theme));\n }\n\n flushRows();\n\n return stackWithSpacing(groups);\n}\n\nfunction renderJsonContent(value: unknown, theme: Theme): LayoutFn {\n if (isRecord(value)) return renderObjectValue(value, theme);\n if (Array.isArray(value)) return renderArrayValue(value, theme);\n return renderPrimitiveValue(value, theme);\n}\n\nfunction renderJsonSection(title: string, value: unknown, theme: Theme): LayoutFn {\n if (Array.isArray(value) && isTabularRecordArray(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n if (isShallowSectionValue(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n return box(renderJsonContent(value, theme), {\n title,\n borderColor: theme.border,\n });\n}\n\nexport function fromJson(\n value: unknown,\n opts?: { theme?: Theme; title?: string },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n let parsedValue = value;\n\n if (typeof value === \"string\") {\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n }\n\n if (isJsonNode(parsedValue)) return fromJsonNode(parsedValue);\n\n const content = renderJsonContent(parsedValue, theme);\n if (opts?.title) {\n return box(content, {\n title: opts.title,\n borderColor: theme.border,\n });\n }\n return content;\n}\n","import {\n blank,\n box,\n lines,\n separator,\n table,\n type Column,\n type LayoutFn,\n type Line,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"./common\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\ntype MarkdownBlock =\n | { type: \"heading\"; level: number; text: string }\n | { type: \"paragraph\"; text: string }\n | { type: \"unordered-list\"; items: string[] }\n | { type: \"ordered-list\"; start: number; items: string[] }\n | { type: \"table\"; headers: string[]; rows: string[][] }\n | { type: \"code\"; language?: string; lines: string[] }\n | { type: \"quote\"; lines: string[] }\n | { type: \"separator\" };\n\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (/^#{1,6}\\s+/.test(trimmed)) return true;\n if (/^```/.test(trimmed)) return true;\n if (/^>\\s?/.test(trimmed)) return true;\n if (/^[-*+]\\s+/.test(trimmed)) return true;\n if (/^\\d+\\.\\s+/.test(trimmed)) return true;\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n return /^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed);\n}\n\nfunction parsePipeCells(line: string): string[] | null {\n const trimmed = line.trim();\n if (!trimmed.includes(\"|\")) return null;\n\n let core = trimmed;\n if (core.startsWith(\"|\")) core = core.slice(1);\n if (core.endsWith(\"|\")) core = core.slice(0, -1);\n const cells = core.split(\"|\").map((cell) => cell.trim());\n return cells.length >= 2 ? cells : null;\n}\n\nfunction isTableDividerLine(line: string): boolean {\n const cells = parsePipeCells(line);\n if (!cells) return false;\n return cells.every((cell) => /^:?-{3,}:?$/.test(cell));\n}\n\nfunction parseMarkdown(markdown: string): MarkdownBlock[] {\n const rows = markdown.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: MarkdownBlock[] = [];\n\n let i = 0;\n while (i < rows.length) {\n const raw = rows[i] ?? \"\";\n const trimmed = raw.trim();\n\n if (!trimmed) {\n i += 1;\n continue;\n }\n\n const codeStart = trimmed.match(/^```([\\w+-]+)?\\s*$/);\n if (codeStart) {\n i += 1;\n const codeLines: string[] = [];\n while (i < rows.length && !(rows[i] ?? \"\").trim().startsWith(\"```\")) {\n codeLines.push((rows[i] ?? \"\").replace(/\\t/g, \" \"));\n i += 1;\n }\n if (i < rows.length) i += 1;\n blocks.push({\n type: \"code\",\n language: codeStart[1],\n lines: codeLines,\n });\n continue;\n }\n\n const heading = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (heading) {\n blocks.push({\n type: \"heading\",\n level: heading[1]!.length,\n text: heading[2]!.trim(),\n });\n i += 1;\n continue;\n }\n\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n if (/^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed)) {\n blocks.push({ type: \"separator\" });\n i += 1;\n continue;\n }\n\n const maybeHeaderCells = parsePipeCells(raw);\n const nextLine = rows[i + 1] ?? \"\";\n if (maybeHeaderCells && isTableDividerLine(nextLine)) {\n const headers = maybeHeaderCells;\n i += 2; // consume header + divider\n const dataRows: string[][] = [];\n while (i < rows.length) {\n const rowCells = parsePipeCells(rows[i] ?? \"\");\n if (!rowCells) break;\n const normalized = headers.map((_, idx) => rowCells[idx] ?? \"\");\n dataRows.push(normalized);\n i += 1;\n }\n blocks.push({ type: \"table\", headers, rows: dataRows });\n continue;\n }\n\n if (/^>\\s?/.test(trimmed)) {\n const quoteLines: string[] = [];\n while (i < rows.length) {\n const m = (rows[i] ?? \"\").match(/^\\s*>\\s?(.*)$/);\n if (!m) break;\n quoteLines.push(m[1]!);\n i += 1;\n }\n blocks.push({ type: \"quote\", lines: quoteLines });\n continue;\n }\n\n const ulStart = trimmed.match(/^[-*+]\\s+(.*)$/);\n if (ulStart) {\n const items: string[] = [];\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^[-*+]\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"unordered-list\", items });\n continue;\n }\n\n const olStart = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (olStart) {\n const items: string[] = [];\n const start = Number(olStart[1]);\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^\\d+\\.\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"ordered-list\", start, items });\n continue;\n }\n\n const paragraphRows: string[] = [trimmed];\n i += 1;\n while (i < rows.length) {\n const nextRaw = rows[i] ?? \"\";\n const next = (rows[i] ?? \"\").trim();\n const maybeTableStart =\n parsePipeCells(nextRaw) !== null && isTableDividerLine(rows[i + 1] ?? \"\");\n if (!next || isBlockStart(next) || maybeTableStart) break;\n paragraphRows.push(next);\n i += 1;\n }\n blocks.push({ type: \"paragraph\", text: paragraphRows.join(\" \") });\n }\n\n return blocks;\n}\n\nfunction renderMarkdownBlock(\n block: MarkdownBlock,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const md = theme.markdown;\n\n switch (block.type) {\n case \"heading\":\n return (w) =>\n renderPrefixedText(\n block.text,\n w,\n {\n text: \"#\".repeat(block.level) + \" \",\n color: overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(block.level + 1),\n {\n color: headingColor(block.level, theme, overrides),\n bold: block.level <= (overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n\n case \"paragraph\":\n return (w) =>\n wrapText(block.text, w).map((line) => [\n { text: line, color: overrides?.paragraph ?? md.paragraph },\n ]);\n\n case \"unordered-list\":\n return (w) => {\n const out: Line[] = [];\n for (const item of block.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out;\n };\n\n case \"ordered-list\":\n return (w) => {\n const out: Line[] = [];\n const lastNumber = block.start + block.items.length - 1;\n const digits = String(Math.max(block.start, lastNumber)).length;\n for (let i = 0; i < block.items.length; i++) {\n const n = String(block.start + i).padStart(digits, \" \");\n const prefix = {\n text: `${n}. `,\n color: overrides?.orderedMarker ?? md.orderedMarker,\n };\n out.push(...renderPrefixedText(block.items[i]!, w, prefix, \" \".repeat(digits + 2)));\n }\n return out;\n };\n\n case \"table\": {\n const keys = block.headers.map((_, i) => `c${i}`);\n const columns: Column[] = block.headers.map((header, i) => ({\n key: keys[i]!,\n title: header || `col_${i + 1}`,\n align: block.rows.every((row) => isNumericValue(row[i] ?? \"\")) ? \"right\" : \"left\",\n headerColor: overrides?.tableHeader ?? md.tableHeader,\n }));\n\n const data = block.rows.map((row) => {\n const out: Record<string, string> = {};\n keys.forEach((key, i) => {\n out[key] = row[i] ?? \"\";\n });\n return out;\n });\n\n return table(columns, data, {\n borderColor: overrides?.tableBorder ?? md.tableBorder,\n });\n }\n\n case \"quote\":\n return (w) => {\n const out: Line[] = [];\n for (const quoteLine of block.lines) {\n out.push(\n ...renderPrefixedText(\n quoteLine,\n w,\n { text: \"▌ \", color: overrides?.quoteMarker ?? md.quoteMarker },\n \" \",\n { color: overrides?.quoteText ?? md.quoteText, dim: true },\n ),\n );\n }\n return out;\n };\n\n case \"separator\":\n return separator(overrides?.separator ?? md.separator);\n\n case \"code\": {\n const codeSource = block.lines.join(\"\\n\");\n return box(\n lines(\n block.lines.length > 0\n ? block.lines.map((line) => [{ text: line || \" \", color: overrides?.codeText ?? md.codeText }])\n : [[{ text: \" \", color: overrides?.codeEmpty ?? md.codeEmpty, dim: true }]],\n ),\n {\n title: block.language ? `code:${block.language}` : \"code\",\n borderColor: overrides?.codeBorder ?? md.codeBorder,\n action: {\n label: \"cp\",\n onClick: () => navigator.clipboard.writeText(codeSource),\n color: theme.semantic.frameMuted,\n },\n },\n );\n }\n }\n}\n\nexport function fromMarkdown(\n markdown: string,\n opts?: { theme?: Theme; overrides?: MarkdownThemeOverrides },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const blocks = parseMarkdown(markdown);\n const layouts = blocks.map((block) => renderMarkdownBlock(block, theme, opts?.overrides));\n\n return (w) => {\n if (layouts.length === 0) return blank()(w);\n\n const out: Line[] = [];\n layouts.forEach((layout, index) => {\n if (index > 0) out.push(...blank()(w));\n out.push(...layout(w));\n });\n return out;\n };\n}\n","import {\n bar as barText,\n blank,\n box,\n chart,\n divider,\n grid,\n hstack,\n lines,\n separator,\n statusbar,\n table,\n vstack,\n type Column,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { fromJson } from \"../document/json\";\nimport { fromMarkdown } from \"../document/markdown\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport type { TermAction, TermIRNode } from \"./ir\";\n\nexport type LayoutFromIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: TermAction) => void;\n};\n\nfunction stackLayouts(children: LayoutFn[], gap: number): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1 && gap <= 0) return children[0]!;\n if (gap <= 0) return vstack(...children);\n\n const expanded: LayoutFn[] = [];\n for (let i = 0; i < children.length; i++) {\n if (i > 0) {\n for (let j = 0; j < gap; j++) expanded.push(blank());\n }\n expanded.push(children[i]!);\n }\n return vstack(...expanded);\n}\n\nfunction paragraphLayout(text: string, color?: string): LayoutFn {\n return (w) => {\n const wrapped = wrapText(text, w);\n if (!color) return wrapped.map((line) => [line]);\n return wrapped.map((line) => [{ text: line, color }]);\n };\n}\n\nfunction headingLayout(\n node: Extract<TermIRNode, { kind: \"heading\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const md = options.theme.markdown;\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"#\".repeat(node.level) + \" \",\n color: node.markerColor ?? options.overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(node.level + 1),\n {\n color: headingColor(node.level, options.theme, options.overrides),\n bold: node.level <= (options.overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n}\n\nfunction listLayout(\n node: Extract<TermIRNode, { kind: \"list\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const md = options.theme.markdown;\n\n if (node.ordered) {\n const digits = String(node.start + node.items.length - 1).length;\n for (let index = 0; index < node.items.length; index++) {\n const item = node.items[index]!;\n const n = String(node.start + index).padStart(digits, \" \");\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: `${n}. `, color: options.overrides?.orderedMarker ?? md.orderedMarker },\n \" \".repeat(digits + 2),\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n }\n\n for (const item of node.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: options.overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n };\n}\n\nfunction blockquoteLayout(\n node: Extract<TermIRNode, { kind: \"blockquote\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"▌ \",\n color: node.markerColor ?? options.overrides?.quoteMarker ?? options.theme.markdown.quoteMarker,\n },\n \" \",\n {\n color: node.color ?? options.overrides?.quoteText ?? options.theme.markdown.quoteText,\n dim: true,\n },\n );\n}\n\nfunction preLayout(\n node: Extract<TermIRNode, { kind: \"pre\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return box(\n lines(\n node.lines.length > 0\n ? node.lines.map((line) => [{ text: line || \" \", color: node.textColor }])\n : [[{ text: \" \", color: node.emptyColor, dim: true }]],\n ),\n {\n title: node.language ? `code:${node.language}` : \"code\",\n borderColor: node.borderColor,\n },\n );\n}\n\nfunction tableLayout(node: Extract<TermIRNode, { kind: \"table\" }>): LayoutFn {\n if (node.headers.length === 0) return paragraphLayout(\"(empty table)\");\n\n const keys = node.headers.map((_, index) => `c${index}`);\n const columns: Column<Record<string, string>>[] = node.headers.map((header, index) => ({\n key: keys[index]!,\n title: header,\n align: node.rows.every((row) => isNumericValue(row[index] ?? \"\")) ? \"right\" : \"left\",\n headerColor: node.headerColor,\n }));\n\n const rows = node.rows.map((row) => {\n const data: Record<string, string> = {};\n for (let index = 0; index < keys.length; index++) {\n data[keys[index]!] = row[index] ?? \"\";\n }\n return data;\n });\n\n return table(columns, rows, { borderColor: node.borderColor });\n}\n\nfunction setNativeInputValue(input: HTMLInputElement, value: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, \"value\");\n if (!descriptor?.set) throw new Error(\"Missing HTMLInputElement.value setter\");\n descriptor.set.call(input, value);\n}\n\nfunction setNativeTextAreaValue(area: HTMLTextAreaElement, value: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, \"value\");\n if (!descriptor?.set) throw new Error(\"Missing HTMLTextAreaElement.value setter\");\n descriptor.set.call(area, value);\n}\n\nfunction dispatchInputAndChange(el: HTMLElement): void {\n el.dispatchEvent(new Event(\"input\", { bubbles: true, cancelable: true, composed: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true, cancelable: true, composed: true }));\n}\n\nfunction editInputValue(input: HTMLInputElement): void {\n const next = window.prompt(input.name || input.id || \"value\", input.value);\n if (next === null || next === input.value) return;\n setNativeInputValue(input, next);\n dispatchInputAndChange(input);\n}\n\nfunction editTextAreaValue(area: HTMLTextAreaElement): void {\n const next = window.prompt(area.name || area.id || \"value\", area.value);\n if (next === null || next === area.value) return;\n setNativeTextAreaValue(area, next);\n dispatchInputAndChange(area);\n}\n\nfunction cycleSelect(select: HTMLSelectElement): void {\n const enabledOptions = Array.from(select.options).filter((option) => !option.disabled);\n if (enabledOptions.length === 0) return;\n\n const current = select.selectedOptions[0];\n const currentIndex = current ? enabledOptions.indexOf(current) : -1;\n const nextOption = enabledOptions[(currentIndex + 1 + enabledOptions.length) % enabledOptions.length]!;\n select.value = nextOption.value;\n dispatchInputAndChange(select);\n}\n\nfunction activateSourceElement(sourceElement: Element): void {\n if (sourceElement instanceof HTMLInputElement) {\n if (sourceElement.disabled) return;\n const type = sourceElement.type.toLowerCase();\n if (\n type === \"checkbox\" ||\n type === \"radio\" ||\n type === \"button\" ||\n type === \"submit\" ||\n type === \"reset\" ||\n type === \"file\" ||\n type === \"color\" ||\n type === \"date\" ||\n type === \"datetime-local\" ||\n type === \"month\" ||\n type === \"time\" ||\n type === \"week\"\n ) {\n sourceElement.click();\n return;\n }\n editInputValue(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLTextAreaElement) {\n if (sourceElement.disabled) return;\n editTextAreaValue(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLSelectElement) {\n if (sourceElement.disabled) return;\n cycleSelect(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLDetailsElement) {\n sourceElement.open = !sourceElement.open;\n sourceElement.dispatchEvent(new Event(\"toggle\", { bubbles: true, cancelable: false, composed: true }));\n return;\n }\n\n if (sourceElement instanceof HTMLElement) {\n sourceElement.click();\n }\n}\n\nfunction actionHandler(action: TermAction, options: LayoutFromIROptions): (() => void) | undefined {\n if (!options.onAction && !action.sourceElement) return undefined;\n return () => {\n if (action.sourceElement) activateSourceElement(action.sourceElement);\n options.onAction?.(action);\n };\n}\n\nfunction buttonLayout(\n node: Extract<TermIRNode, { kind: \"button\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const color = node.color ?? options.theme.components.button.fg;\n const bg = node.bg ?? options.theme.components.button.bg;\n const segment: Segment = {\n text: `[ ${node.label} ]`,\n color,\n bg,\n interactionId: node.action.key,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction linkLayout(\n node: Extract<TermIRNode, { kind: \"link\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const segment: Segment = {\n text: node.text,\n color: node.color ?? options.theme.semantic.info,\n interactionId: node.action.key,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction barLayout(node: Extract<TermIRNode, { kind: \"bar\" }>): LayoutFn {\n return lines((w) => {\n const max = Number.isFinite(node.max) && node.max > 0 ? node.max : 100;\n const value = Number.isFinite(node.value) ? node.value : 0;\n const label = node.label ? `${node.label} ` : \"\";\n const showPercent = node.showPercent !== false;\n const percent = Math.max(0, Math.min(100, Math.round((value / max) * 100)));\n const percentText = showPercent ? ` ${percent}%` : \"\";\n\n const available = Math.max(1, w - label.length - percentText.length);\n const barWidth = Math.max(1, Math.min(node.width ?? available, available));\n\n const line: Line = [];\n if (label) line.push(label);\n line.push({ text: barText(value, max, barWidth), color: node.color });\n if (percentText) line.push(percentText);\n return [line];\n });\n}\n\nfunction childrenToLayouts(children: TermIRNode[], options: LayoutFromIROptions): LayoutFn[] {\n const out: LayoutFn[] = [];\n for (const child of children) {\n out.push(layoutFromIR(child, options));\n }\n return out;\n}\n\nexport function layoutFromIR(node: TermIRNode, options: LayoutFromIROptions): LayoutFn {\n switch (node.kind) {\n case \"stack\":\n return stackLayouts(childrenToLayouts(node.children, options), node.gap);\n case \"hstack\":\n return hstack(childrenToLayouts(node.children, options), {\n gap: node.gap,\n widths: node.widths,\n });\n case \"grid\":\n return grid(childrenToLayouts(node.children, options), {\n cols: node.cols,\n gap: node.gap,\n rowGap: node.rowGap,\n });\n case \"box\": {\n const content = stackLayouts(childrenToLayouts(node.children, options), node.gap);\n return box(content, {\n title: node.title,\n borderColor: node.borderColor ?? options.theme.semantic.border,\n });\n }\n case \"blank\":\n return blank(node.lines);\n case \"separator\":\n return separator(node.color ?? options.theme.semantic.border, node.char);\n case \"divider\":\n return divider(node.label, {\n color: node.color ?? options.theme.semantic.border,\n char: node.char,\n labelColor: node.labelColor,\n });\n case \"paragraph\":\n return paragraphLayout(node.text, node.color);\n case \"heading\":\n return headingLayout(node, options);\n case \"list\":\n return listLayout(node, options);\n case \"blockquote\":\n return blockquoteLayout(node, options);\n case \"pre\":\n return preLayout(node, options);\n case \"markdown\":\n return fromMarkdown(node.value, {\n theme: options.theme,\n overrides: options.overrides,\n });\n case \"json\":\n return fromJson(node.value, {\n theme: options.theme,\n title: node.title,\n });\n case \"chart\":\n return chart(node.data, {\n height: node.height,\n color: node.color,\n axisColor: node.axisColor,\n fill: node.fill,\n });\n case \"statusbar\":\n return statusbar(\n [{ text: node.left }],\n [{ text: node.right }],\n {\n bg: node.bg,\n color: node.color,\n theme: options.theme,\n },\n );\n case \"bar\":\n return barLayout(node);\n case \"table\":\n return tableLayout(node);\n case \"button\":\n return buttonLayout(node, options);\n case \"link\":\n return linkLayout(node, options);\n default:\n return blank();\n }\n}\n","import { compileHtmlElementToIR, compileHtmlToIR, layoutFromIR, registerHtmlTagCompiler } from \"../core\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\nimport type { TermAction } from \"../core\";\nimport type { HtmlTagCompiler } from \"../core\";\n\nexport type HtmlAction = TermAction;\n\nexport type HtmlRenderOptions = {\n theme?: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: HtmlAction) => void;\n};\n\nexport type { HtmlTagCompiler };\n\nexport function registerHtmlCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerHtmlTagCompiler(tag, compiler);\n}\n\nexport function fromHtmlElement(\n root: Element,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const ir = compileHtmlElementToIR(root, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n\nexport function fromHtml(\n html: string,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n\n if (typeof DOMParser === \"undefined\") {\n throw new Error(\"DOMParser is unavailable; fromHtml requires a DOM environment.\");\n }\n\n const ir = compileHtmlToIR(html, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n","import { fromHtml, fromHtmlElement } from \"./html\";\nimport { fromJson } from \"./json\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nimport type { Theme } from \"../termui\";\n\nexport { fromMarkdown } from \"./markdown\";\nexport { fromHtml, fromHtmlElement };\nexport { registerHtmlCompiler } from \"./html\";\nexport { fromJson } from \"./json\";\nexport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nexport type { HtmlAction, HtmlRenderOptions, HtmlTagCompiler } from \"./html\";\n\nexport function fromDocument(\n source: DocumentSource,\n opts?: {\n theme?: Theme;\n jsonTitle?: string;\n markdownOverrides?: MarkdownThemeOverrides;\n },\n) {\n if (source.format === \"markdown\") {\n return fromMarkdown(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n if (source.format === \"html\") {\n return fromHtml(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n return fromJson(source.value, {\n theme: opts?.theme,\n title: opts?.jsonTitle,\n });\n}\n","import {\n getScrollRegionMeta,\n type Block,\n type Line,\n type Segment,\n type ScrollRegionMeta,\n type Theme,\n} from \"./termui\";\n\nconst ACTION_ID_ATTR = \"data-termui-action-id\";\n\ntype RenderUnit =\n | {\n kind: \"line\";\n line: Line;\n }\n | {\n kind: \"scroll\";\n lines: Line[];\n meta: ScrollRegionMeta;\n };\n\ntype RenderState = {\n actions: Map<string, () => void>;\n};\n\ntype ScrollRegionElement = HTMLDivElement & {\n __termuiScrollMeta?: ScrollRegionMeta;\n __termuiWheelBound?: true;\n};\n\nconst renderStateByRoot = new WeakMap<HTMLElement, RenderState>();\n\nfunction sameScrollMeta(a: ScrollRegionMeta, b: ScrollRegionMeta): boolean {\n return (\n a.onScroll === b.onScroll &&\n a.totalLines === b.totalLines &&\n a.maxHeight === b.maxHeight &&\n a.offset === b.offset\n );\n}\n\nfunction buildRenderUnits(block: Block): RenderUnit[] {\n const units: RenderUnit[] = [];\n let scrollLines: Line[] = [];\n let scrollMeta: ScrollRegionMeta | undefined;\n\n const flushScroll = (): void => {\n if (!scrollMeta || scrollLines.length === 0) return;\n units.push({ kind: \"scroll\", lines: scrollLines, meta: scrollMeta });\n scrollLines = [];\n scrollMeta = undefined;\n };\n\n for (const line of block) {\n const meta = getScrollRegionMeta(line);\n if (!meta) {\n flushScroll();\n units.push({ kind: \"line\", line });\n continue;\n }\n if (!scrollMeta || !sameScrollMeta(scrollMeta, meta)) {\n flushScroll();\n scrollMeta = meta;\n }\n scrollLines.push(line);\n }\n\n flushScroll();\n return units;\n}\n\nfunction interactiveElement(target: EventTarget | null, root: HTMLElement): HTMLElement | null {\n if (!(target instanceof Node)) return null;\n const element = target instanceof Element ? target : target.parentElement;\n if (!element) return null;\n const interactive = element.closest<HTMLElement>(`[${ACTION_ID_ATTR}]`);\n if (!interactive || !root.contains(interactive)) return null;\n return interactive;\n}\n\nfunction activateInteraction(state: RenderState, element: HTMLElement): void {\n const actionId = element.getAttribute(ACTION_ID_ATTR);\n if (!actionId) throw new Error(\"Interactive segment is missing an action id.\");\n const handler = state.actions.get(actionId);\n if (!handler) throw new Error(`Missing handler for action \"${actionId}\".`);\n handler();\n}\n\nfunction ensureRenderState(target: HTMLElement): RenderState {\n const existing = renderStateByRoot.get(target);\n if (existing) return existing;\n\n const state: RenderState = { actions: new Map() };\n\n target.addEventListener(\"pointerdown\", (event) => {\n if (event.button !== 0) return;\n const element = interactiveElement(event.target, target);\n if (!element) return;\n event.preventDefault();\n element.focus();\n activateInteraction(state, element);\n });\n\n target.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n const element =\n interactiveElement(event.target, target) ??\n interactiveElement(document.activeElement, target);\n if (!element) return;\n event.preventDefault();\n activateInteraction(state, element);\n });\n\n renderStateByRoot.set(target, state);\n return state;\n}\n\nfunction createOrReplaceChildDiv(\n parent: HTMLElement,\n index: number,\n className: string,\n): HTMLDivElement {\n const existing = parent.children[index];\n if (existing instanceof HTMLDivElement && existing.className === className) return existing;\n const div = document.createElement(\"div\");\n div.className = className;\n if (existing) parent.replaceChild(div, existing);\n else parent.appendChild(div);\n return div;\n}\n\nfunction applySegmentStyle(span: HTMLSpanElement, seg: Exclude<Segment, string>, theme: Theme): void {\n span.textContent = seg.text;\n if (seg.inverted) {\n span.style.color = seg.color ?? theme.semantic.inverseFg;\n span.style.backgroundColor = seg.bg ?? theme.semantic.inverseBg;\n } else {\n span.style.color = seg.color ?? \"\";\n span.style.backgroundColor = seg.bg ?? \"\";\n }\n span.style.fontWeight = seg.bold ? \"bold\" : \"\";\n span.style.opacity = seg.dim ? \"0.6\" : \"\";\n span.style.animation = seg.blink ? \"bk 1s step-end infinite\" : \"\";\n span.style.userSelect = seg.noSelect ? \"none\" : \"\";\n}\n\nfunction clearSegmentStyle(span: HTMLSpanElement, text: string): void {\n span.textContent = text;\n span.style.color = \"\";\n span.style.backgroundColor = \"\";\n span.style.fontWeight = \"\";\n span.style.opacity = \"\";\n span.style.animation = \"\";\n span.style.userSelect = \"\";\n}\n\nfunction patchSegment(\n span: HTMLSpanElement,\n seg: Segment,\n theme: Theme,\n actions: Map<string, () => void>,\n fallbackId: string,\n): void {\n if (typeof seg === \"string\") {\n clearSegmentStyle(span, seg);\n span.classList.remove(\"termui-clickable\");\n span.removeAttribute(\"role\");\n span.removeAttribute(\"tabindex\");\n span.removeAttribute(ACTION_ID_ATTR);\n return;\n }\n\n applySegmentStyle(span, seg, theme);\n\n if (!seg.onClick) {\n span.classList.remove(\"termui-clickable\");\n span.removeAttribute(\"role\");\n span.removeAttribute(\"tabindex\");\n span.removeAttribute(ACTION_ID_ATTR);\n return;\n }\n\n const actionId = seg.interactionId ?? fallbackId;\n if (actions.has(actionId)) {\n throw new Error(`Duplicate interaction id \"${actionId}\" in rendered block.`);\n }\n actions.set(actionId, seg.onClick);\n span.classList.add(\"termui-clickable\");\n span.setAttribute(\"role\", \"button\");\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(ACTION_ID_ATTR, actionId);\n}\n\nfunction patchLine(\n lineDiv: HTMLDivElement,\n line: Line,\n theme: Theme,\n actions: Map<string, () => void>,\n lineKey: string,\n): void {\n for (let segmentIndex = 0; segmentIndex < line.length; segmentIndex++) {\n const seg = line[segmentIndex]!;\n const current = lineDiv.children[segmentIndex];\n let span: HTMLSpanElement;\n if (current instanceof HTMLSpanElement) {\n span = current;\n } else {\n const next = document.createElement(\"span\");\n if (current) lineDiv.replaceChild(next, current);\n else lineDiv.appendChild(next);\n span = next;\n }\n patchSegment(span, seg, theme, actions, `${lineKey}:s${segmentIndex}`);\n }\n\n while (lineDiv.children.length > line.length) {\n lineDiv.lastElementChild?.remove();\n }\n}\n\nfunction bindScrollWheel(region: ScrollRegionElement): void {\n if (region.__termuiWheelBound) return;\n region.addEventListener(\n \"wheel\",\n (event) => {\n const meta = region.__termuiScrollMeta;\n if (!meta) throw new Error(\"Scroll region received wheel input without metadata.\");\n event.preventDefault();\n const step = event.deltaY > 0 ? 1 : -1;\n const maxOffset = Math.max(0, meta.totalLines - meta.maxHeight);\n const next = Math.min(maxOffset, Math.max(0, meta.offset + step));\n if (next !== meta.offset) meta.onScroll(next);\n },\n { passive: false },\n );\n region.__termuiWheelBound = true;\n}\n\nfunction patchScrollRegion(\n region: ScrollRegionElement,\n lines: Line[],\n meta: ScrollRegionMeta,\n theme: Theme,\n actions: Map<string, () => void>,\n regionKey: string,\n): void {\n region.__termuiScrollMeta = meta;\n bindScrollWheel(region);\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex]!;\n const lineDiv = createOrReplaceChildDiv(region, lineIndex, \"termui-line\");\n patchLine(lineDiv, line, theme, actions, `${regionKey}:l${lineIndex}`);\n }\n\n while (region.children.length > lines.length) {\n region.lastElementChild?.remove();\n }\n}\n\nfunction patchRoot(\n target: HTMLElement,\n units: RenderUnit[],\n theme: Theme,\n actions: Map<string, () => void>,\n): void {\n for (let unitIndex = 0; unitIndex < units.length; unitIndex++) {\n const unit = units[unitIndex]!;\n if (unit.kind === \"line\") {\n const lineDiv = createOrReplaceChildDiv(target, unitIndex, \"termui-line\");\n patchLine(lineDiv, unit.line, theme, actions, `u${unitIndex}:l0`);\n continue;\n }\n\n const region = createOrReplaceChildDiv(target, unitIndex, \"termui-scroll-region\") as ScrollRegionElement;\n patchScrollRegion(region, unit.lines, unit.meta, theme, actions, `u${unitIndex}`);\n }\n\n while (target.children.length > units.length) {\n target.lastElementChild?.remove();\n }\n}\n\nexport function renderTermBlock(target: HTMLElement, block: Block, theme: Theme): void {\n const state = ensureRenderState(target);\n const actions = new Map<string, () => void>();\n const units = buildRenderUnits(block);\n patchRoot(target, units, theme, actions);\n state.actions = actions;\n}\n","import { renderTermBlock } from \"./dom-render\";\nimport {\n fromHtml,\n fromHtmlElement,\n fromJson,\n fromMarkdown,\n type HtmlAction,\n} from \"./document\";\nimport { defaultThemeSpec, resolveTheme, themeToCssVars } from \"./theme\";\nimport type { LayoutFn, Theme, ThemeMode, ThemePreference } from \"./termui\";\n\nconst DEFAULT_COLS = 80;\nconst PROBE_SAMPLE = \"0\".repeat(120);\ntype SourceFormat = \"html\" | \"markdown\" | \"json\";\nconst TERM_UI_CSS = `\n:host {\n display: block;\n}\n@keyframes bk { 50% { opacity: 0 } }\n.termui-frame {\n --cell-h: 1.15em;\n --termui-bg: #0c0c0c;\n --termui-fg: #cccccc;\n font-family: \"Iosevka Term\", \"JetBrains Mono\", Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: inherit;\n line-height: var(--cell-h);\n letter-spacing: inherit;\n white-space: pre;\n overflow: clip;\n background: var(--termui-bg);\n color: var(--termui-fg);\n user-select: text;\n}\n.termui-root {\n white-space: pre;\n}\n.termui-line {\n line-height: var(--cell-h);\n min-height: var(--cell-h);\n}\n.termui-clickable {\n cursor: pointer;\n}\n.termui-clickable:focus-visible {\n outline: 1px solid var(--termui-info, currentColor);\n outline-offset: 1px;\n}\n.termui-scroll-region {\n overflow: hidden;\n}\n.termui-probe {\n font: inherit;\n white-space: pre;\n visibility: hidden;\n position: absolute;\n pointer-events: none;\n inset: -9999px auto auto -9999px;\n}\n`;\n\nexport type TermUIActionEvent = CustomEvent<HtmlAction>;\n\nfunction readSystemMode(): ThemeMode {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nfunction parseMode(raw: string | null): ThemePreference {\n if (!raw) return \"system\";\n const mode = raw.trim().toLowerCase();\n if (mode === \"light\" || mode === \"dark\" || mode === \"system\") return mode;\n throw new Error(`Invalid mode \"${raw}\". Expected \"light\", \"dark\", or \"system\".`);\n}\n\nfunction parseWidth(raw: string | null): number | undefined {\n if (!raw) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n throw new Error(`Invalid width \"${raw}\". Expected a positive integer.`);\n}\n\nfunction parseSourceFormat(raw: string | null): SourceFormat {\n if (!raw) return \"html\";\n const format = raw.trim().toLowerCase();\n if (format === \"markdown\" || format === \"json\" || format === \"html\") return format;\n throw new Error(`Invalid source-format \"${raw}\". Expected \"html\", \"markdown\", or \"json\".`);\n}\n\nfunction readScriptText(host: Element, types: string[]): string | undefined {\n for (const type of types) {\n const node = host.querySelector(`script[type=\"${type}\"]`);\n if (!node) continue;\n return node.textContent ?? \"\";\n }\n return undefined;\n}\n\nfunction parseJsonSource(raw: string): unknown {\n const text = raw.trim();\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw new Error(`Invalid JSON source: ${message}`);\n }\n}\n\nfunction actionEvent(action: HtmlAction): TermUIActionEvent {\n return new CustomEvent<HtmlAction>(\"termui-action\", {\n detail: action,\n bubbles: true,\n composed: true,\n });\n}\n\nexport class TermUIElement extends HTMLElement {\n static observedAttributes = [\"width\", \"mode\", \"source\", \"source-format\", \"json-title\"] as const;\n\n private readonly frame: HTMLDivElement;\n private readonly root: HTMLDivElement;\n private layoutOverride?: LayoutFn;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private observedShadowRoots = new WeakSet<ShadowRoot>();\n private mediaQuery?: MediaQueryList;\n private mediaQueryListener?: (event: MediaQueryListEvent) => void;\n private renderQueued = false;\n private renderFrameId: number | undefined;\n\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = TERM_UI_CSS;\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"termui-frame\";\n this.root = document.createElement(\"div\");\n this.root.className = \"termui-root\";\n this.frame.appendChild(this.root);\n shadow.append(style, this.frame);\n }\n\n connectedCallback(): void {\n this.resizeObserver = new ResizeObserver(() => this.queueRender());\n this.resizeObserver.observe(this);\n\n this.mutationObserver = new MutationObserver(() => {\n this.observeOpenShadowRoots();\n this.queueRender();\n });\n this.mutationObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n this.observeOpenShadowRoots();\n\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n this.mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.mediaQueryListener = () => {\n if (parseMode(this.getAttribute(\"mode\")) === \"system\") this.queueRender();\n };\n this.mediaQuery.addEventListener(\"change\", this.mediaQueryListener);\n }\n\n this.queueRender();\n }\n\n disconnectedCallback(): void {\n if (this.renderFrameId !== undefined) {\n cancelAnimationFrame(this.renderFrameId);\n this.renderFrameId = undefined;\n this.renderQueued = false;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n this.observedShadowRoots = new WeakSet<ShadowRoot>();\n if (this.mediaQuery && this.mediaQueryListener) {\n this.mediaQuery.removeEventListener(\"change\", this.mediaQueryListener);\n }\n this.mediaQuery = undefined;\n this.mediaQueryListener = undefined;\n }\n\n attributeChangedCallback(): void {\n this.queueRender();\n }\n\n render(): void {\n this.queueRender();\n }\n\n get layout(): LayoutFn | undefined {\n return this.layoutOverride;\n }\n\n set layout(next: LayoutFn | null | undefined) {\n this.layoutOverride = next ?? undefined;\n this.queueRender();\n }\n\n private queueRender(): void {\n if (this.renderQueued) return;\n if (typeof requestAnimationFrame !== \"function\") {\n throw new Error(\"requestAnimationFrame is unavailable; term-ui rendering requires a browser frame loop.\");\n }\n this.renderQueued = true;\n this.renderFrameId = requestAnimationFrame(() => {\n this.renderQueued = false;\n this.renderFrameId = undefined;\n this.renderNow();\n });\n }\n\n private observeOpenShadowRoots(): void {\n if (!this.mutationObserver) return;\n const stack: Element[] = Array.from(this.children);\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n\n for (const child of Array.from(current.children)) {\n stack.push(child);\n }\n\n if (!(current instanceof HTMLElement)) continue;\n const shadowRoot = current.shadowRoot;\n if (!shadowRoot || shadowRoot.mode !== \"open\") continue;\n if (!this.observedShadowRoots.has(shadowRoot)) {\n this.mutationObserver.observe(shadowRoot, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n this.observedShadowRoots.add(shadowRoot);\n }\n\n for (const shadowChild of Array.from(shadowRoot.children)) {\n stack.push(shadowChild);\n }\n }\n }\n\n private onAction = (action: HtmlAction): void => {\n this.dispatchEvent(actionEvent(action));\n };\n\n private measureCharacterWidth(): number {\n const probe = document.createElement(\"span\");\n probe.className = \"termui-probe\";\n probe.textContent = PROBE_SAMPLE;\n this.frame.appendChild(probe);\n const width = probe.getBoundingClientRect().width / PROBE_SAMPLE.length;\n probe.remove();\n return width;\n }\n\n private resolveColumns(): number {\n const explicit = parseWidth(this.getAttribute(\"width\"));\n if (explicit) return explicit;\n\n const charWidth = this.measureCharacterWidth();\n if (!Number.isFinite(charWidth) || charWidth <= 0) return DEFAULT_COLS;\n\n const available = this.clientWidth;\n if (!Number.isFinite(available) || available <= 0) return DEFAULT_COLS;\n return Math.max(1, Math.floor(available / charWidth));\n }\n\n private resolveTheme(themeMode: ThemePreference): Theme {\n const theme = resolveTheme(defaultThemeSpec, themeMode, { systemMode: readSystemMode() });\n const cssVars = themeToCssVars(theme);\n for (const [name, value] of Object.entries(cssVars)) {\n this.frame.style.setProperty(name, value);\n }\n return theme;\n }\n\n private renderNow(): void {\n const mode = parseMode(this.getAttribute(\"mode\"));\n const sourceFormat = parseSourceFormat(this.getAttribute(\"source-format\"));\n const cols = this.resolveColumns();\n this.frame.style.width = `${cols}ch`;\n\n const theme = this.resolveTheme(mode);\n const source = this.getAttribute(\"source\");\n const layout = (() => {\n if (this.layoutOverride) return this.layoutOverride;\n\n if (source !== null) {\n if (sourceFormat === \"markdown\") {\n return fromMarkdown(source, { theme });\n }\n if (sourceFormat === \"json\") {\n return fromJson(parseJsonSource(source), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n return fromHtml(source, { theme, onAction: this.onAction });\n }\n\n if (sourceFormat === \"markdown\") {\n const scriptSource = readScriptText(this, [\"text/markdown\"]);\n const markdown = scriptSource ?? this.textContent ?? \"\";\n return fromMarkdown(markdown, { theme });\n }\n\n if (sourceFormat === \"json\") {\n const scriptSource = readScriptText(this, [\"application/json\"]);\n const jsonText = scriptSource ?? this.textContent ?? \"\";\n return fromJson(parseJsonSource(jsonText), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n\n return fromHtmlElement(this, { theme, onAction: this.onAction });\n })();\n const block = layout(cols);\n renderTermBlock(this.root, block, theme);\n }\n}\n\nexport const TERM_UI_TAG = \"term-ui\";\n\nexport function registerTermUIElement(tagName = TERM_UI_TAG): void {\n if (typeof customElements === \"undefined\") return;\n if (customElements.get(tagName)) return;\n customElements.define(tagName, TermUIElement);\n}\n"],"mappings":"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","names":["text","wrapText","isRecord","nums","lines","text","isRecord","pad","wrapText","wrapText","wrapText","lines","stack"]}