1ch 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/termui/table-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-diff.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","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 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\";\n\nfunction borderTop(w: number, title?: string, color?: string): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u250c\", color, noSelect: true }];\n if (title) {\n const maxTitle = Math.max(0, width - 6); // keeps room for corners and framing\n const safeTitle = title.length > maxTitle ? title.slice(0, maxTitle) : title;\n const titleStr = \"\\u2500 \" + safeTitle + \" \";\n const remaining = Math.max(0, width - 2 - titleStr.length); // -2 for corners\n return [\n { text: \"\\u250c\" + titleStr + hl(remaining) + \"\\u2510\", color, noSelect: true },\n ];\n }\n return [{ text: \"\\u250c\" + hl(width - 2) + \"\\u2510\", color, noSelect: true }];\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 },\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, opts?.title, bc));\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): LayoutFn {\n return (w) => [[{ text: hl(w), color, noSelect: true }]];\n}\n\nexport function blank(): LayoutFn {\n return (w) => [[\" \".repeat(normalizedWidth(w))]];\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};\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 dataLine.push({ text, color: color || undefined, dim: dim || undefined, 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 { LayoutFn, Line, Segment, Theme } from \"./base\";\nimport { padLine } 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","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 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) });\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 function list(\n items: string[],\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 prefix = ordered\n ? ` ${String(i + 1).padStart(digits, \" \")}. `\n : \" * \";\n const indent = \" \".repeat(prefix.length);\n const wrapped = wrapText(items[i]!, 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(opts?.color ? { text: wrapped[j]!, color: opts.color } : 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 } 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 },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const tokens = tokenize(source, opts?.language);\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 },\n );\n}\n\nexport function diff(\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","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 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 },\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 type LayoutFn,\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 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\n// ── Regular line rendering ──────────────────────────────────────\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// ── Table rendering (consolidated cells for proper selection) ────\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\n// ── Block rendering (groups table lines into <table> regions) ──\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\n const flushTable = () => {\n if (tableLines) {\n elements.push(<TermTable key={`t${tableStart}`} lines={tableLines} theme={theme} />);\n tableLines = null;\n }\n };\n\n for (let i = 0; i < block.length; i++) {\n const line = block[i]!;\n if (isTableLine(line)) {\n if (!tableLines) {\n tableLines = [];\n tableStart = i;\n }\n tableLines.push(line);\n } else {\n flushTable();\n elements.push(<TermLine key={i} line={line} theme={theme} />);\n }\n }\n flushTable();\n\n return <>{elements}</>;\n },\n (prev, next) => prev.block === next.block && prev.theme === next.theme,\n);\n\n// ── Frame and public components ─────────────────────────────────\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\n// ── TermUI: bridges react-dom ↔ custom reconciler ───────────────\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 code,\n diff,\n hstack,\n lines,\n list,\n separator,\n spark,\n statusbar,\n table,\n tabs,\n tree,\n vstack,\n type Block,\n type Column,\n type LayoutFn,\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\n// ── TermNode ────────────────────────────────────────────────────\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 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\n// ── TermRoot (container) ────────────────────────────────────────\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\n// ── Tree compilation ────────────────────────────────────────────\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\nfunction compileLine(children: TermNode[]): LayoutFn {\n const segments: Segment[] = [];\n for (const child of children) {\n if (child.type === \"t-text\") {\n segments.push(child.text ?? \"\");\n continue;\n }\n if (child.type === \"t-span\") {\n const cp = child.props;\n const text = asString(cp.text) ?? extractTermText(child.children);\n const color = asString(cp.color);\n const bg = asString(cp.bg);\n const bold = asBoolean(cp.bold);\n const dim = asBoolean(cp.dim);\n const inverted = asBoolean(cp.inverted);\n const blink = asBoolean(cp.blink);\n if (\n color ||\n bg ||\n bold !== undefined ||\n dim !== undefined ||\n inverted !== undefined ||\n blink !== undefined\n ) {\n segments.push({\n text,\n color,\n bg,\n bold,\n dim,\n inverted,\n blink,\n });\n } else {\n segments.push(text);\n }\n } else {\n // Unknown child — extract text\n segments.push(extractTermText(child.children));\n }\n }\n return lines([segments]);\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 });\n }\n\n case \"t-separator\":\n return separator(asString(p.color) ?? theme.semantic.border);\n\n case \"t-blank\":\n return blank();\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 });\n\n case \"t-diff\":\n return diff(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-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(asStringArray(p.items), {\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 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, onClick });\n if (rp > 0) segments.push(\" \".repeat(rp));\n return [segments];\n };\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\n// ── Host config ─────────────────────────────────────────────────\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\n// ── Public API ──────────────────────────────────────────────────\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\n// ── JSX IntrinsicElements ───────────────────────────────────────\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 TDiffProps,\n TBarProps,\n TSparkProps,\n TListProps,\n TButtonProps,\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\": TDiffProps;\n \"t-bar\": TBarProps;\n \"t-spark\": TSparkProps;\n \"t-list\": TListProps;\n \"t-button\": TButtonProps;\n }\n }\n}\n","import { createElement, type ReactNode } from \"react\";\nimport {\n type Column,\n type LayoutFn,\n type Segment,\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\n// ── Prop types ──────────────────────────────────────────────────\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};\n\nexport type TSeparatorProps = {\n color?: 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};\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};\n\nexport type TDiffProps = {\n value: string;\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: string[];\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};\n\nexport type RenderTermOptions = {\n theme?: import(\"./termui\").Theme;\n themeSpec?: ThemeSpec;\n mode?: ThemePreference;\n markdownOverrides?: MarkdownThemeOverrides;\n};\n\n// ── Components ──────────────────────────────────────────────────\n// Each renders a host element that the custom reconciler handles.\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 }: TBoxProps) {\n return createElement(\"t-box\", { title, borderColor, gap }, children);\n}\n\nexport function TSeparator({ color }: TSeparatorProps) {\n return createElement(\"t-separator\", { color });\n}\n\nexport function TBlank() {\n return createElement(\"t-blank\", {});\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 }: TSpanProps) {\n return createElement(\n \"t-span\",\n { text, color, bg, bold, dim, inverted, blink },\n children,\n );\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 }: TCodeProps) {\n return createElement(\"t-code\", { code, language, title, borderColor });\n}\n\nexport function TDiff({ value, addColor, removeColor, metaColor }: TDiffProps) {\n return createElement(\"t-diff\", { value, 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 }: TButtonProps) {\n return createElement(\"t-button\", { label, onClick, color, bg });\n}\n\n// ── Backward-compat imperative API ──────────────────────────────\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","headingColor","jsx","TermSegment","useMemo","TermLine","t","lines","TermTableBorderRow","TermTableContentRow","TermTable","TermBlock","useEffect","code","tree","useState","useEffect","useRef","diff"]}
package/dist/style.css ADDED
@@ -0,0 +1,55 @@
1
+ @keyframes bk { 50% { opacity: 0 } }
2
+
3
+ .termui-frame {
4
+ --cell-h: 1.15em;
5
+ --termui-bg: #0c0c0c;
6
+ --termui-fg: #cccccc;
7
+ font: inherit;
8
+ font-size: inherit;
9
+ line-height: var(--cell-h);
10
+ letter-spacing: inherit;
11
+ background: var(--termui-bg);
12
+ color: var(--termui-fg);
13
+ white-space: pre;
14
+ overflow: hidden;
15
+ cursor: text;
16
+ user-select: text;
17
+ }
18
+
19
+ .termui-line {
20
+ line-height: var(--cell-h);
21
+ min-height: var(--cell-h);
22
+ }
23
+
24
+ .termui-table {
25
+ border-collapse: collapse;
26
+ border-spacing: 0;
27
+ table-layout: fixed;
28
+ line-height: var(--cell-h);
29
+ }
30
+
31
+ .termui-cell {
32
+ white-space: pre;
33
+ padding: 0;
34
+ border: none;
35
+ line-height: inherit;
36
+ vertical-align: top;
37
+ }
38
+
39
+ .termui-border-span {
40
+ user-select: none;
41
+ line-height: inherit;
42
+ white-space: pre;
43
+ }
44
+
45
+ .termui-border-cell {
46
+ white-space: pre;
47
+ padding: 0;
48
+ border: none;
49
+ user-select: none;
50
+ line-height: inherit;
51
+ }
52
+
53
+ .termui-clickable:hover {
54
+ color: inherit !important;
55
+ }