1ch 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/termui/table-tag.ts","../src/termui/scroll-tag.ts","../src/termui/base.ts","../src/termui/text.ts","../src/termui/layout.ts","../src/termui/table.ts","../src/termui/widgets.ts","../src/termui/json.ts","../src/termui/tree-list.ts","../src/tokenize.ts","../src/theme.ts","../src/termui/code.ts","../src/termui/chart.ts","../src/document/common.ts","../src/core/html-compiler.ts","../src/document/json.ts","../src/document/markdown.ts","../src/core/ir-layout.ts","../src/document/html.ts","../src/document/index.ts","../src/dom-render.ts","../src/term-element.ts"],"sourcesContent":["import type { Line } from \"./base\";\n\nconst TABLE_TAG = Symbol(\"tableLine\");\ntype TableTaggedLine = Line & { [TABLE_TAG]?: true };\n\nfunction toTaggedLine(line: Line): TableTaggedLine {\n return line as TableTaggedLine;\n}\n\nexport function markTableLine(line: Line): Line {\n toTaggedLine(line)[TABLE_TAG] = true;\n return line;\n}\n\nexport function isTableLine(line: Line): boolean {\n return toTaggedLine(line)[TABLE_TAG] === true;\n}\n\nexport function preserveTableTag(source: Line, target: Line): void {\n if (toTaggedLine(source)[TABLE_TAG]) toTaggedLine(target)[TABLE_TAG] = true;\n}\n","import type { Line } from \"./base\";\n\nconst SCROLL_KEY = Symbol(\"scrollRegion\");\n\nexport type ScrollRegionMeta = {\n onScroll: (offset: number) => void;\n totalLines: number;\n maxHeight: number;\n offset: number;\n};\n\ntype ScrollTaggedLine = Line & { [SCROLL_KEY]?: ScrollRegionMeta };\n\nfunction toTagged(line: Line): ScrollTaggedLine {\n return line as ScrollTaggedLine;\n}\n\nexport function markScrollRegion(line: Line, meta: ScrollRegionMeta): Line {\n toTagged(line)[SCROLL_KEY] = meta;\n return line;\n}\n\nexport function getScrollRegionMeta(line: Line): ScrollRegionMeta | undefined {\n return toTagged(line)[SCROLL_KEY];\n}\n\nexport function preserveScrollTag(source: Line, target: Line): void {\n const meta = toTagged(source)[SCROLL_KEY];\n if (meta) toTagged(target)[SCROLL_KEY] = meta;\n}\n","export type Style = {\n text: string;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n onClick?: () => void;\n noSelect?: boolean;\n cell?: number;\n};\n\nexport type Segment = string | Style;\nexport type Line = Segment[];\nexport type Block = Line[];\nexport type LayoutFn = (width: number) => Block;\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemePreference = ThemeMode | \"system\";\n\nexport type ThemePalette = {\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n};\n\nexport type ThemeSemantic = {\n frameBg: string;\n frameFg: string;\n frameMuted: string;\n border: string;\n borderStrong: string;\n inverseFg: string;\n inverseBg: string;\n info: string;\n success: string;\n warn: string;\n danger: string;\n};\n\nexport type ThemeSyntax = {\n default: string;\n keyword: string;\n string: string;\n number: string;\n comment: string;\n punctuation: string;\n function: string;\n type: string;\n};\n\nexport type ThemeMarkdown = {\n headingMarker: string;\n headingBoldMaxLevel: number;\n headings: {\n h1: string;\n h2: string;\n h3: string;\n h4: string;\n h5: string;\n h6: string;\n };\n paragraph: string;\n unorderedBullet: string;\n orderedMarker: string;\n tableHeader: string;\n tableBorder: string;\n quoteMarker: string;\n quoteText: string;\n separator: string;\n codeText: string;\n codeEmpty: string;\n codeBorder: string;\n};\n\nexport type ThemeComponents = {\n tabs: {\n activeFg: string;\n activeBg: string;\n inactiveFg: string;\n separator: string;\n };\n statusbar: {\n fg: string;\n bg: string;\n };\n badge: {\n fg: string;\n bg: string;\n };\n button: {\n fg: string;\n bg: string;\n };\n};\n\nexport type Theme = {\n id: string;\n label: string;\n version: number;\n mode: ThemeMode;\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n\n // Convenience aliases for the most common color paths.\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n border: string;\n bg: string;\n};\n\nexport function normalizedWidth(width: number): number {\n if (!Number.isFinite(width)) return 0;\n return Math.max(0, Math.floor(width));\n}\n","import { type Line, type Segment } from \"./base\";\nimport { normalizedWidth } from \"./base\";\n\nexport function pad(s: string, w: number, right?: boolean): string {\n if (s.length >= w) return s.slice(0, w);\n const space = \" \".repeat(w - s.length);\n return right ? space + s : s + space;\n}\n\nexport function hl(n: number): string {\n return \"\\u2500\".repeat(normalizedWidth(n));\n}\n\nexport function bar(val: number, max: number, w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0) return \"\";\n if (!Number.isFinite(max) || max <= 0) return \"\\u2591\".repeat(width);\n\n const ratio = Number.isFinite(val) ? val / max : 0;\n const filled = Math.round(Math.min(1, Math.max(0, ratio)) * width);\n return \"\\u2588\".repeat(filled) + \"\\u2591\".repeat(width - filled);\n}\n\nexport function spark(data: number[], w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0 || data.length === 0) return \"\";\n\n const ticks = \"\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588\";\n const v = data.slice(-width);\n const mn = Math.min(...v);\n const mx = Math.max(...v);\n const rg = mx - mn || 1;\n return v.map((x) => ticks[Math.round(((x - mn) / rg) * 7)]).join(\"\");\n}\n\nfunction segLen(seg: Segment): number {\n return typeof seg === \"string\" ? seg.length : seg.text.length;\n}\n\nfunction lineLen(line: Line): number {\n let n = 0;\n for (const seg of line) n += segLen(seg);\n return n;\n}\n\nfunction sliceSeg(seg: Segment, end: number): Segment | null {\n if (end <= 0) return null;\n if (typeof seg === \"string\") {\n const text = seg.slice(0, end);\n return text.length > 0 ? text : null;\n }\n const text = seg.text.slice(0, end);\n if (text.length === 0) return null;\n return { ...seg, text };\n}\n\nfunction truncateLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const out: Line = [];\n let remaining = w;\n\n for (const seg of line) {\n if (remaining <= 0) break;\n const len = segLen(seg);\n if (len <= remaining) {\n out.push(seg);\n remaining -= len;\n continue;\n }\n const clipped = sliceSeg(seg, remaining);\n if (clipped) out.push(clipped);\n remaining = 0;\n }\n\n return out;\n}\n\nexport function padLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const used = lineLen(line);\n if (used > w) return truncateLine(line, w);\n if (used === w) return line;\n return [...line, { text: \" \".repeat(w - used), noSelect: true }];\n}\n\nexport function truncate(text: string, width: number, ellipsis = \"\\u2026\"): string {\n if (text.length <= width) return text;\n if (width <= ellipsis.length) return ellipsis.slice(0, width);\n return text.slice(0, width - ellipsis.length) + ellipsis;\n}\n\nexport function wrapText(text: string, w: number): string[] {\n if (w <= 0) return [\"\"];\n if (text.length <= w) return [text];\n\n const result: string[] = [];\n let pos = 0;\n while (pos < text.length) {\n if (pos + w >= text.length) {\n result.push(text.slice(pos));\n break;\n }\n let breakAt = text.lastIndexOf(\" \", pos + w);\n if (breakAt <= pos) {\n // No word boundary — hard break\n result.push(text.slice(pos, pos + w));\n pos += w;\n } else {\n result.push(text.slice(pos, breakAt));\n pos = breakAt + 1;\n }\n }\n return result.length > 0 ? result : [\"\"];\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { hl, padLine } from \"./text\";\nimport { markScrollRegion } from \"./scroll-tag\";\n\nexport type BoxAction = { label: string; onClick: () => void; color?: string };\n\ntype BorderTopOpts = { title?: string; color?: string; action?: BoxAction };\n\nfunction borderTop(w: number, opts?: BorderTopOpts): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u250c\", color: opts?.color, noSelect: true }];\n\n const { title, color, action } = opts ?? {};\n const innerWidth = width - 2; // minus corners\n\n // Title prefix: \"─ title \" (3 chars of framing + title length)\n // Reserve 1 extra char so there's always at least one dash of fill.\n const titleBudget = innerWidth - (action ? action.label.length + 2 : 0) - 4;\n let titleStr = \"\";\n if (title) {\n const safeTitle = title.length > titleBudget ? title.slice(0, Math.max(0, titleBudget)) : title;\n titleStr = safeTitle.length > 0 ? \"\\u2500 \" + safeTitle + \" \" : \"\";\n }\n\n const fillWidth = Math.max(0, innerWidth - titleStr.length - (action ? action.label.length + 2 : 0));\n\n if (!action) {\n return [{ text: \"\\u250c\" + titleStr + hl(fillWidth) + \"\\u2510\", color, noSelect: true }];\n }\n\n return [\n { text: \"\\u250c\" + titleStr + hl(fillWidth), color, noSelect: true },\n { text: \" \" + action.label + \" \", color: action.color ?? color, onClick: action.onClick, noSelect: true },\n { text: \"\\u2510\", color, noSelect: true },\n ];\n}\n\nfunction borderBottom(w: number, color?: string): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u2514\", color, noSelect: true }];\n return [{ text: \"\\u2514\" + hl(width - 2) + \"\\u2518\", color, noSelect: true }];\n}\n\nexport function lines(\n content: Line[] | ((w: number) => Line[]),\n): LayoutFn {\n return (w) => {\n const ls = typeof content === \"function\" ? content(w) : content;\n return ls.map((line) => padLine(line, w));\n };\n}\n\nexport function box(\n content: LayoutFn,\n opts?: { title?: string; borderColor?: string; action?: BoxAction },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n if (width < 2) return content(width);\n\n const bc = opts?.borderColor;\n const inner = width - 2;\n const contentBlock = content(inner);\n const result: Block = [];\n result.push(borderTop(width, { title: opts?.title, color: bc, action: opts?.action }));\n for (const line of contentBlock) {\n result.push([\n { text: \"\\u2502\", color: bc, noSelect: true },\n ...padLine(line, inner),\n { text: \"\\u2502\", color: bc, noSelect: true },\n ]);\n }\n result.push(borderBottom(width, bc));\n return result;\n };\n}\n\nexport function hstack(\n children: LayoutFn[],\n opts?: { gap?: number; widths?: number[] },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const n = children.length;\n if (n === 0) return [];\n const gap = normalizedWidth(opts?.gap ?? 1);\n const totalGap = gap * (n - 1);\n\n let childWidths: number[];\n if (opts?.widths && opts.widths.length === n) {\n childWidths = opts.widths.map((cw) => normalizedWidth(cw));\n } else {\n const available = Math.max(0, width - totalGap);\n const base = Math.floor(available / n);\n const remainder = available - base * n;\n childWidths = children.map((_, i) => base + (i < remainder ? 1 : 0));\n }\n\n const blocks = children.map((child, i) => child(childWidths[i]!));\n const maxLines = Math.max(...blocks.map((b) => b.length));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n\n const result: Block = [];\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < blocks.length; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const childLine = blocks[j]![i];\n if (childLine) {\n line.push(...padLine(childLine, childWidths[j]!));\n } else {\n line.push(\" \".repeat(childWidths[j]!));\n }\n }\n result.push(line);\n }\n return result;\n };\n}\n\nexport function vstack(...children: LayoutFn[]): LayoutFn {\n return (w) => {\n const result: Block = [];\n for (const child of children) {\n result.push(...child(w));\n }\n return result;\n };\n}\n\nexport function separator(color?: string, char?: string): LayoutFn {\n return (w) => {\n const c = char ?? \"\\u2500\";\n return [[{ text: c.repeat(normalizedWidth(w)), color, noSelect: true }]];\n };\n}\n\nexport function blank(count = 1): LayoutFn {\n return (w) => {\n const line = [\" \".repeat(normalizedWidth(w))];\n const result: Block = [];\n for (let i = 0; i < count; i++) result.push(line);\n return result;\n };\n}\n\nexport function divider(\n label: string,\n opts?: { color?: string; char?: string; labelColor?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const c = opts?.char ?? \"\\u2500\";\n const padded = ` ${label} `;\n if (padded.length >= width) {\n const lc = opts?.labelColor ?? opts?.color;\n return [[lc ? { text: padded.slice(0, width), color: lc } : padded.slice(0, width)]];\n }\n const remaining = width - padded.length;\n const leftLen = Math.floor(remaining / 2);\n const rightLen = remaining - leftLen;\n const lineColor = opts?.color;\n const labelColor = opts?.labelColor ?? opts?.color;\n const line: Line = [\n { text: c.repeat(leftLen), color: lineColor, noSelect: true },\n labelColor ? { text: padded, color: labelColor } : padded,\n { text: c.repeat(rightLen), color: lineColor, noSelect: true },\n ];\n return [line];\n };\n}\n\nexport function grid(\n cells: LayoutFn[],\n opts: { cols: number; gap?: number; rowGap?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const cols = Math.max(1, opts.cols);\n const gap = normalizedWidth(opts.gap ?? 1);\n const rowGap = normalizedWidth(opts.rowGap ?? 0);\n const totalGap = gap * (cols - 1);\n const cellWidth = Math.max(1, Math.floor((width - totalGap) / cols));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n const result: Block = [];\n\n for (let rowStart = 0; rowStart < cells.length; rowStart += cols) {\n if (rowStart > 0 && rowGap > 0) {\n const emptyLine: Line = [\" \".repeat(width)];\n for (let g = 0; g < rowGap; g++) result.push(emptyLine);\n }\n const rowCells = cells.slice(rowStart, rowStart + cols);\n const blocks = rowCells.map((cell) => cell(cellWidth));\n const maxLines = Math.max(0, ...blocks.map((b) => b.length));\n\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < cols; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const block = blocks[j];\n if (block && block[i]) {\n line.push(...padLine(block[i]!, cellWidth));\n } else {\n line.push(\" \".repeat(cellWidth));\n }\n }\n result.push(padLine(line, width));\n }\n }\n\n return result;\n };\n}\n\nexport function scroll(\n content: LayoutFn,\n opts: { maxHeight: number; offset?: number; scrollbarColor?: string; onScroll?: (offset: number) => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const maxH = normalizedWidth(opts.maxHeight);\n const contentW = Math.max(1, width - 1);\n const fullBlock = content(contentW);\n const totalLines = fullBlock.length;\n\n if (totalLines <= maxH) {\n return fullBlock.map((line) => padLine(line, width));\n }\n\n const maxOffset = Math.max(0, totalLines - maxH);\n const offset = Math.min(maxOffset, Math.max(0, opts.offset ?? 0));\n const visible = fullBlock.slice(offset, offset + maxH);\n\n const thumbHeight = Math.max(1, Math.round((maxH / totalLines) * maxH));\n const thumbStart = Math.round((offset / maxOffset) * (maxH - thumbHeight));\n\n const result: Block = [];\n for (let i = 0; i < visible.length; i++) {\n const inThumb = i >= thumbStart && i < thumbStart + thumbHeight;\n const scrollChar = inThumb ? \"\\u2588\" : \"\\u2591\";\n const line: Line = [\n ...padLine(visible[i]!, contentW),\n { text: scrollChar, color: opts.scrollbarColor, noSelect: true },\n ];\n if (opts.onScroll) {\n markScrollRegion(line, { onScroll: opts.onScroll, totalLines, maxHeight: maxH, offset });\n }\n result.push(line);\n }\n\n return result;\n };\n}\n\nexport function padding(\n content: LayoutFn,\n opts?: { x?: number; y?: number; top?: number; bottom?: number; left?: number; right?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const t = normalizedWidth(opts?.top ?? opts?.y ?? 0);\n const b = normalizedWidth(opts?.bottom ?? opts?.y ?? 0);\n const l = normalizedWidth(opts?.left ?? opts?.x ?? 0);\n const r = normalizedWidth(opts?.right ?? opts?.x ?? 0);\n const innerW = Math.max(1, width - l - r);\n const block = content(innerW);\n const result: Block = [];\n const emptyLine: Line = [\" \".repeat(width)];\n for (let i = 0; i < t; i++) result.push(emptyLine);\n const leftPad = l > 0 ? \" \".repeat(l) : \"\";\n for (const line of block) {\n const padded: Line = leftPad ? [leftPad, ...line] : line;\n result.push(padLine(padded, width));\n }\n for (let i = 0; i < b; i++) result.push(emptyLine);\n return result;\n };\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { markTableLine } from \"./table-tag\";\nimport { hl, pad, wrapText } from \"./text\";\nimport { normalizedWidth } from \"./base\";\n\nfunction tableSep(\n ws: number[],\n l: string,\n m: string,\n r: string,\n color?: string,\n): Line {\n const line: Line = [{ text: l, color, noSelect: true }];\n for (let i = 0; i < ws.length; i++) {\n line.push({ text: hl(ws[i]!), color, noSelect: true, cell: i });\n line.push({ text: i < ws.length - 1 ? m : r, color, noSelect: true });\n }\n return line;\n}\n\nfunction tableTop(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u250c\", \"\\u252c\", \"\\u2510\", color);\n}\n\nfunction tableMid(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u251c\", \"\\u253c\", \"\\u2524\", color);\n}\n\nfunction tableBot(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u2514\", \"\\u2534\", \"\\u2518\", color);\n}\n\nexport type Column<T extends Record<string, unknown> = Record<string, unknown>> = {\n key: keyof T & string;\n title?: string;\n width?: number;\n align?: \"left\" | \"right\";\n headerColor?: string;\n headerBold?: boolean;\n color?: string | ((value: unknown, row: T) => string | undefined);\n dim?: boolean | ((value: unknown, row: T) => boolean);\n onClick?: (value: unknown, row: T) => void;\n};\n\nexport function table<T extends Record<string, unknown>>(\n columns: Column<T>[],\n data: T[],\n opts?: { borderColor?: string; fillWidth?: boolean; headerColor?: string; cellPadding?: number },\n): LayoutFn {\n return (w) => {\n const bc = opts?.borderColor;\n const hc = opts?.headerColor;\n const cp = normalizedWidth(opts?.cellPadding ?? 1);\n const nSep = columns.length + 1; // separators: │col│col│...│\n const minColWidth = 1;\n const widthBudget = Math.max(0, normalizedWidth(w) - nSep);\n const padStr = \" \".repeat(cp);\n\n // Compute column widths\n const ws = columns.map((col) => {\n if (col.width) return Math.max(minColWidth, col.width);\n const displayTitle = col.title ?? col.key;\n const titleW = displayTitle.length + 2 * cp;\n const dataW = Math.max(\n ...data.map((row) => String(row[col.key] ?? \"\").length + 2 * cp),\n 0,\n );\n return Math.max(minColWidth, titleW, dataW);\n });\n\n // If fillWidth, distribute remaining space\n if (opts?.fillWidth && widthBudget > 0) {\n const used = ws.reduce((a, b) => a + b, 0);\n const remaining = widthBudget - used;\n if (remaining > 0 && ws.length > 0) {\n const even = Math.floor(remaining / ws.length);\n const rem = remaining % ws.length;\n for (let i = 0; i < ws.length; i++) {\n ws[i] = ws[i]! + even + (i < rem ? 1 : 0);\n }\n }\n }\n\n if (widthBudget > 0) {\n let used = ws.reduce((a, b) => a + b, 0);\n let overflow = used - widthBudget;\n while (overflow > 0) {\n let idx = -1;\n let widest = 0;\n for (let i = 0; i < ws.length; i++) {\n if (ws[i]! > minColWidth && ws[i]! > widest) {\n widest = ws[i]!;\n idx = i;\n }\n }\n if (idx === -1) break;\n ws[idx] = ws[idx]! - 1;\n overflow -= 1;\n }\n }\n\n const result: Block = [];\n\n // Top border\n result.push(tableTop(ws, bc));\n\n // Header row\n const headerLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const displayTitle = col.title ?? col.key;\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(displayTitle, innerW, col.align === \"right\") + padStr;\n headerLine.push({\n text,\n color: col.headerColor ?? hc,\n bold: col.headerBold ?? true,\n cell: i,\n });\n headerLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(headerLine);\n\n // Mid separator\n result.push(tableMid(ws, bc));\n\n // Data rows — wrap cell text instead of truncating\n for (const row of data) {\n const wrapped: string[][] = columns.map((col, ci) => {\n const val = String(row[col.key] ?? \"\");\n const innerW = Math.max(1, ws[ci]! - 2 * cp);\n return wrapText(val, innerW);\n });\n const rowHeight = Math.max(...wrapped.map((c) => c.length), 1);\n\n for (let ln = 0; ln < rowHeight; ln++) {\n const dataLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const cellLine = wrapped[i]![ln] ?? \"\";\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(cellLine, innerW, col.align === \"right\") + padStr;\n const color =\n typeof col.color === \"function\"\n ? col.color(row[col.key], row)\n : col.color;\n const dim =\n typeof col.dim === \"function\"\n ? col.dim(row[col.key], row)\n : col.dim;\n const cellClick = typeof col.onClick === \"function\" ? () => col.onClick!(row[col.key], row) : undefined;\n dataLine.push({ text, color: color || undefined, dim: dim || undefined, onClick: cellClick, cell: i });\n dataLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(dataLine);\n }\n }\n\n // Bottom border\n result.push(tableBot(ws, bc));\n\n // Tag all lines so the renderer can emit HTML <table>\n for (const line of result) markTableLine(line);\n return result;\n };\n}\n","import type { Block, LayoutFn, Line, Segment, Theme } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { pad, padLine, wrapText } from \"./text\";\n\nexport function statusbar(\n left: Segment[],\n right: Segment[],\n opts?: { bg?: string; color?: string; theme?: Theme },\n): LayoutFn {\n return (w) => {\n const rightLen = right.reduce(\n (acc, s) => acc + (typeof s === \"string\" ? s.length : s.text.length),\n 0,\n );\n const leftWidth = Math.max(0, w - rightLen);\n const paddedLeft = padLine(left, leftWidth);\n\n const theme = opts?.theme;\n const bg = opts?.bg ?? theme?.components.statusbar.bg;\n const color = opts?.color ?? theme?.components.statusbar.fg;\n const line: Line = [...paddedLeft, ...right].map((seg) => {\n if (typeof seg === \"string\") {\n return bg || color ? { text: seg, bg, color } : seg;\n }\n return { ...seg, bg: seg.bg ?? bg, color: seg.color ?? color };\n });\n return [padLine(line, w)];\n };\n}\n\nexport function tabs(\n names: string[],\n active: number,\n opts?: {\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n onSelect?: (index: number) => void;\n onClicks?: ((() => void) | undefined)[];\n theme?: Theme;\n },\n): LayoutFn {\n return (w) => {\n const line: Line = [];\n const onSelect = opts?.onSelect;\n const t = opts?.theme;\n for (let i = 0; i < names.length; i++) {\n const isActive = i === active;\n const name = names[i]!;\n const label = \" \" + (isActive ? name.toUpperCase() : name) + \" \";\n const onClick = opts?.onClicks?.[i] ?? (onSelect ? () => onSelect(i) : undefined);\n\n if (isActive) {\n line.push({\n text: label,\n color: opts?.activeColor ?? t?.components.tabs.activeFg,\n bg: opts?.activeBg ?? t?.components.tabs.activeBg,\n onClick,\n });\n } else {\n line.push({\n text: label,\n color: opts?.inactiveColor ?? t?.components.tabs.inactiveFg,\n onClick,\n });\n }\n\n if (i < names.length - 1) {\n line.push({ text: \"\\u2502\", color: opts?.separatorColor ?? t?.components.tabs.separator, noSelect: true });\n }\n }\n return [padLine(line, w)];\n };\n}\n\nexport function badge(\n label: string,\n opts?: { color?: string; bg?: string; onClick?: () => void; theme?: Theme },\n): Segment {\n const t = opts?.theme;\n return {\n text: label,\n color: opts?.color ?? t?.components.badge.fg,\n bg: opts?.bg ?? t?.components.badge.bg,\n onClick: opts?.onClick,\n };\n}\n\nexport type KVPair = {\n key: string;\n value: string | Segment[];\n keyColor?: string;\n valueColor?: string;\n onClick?: () => void;\n};\n\nexport function kv(\n pairs: KVPair[],\n opts?: { separator?: string; keyColor?: string; valueColor?: string; keyWidth?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const sep = opts?.separator ?? \" \";\n const maxKey = opts?.keyWidth ?? Math.max(0, ...pairs.map((p) => p.key.length));\n const result: Line[] = [];\n\n for (const pair of pairs) {\n const keyText = pad(pair.key, maxKey);\n const keyColor = pair.keyColor ?? opts?.keyColor;\n const keySeg: Segment = keyColor ? { text: keyText, color: keyColor } : keyText;\n\n if (typeof pair.value === \"string\") {\n const valColor = pair.valueColor ?? opts?.valueColor;\n const valSeg: Segment =\n valColor || pair.onClick\n ? { text: pair.value, color: valColor, onClick: pair.onClick }\n : pair.value;\n result.push(padLine([keySeg, sep, valSeg], width));\n } else {\n result.push(padLine([keySeg, sep, ...pair.value], width));\n }\n }\n\n return result;\n };\n}\n\nexport function callout(\n content: LayoutFn | string,\n opts?: { color?: string; accent?: string; label?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const accent = opts?.accent ?? opts?.color;\n const innerWidth = Math.max(1, width - 2);\n\n let block: Block;\n if (typeof content === \"string\") {\n const wrapped = wrapText(content, innerWidth);\n block = wrapped.map((line) => {\n const seg: Line = opts?.color ? [{ text: line, color: opts.color }] : [line];\n return padLine(seg, innerWidth);\n });\n } else {\n block = content(innerWidth);\n }\n\n const result: Block = [];\n\n if (opts?.label) {\n const labelLine: Line = [\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n { text: opts.label, color: accent, bold: true },\n ];\n result.push(padLine(labelLine, width));\n }\n\n for (const line of block) {\n result.push([\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n ...padLine(line, innerWidth),\n ]);\n }\n\n return result;\n };\n}\n\nexport function checkbox(\n checked: boolean,\n label: string,\n opts?: { color?: string; checkColor?: string; onClick?: () => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const check = checked ? \"\\u2713\" : \" \";\n const boxSeg: Segment = {\n text: `[${check}]`,\n color: opts?.checkColor ?? opts?.color,\n onClick: opts?.onClick,\n };\n const labelSeg: Segment = opts?.onClick\n ? { text: ` ${label}`, color: opts.color, onClick: opts.onClick }\n : opts?.color\n ? { text: ` ${label}`, color: opts.color }\n : ` ${label}`;\n return [padLine([boxSeg, labelSeg], width)];\n };\n}\n\nexport function inputField(\n value: string,\n opts?: {\n placeholder?: string;\n width?: number;\n focused?: boolean;\n color?: string;\n borderColor?: string;\n onClick?: () => void;\n },\n): LayoutFn {\n return (w) => {\n const totalWidth = normalizedWidth(opts?.width ?? w);\n const innerWidth = Math.max(1, totalWidth - 2);\n const bc = opts?.borderColor;\n const focused = opts?.focused ?? false;\n\n const display = value || opts?.placeholder || \"\";\n const isPlaceholder = !value && opts?.placeholder;\n\n const textTruncated =\n display.length > innerWidth\n ? display.slice(display.length - innerWidth)\n : display;\n const padded = pad(textTruncated + (focused ? \"\\u2588\" : \"\"), innerWidth);\n\n const line: Line = [\n { text: focused ? \"\\u2502\" : \"[\", color: bc, noSelect: true },\n isPlaceholder\n ? { text: padded, dim: true, color: opts?.color, onClick: opts?.onClick }\n : opts?.color || opts?.onClick\n ? { text: padded, color: opts?.color, onClick: opts?.onClick }\n : padded,\n { text: focused ? \"\\u2502\" : \"]\", color: bc, noSelect: true },\n ];\n return [padLine(line, w)];\n };\n}\n","import type { LayoutFn, Line, Segment } from \"./base\";\nimport { bar } from \"./text\";\nimport { blank, box, hstack, lines, separator, vstack } from \"./layout\";\nimport { type Column, table } from \"./table\";\nimport { statusbar, tabs } from \"./widgets\";\n\nexport type JsonNode =\n | { type: \"vstack\"; children: JsonNode[] }\n | { type: \"hstack\"; gap?: number; widths?: number[]; children: JsonNode[] }\n | { type: \"box\"; title?: string; borderColor?: string; children: JsonNode[] }\n | { type: \"lines\"; content: Line[] }\n | { type: \"separator\"; color?: string }\n | { type: \"blank\" }\n | {\n type: \"table\";\n columns: Column[];\n data: Record<string, unknown>[];\n borderColor?: string;\n fillWidth?: boolean;\n }\n | {\n type: \"statusbar\";\n left: Segment[];\n right: Segment[];\n bg?: string;\n color?: string;\n }\n | {\n type: \"tabs\";\n names: string[];\n active: number;\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n }\n | { type: \"bar\"; value: number; max: number; color?: string; label?: string }\n | { type: \"text\"; segments: Segment[] };\n\nexport function fromJsonNode(node: JsonNode): LayoutFn {\n switch (node.type) {\n case \"vstack\":\n return vstack(...node.children.map(fromJsonNode));\n\n case \"hstack\":\n return hstack(node.children.map(fromJsonNode), {\n gap: node.gap,\n widths: node.widths,\n });\n\n case \"box\":\n return box(vstack(...node.children.map(fromJsonNode)), {\n title: node.title,\n borderColor: node.borderColor,\n });\n\n case \"lines\":\n return lines(node.content);\n\n case \"separator\":\n return separator(node.color);\n\n case \"blank\":\n return blank();\n\n case \"table\":\n return table(node.columns, node.data, {\n borderColor: node.borderColor,\n fillWidth: node.fillWidth,\n });\n\n case \"statusbar\":\n return statusbar(node.left, node.right, {\n bg: node.bg,\n color: node.color,\n });\n\n case \"tabs\":\n return tabs(node.names, node.active, {\n activeColor: node.activeColor,\n activeBg: node.activeBg,\n inactiveColor: node.inactiveColor,\n separatorColor: node.separatorColor,\n });\n\n case \"bar\":\n return (w) => {\n const labelStr = node.label ? \" \" + node.label : \"\";\n const barW = Math.max(0, w - 1 - labelStr.length); // 1 for leading space\n return [[\" \", { text: bar(node.value, node.max, barW), color: node.color }, labelStr]];\n };\n\n case \"text\":\n return lines([node.segments]);\n }\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { padLine, wrapText } from \"./text\";\n\nexport type TreeNode = {\n label: string;\n onClick?: () => void;\n children?: TreeNode[];\n};\n\nexport function tree(\n data: TreeNode[],\n opts?: { color?: string; branchColor?: string; leafColor?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n function walk(nodes: TreeNode[], prefix: string) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!;\n const last = i === nodes.length - 1;\n const hasKids = node.children && node.children.length > 0;\n const connector = last ? \"\\u2514\\u2500\\u2500 \" : \"\\u251c\\u2500\\u2500 \";\n const line: Line = [];\n if (prefix) line.push({ text: prefix, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: connector, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: node.label, color: hasKids ? opts?.color : (opts?.leafColor ?? opts?.color), onClick: node.onClick });\n result.push(padLine(line, w));\n if (hasKids) {\n walk(node.children!, prefix + (last ? \" \" : \"\\u2502 \"));\n }\n }\n }\n walk(data, \"\");\n return result;\n };\n}\n\nexport type ListItem = string | { text: string; color?: string; onClick?: () => void };\n\nexport function list(\n items: ListItem[],\n opts?: { ordered?: boolean; bulletColor?: string; color?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n const ordered = opts?.ordered ?? false;\n const digits = String(items.length).length;\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const text = typeof item === \"string\" ? item : item.text;\n const itemColor = typeof item === \"string\" ? opts?.color : (item.color ?? opts?.color);\n const itemClick = typeof item === \"string\" ? undefined : item.onClick;\n const prefix = ordered\n ? ` ${String(i + 1).padStart(digits, \" \")}. `\n : \" * \";\n const indent = \" \".repeat(prefix.length);\n const wrapped = wrapText(text, w - prefix.length);\n for (let j = 0; j < wrapped.length; j++) {\n const line: Line = [];\n if (j === 0) {\n line.push({ text: prefix, color: opts?.bulletColor });\n } else {\n line.push(indent);\n }\n line.push(itemColor || itemClick ? { text: wrapped[j]!, color: itemColor, onClick: itemClick } : wrapped[j]!);\n result.push(padLine(line, w));\n }\n }\n return result;\n };\n}\n","// termui — regex-based syntax tokenizer for TCode\n\nexport type TokenType =\n | \"keyword\"\n | \"string\"\n | \"number\"\n | \"comment\"\n | \"punctuation\"\n | \"function\"\n | \"type\"\n | \"default\";\n\nexport type Token = { text: string; type: TokenType };\n\ntype Rule = { pattern: RegExp; type: TokenType };\n\nfunction rules(pairs: [RegExp, TokenType][]): Rule[] {\n return pairs.map(([pattern, type]) => ({\n pattern: new RegExp(pattern.source, \"y\"),\n type,\n }));\n}\n\nconst JS_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/\\/\\*[\\s\\S]*?\\*\\//, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/`(?:[^`\\\\]|\\\\.)*`/, \"string\"],\n [/\\b(?:const|let|var|function|return|if|else|for|while|do|class|import|export|from|async|await|new|throw|try|catch|finally|typeof|instanceof|in|of|void|delete|switch|case|break|continue|default|yield|extends|implements|interface|type|as|this|super|null|undefined|true|false)\\b/, \"keyword\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/\\b[a-zA-Z_$][\\w$]*(?=\\s*\\()/, \"function\"],\n [/=>/, \"punctuation\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nconst JSON_RULES = rules([\n [/\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/, \"function\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/\\b(?:true|false|null)\\b/, \"keyword\"],\n [/-?\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/[{}\\[\\]:,]/, \"punctuation\"],\n]);\n\nconst BASH_RULES = rules([\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'[^']*'/, \"string\"],\n [/\\$\\{[^}]*\\}/, \"type\"],\n [/\\$[A-Za-z_]\\w*/, \"type\"],\n [/\\b(?:if|then|else|elif|fi|for|do|done|while|until|case|esac|function|in|return|exit|echo|export|local|readonly|source|alias|cd|ls|rm|cp|mv|mkdir|grep|sed|awk|cat|chmod|chown|sudo|apt|brew|npm|npx|bun|yarn|git|docker|curl|wget|pipe)\\b/, \"keyword\"],\n [/\\b\\d+\\b/, \"number\"],\n [/[|;&<>()\\[\\]{}]/, \"punctuation\"],\n]);\n\nconst GENERIC_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nfunction rulesFor(lang?: string): Rule[] {\n if (!lang) return GENERIC_RULES;\n const l = lang.toLowerCase();\n if (l === \"json\" || l === \"jsonc\") return JSON_RULES;\n if (l === \"bash\" || l === \"sh\" || l === \"zsh\" || l === \"shell\") return BASH_RULES;\n if (l === \"js\" || l === \"jsx\" || l === \"ts\" || l === \"tsx\" || l === \"javascript\" || l === \"typescript\") return JS_RULES;\n return GENERIC_RULES;\n}\n\nfunction tokenizeLine(line: string, langRules: Rule[]): Token[] {\n const tokens: Token[] = [];\n let pos = 0;\n while (pos < line.length) {\n // Skip whitespace as default\n if (line[pos] === \" \" || line[pos] === \"\\t\") {\n let ws = pos;\n while (ws < line.length && (line[ws] === \" \" || line[ws] === \"\\t\")) ws++;\n tokens.push({ text: line.slice(pos, ws), type: \"default\" });\n pos = ws;\n continue;\n }\n let matched = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) {\n tokens.push({ text: m[0], type: rule.type });\n pos += m[0].length;\n matched = true;\n break;\n }\n }\n if (!matched) {\n // Consume one char as default\n const start = pos;\n pos++;\n while (pos < line.length && line[pos] !== \" \" && line[pos] !== \"\\t\") {\n let anyMatch = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) { anyMatch = true; break; }\n }\n if (anyMatch) break;\n pos++;\n }\n tokens.push({ text: line.slice(start, pos), type: \"default\" });\n }\n }\n return tokens;\n}\n\nexport function tokenize(source: string, language?: string): Token[][] {\n const langRules = rulesFor(language);\n return source.split(\"\\n\").map((line) => tokenizeLine(line, langRules));\n}\n","import type {\n Theme,\n ThemeComponents,\n ThemeMarkdown,\n ThemeMode,\n ThemePalette,\n ThemePreference,\n ThemeSemantic,\n ThemeSyntax,\n} from \"./termui/base\";\n\nexport type ThemeModeTokens = {\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n};\n\nexport type ThemeSpec = {\n id: string;\n label: string;\n version: number;\n modes: Record<ThemeMode, ThemeModeTokens>;\n};\n\nexport type ThemeValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type ThemeValidationResult = {\n ok: boolean;\n issues: ThemeValidationIssue[];\n theme?: ThemeSpec;\n};\n\nconst DARK_PALETTE: ThemePalette = {\n black: \"#0c0c0c\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n magenta: \"#c678dd\",\n cyan: \"#56b6c2\",\n white: \"#cccccc\",\n brightBlack: \"#555555\",\n brightWhite: \"#ffffff\",\n};\n\nconst DARK_SEMANTIC: ThemeSemantic = {\n frameBg: \"#0c0c0c\",\n frameFg: \"#cccccc\",\n frameMuted: \"#555555\",\n border: \"#555555\",\n borderStrong: \"#808080\",\n inverseFg: \"#0c0c0c\",\n inverseBg: \"#ffffff\",\n info: \"#56b6c2\",\n success: \"#98c379\",\n warn: \"#e5c07b\",\n danger: \"#e06c75\",\n};\n\nconst DARK_SYNTAX: ThemeSyntax = {\n default: \"#ffffff\",\n keyword: \"#c678dd\",\n string: \"#98c379\",\n number: \"#e5c07b\",\n comment: \"#555555\",\n punctuation: \"#555555\",\n function: \"#61afef\",\n type: \"#56b6c2\",\n};\n\nconst DARK_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#555555\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#e5c07b\",\n h2: \"#56b6c2\",\n h3: \"#98c379\",\n h4: \"#c678dd\",\n h5: \"#cccccc\",\n h6: \"#cccccc\",\n },\n paragraph: \"#cccccc\",\n unorderedBullet: \"#56b6c2\",\n orderedMarker: \"#56b6c2\",\n tableHeader: \"#56b6c2\",\n tableBorder: \"#555555\",\n quoteMarker: \"#555555\",\n quoteText: \"#555555\",\n separator: \"#555555\",\n codeText: \"#ffffff\",\n codeEmpty: \"#555555\",\n codeBorder: \"#555555\",\n};\n\nconst DARK_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#0c0c0c\",\n activeBg: \"#e5c07b\",\n inactiveFg: \"#555555\",\n separator: \"#555555\",\n },\n statusbar: {\n fg: \"#0c0c0c\",\n bg: \"#98c379\",\n },\n badge: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n button: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n};\n\nconst LIGHT_PALETTE: ThemePalette = {\n black: \"#1f2328\",\n red: \"#cf222e\",\n green: \"#1a7f37\",\n yellow: \"#9a6700\",\n blue: \"#0969da\",\n magenta: \"#8250df\",\n cyan: \"#1b7c83\",\n white: \"#30363d\",\n brightBlack: \"#6e7781\",\n brightWhite: \"#0f172a\",\n};\n\nconst LIGHT_SEMANTIC: ThemeSemantic = {\n frameBg: \"#f6f8fa\",\n frameFg: \"#1f2328\",\n frameMuted: \"#6e7781\",\n border: \"#d0d7de\",\n borderStrong: \"#8c959f\",\n inverseFg: \"#f6f8fa\",\n inverseBg: \"#0f172a\",\n info: \"#0969da\",\n success: \"#1a7f37\",\n warn: \"#9a6700\",\n danger: \"#cf222e\",\n};\n\nconst LIGHT_SYNTAX: ThemeSyntax = {\n default: \"#1f2328\",\n keyword: \"#8250df\",\n string: \"#116329\",\n number: \"#9a6700\",\n comment: \"#6e7781\",\n punctuation: \"#6e7781\",\n function: \"#0969da\",\n type: \"#1b7c83\",\n};\n\nconst LIGHT_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#6e7781\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#9a6700\",\n h2: \"#0969da\",\n h3: \"#1a7f37\",\n h4: \"#8250df\",\n h5: \"#1f2328\",\n h6: \"#1f2328\",\n },\n paragraph: \"#1f2328\",\n unorderedBullet: \"#0969da\",\n orderedMarker: \"#0969da\",\n tableHeader: \"#0969da\",\n tableBorder: \"#d0d7de\",\n quoteMarker: \"#6e7781\",\n quoteText: \"#6e7781\",\n separator: \"#d0d7de\",\n codeText: \"#1f2328\",\n codeEmpty: \"#6e7781\",\n codeBorder: \"#d0d7de\",\n};\n\nconst LIGHT_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#f6f8fa\",\n activeBg: \"#0969da\",\n inactiveFg: \"#6e7781\",\n separator: \"#8c959f\",\n },\n statusbar: {\n fg: \"#f6f8fa\",\n bg: \"#0969da\",\n },\n badge: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n button: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n};\n\nexport const defaultThemeSpec: ThemeSpec = {\n id: \"termui-default\",\n label: \"TermUI Default\",\n version: 1,\n modes: {\n dark: {\n palette: DARK_PALETTE,\n semantic: DARK_SEMANTIC,\n syntax: DARK_SYNTAX,\n markdown: DARK_MARKDOWN,\n components: DARK_COMPONENTS,\n },\n light: {\n palette: LIGHT_PALETTE,\n semantic: LIGHT_SEMANTIC,\n syntax: LIGHT_SYNTAX,\n markdown: LIGHT_MARKDOWN,\n components: LIGHT_COMPONENTS,\n },\n },\n};\n\nexport const builtinThemes = {\n default: defaultThemeSpec,\n} as const;\n\nexport function resolveThemeMode(\n preference: ThemePreference,\n systemMode: ThemeMode = \"dark\",\n): ThemeMode {\n return preference === \"system\" ? systemMode : preference;\n}\n\nexport function resolveTheme(\n spec: ThemeSpec,\n preference: ThemePreference = \"dark\",\n opts?: { systemMode?: ThemeMode },\n): Theme {\n const mode = resolveThemeMode(preference, opts?.systemMode ?? \"dark\");\n const modeTokens = spec.modes[mode] ?? defaultThemeSpec.modes[mode];\n\n return {\n id: spec.id,\n label: spec.label,\n version: spec.version,\n mode,\n palette: modeTokens.palette,\n semantic: modeTokens.semantic,\n syntax: modeTokens.syntax,\n markdown: modeTokens.markdown,\n components: modeTokens.components,\n black: modeTokens.palette.black,\n red: modeTokens.palette.red,\n green: modeTokens.palette.green,\n yellow: modeTokens.palette.yellow,\n blue: modeTokens.palette.blue,\n magenta: modeTokens.palette.magenta,\n cyan: modeTokens.palette.cyan,\n white: modeTokens.palette.white,\n brightBlack: modeTokens.palette.brightBlack,\n brightWhite: modeTokens.palette.brightWhite,\n border: modeTokens.semantic.border,\n bg: modeTokens.semantic.frameBg,\n };\n}\n\nexport const dark = resolveTheme(defaultThemeSpec, \"dark\");\nexport const light = resolveTheme(defaultThemeSpec, \"light\");\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n return {\n \"--termui-bg\": theme.semantic.frameBg,\n \"--termui-fg\": theme.semantic.frameFg,\n \"--termui-muted\": theme.semantic.frameMuted,\n \"--termui-border\": theme.semantic.border,\n \"--termui-border-strong\": theme.semantic.borderStrong,\n \"--termui-info\": theme.semantic.info,\n \"--termui-success\": theme.semantic.success,\n \"--termui-warn\": theme.semantic.warn,\n \"--termui-danger\": theme.semantic.danger,\n \"--termui-inverse-fg\": theme.semantic.inverseFg,\n \"--termui-inverse-bg\": theme.semantic.inverseBg,\n };\n}\n\nexport function parseThemeSpec(json: string): ThemeValidationResult {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch (error) {\n return {\n ok: false,\n issues: [{ path: \"$\", message: error instanceof Error ? error.message : \"Invalid JSON\" }],\n };\n }\n return validateThemeSpec(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction issue(path: string, message: string): ThemeValidationIssue {\n return { path, message };\n}\n\nfunction isColorValue(value: string): boolean {\n const v = value.trim();\n if (!v) return false;\n if (/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(v)) return true;\n if (/^(?:rgb|rgba|hsl|hsla|oklch|oklab|lab|lch|color)\\(.+\\)$/i.test(v)) return true;\n if (/^var\\(--[a-zA-Z0-9-_]+\\)$/.test(v)) return true;\n if (/^[a-zA-Z]+$/.test(v)) return true;\n return false;\n}\n\nfunction validateColorField(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"string\") {\n issues.push(issue(path, \"Expected a string color value\"));\n return;\n }\n if (!isColorValue(value)) {\n issues.push(issue(path, \"Invalid CSS color value\"));\n }\n}\n\nfunction validateHeadingBoldMaxLevel(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n return;\n }\n if (value < 1 || value > 6) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n }\n}\n\nfunction validateTokenGroup(\n value: unknown,\n path: string,\n fields: readonly string[],\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n for (const field of fields) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateMarkdownTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateColorField(value.headingMarker, `${path}.headingMarker`, issues);\n validateHeadingBoldMaxLevel(value.headingBoldMaxLevel, `${path}.headingBoldMaxLevel`, issues);\n\n if (!isRecord(value.headings)) {\n issues.push(issue(`${path}.headings`, \"Expected an object\"));\n } else {\n for (const level of [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const) {\n validateColorField(value.headings[level], `${path}.headings.${level}`, issues);\n }\n }\n\n for (const field of [\n \"paragraph\",\n \"unorderedBullet\",\n \"orderedMarker\",\n \"tableHeader\",\n \"tableBorder\",\n \"quoteMarker\",\n \"quoteText\",\n \"separator\",\n \"codeText\",\n \"codeEmpty\",\n \"codeBorder\",\n ] as const) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateComponentTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.tabs,\n `${path}.tabs`,\n [\"activeFg\", \"activeBg\", \"inactiveFg\", \"separator\"],\n issues,\n );\n validateTokenGroup(value.statusbar, `${path}.statusbar`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.badge, `${path}.badge`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.button, `${path}.button`, [\"fg\", \"bg\"], issues);\n}\n\nfunction validateModeTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.palette,\n `${path}.palette`,\n [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightWhite\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.semantic,\n `${path}.semantic`,\n [\n \"frameBg\",\n \"frameFg\",\n \"frameMuted\",\n \"border\",\n \"borderStrong\",\n \"inverseFg\",\n \"inverseBg\",\n \"info\",\n \"success\",\n \"warn\",\n \"danger\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.syntax,\n `${path}.syntax`,\n [\n \"default\",\n \"keyword\",\n \"string\",\n \"number\",\n \"comment\",\n \"punctuation\",\n \"function\",\n \"type\",\n ],\n issues,\n );\n\n validateMarkdownTokens(value.markdown, `${path}.markdown`, issues);\n validateComponentTokens(value.components, `${path}.components`, issues);\n}\n\nexport function validateThemeSpec(value: unknown): ThemeValidationResult {\n const issues: ThemeValidationIssue[] = [];\n if (!isRecord(value)) {\n return { ok: false, issues: [issue(\"$\", \"Expected an object\")] };\n }\n\n if (typeof value.id !== \"string\" || !value.id.trim()) {\n issues.push(issue(\"$.id\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.label !== \"string\" || !value.label.trim()) {\n issues.push(issue(\"$.label\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.version !== \"number\" || !Number.isInteger(value.version) || value.version < 1) {\n issues.push(issue(\"$.version\", \"Expected a positive integer\"));\n }\n\n if (!isRecord(value.modes)) {\n issues.push(issue(\"$.modes\", \"Expected an object with light/dark modes\"));\n } else {\n validateModeTokens(value.modes.dark, \"$.modes.dark\", issues);\n validateModeTokens(value.modes.light, \"$.modes.light\", issues);\n }\n\n if (issues.length > 0) {\n return { ok: false, issues };\n }\n\n return {\n ok: true,\n issues: [],\n theme: value as ThemeSpec,\n };\n}\n","import { tokenize, type TokenType } from \"../tokenize\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"./base\";\nimport { box, lines, type BoxAction } from \"./layout\";\n\nexport function tokenColor(type: TokenType, theme: Theme): string {\n switch (type) {\n case \"keyword\": return theme.syntax.keyword;\n case \"string\": return theme.syntax.string;\n case \"number\": return theme.syntax.number;\n case \"comment\": return theme.syntax.comment;\n case \"punctuation\": return theme.syntax.punctuation;\n case \"function\": return theme.syntax.function;\n case \"type\": return theme.syntax.type;\n default: return theme.syntax.default;\n }\n}\n\nexport function code(\n source: string,\n opts?: { language?: string; title?: string; borderColor?: string; theme?: Theme; copyable?: boolean; action?: BoxAction },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const tokens = tokenize(source, opts?.language);\n const copyAction = opts?.copyable !== false\n ? { label: \"cp\", onClick: () => navigator.clipboard.writeText(source), color: t.semantic.frameMuted }\n : undefined;\n return box(\n lines(\n tokens.length > 0\n ? tokens.map((lineTokens) =>\n lineTokens.length === 0\n ? [{ text: \" \", color: t.markdown.codeEmpty }]\n : lineTokens.map((tok) => ({ text: tok.text, color: tokenColor(tok.type, t) })),\n )\n : [[{ text: \" \", color: t.markdown.codeEmpty, dim: true }]],\n ),\n {\n title: opts?.title ?? (opts?.language ? `code:${opts.language}` : \"code\"),\n borderColor: opts?.borderColor ?? t.markdown.codeBorder,\n action: opts?.action ?? copyAction,\n },\n );\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { padLine } from \"./text\";\n\nfunction fmtNum(n: number): string {\n if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1) + \"k\";\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(1);\n}\n\nexport function chart(\n data: number[],\n opts?: { height?: number; color?: string; axisColor?: string; fill?: boolean },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const height = opts?.height ?? 8;\n const color = opts?.color;\n const axisColor = opts?.axisColor;\n\n if (data.length === 0 || width < 4 || height < 2) return [padLine([], width)];\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const minLabel = fmtNum(min);\n const maxLabel = fmtNum(max);\n const labelW = Math.max(minLabel.length, maxLabel.length);\n const axisW = labelW + 2;\n const plotW = Math.max(1, width - axisW);\n\n // Resample data to plotW points\n const points: number[] = [];\n if (data.length === 1) {\n for (let i = 0; i < plotW; i++) points.push(data[0]!);\n } else {\n for (let i = 0; i < plotW; i++) {\n const idx = (i / (plotW - 1)) * (data.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.min(lo + 1, data.length - 1);\n const t = idx - lo;\n points.push(data[lo]! * (1 - t) + data[hi]! * t);\n }\n }\n\n // Map to row indices (0 = bottom, height-1 = top)\n const rows = points.map((v) => Math.round(((v - min) / range) * (height - 1)));\n\n const result: Block = [];\n for (let row = height - 1; row >= 0; row--) {\n const line: Line = [];\n\n // Y axis\n let label = \"\";\n if (row === height - 1) label = maxLabel;\n else if (row === 0) label = minLabel;\n line.push({ text: label.padStart(labelW) + \" \\u2502\", color: axisColor, noSelect: true });\n\n // Plot area\n let text = \"\";\n for (let col = 0; col < plotW; col++) {\n const val = rows[col]!;\n if (val === row) text += \"\\u2584\";\n else if (opts?.fill && val > row) text += \"\\u2588\";\n else text += \" \";\n }\n line.push(color ? { text, color } : text);\n result.push(padLine(line, width));\n }\n\n // X axis\n const xAxis: Line = [\n { text: \" \".repeat(labelW) + \" \\u2514\" + \"\\u2500\".repeat(plotW), color: axisColor, noSelect: true },\n ];\n result.push(padLine(xAxis, width));\n\n return result;\n };\n}\n","import type { Line, Segment, Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\nfunction headingLevelKey(level: number): keyof Theme[\"markdown\"][\"headings\"] {\n if (level <= 1) return \"h1\";\n if (level === 2) return \"h2\";\n if (level === 3) return \"h3\";\n if (level === 4) return \"h4\";\n if (level === 5) return \"h5\";\n return \"h6\";\n}\n\nexport function headingColor(level: number, theme: Theme, overrides?: MarkdownThemeOverrides): string {\n const key = headingLevelKey(level);\n return overrides?.headings?.[key] ?? theme.markdown.headings[key];\n}\n\nexport function isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n return /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed);\n}\n\nexport function wrapText(text: string, maxWidth: number): string[] {\n const width = Math.max(1, maxWidth);\n const normalized = text.replace(/\\s+/g, \" \").trim();\n if (!normalized) return [\"\"];\n\n const linesOut: string[] = [];\n let rest = normalized;\n\n while (rest.length > width) {\n const slice = rest.slice(0, width + 1);\n const splitAt = slice.lastIndexOf(\" \");\n const end = splitAt > 0 ? splitAt : width;\n linesOut.push(rest.slice(0, end).trimEnd());\n rest = rest.slice(end).trimStart();\n }\n\n linesOut.push(rest);\n return linesOut;\n}\n\nexport function renderPrefixedText(\n text: string,\n width: number,\n prefix: Segment,\n continuationPrefix: string,\n textStyle?: Omit<Exclude<Segment, string>, \"text\" | \"onClick\">,\n): Line[] {\n const prefixText = typeof prefix === \"string\" ? prefix : prefix.text;\n const wrapped = wrapText(text, width - prefixText.length);\n\n return wrapped.map((chunk, index) => {\n if (index === 0) {\n return [prefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n }\n return [continuationPrefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n });\n}\n\nexport function normalizeHtmlText(text: string): string {\n return text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction getValueByPath(source: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = source;\n for (const part of parts) {\n if (!isRecord(current)) return undefined;\n current = current[part];\n }\n return current;\n}\n\nexport function resolveThemeColor(value: string | null | undefined, theme: Theme): string | undefined {\n if (!value) return undefined;\n const raw = value.trim();\n if (!raw) return undefined;\n const topLevel = theme[raw as keyof Theme];\n if (typeof topLevel === \"string\") return topLevel;\n const nested = getValueByPath(theme, raw);\n if (typeof nested === \"string\") return nested;\n return raw;\n}\n\nexport function getColorAttr(el: Element, theme: Theme, names: string[]): string | undefined {\n for (const name of names) {\n const value = resolveThemeColor(el.getAttribute(name), theme);\n if (value) return value;\n }\n return undefined;\n}\n\nexport function parseIntegerAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function parseCodeLanguage(el: Element): string | undefined {\n const explicit = el.getAttribute(\"language\") ?? 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 type { Theme } from \"../termui\";\nimport {\n getColorAttr,\n normalizeHtmlText,\n parseCodeLanguage,\n parseIntegerAttr,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport { type TermAction, type TermIRNode } from \"./ir\";\n\ntype ActionSeed =\n | { type: \"action\"; id?: string; text: string }\n | { type: \"link\"; href?: string; text: string };\n\nexport type HtmlTagCompiler = (el: Element, ctx: HtmlCompileContext) => TermIRNode | null;\n\nexport type HtmlCompileContext = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n compileChildren: (el: Element) => TermIRNode[];\n compileNode: (node: ChildNode) => TermIRNode | null;\n actionFromElement: (el: Element, seed: ActionSeed) => TermAction;\n};\n\nexport type CompileHtmlToIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n containerGap?: number;\n};\n\nconst CONTAINER_TAGS = new Set([\n \"term\",\n \"term-ui\",\n \"main\",\n \"section\",\n \"div\",\n \"header\",\n \"body\",\n]);\n\nconst htmlTagRegistry = new Map<string, HtmlTagCompiler>();\n\nfunction stack(children: TermIRNode[], gap: number): TermIRNode {\n return { kind: \"stack\", gap, children };\n}\n\n// ---------------------------------------------------------------------------\n// CSS layout inference -- read display/gap/grid from getComputedStyle\n// ---------------------------------------------------------------------------\n\ntype CSSLayout = {\n display?: \"flex\" | \"grid\";\n direction?: \"row\" | \"column\";\n gap?: number;\n cols?: number;\n};\n\nfunction cssGapToLines(raw: string, el: Element): number | undefined {\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)\\s*(px|rem|em|ch)?/);\n if (!match) return undefined;\n const value = Number.parseFloat(match[1]!);\n const unit = (match[2] ?? \"px\").toLowerCase();\n if (unit === \"px\") {\n const lh = parseFloat(getComputedStyle(el).lineHeight);\n const cellH = Number.isFinite(lh) && lh > 0 ? lh : 16;\n return Math.max(0, Math.round(value / cellH));\n }\n return Math.max(0, Math.round(value));\n}\n\nfunction resolveLayout(el: Element): CSSLayout {\n if (!el.isConnected || typeof getComputedStyle !== \"function\") return {};\n\n const cs = getComputedStyle(el);\n const display = cs.display;\n const isFlex = display === \"flex\" || display === \"inline-flex\";\n const isGrid = display === \"grid\" || display === \"inline-grid\";\n if (!isFlex && !isGrid) return {};\n\n const result: CSSLayout = { display: isFlex ? \"flex\" : \"grid\" };\n\n if (isFlex) {\n const dir = cs.flexDirection;\n if (dir === \"row\" || dir === \"column\") result.direction = dir;\n }\n\n if (isGrid) {\n const cols = cs.gridTemplateColumns;\n if (cols && cols !== \"none\") {\n const count = cols.split(/\\s+/).filter((t) => t.length > 0).length;\n if (count > 0) result.cols = count;\n }\n }\n\n const gap = cs.gap;\n if (gap && gap !== \"normal\" && gap !== \"0px\") {\n result.gap = cssGapToLines(gap, el);\n }\n\n return result;\n}\n\nfunction parseNumberListAttr(el: Element, name: string): number[] | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const out: number[] = [];\n for (const token of raw.split(/[\\s,]+/g)) {\n if (!token) continue;\n const n = Number.parseInt(token, 10);\n if (!Number.isFinite(n)) return undefined;\n out.push(n);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction parseNumericList(raw: string): number[] | undefined {\n const trimmed = raw.trim();\n if (!trimmed) return undefined;\n\n if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (!Array.isArray(parsed)) return undefined;\n const nums = parsed\n .map((value) => (typeof value === \"number\" ? value : Number(value)))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n } catch {\n return undefined;\n }\n }\n\n const nums = trimmed\n .split(/[\\s,]+/g)\n .filter((token) => token.length > 0)\n .map((token) => Number.parseFloat(token))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n}\n\nfunction parseBooleanAttr(el: Element, name: string): boolean | undefined {\n const raw = el.getAttribute(name);\n if (raw === null) return undefined;\n const value = raw.trim().toLowerCase();\n if (!value || value === \"true\" || value === \"1\" || value === \"yes\" || value === \"on\") return true;\n if (value === \"false\" || value === \"0\" || value === \"no\" || value === \"off\") return false;\n return true;\n}\n\nfunction firstAttr(el: Element, names: string[]): string | undefined {\n for (const name of names) {\n const value = el.getAttribute(name);\n if (value !== null) return value;\n }\n return undefined;\n}\n\nfunction parseIntegerAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseIntegerAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseBooleanAttrs(el: Element, names: string[]): boolean | undefined {\n for (const name of names) {\n const value = parseBooleanAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseNumericListAttrs(el: Element, names: string[]): number[] | undefined {\n for (const name of names) {\n const raw = el.getAttribute(name);\n if (!raw) continue;\n const parsed = parseNumericList(raw);\n if (parsed) return parsed;\n }\n return undefined;\n}\n\nfunction parseFloatAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseFloat(raw.trim());\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseFloatAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseFloatAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseDataAttrs(el: Element): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries((el as HTMLElement).dataset ?? {})) {\n if (typeof value === \"string\") out[key] = value;\n }\n return out;\n}\n\nfunction collectDirectChildElements(el: Element): Element[] {\n return Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n}\n\nfunction readScriptText(el: Element, types: string[]): string | undefined {\n for (const type of types) {\n const node = el.querySelector(`script[type=\"${type}\"]`);\n if (!node) continue;\n return node.textContent ?? \"\";\n }\n return undefined;\n}\n\nfunction parseJsonLiteral(raw: string): unknown {\n const text = raw.trim();\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return raw;\n }\n}\n\nfunction parseDataChildren(el: Element): number[] | undefined {\n const dataEls = el.querySelectorAll(\":scope > data\");\n if (dataEls.length === 0) return undefined;\n const out: number[] = [];\n for (let i = 0; i < dataEls.length; i++) {\n const d = dataEls[i]!;\n const v = Number.parseFloat(d.getAttribute(\"value\") ?? \"\");\n if (!Number.isFinite(v)) return undefined;\n out.push(v);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction compileChartNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const dataText = (el.textContent ?? \"\").trim();\n const data =\n parseNumericListAttrs(el, [\"data\", \"values\", \"data-values\", \"series\", \"data-series\"]) ??\n parseDataChildren(el) ??\n parseNumericList(dataText) ??\n [];\n\n return {\n kind: \"chart\",\n data,\n height: parseIntegerAttrs(el, [\"height\", \"data-height\"]),\n fill: parseBooleanAttrs(el, [\"fill\", \"data-fill\"]),\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n axisColor: getColorAttr(el, ctx.theme, [\"axis-color\", \"data-axis-color\"]),\n };\n}\n\nfunction compileStatusbarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n return {\n kind: \"statusbar\",\n left: firstAttr(el, [\"left\", \"data-left\"]) ?? \"\",\n right: firstAttr(el, [\"right\", \"data-right\"]) ?? \"\",\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"data-bg\", \"background\", \"data-background\"]),\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n };\n}\n\nfunction compileBarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const textLabel = normalizeHtmlText(el.textContent ?? \"\");\n return {\n kind: \"bar\",\n label: firstAttr(el, [\"label\", \"data-label\", \"aria-label\", \"title\"]) ?? (textLabel || undefined),\n value: parseFloatAttrs(el, [\"value\", \"data-value\"]) ?? 0,\n max: parseFloatAttrs(el, [\"max\", \"data-max\"]) ?? 100,\n width: parseIntegerAttrs(el, [\"width\", \"data-width\", \"bar-width\", \"data-bar-width\"]),\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n showPercent: parseBooleanAttrs(el, [\"percent\", \"show-percent\", \"data-percent\", \"data-show-percent\"]),\n };\n}\n\nfunction compileMarkdownNode(el: Element): TermIRNode {\n const value =\n firstAttr(el, [\"value\", \"data-value\"]) ??\n readScriptText(el, [\"text/markdown\", \"text/x-markdown\"]) ??\n (el.textContent ?? \"\");\n return {\n kind: \"markdown\",\n value,\n };\n}\n\nfunction compileJsonNode(el: Element): TermIRNode {\n const valueSource =\n firstAttr(el, [\"value\", \"data-value\"]) ??\n readScriptText(el, [\"application/json\", \"text/json\"]) ??\n (el.textContent ?? \"\");\n return {\n kind: \"json\",\n value: parseJsonLiteral(valueSource),\n title: firstAttr(el, [\"title\", \"data-title\"]) ?? undefined,\n };\n}\n\nfunction compileHtmlNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const value =\n firstAttr(el, [\"value\", \"data-value\"]) ??\n readScriptText(el, [\"text/html\", \"application/xhtml+xml\"]) ??\n el.innerHTML;\n\n return compileHtmlToIR(value, {\n theme: ctx.theme,\n overrides: ctx.overrides,\n containerGap: 1,\n });\n}\n\nfunction compileDataTermNode(el: Element, ctx: HtmlCompileContext): TermIRNode | null {\n const raw = firstAttr(el, [\"data-term\", \"data-termui\", \"data-ui\"]);\n if (!raw) return null;\n const kind = raw.trim().toLowerCase();\n if (!kind) return null;\n\n switch (kind) {\n case \"stack\":\n case \"vstack\":\n case \"column\":\n case \"col\":\n return {\n kind: \"stack\",\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n case \"hstack\":\n case \"row\":\n return {\n kind: \"hstack\",\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\", \"data-widths\"]),\n children: ctx.compileChildren(el),\n };\n case \"box\":\n case \"panel\":\n return {\n kind: \"box\",\n title: firstAttr(el, [\"title\", \"data-title\"]) ?? undefined,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\", \"data-border-color\"]) ??\n ctx.theme.semantic.border,\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n case \"grid\":\n return {\n kind: \"grid\",\n cols: parseIntegerAttrs(el, [\"cols\", \"data-cols\"]) ?? 2,\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 1,\n rowGap: parseIntegerAttrs(el, [\"row-gap\", \"data-row-gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n case \"separator\":\n case \"rule\":\n return {\n kind: \"separator\",\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.border,\n char: firstAttr(el, [\"char\", \"data-char\"]) ?? undefined,\n };\n case \"divider\":\n return {\n kind: \"divider\",\n label: firstAttr(el, [\"label\", \"data-label\"]) ?? \"\",\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.border,\n char: firstAttr(el, [\"char\", \"data-char\"]) ?? undefined,\n labelColor: getColorAttr(el, ctx.theme, [\"label-color\", \"data-label-color\"]) ?? undefined,\n };\n case \"blank\":\n case \"spacer\":\n return {\n kind: \"blank\",\n lines: parseIntegerAttrs(el, [\"lines\", \"data-lines\"]) ?? 1,\n };\n case \"button\":\n case \"action\": {\n const label = normalizeHtmlText(\n el.textContent ?? firstAttr(el, [\"label\", \"aria-label\", \"data-label\"]) ?? \"\",\n );\n if (!label) return null;\n const id =\n firstAttr(el, [\"action\", \"data-action\", \"name\"]) ??\n undefined;\n return {\n kind: \"button\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"data-bg\", \"background\", \"data-background\"]),\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n }\n case \"chart\":\n case \"sparkline\":\n return compileChartNode(el, ctx);\n case \"markdown\":\n case \"md\":\n return compileMarkdownNode(el);\n case \"json\":\n return compileJsonNode(el);\n case \"html\":\n return compileHtmlNode(el, ctx);\n case \"bar\":\n case \"progress\":\n return compileBarNode(el, ctx);\n case \"statusbar\":\n case \"status\":\n return compileStatusbarNode(el, ctx);\n default:\n return null;\n }\n}\n\nfunction registerDefaultCompilers(): void {\n if (htmlTagRegistry.size > 0) return;\n\n for (let level = 1; level <= 6; level++) {\n htmlTagRegistry.set(`h${level}`, (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"heading\",\n level,\n text,\n markerColor: getColorAttr(el, ctx.theme, [\"marker-color\", \"data-marker-color\"]),\n };\n });\n }\n\n htmlTagRegistry.set(\"p\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color:\n getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ??\n ctx.overrides?.paragraph ??\n ctx.theme.markdown.paragraph,\n };\n });\n\n htmlTagRegistry.set(\"ul\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return { kind: \"list\", ordered: false, start: 1, items };\n });\n\n htmlTagRegistry.set(\"ol\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return {\n kind: \"list\",\n ordered: true,\n start: parseIntegerAttr(el, \"start\") ?? 1,\n items,\n };\n });\n\n htmlTagRegistry.set(\"blockquote\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"blockquote\",\n text,\n markerColor:\n getColorAttr(el, ctx.theme, [\"marker-color\", \"data-marker-color\"]) ??\n ctx.overrides?.quoteMarker ??\n ctx.theme.markdown.quoteMarker,\n color: ctx.overrides?.quoteText ?? ctx.theme.markdown.quoteText,\n };\n });\n\n htmlTagRegistry.set(\"hr\", (el, ctx) => {\n const label = firstAttr(el, [\"label\", \"data-label\"]);\n if (label) {\n return {\n kind: \"divider\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.border,\n char: firstAttr(el, [\"char\", \"data-char\"]) ?? undefined,\n labelColor: getColorAttr(el, ctx.theme, [\"label-color\", \"data-label-color\"]) ?? undefined,\n };\n }\n return {\n kind: \"separator\",\n color:\n getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ??\n ctx.overrides?.separator ??\n ctx.theme.markdown.separator,\n };\n });\n\n htmlTagRegistry.set(\"pre\", (el, ctx) => {\n const language = parseCodeLanguage(el) ?? parseCodeLanguage(el.querySelector(\"code\") ?? el);\n const raw = (el.textContent ?? \"\").replace(/\\r\\n/g, \"\\n\");\n const trimmed = raw.replace(/^\\n+|\\n+$/g, \"\");\n\n const lines = trimmed.length > 0 ? trimmed.split(\"\\n\").map((line) => line.replace(/\\t/g, \" \")) : [];\n return {\n kind: \"pre\",\n lines,\n language,\n textColor:\n getColorAttr(el, ctx.theme, [\"text-color\", \"data-text-color\", \"color\", \"data-color\"]) ??\n ctx.overrides?.codeText ??\n ctx.theme.markdown.codeText,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\", \"data-border-color\"]) ??\n ctx.overrides?.codeBorder ??\n ctx.theme.markdown.codeBorder,\n emptyColor: ctx.overrides?.codeEmpty ?? ctx.theme.markdown.codeEmpty,\n };\n });\n\n htmlTagRegistry.set(\"table\", (el, ctx) => {\n const rowElements: Element[] = [];\n for (const child of collectDirectChildElements(el)) {\n const tag = child.tagName.toLowerCase();\n if (tag === \"tr\") {\n rowElements.push(child);\n continue;\n }\n if (tag !== \"thead\" && tag !== \"tbody\" && tag !== \"tfoot\") continue;\n for (const row of collectDirectChildElements(child)) {\n if (row.tagName.toLowerCase() === \"tr\") rowElements.push(row);\n }\n }\n\n const rows = rowElements\n .map((rowEl) => {\n const inHead = rowEl.parentElement?.tagName.toLowerCase() === \"thead\";\n return collectDirectChildElements(rowEl)\n .filter((cell) => {\n const tag = cell.tagName.toLowerCase();\n return tag === \"th\" || tag === \"td\";\n })\n .map((cell) => ({\n text: normalizeHtmlText(cell.textContent ?? \"\"),\n header: inHead || cell.tagName.toLowerCase() === \"th\",\n }));\n })\n .filter((cells) => cells.length > 0);\n\n if (rows.length === 0) {\n return {\n kind: \"paragraph\",\n text: \"(empty table)\",\n color: ctx.theme.semantic.frameMuted,\n };\n }\n\n const first = rows[0]!;\n const hasHeader = first.some((cell) => cell.header);\n const headers = hasHeader\n ? first.map((cell, index) => cell.text || `col_${index + 1}`)\n : first.map((_, index) => `col_${index + 1}`);\n const bodyRows = rows\n .slice(hasHeader ? 1 : 0)\n .map((row) => headers.map((_, index) => row[index]?.text ?? \"\"));\n\n return {\n kind: \"table\",\n headers,\n rows: bodyRows,\n headerColor:\n getColorAttr(el, ctx.theme, [\"header-color\", \"data-header-color\"]) ??\n ctx.overrides?.tableHeader ??\n ctx.theme.markdown.tableHeader,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\", \"data-border-color\"]) ??\n ctx.overrides?.tableBorder ??\n ctx.theme.markdown.tableBorder,\n };\n });\n\n htmlTagRegistry.set(\"button\", (el, ctx) => {\n const label = normalizeHtmlText(el.textContent ?? el.getAttribute(\"label\") ?? \"\");\n if (!label) return null;\n const id =\n el.getAttribute(\"action\") ??\n el.getAttribute(\"data-action\") ??\n el.getAttribute(\"name\") ??\n undefined;\n return {\n kind: \"button\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"data-bg\", \"background\", \"data-background\"]),\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n });\n\n htmlTagRegistry.set(\"progress\", (el, ctx) => compileBarNode(el, ctx));\n\n htmlTagRegistry.set(\"term-button\", (el, ctx) => {\n const label = normalizeHtmlText(el.textContent ?? el.getAttribute(\"label\") ?? \"\");\n if (!label) return null;\n const id =\n el.getAttribute(\"action\") ??\n el.getAttribute(\"data-action\") ??\n el.getAttribute(\"name\") ??\n undefined;\n return {\n kind: \"button\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]),\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"data-bg\", \"background\", \"data-background\"]),\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n });\n\n htmlTagRegistry.set(\"a\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n const href = el.getAttribute(\"href\")?.trim();\n return {\n kind: \"link\",\n text,\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.info,\n action: ctx.actionFromElement(el, { type: \"link\", href: href || undefined, text }),\n };\n });\n\n // -- Smart semantic inference --\n // <article title=\"...\"> → box\n htmlTagRegistry.set(\"article\", (el, ctx) => {\n const title = el.getAttribute(\"title\") ?? undefined;\n if (title) {\n return {\n kind: \"box\",\n title,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\", \"data-border-color\"]) ??\n ctx.theme.semantic.border,\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n }\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 1);\n });\n\n // <figure data-values=\"...\"> → chart; otherwise container\n htmlTagRegistry.set(\"figure\", (el, ctx) => {\n const data = parseNumericListAttrs(el, [\"data\", \"values\", \"data-values\", \"series\", \"data-series\"]);\n if (data) return compileChartNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 0);\n });\n\n // <footer left=\"...\" right=\"...\"> → statusbar; otherwise container\n htmlTagRegistry.set(\"footer\", (el, ctx) => {\n const left = firstAttr(el, [\"left\", \"data-left\"]);\n const right = firstAttr(el, [\"right\", \"data-right\"]);\n if (left !== undefined || right !== undefined) return compileStatusbarNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 1);\n });\n\n // <nav> → hstack (navigation is inherently horizontal)\n htmlTagRegistry.set(\"nav\", (el, ctx) => ({\n kind: \"hstack\",\n gap: parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\", \"data-widths\"]),\n children: ctx.compileChildren(el),\n }));\n\n htmlTagRegistry.set(\"term-vstack\", (el, ctx) => ({\n kind: \"stack\",\n gap: parseIntegerAttr(el, \"gap\") ?? 0,\n children: ctx.compileChildren(el),\n }));\n\n htmlTagRegistry.set(\"term-hstack\", (el, ctx) => ({\n kind: \"hstack\",\n gap: parseIntegerAttr(el, \"gap\") ?? 1,\n widths: parseNumberListAttr(el, \"widths\"),\n children: ctx.compileChildren(el),\n }));\n\n htmlTagRegistry.set(\"term-box\", (el, ctx) => ({\n kind: \"box\",\n title: el.getAttribute(\"title\") ?? undefined,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\", \"data-border-color\"]) ??\n ctx.theme.semantic.border,\n gap: parseIntegerAttr(el, \"gap\") ?? 0,\n children: ctx.compileChildren(el),\n }));\n\n htmlTagRegistry.set(\"term-chart\", (el, ctx) => compileChartNode(el, ctx));\n\n htmlTagRegistry.set(\"term-markdown\", (el) => compileMarkdownNode(el));\n\n htmlTagRegistry.set(\"term-json\", (el) => compileJsonNode(el));\n\n htmlTagRegistry.set(\"term-html\", (el, ctx) => compileHtmlNode(el, ctx));\n\n htmlTagRegistry.set(\"term-statusbar\", (el, ctx) => compileStatusbarNode(el, ctx));\n\n htmlTagRegistry.set(\"term-bar\", (el, ctx) => compileBarNode(el, ctx));\n\n htmlTagRegistry.set(\"term-grid\", (el, ctx) => ({\n kind: \"grid\",\n cols: parseIntegerAttr(el, \"cols\") ?? 2,\n gap: parseIntegerAttr(el, \"gap\") ?? 1,\n rowGap: parseIntegerAttr(el, \"row-gap\") ?? 0,\n children: ctx.compileChildren(el),\n }));\n\n htmlTagRegistry.set(\"term-divider\", (el, ctx) => ({\n kind: \"divider\",\n label: el.getAttribute(\"label\") ?? \"\",\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.border,\n char: el.getAttribute(\"char\") ?? undefined,\n labelColor:\n getColorAttr(el, ctx.theme, [\"label-color\", \"data-label-color\"]) ?? undefined,\n }));\n\n htmlTagRegistry.set(\"term-separator\", (el, ctx) => ({\n kind: \"separator\",\n color: getColorAttr(el, ctx.theme, [\"color\", \"data-color\"]) ?? ctx.theme.semantic.border,\n char: el.getAttribute(\"char\") ?? undefined,\n }));\n\n htmlTagRegistry.set(\"term-blank\", (el) => ({\n kind: \"blank\",\n lines: parseIntegerAttr(el, \"lines\") ?? 1,\n }));\n}\n\nfunction createCompileContext(options: CompileHtmlToIROptions): {\n compileElement: (el: Element) => TermIRNode | null;\n} {\n const containerGap = options.containerGap ?? 1;\n let ctx!: HtmlCompileContext;\n\n const compileNode = (node: ChildNode): TermIRNode | null => {\n if (node.nodeType === 3) {\n const text = normalizeHtmlText(node.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color: options.overrides?.paragraph ?? options.theme.markdown.paragraph,\n };\n }\n if (node.nodeType !== 1) return null;\n return compileElement(node as Element);\n };\n\n const compileChildren = (el: Element): TermIRNode[] => {\n const out: TermIRNode[] = [];\n for (const node of Array.from(el.childNodes)) {\n const next = compileNode(node);\n if (next) out.push(next);\n }\n return out;\n };\n\n const actionFromElement = (el: Element, seed: ActionSeed): TermAction => ({\n ...seed,\n tag: el.tagName.toLowerCase(),\n dataset: parseDataAttrs(el),\n sourceElement: el,\n });\n\n const compileElement = (el: Element): TermIRNode | null => {\n const dataTermNode = compileDataTermNode(el, ctx);\n if (dataTermNode) return dataTermNode;\n\n const tag = el.tagName.toLowerCase();\n const compiler = htmlTagRegistry.get(tag);\n if (compiler) return compiler(el, ctx);\n\n if (CONTAINER_TAGS.has(tag)) {\n const layout = resolveLayout(el);\n const cols = parseIntegerAttrs(el, [\"cols\", \"data-cols\"]) ?? layout.cols;\n const gap = parseIntegerAttrs(el, [\"gap\", \"data-gap\"]) ?? layout.gap;\n const children = compileChildren(el);\n\n if (cols || layout.display === \"grid\") {\n return {\n kind: \"grid\",\n cols: cols ?? 2,\n gap: gap ?? 1,\n rowGap: parseIntegerAttrs(el, [\"row-gap\", \"data-row-gap\"]) ?? 0,\n children,\n };\n }\n\n if (layout.display === \"flex\" && layout.direction !== \"column\") {\n return {\n kind: \"hstack\",\n gap: gap ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\", \"data-widths\"]),\n children,\n };\n }\n\n return stack(children, gap ?? containerGap);\n }\n\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return stack(compileChildren(el), containerGap);\n return {\n kind: \"paragraph\",\n text,\n color: getColorAttr(el, options.theme, [\"color\", \"data-color\"]) ?? options.theme.markdown.paragraph,\n };\n };\n\n ctx = {\n theme: options.theme,\n overrides: options.overrides,\n compileChildren,\n compileNode,\n actionFromElement,\n };\n\n return { compileElement };\n}\n\nregisterDefaultCompilers();\n\nexport function registerHtmlTagCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerDefaultCompilers();\n htmlTagRegistry.set(tag.trim().toLowerCase(), compiler);\n}\n\nexport function compileHtmlElementToIR(root: Element, options: CompileHtmlToIROptions): TermIRNode {\n registerDefaultCompilers();\n const { compileElement } = createCompileContext(options);\n return compileElement(root) ?? stack([], options.containerGap ?? 1);\n}\n\nexport function compileHtmlToIR(html: string, options: CompileHtmlToIROptions): TermIRNode {\n if (typeof DOMParser === \"undefined\") {\n return stack([], options.containerGap ?? 1);\n }\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n const host = doc.body.querySelector(\"term\");\n const root = host ?? doc.body;\n return compileHtmlElementToIR(root, options);\n}\n","import {\n blank,\n box,\n fromJsonNode,\n lines,\n table,\n vstack,\n type Column,\n type JsonNode,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport { isNumericValue, renderPrefixedText, wrapText } from \"./common\";\n\nconst JSON_NODE_TYPES = new Set([\n \"vstack\",\n \"hstack\",\n \"box\",\n \"lines\",\n \"separator\",\n \"blank\",\n \"table\",\n \"statusbar\",\n \"tabs\",\n \"bar\",\n \"text\",\n] as const satisfies readonly string[]);\n\nfunction isJsonNode(value: unknown): value is JsonNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" && JSON_NODE_TYPES.has(type as typeof JSON_NODE_TYPES extends Set<infer T> ? T : never);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveStyle(\n value: unknown,\n theme: Theme,\n): Omit<Exclude<Segment, string>, \"text\" | \"onClick\"> | undefined {\n if (typeof value === \"string\") return { color: theme.green };\n if (typeof value === \"number\") return { color: theme.yellow };\n if (typeof value === \"boolean\") {\n return { color: value ? theme.green : theme.red, bold: true };\n }\n if (value === null) return { color: theme.brightBlack, dim: true };\n return undefined;\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === undefined) return \"undefined\";\n return String(value);\n}\n\nfunction isPrimitiveJsonValue(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isPrimitiveArrayValue(value: unknown): value is unknown[] {\n return Array.isArray(value) && value.every((item) => isPrimitiveJsonValue(item));\n}\n\nfunction segmentLength(segment: Segment): number {\n return typeof segment === \"string\" ? segment.length : segment.text.length;\n}\n\nfunction lineLength(line: Line): number {\n let total = 0;\n for (const segment of line) total += segmentLength(segment);\n return total;\n}\n\nfunction primitiveSegment(value: unknown, theme: Theme): Segment {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n return style ? { text, ...style } : text;\n}\n\nfunction indentLayout(layout: LayoutFn, indent: number): LayoutFn {\n return (w) => {\n if (indent <= 0) return layout(w);\n const pad = \" \".repeat(indent);\n if (w <= indent) return layout(w);\n return layout(w - indent).map((line) => [pad, ...line]);\n };\n}\n\nfunction sectionHeader(title: string, theme: Theme): LayoutFn {\n return (w) => {\n const label = ` ${title} `;\n const remaining = Math.max(0, w - label.length);\n return [[\n { text: label, color: theme.brightBlack, bold: true },\n { text: \"─\".repeat(remaining), color: theme.border },\n ]];\n };\n}\n\nfunction isShallowSectionValue(value: unknown): boolean {\n if (isRecord(value)) {\n const vals = Object.values(value);\n return vals.every((item) => isPrimitiveJsonValue(item) || isPrimitiveArrayValue(item));\n }\n if (Array.isArray(value)) return value.every((item) => isPrimitiveJsonValue(item));\n return isPrimitiveJsonValue(value);\n}\n\nfunction stackWithSpacing(children: LayoutFn[]): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1) return children[0]!;\n\n const layouts: LayoutFn[] = [];\n children.forEach((child, index) => {\n if (index > 0) layouts.push(blank());\n layouts.push(child);\n });\n return vstack(...layouts);\n}\n\nfunction renderPrimitiveValue(value: unknown, theme: Theme): LayoutFn {\n return (w) => {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n const rows = text.split(\"\\n\");\n const out: Line[] = [];\n\n for (const row of rows) {\n const wrapped = wrapText(row, w);\n for (const chunk of wrapped) {\n out.push([style ? { text: chunk, ...style } : chunk]);\n }\n }\n\n return out.length > 0 ? out : [[{ text: \" \", dim: true }]];\n };\n}\n\nfunction renderStandalonePrimitiveArray(value: unknown[], theme: Theme): LayoutFn {\n return (w) => {\n if (value.length === 0) {\n return [[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]];\n }\n\n const out: Line[] = [];\n const digits = String(value.length).length;\n value.forEach((item, index) => {\n const prefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: prefix, color: theme.brightBlack },\n \" \".repeat(prefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n return out;\n };\n}\n\nfunction isTabularRecordArray(value: unknown[]): value is Record<string, unknown>[] {\n if (value.length === 0) return false;\n if (!value.every((item) => isRecord(item))) return false;\n\n const keys = Object.keys(value[0]!);\n if (keys.length < 2) return false;\n\n return value.every((row) => {\n const rowKeys = Object.keys(row);\n if (rowKeys.length !== keys.length) return false;\n if (!keys.every((key) => rowKeys.includes(key))) return false;\n return keys.every((key) => isPrimitiveJsonValue(row[key]));\n });\n}\n\nfunction renderTabularRecordArray(\n rows: Record<string, unknown>[],\n theme: Theme,\n): LayoutFn {\n const keys = Object.keys(rows[0] ?? {});\n\n const columns: Column[] = keys.map((key) => {\n const values = rows.map((row) => row[key]);\n const isBoolCol = values.every((v) => typeof v === \"boolean\");\n const isNumCol = values.every((v) => isNumericValue(v));\n\n return {\n key,\n title: key,\n align: isNumCol ? \"right\" : \"left\",\n headerColor: theme.cyan,\n color: isBoolCol\n ? (value: unknown) =>\n value === true ? theme.green : value === false ? theme.red : undefined\n : isNumCol\n ? theme.yellow\n : undefined,\n };\n });\n\n return table(columns, rows, {\n borderColor: theme.border,\n });\n}\n\nfunction renderArrayValue(value: unknown[], theme: Theme): LayoutFn {\n if (value.length === 0) {\n return lines([[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]]);\n }\n\n if (isTabularRecordArray(value)) {\n return renderTabularRecordArray(value, theme);\n }\n\n if (value.every((item) => isPrimitiveJsonValue(item))) {\n return renderStandalonePrimitiveArray(value, theme);\n }\n\n const children = value.map((item, index) =>\n renderJsonSection(`item ${index + 1}`, item, theme),\n );\n return stackWithSpacing(children);\n}\n\ntype PrimitiveRow =\n | { kind: \"primitive\"; key: string; value: unknown }\n | { kind: \"array\"; key: string; value: unknown[] };\n\nfunction renderPrimitiveRows(rows: PrimitiveRow[], theme: Theme): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const keyWidth = Math.max(...rows.map((row) => row.key.length), 0);\n\n for (const row of rows) {\n const keyPrefix = ` ${row.key.padEnd(keyWidth)}: `;\n\n if (row.kind === \"primitive\") {\n out.push(\n ...renderPrefixedText(\n primitiveText(row.value),\n w,\n { text: keyPrefix, color: theme.brightBlack },\n \" \".repeat(keyPrefix.length),\n primitiveStyle(row.value, theme),\n ),\n );\n continue;\n }\n\n if (row.value.length === 0) {\n out.push([\n { text: keyPrefix, color: theme.brightBlack },\n { text: \"(empty)\", color: theme.brightBlack, dim: true },\n ]);\n continue;\n }\n\n const inlineSegments: Segment[] = [];\n row.value.forEach((item, index) => {\n if (index > 0) inlineSegments.push({ text: \", \", color: theme.brightBlack });\n inlineSegments.push(primitiveSegment(item, theme));\n });\n const inlineLine: Line = [{ text: keyPrefix, color: theme.brightBlack }, ...inlineSegments];\n\n if (lineLength(inlineLine) <= w) {\n out.push(inlineLine);\n continue;\n }\n\n out.push([{ text: ` ${row.key}:`, color: theme.brightBlack }]);\n const digits = String(row.value.length).length;\n row.value.forEach((item, index) => {\n const listPrefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: listPrefix, color: theme.brightBlack },\n \" \".repeat(listPrefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n }\n\n return out;\n };\n}\n\nfunction renderObjectValue(value: Record<string, unknown>, theme: Theme): LayoutFn {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return lines([[{ text: \"(empty object)\", color: theme.brightBlack, dim: true }]]);\n }\n\n const groups: LayoutFn[] = [];\n let pendingRows: PrimitiveRow[] = [];\n const flushRows = () => {\n if (pendingRows.length === 0) return;\n groups.push(renderPrimitiveRows(pendingRows, theme));\n pendingRows = [];\n };\n\n for (const [key, item] of entries) {\n if (isPrimitiveJsonValue(item)) {\n pendingRows.push({ kind: \"primitive\", key, value: item });\n continue;\n }\n\n if (isPrimitiveArrayValue(item)) {\n pendingRows.push({ kind: \"array\", key, value: item });\n continue;\n }\n\n flushRows();\n groups.push(renderJsonSection(key, item, theme));\n }\n\n flushRows();\n\n return stackWithSpacing(groups);\n}\n\nfunction renderJsonContent(value: unknown, theme: Theme): LayoutFn {\n if (isRecord(value)) return renderObjectValue(value, theme);\n if (Array.isArray(value)) return renderArrayValue(value, theme);\n return renderPrimitiveValue(value, theme);\n}\n\nfunction renderJsonSection(title: string, value: unknown, theme: Theme): LayoutFn {\n if (Array.isArray(value) && isTabularRecordArray(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n if (isShallowSectionValue(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n return box(renderJsonContent(value, theme), {\n title,\n borderColor: theme.border,\n });\n}\n\nexport function fromJson(\n value: unknown,\n opts?: { theme?: Theme; title?: string },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n let parsedValue = value;\n\n if (typeof value === \"string\") {\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n }\n\n if (isJsonNode(parsedValue)) return fromJsonNode(parsedValue);\n\n const content = renderJsonContent(parsedValue, theme);\n if (opts?.title) {\n return box(content, {\n title: opts.title,\n borderColor: theme.border,\n });\n }\n return content;\n}\n","import {\n blank,\n box,\n lines,\n separator,\n table,\n type Column,\n type LayoutFn,\n type Line,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"./common\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\ntype MarkdownBlock =\n | { type: \"heading\"; level: number; text: string }\n | { type: \"paragraph\"; text: string }\n | { type: \"unordered-list\"; items: string[] }\n | { type: \"ordered-list\"; start: number; items: string[] }\n | { type: \"table\"; headers: string[]; rows: string[][] }\n | { type: \"code\"; language?: string; lines: string[] }\n | { type: \"quote\"; lines: string[] }\n | { type: \"separator\" };\n\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (/^#{1,6}\\s+/.test(trimmed)) return true;\n if (/^```/.test(trimmed)) return true;\n if (/^>\\s?/.test(trimmed)) return true;\n if (/^[-*+]\\s+/.test(trimmed)) return true;\n if (/^\\d+\\.\\s+/.test(trimmed)) return true;\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n return /^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed);\n}\n\nfunction parsePipeCells(line: string): string[] | null {\n const trimmed = line.trim();\n if (!trimmed.includes(\"|\")) return null;\n\n let core = trimmed;\n if (core.startsWith(\"|\")) core = core.slice(1);\n if (core.endsWith(\"|\")) core = core.slice(0, -1);\n const cells = core.split(\"|\").map((cell) => cell.trim());\n return cells.length >= 2 ? cells : null;\n}\n\nfunction isTableDividerLine(line: string): boolean {\n const cells = parsePipeCells(line);\n if (!cells) return false;\n return cells.every((cell) => /^:?-{3,}:?$/.test(cell));\n}\n\nfunction parseMarkdown(markdown: string): MarkdownBlock[] {\n const rows = markdown.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: MarkdownBlock[] = [];\n\n let i = 0;\n while (i < rows.length) {\n const raw = rows[i] ?? \"\";\n const trimmed = raw.trim();\n\n if (!trimmed) {\n i += 1;\n continue;\n }\n\n const codeStart = trimmed.match(/^```([\\w+-]+)?\\s*$/);\n if (codeStart) {\n i += 1;\n const codeLines: string[] = [];\n while (i < rows.length && !(rows[i] ?? \"\").trim().startsWith(\"```\")) {\n codeLines.push((rows[i] ?? \"\").replace(/\\t/g, \" \"));\n i += 1;\n }\n if (i < rows.length) i += 1;\n blocks.push({\n type: \"code\",\n language: codeStart[1],\n lines: codeLines,\n });\n continue;\n }\n\n const heading = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (heading) {\n blocks.push({\n type: \"heading\",\n level: heading[1]!.length,\n text: heading[2]!.trim(),\n });\n i += 1;\n continue;\n }\n\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n if (/^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed)) {\n blocks.push({ type: \"separator\" });\n i += 1;\n continue;\n }\n\n const maybeHeaderCells = parsePipeCells(raw);\n const nextLine = rows[i + 1] ?? \"\";\n if (maybeHeaderCells && isTableDividerLine(nextLine)) {\n const headers = maybeHeaderCells;\n i += 2; // consume header + divider\n const dataRows: string[][] = [];\n while (i < rows.length) {\n const rowCells = parsePipeCells(rows[i] ?? \"\");\n if (!rowCells) break;\n const normalized = headers.map((_, idx) => rowCells[idx] ?? \"\");\n dataRows.push(normalized);\n i += 1;\n }\n blocks.push({ type: \"table\", headers, rows: dataRows });\n continue;\n }\n\n if (/^>\\s?/.test(trimmed)) {\n const quoteLines: string[] = [];\n while (i < rows.length) {\n const m = (rows[i] ?? \"\").match(/^\\s*>\\s?(.*)$/);\n if (!m) break;\n quoteLines.push(m[1]!);\n i += 1;\n }\n blocks.push({ type: \"quote\", lines: quoteLines });\n continue;\n }\n\n const ulStart = trimmed.match(/^[-*+]\\s+(.*)$/);\n if (ulStart) {\n const items: string[] = [];\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^[-*+]\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"unordered-list\", items });\n continue;\n }\n\n const olStart = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (olStart) {\n const items: string[] = [];\n const start = Number(olStart[1]);\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^\\d+\\.\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"ordered-list\", start, items });\n continue;\n }\n\n const paragraphRows: string[] = [trimmed];\n i += 1;\n while (i < rows.length) {\n const nextRaw = rows[i] ?? \"\";\n const next = (rows[i] ?? \"\").trim();\n const maybeTableStart =\n parsePipeCells(nextRaw) !== null && isTableDividerLine(rows[i + 1] ?? \"\");\n if (!next || isBlockStart(next) || maybeTableStart) break;\n paragraphRows.push(next);\n i += 1;\n }\n blocks.push({ type: \"paragraph\", text: paragraphRows.join(\" \") });\n }\n\n return blocks;\n}\n\nfunction renderMarkdownBlock(\n block: MarkdownBlock,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const md = theme.markdown;\n\n switch (block.type) {\n case \"heading\":\n return (w) =>\n renderPrefixedText(\n block.text,\n w,\n {\n text: \"#\".repeat(block.level) + \" \",\n color: overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(block.level + 1),\n {\n color: headingColor(block.level, theme, overrides),\n bold: block.level <= (overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n\n case \"paragraph\":\n return (w) =>\n wrapText(block.text, w).map((line) => [\n { text: line, color: overrides?.paragraph ?? md.paragraph },\n ]);\n\n case \"unordered-list\":\n return (w) => {\n const out: Line[] = [];\n for (const item of block.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out;\n };\n\n case \"ordered-list\":\n return (w) => {\n const out: Line[] = [];\n const lastNumber = block.start + block.items.length - 1;\n const digits = String(Math.max(block.start, lastNumber)).length;\n for (let i = 0; i < block.items.length; i++) {\n const n = String(block.start + i).padStart(digits, \" \");\n const prefix = {\n text: `${n}. `,\n color: overrides?.orderedMarker ?? md.orderedMarker,\n };\n out.push(...renderPrefixedText(block.items[i]!, w, prefix, \" \".repeat(digits + 2)));\n }\n return out;\n };\n\n case \"table\": {\n const keys = block.headers.map((_, i) => `c${i}`);\n const columns: Column[] = block.headers.map((header, i) => ({\n key: keys[i]!,\n title: header || `col_${i + 1}`,\n align: block.rows.every((row) => isNumericValue(row[i] ?? \"\")) ? \"right\" : \"left\",\n headerColor: overrides?.tableHeader ?? md.tableHeader,\n }));\n\n const data = block.rows.map((row) => {\n const out: Record<string, string> = {};\n keys.forEach((key, i) => {\n out[key] = row[i] ?? \"\";\n });\n return out;\n });\n\n return table(columns, data, {\n borderColor: overrides?.tableBorder ?? md.tableBorder,\n });\n }\n\n case \"quote\":\n return (w) => {\n const out: Line[] = [];\n for (const quoteLine of block.lines) {\n out.push(\n ...renderPrefixedText(\n quoteLine,\n w,\n { text: \"▌ \", color: overrides?.quoteMarker ?? md.quoteMarker },\n \" \",\n { color: overrides?.quoteText ?? md.quoteText, dim: true },\n ),\n );\n }\n return out;\n };\n\n case \"separator\":\n return separator(overrides?.separator ?? md.separator);\n\n case \"code\": {\n const codeSource = block.lines.join(\"\\n\");\n return box(\n lines(\n block.lines.length > 0\n ? block.lines.map((line) => [{ text: line || \" \", color: overrides?.codeText ?? md.codeText }])\n : [[{ text: \" \", color: overrides?.codeEmpty ?? md.codeEmpty, dim: true }]],\n ),\n {\n title: block.language ? `code:${block.language}` : \"code\",\n borderColor: overrides?.codeBorder ?? md.codeBorder,\n action: {\n label: \"cp\",\n onClick: () => navigator.clipboard.writeText(codeSource),\n color: theme.semantic.frameMuted,\n },\n },\n );\n }\n }\n}\n\nexport function fromMarkdown(\n markdown: string,\n opts?: { theme?: Theme; overrides?: MarkdownThemeOverrides },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const blocks = parseMarkdown(markdown);\n const layouts = blocks.map((block) => renderMarkdownBlock(block, theme, opts?.overrides));\n\n return (w) => {\n if (layouts.length === 0) return blank()(w);\n\n const out: Line[] = [];\n layouts.forEach((layout, index) => {\n if (index > 0) out.push(...blank()(w));\n out.push(...layout(w));\n });\n return out;\n };\n}\n","import {\n bar as barText,\n blank,\n box,\n chart,\n divider,\n grid,\n hstack,\n lines,\n separator,\n statusbar,\n table,\n vstack,\n type Column,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { fromJson } from \"../document/json\";\nimport { fromMarkdown } from \"../document/markdown\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport type { TermAction, TermIRNode } from \"./ir\";\n\nexport type LayoutFromIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: TermAction) => void;\n};\n\nfunction stackLayouts(children: LayoutFn[], gap: number): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1 && gap <= 0) return children[0]!;\n if (gap <= 0) return vstack(...children);\n\n const expanded: LayoutFn[] = [];\n for (let i = 0; i < children.length; i++) {\n if (i > 0) {\n for (let j = 0; j < gap; j++) expanded.push(blank());\n }\n expanded.push(children[i]!);\n }\n return vstack(...expanded);\n}\n\nfunction paragraphLayout(text: string, color?: string): LayoutFn {\n return (w) => {\n const wrapped = wrapText(text, w);\n if (!color) return wrapped.map((line) => [line]);\n return wrapped.map((line) => [{ text: line, color }]);\n };\n}\n\nfunction headingLayout(\n node: Extract<TermIRNode, { kind: \"heading\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const md = options.theme.markdown;\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"#\".repeat(node.level) + \" \",\n color: node.markerColor ?? options.overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(node.level + 1),\n {\n color: headingColor(node.level, options.theme, options.overrides),\n bold: node.level <= (options.overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n}\n\nfunction listLayout(\n node: Extract<TermIRNode, { kind: \"list\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const md = options.theme.markdown;\n\n if (node.ordered) {\n const digits = String(node.start + node.items.length - 1).length;\n for (let index = 0; index < node.items.length; index++) {\n const item = node.items[index]!;\n const n = String(node.start + index).padStart(digits, \" \");\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: `${n}. `, color: options.overrides?.orderedMarker ?? md.orderedMarker },\n \" \".repeat(digits + 2),\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n }\n\n for (const item of node.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: options.overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n };\n}\n\nfunction blockquoteLayout(\n node: Extract<TermIRNode, { kind: \"blockquote\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"▌ \",\n color: node.markerColor ?? options.overrides?.quoteMarker ?? options.theme.markdown.quoteMarker,\n },\n \" \",\n {\n color: node.color ?? options.overrides?.quoteText ?? options.theme.markdown.quoteText,\n dim: true,\n },\n );\n}\n\nfunction preLayout(\n node: Extract<TermIRNode, { kind: \"pre\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return box(\n lines(\n node.lines.length > 0\n ? node.lines.map((line) => [{ text: line || \" \", color: node.textColor }])\n : [[{ text: \" \", color: node.emptyColor, dim: true }]],\n ),\n {\n title: node.language ? `code:${node.language}` : \"code\",\n borderColor: node.borderColor,\n },\n );\n}\n\nfunction tableLayout(node: Extract<TermIRNode, { kind: \"table\" }>): LayoutFn {\n if (node.headers.length === 0) return paragraphLayout(\"(empty table)\");\n\n const keys = node.headers.map((_, index) => `c${index}`);\n const columns: Column<Record<string, string>>[] = node.headers.map((header, index) => ({\n key: keys[index]!,\n title: header,\n align: node.rows.every((row) => isNumericValue(row[index] ?? \"\")) ? \"right\" : \"left\",\n headerColor: node.headerColor,\n }));\n\n const rows = node.rows.map((row) => {\n const data: Record<string, string> = {};\n for (let index = 0; index < keys.length; index++) {\n data[keys[index]!] = row[index] ?? \"\";\n }\n return data;\n });\n\n return table(columns, rows, { borderColor: node.borderColor });\n}\n\nfunction actionHandler(action: TermAction, options: LayoutFromIROptions): (() => void) | undefined {\n if (!options.onAction && !action.sourceElement) return undefined;\n return () => {\n if (action.sourceElement instanceof HTMLElement) {\n action.sourceElement.click();\n }\n options.onAction?.(action);\n };\n}\n\nfunction buttonLayout(\n node: Extract<TermIRNode, { kind: \"button\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const color = node.color ?? options.theme.components.button.fg;\n const bg = node.bg ?? options.theme.components.button.bg;\n const segment: Segment = {\n text: `[ ${node.label} ]`,\n color,\n bg,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction linkLayout(\n node: Extract<TermIRNode, { kind: \"link\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const segment: Segment = {\n text: node.text,\n color: node.color ?? options.theme.semantic.info,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction barLayout(node: Extract<TermIRNode, { kind: \"bar\" }>): LayoutFn {\n return lines((w) => {\n const max = Number.isFinite(node.max) && node.max > 0 ? node.max : 100;\n const value = Number.isFinite(node.value) ? node.value : 0;\n const label = node.label ? `${node.label} ` : \"\";\n const showPercent = node.showPercent !== false;\n const percent = Math.max(0, Math.min(100, Math.round((value / max) * 100)));\n const percentText = showPercent ? ` ${percent}%` : \"\";\n\n const available = Math.max(1, w - label.length - percentText.length);\n const barWidth = Math.max(1, Math.min(node.width ?? available, available));\n\n const line: Line = [];\n if (label) line.push(label);\n line.push({ text: barText(value, max, barWidth), color: node.color });\n if (percentText) line.push(percentText);\n return [line];\n });\n}\n\nfunction childrenToLayouts(children: TermIRNode[], options: LayoutFromIROptions): LayoutFn[] {\n const out: LayoutFn[] = [];\n for (const child of children) {\n out.push(layoutFromIR(child, options));\n }\n return out;\n}\n\nexport function layoutFromIR(node: TermIRNode, options: LayoutFromIROptions): LayoutFn {\n switch (node.kind) {\n case \"stack\":\n return stackLayouts(childrenToLayouts(node.children, options), node.gap);\n case \"hstack\":\n return hstack(childrenToLayouts(node.children, options), {\n gap: node.gap,\n widths: node.widths,\n });\n case \"grid\":\n return grid(childrenToLayouts(node.children, options), {\n cols: node.cols,\n gap: node.gap,\n rowGap: node.rowGap,\n });\n case \"box\": {\n const content = stackLayouts(childrenToLayouts(node.children, options), node.gap);\n return box(content, {\n title: node.title,\n borderColor: node.borderColor ?? options.theme.semantic.border,\n });\n }\n case \"blank\":\n return blank(node.lines);\n case \"separator\":\n return separator(node.color ?? options.theme.semantic.border, node.char);\n case \"divider\":\n return divider(node.label, {\n color: node.color ?? options.theme.semantic.border,\n char: node.char,\n labelColor: node.labelColor,\n });\n case \"paragraph\":\n return paragraphLayout(node.text, node.color);\n case \"heading\":\n return headingLayout(node, options);\n case \"list\":\n return listLayout(node, options);\n case \"blockquote\":\n return blockquoteLayout(node, options);\n case \"pre\":\n return preLayout(node, options);\n case \"markdown\":\n return fromMarkdown(node.value, {\n theme: options.theme,\n overrides: options.overrides,\n });\n case \"json\":\n return fromJson(node.value, {\n theme: options.theme,\n title: node.title,\n });\n case \"chart\":\n return chart(node.data, {\n height: node.height,\n color: node.color,\n axisColor: node.axisColor,\n fill: node.fill,\n });\n case \"statusbar\":\n return statusbar(\n [{ text: node.left }],\n [{ text: node.right }],\n {\n bg: node.bg,\n color: node.color,\n theme: options.theme,\n },\n );\n case \"bar\":\n return barLayout(node);\n case \"table\":\n return tableLayout(node);\n case \"button\":\n return buttonLayout(node, options);\n case \"link\":\n return linkLayout(node, options);\n default:\n return blank();\n }\n}\n","import { compileHtmlElementToIR, compileHtmlToIR, layoutFromIR, registerHtmlTagCompiler } from \"../core\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"../termui\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { MarkdownThemeOverrides } from \"./types\";\nimport type { TermAction } from \"../core\";\nimport type { HtmlTagCompiler } from \"../core\";\n\nexport type HtmlAction = TermAction;\n\nexport type HtmlRenderOptions = {\n theme?: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: HtmlAction) => void;\n};\n\nexport type { HtmlTagCompiler };\n\nexport function registerHtmlCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerHtmlTagCompiler(tag, compiler);\n}\n\nexport function fromHtmlElement(\n root: Element,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const ir = compileHtmlElementToIR(root, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n\nexport function fromHtml(\n html: string,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n\n if (typeof DOMParser === \"undefined\") {\n return fromMarkdown(html, { theme, overrides: opts?.overrides });\n }\n\n const ir = compileHtmlToIR(html, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n","import { fromHtml, fromHtmlElement } from \"./html\";\nimport { fromJson } from \"./json\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nimport type { Theme } from \"../termui\";\n\nexport { fromMarkdown } from \"./markdown\";\nexport { fromHtml, fromHtmlElement };\nexport { registerHtmlCompiler } from \"./html\";\nexport { fromJson } from \"./json\";\nexport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nexport type { HtmlAction, HtmlRenderOptions, HtmlTagCompiler } from \"./html\";\n\nexport function fromDocument(\n source: DocumentSource,\n opts?: {\n theme?: Theme;\n jsonTitle?: string;\n markdownOverrides?: MarkdownThemeOverrides;\n },\n) {\n if (source.format === \"markdown\") {\n return fromMarkdown(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n if (source.format === \"html\") {\n return fromHtml(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n return fromJson(source.value, {\n theme: opts?.theme,\n title: opts?.jsonTitle,\n });\n}\n","import {\n getScrollRegionMeta,\n type Block,\n type Line,\n type Segment,\n type ScrollRegionMeta,\n type Theme,\n} from \"./termui\";\n\nfunction segmentNode(seg: Segment, theme: Theme): HTMLSpanElement {\n const span = document.createElement(\"span\");\n if (typeof seg === \"string\") {\n span.textContent = seg;\n return span;\n }\n\n span.textContent = seg.text;\n if (seg.inverted) {\n span.style.color = seg.color ?? theme.semantic.inverseFg;\n span.style.backgroundColor = seg.bg ?? theme.semantic.inverseBg;\n } else {\n if (seg.color) span.style.color = seg.color;\n if (seg.bg) span.style.backgroundColor = seg.bg;\n }\n if (seg.bold) span.style.fontWeight = \"bold\";\n if (seg.dim) span.style.opacity = \"0.6\";\n if (seg.blink) span.style.animation = \"bk 1s step-end infinite\";\n if (seg.noSelect) span.style.userSelect = \"none\";\n\n if (seg.onClick) {\n span.classList.add(\"termui-clickable\");\n span.role = \"button\";\n span.tabIndex = 0;\n span.addEventListener(\"click\", seg.onClick);\n span.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n seg.onClick?.();\n });\n }\n\n return span;\n}\n\nfunction lineNode(line: Line, theme: Theme): HTMLDivElement {\n const div = document.createElement(\"div\");\n div.className = \"termui-line\";\n for (const seg of line) {\n div.appendChild(segmentNode(seg, theme));\n }\n return div;\n}\n\nfunction sameScrollMeta(a: ScrollRegionMeta, b: ScrollRegionMeta): boolean {\n return (\n a.onScroll === b.onScroll &&\n a.totalLines === b.totalLines &&\n a.maxHeight === b.maxHeight &&\n a.offset === b.offset\n );\n}\n\nfunction scrollRegionNode(lines: Line[], meta: ScrollRegionMeta, theme: Theme): HTMLDivElement {\n const div = document.createElement(\"div\");\n div.className = \"termui-scroll-region\";\n div.addEventListener(\n \"wheel\",\n (event) => {\n event.preventDefault();\n const step = event.deltaY > 0 ? 1 : -1;\n const maxOffset = Math.max(0, meta.totalLines - meta.maxHeight);\n const next = Math.min(maxOffset, Math.max(0, meta.offset + step));\n if (next !== meta.offset) meta.onScroll(next);\n },\n { passive: false },\n );\n for (const line of lines) div.appendChild(lineNode(line, theme));\n return div;\n}\n\nexport function renderTermBlock(target: HTMLElement, block: Block, theme: Theme): void {\n const fragment = document.createDocumentFragment();\n let scrollLines: Line[] = [];\n let scrollMeta: ScrollRegionMeta | null = null;\n\n const flushScroll = () => {\n if (!scrollMeta || scrollLines.length === 0) return;\n fragment.appendChild(scrollRegionNode(scrollLines, scrollMeta, theme));\n scrollLines = [];\n scrollMeta = null;\n };\n\n for (const line of block) {\n const meta = getScrollRegionMeta(line);\n if (!meta) {\n flushScroll();\n fragment.appendChild(lineNode(line, theme));\n continue;\n }\n\n if (!scrollMeta || !sameScrollMeta(scrollMeta, meta)) {\n flushScroll();\n scrollMeta = meta;\n }\n scrollLines.push(line);\n }\n\n flushScroll();\n target.replaceChildren(fragment);\n}\n","import { renderTermBlock } from \"./dom-render\";\nimport {\n fromHtml,\n fromHtmlElement,\n fromJson,\n fromMarkdown,\n type HtmlAction,\n} from \"./document\";\nimport { defaultThemeSpec, resolveTheme, themeToCssVars } from \"./theme\";\nimport type { LayoutFn, Theme, ThemeMode, ThemePreference } from \"./termui\";\n\nconst DEFAULT_COLS = 80;\nconst PROBE_SAMPLE = \"0\".repeat(120);\ntype SourceFormat = \"html\" | \"markdown\" | \"json\";\nconst TERM_UI_CSS = `\n:host {\n display: block;\n}\n@keyframes bk { 50% { opacity: 0 } }\n.termui-frame {\n --cell-h: 1.15em;\n --termui-bg: #0c0c0c;\n --termui-fg: #cccccc;\n font-family: \"Iosevka Term\", \"JetBrains Mono\", Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: inherit;\n line-height: var(--cell-h);\n letter-spacing: inherit;\n white-space: pre;\n overflow: clip;\n background: var(--termui-bg);\n color: var(--termui-fg);\n user-select: text;\n}\n.termui-root {\n white-space: pre;\n}\n.termui-line {\n line-height: var(--cell-h);\n min-height: var(--cell-h);\n}\n.termui-clickable {\n cursor: pointer;\n}\n.termui-clickable:focus-visible {\n outline: 1px solid var(--termui-info, currentColor);\n outline-offset: 1px;\n}\n.termui-scroll-region {\n overflow: hidden;\n}\n.termui-probe {\n font: inherit;\n white-space: pre;\n visibility: hidden;\n position: absolute;\n pointer-events: none;\n inset: -9999px auto auto -9999px;\n}\n`;\n\nexport type TermUIActionEvent = CustomEvent<HtmlAction>;\n\nfunction readSystemMode(): ThemeMode {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nfunction parseMode(raw: string | null): ThemePreference {\n if (!raw) return \"system\";\n const mode = raw.trim().toLowerCase();\n if (mode === \"light\" || mode === \"dark\" || mode === \"system\") return mode;\n return \"system\";\n}\n\nfunction parseWidth(raw: string | null): number | undefined {\n if (!raw) return undefined;\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n}\n\nfunction parseSourceFormat(raw: string | null): SourceFormat {\n if (!raw) return \"html\";\n const format = raw.trim().toLowerCase();\n if (format === \"markdown\" || format === \"json\" || format === \"html\") return format;\n return \"html\";\n}\n\nfunction readScriptText(host: Element, types: string[]): string | undefined {\n for (const type of types) {\n const node = host.querySelector(`script[type=\"${type}\"]`);\n if (!node) continue;\n return node.textContent ?? \"\";\n }\n return undefined;\n}\n\nfunction parseJsonSource(raw: string): unknown {\n const text = raw.trim();\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return raw;\n }\n}\n\nfunction actionEvent(action: HtmlAction): TermUIActionEvent {\n return new CustomEvent<HtmlAction>(\"termui-action\", {\n detail: action,\n bubbles: true,\n composed: true,\n });\n}\n\nexport class TermUIElement extends HTMLElement {\n static observedAttributes = [\"width\", \"mode\", \"source\", \"source-format\", \"json-title\"] as const;\n\n private readonly frame: HTMLDivElement;\n private readonly root: HTMLDivElement;\n private layoutOverride?: LayoutFn;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private mediaQuery?: MediaQueryList;\n private mediaQueryListener?: (event: MediaQueryListEvent) => void;\n private scheduled = false;\n\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = TERM_UI_CSS;\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"termui-frame\";\n this.root = document.createElement(\"div\");\n this.root.className = \"termui-root\";\n this.frame.appendChild(this.root);\n shadow.append(style, this.frame);\n }\n\n connectedCallback(): void {\n this.resizeObserver = new ResizeObserver(() => this.queueRender());\n this.resizeObserver.observe(this);\n\n this.mutationObserver = new MutationObserver(() => this.queueRender());\n this.mutationObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n this.mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.mediaQueryListener = () => {\n if (parseMode(this.getAttribute(\"mode\")) === \"system\") this.queueRender();\n };\n this.mediaQuery.addEventListener(\"change\", this.mediaQueryListener);\n }\n\n this.renderNow();\n }\n\n disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n if (this.mediaQuery && this.mediaQueryListener) {\n this.mediaQuery.removeEventListener(\"change\", this.mediaQueryListener);\n }\n this.mediaQuery = undefined;\n this.mediaQueryListener = undefined;\n }\n\n attributeChangedCallback(): void {\n this.queueRender();\n }\n\n render(): void {\n this.renderNow();\n }\n\n get layout(): LayoutFn | undefined {\n return this.layoutOverride;\n }\n\n set layout(next: LayoutFn | null | undefined) {\n this.layoutOverride = next ?? undefined;\n this.queueRender();\n }\n\n private queueRender(): void {\n if (this.scheduled) return;\n this.scheduled = true;\n queueMicrotask(() => {\n this.scheduled = false;\n this.renderNow();\n });\n }\n\n private onAction = (action: HtmlAction): void => {\n this.dispatchEvent(actionEvent(action));\n };\n\n private measureCharacterWidth(): number {\n const probe = document.createElement(\"span\");\n probe.className = \"termui-probe\";\n probe.textContent = PROBE_SAMPLE;\n this.frame.appendChild(probe);\n const width = probe.getBoundingClientRect().width / PROBE_SAMPLE.length;\n probe.remove();\n return width;\n }\n\n private resolveColumns(): number {\n const explicit = parseWidth(this.getAttribute(\"width\"));\n if (explicit) return explicit;\n\n const charWidth = this.measureCharacterWidth();\n if (!Number.isFinite(charWidth) || charWidth <= 0) return DEFAULT_COLS;\n\n const available = this.clientWidth;\n if (!Number.isFinite(available) || available <= 0) return DEFAULT_COLS;\n return Math.max(1, Math.floor(available / charWidth));\n }\n\n private resolveTheme(themeMode: ThemePreference): Theme {\n const theme = resolveTheme(defaultThemeSpec, themeMode, { systemMode: readSystemMode() });\n const cssVars = themeToCssVars(theme);\n for (const [name, value] of Object.entries(cssVars)) {\n this.frame.style.setProperty(name, value);\n }\n return theme;\n }\n\n private renderNow(): void {\n const mode = parseMode(this.getAttribute(\"mode\"));\n const sourceFormat = parseSourceFormat(this.getAttribute(\"source-format\"));\n const cols = this.resolveColumns();\n this.frame.style.width = `${cols}ch`;\n\n const theme = this.resolveTheme(mode);\n const source = this.getAttribute(\"source\");\n const layout = (() => {\n if (this.layoutOverride) return this.layoutOverride;\n\n if (source !== null) {\n if (sourceFormat === \"markdown\") {\n return fromMarkdown(source, { theme });\n }\n if (sourceFormat === \"json\") {\n return fromJson(parseJsonSource(source), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n return fromHtml(source, { theme, onAction: this.onAction });\n }\n\n if (sourceFormat === \"markdown\") {\n const scriptSource = readScriptText(this, [\"text/markdown\", \"text/x-markdown\"]);\n const markdown = scriptSource ?? this.textContent ?? \"\";\n return fromMarkdown(markdown, { theme });\n }\n\n if (sourceFormat === \"json\") {\n const scriptSource = readScriptText(this, [\"application/json\", \"text/json\"]);\n const jsonText = scriptSource ?? this.textContent ?? \"\";\n return fromJson(parseJsonSource(jsonText), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n\n return fromHtmlElement(this, { theme, onAction: this.onAction });\n })();\n const block = layout(cols);\n renderTermBlock(this.root, block, theme);\n }\n}\n\nexport const TERM_UI_TAG = \"term-ui\";\n\nexport function registerTermUIElement(tagName = TERM_UI_TAG): void {\n if (typeof customElements === \"undefined\") return;\n if (customElements.get(tagName)) return;\n customElements.define(tagName, TermUIElement);\n}\n"],"mappings":";AAEA,IAAM,YAAY,uBAAO,WAAW;AAGpC,SAAS,aAAa,MAA6B;AACjD,SAAO;AACT;AAEO,SAAS,cAAc,MAAkB;AAC9C,eAAa,IAAI,EAAE,SAAS,IAAI;AAChC,SAAO;AACT;AAEO,SAAS,YAAY,MAAqB;AAC/C,SAAO,aAAa,IAAI,EAAE,SAAS,MAAM;AAC3C;AAEO,SAAS,iBAAiB,QAAc,QAAoB;AACjE,MAAI,aAAa,MAAM,EAAE,SAAS,EAAG,cAAa,MAAM,EAAE,SAAS,IAAI;AACzE;;;AClBA,IAAM,aAAa,uBAAO,cAAc;AAWxC,SAAS,SAAS,MAA8B;AAC9C,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAY,MAA8B;AACzE,WAAS,IAAI,EAAE,UAAU,IAAI;AAC7B,SAAO;AACT;AAEO,SAAS,oBAAoB,MAA0C;AAC5E,SAAO,SAAS,IAAI,EAAE,UAAU;AAClC;;;AC0GO,SAAS,gBAAgB,OAAuB;AACrD,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;;;AClIO,SAAS,IAAI,GAAW,GAAW,OAAyB;AACjE,MAAI,EAAE,UAAU,EAAG,QAAO,EAAE,MAAM,GAAG,CAAC;AACtC,QAAM,QAAQ,IAAI,OAAO,IAAI,EAAE,MAAM;AACrC,SAAO,QAAQ,QAAQ,IAAI,IAAI;AACjC;AAEO,SAAS,GAAG,GAAmB;AACpC,SAAO,SAAS,OAAO,gBAAgB,CAAC,CAAC;AAC3C;AAEO,SAAS,IAAI,KAAa,KAAa,GAAmB;AAC/D,QAAM,QAAQ,gBAAgB,CAAC;AAC/B,MAAI,SAAS,EAAG,QAAO;AACvB,MAAI,CAAC,OAAO,SAAS,GAAG,KAAK,OAAO,EAAG,QAAO,SAAS,OAAO,KAAK;AAEnE,QAAM,QAAQ,OAAO,SAAS,GAAG,IAAI,MAAM,MAAM;AACjD,QAAM,SAAS,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK;AACjE,SAAO,SAAS,OAAO,MAAM,IAAI,SAAS,OAAO,QAAQ,MAAM;AACjE;AAEO,SAAS,MAAM,MAAgB,GAAmB;AACvD,QAAM,QAAQ,gBAAgB,CAAC;AAC/B,MAAI,SAAS,KAAK,KAAK,WAAW,EAAG,QAAO;AAE5C,QAAM,QAAQ;AACd,QAAM,IAAI,KAAK,MAAM,CAAC,KAAK;AAC3B,QAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,QAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,QAAM,KAAK,KAAK,MAAM;AACtB,SAAO,EAAE,IAAI,CAAC,MAAM,MAAM,KAAK,OAAQ,IAAI,MAAM,KAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACrE;AAEA,SAAS,OAAO,KAAsB;AACpC,SAAO,OAAO,QAAQ,WAAW,IAAI,SAAS,IAAI,KAAK;AACzD;AAEA,SAAS,QAAQ,MAAoB;AACnC,MAAI,IAAI;AACR,aAAW,OAAO,KAAM,MAAK,OAAO,GAAG;AACvC,SAAO;AACT;AAEA,SAAS,SAAS,KAAc,KAA6B;AAC3D,MAAI,OAAO,EAAG,QAAO;AACrB,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAMA,QAAO,IAAI,MAAM,GAAG,GAAG;AAC7B,WAAOA,MAAK,SAAS,IAAIA,QAAO;AAAA,EAClC;AACA,QAAM,OAAO,IAAI,KAAK,MAAM,GAAG,GAAG;AAClC,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,EAAE,GAAG,KAAK,KAAK;AACxB;AAEA,SAAS,aAAa,MAAY,GAAiB;AACjD,MAAI,KAAK,EAAG,QAAO,CAAC;AACpB,QAAM,MAAY,CAAC;AACnB,MAAI,YAAY;AAEhB,aAAW,OAAO,MAAM;AACtB,QAAI,aAAa,EAAG;AACpB,UAAM,MAAM,OAAO,GAAG;AACtB,QAAI,OAAO,WAAW;AACpB,UAAI,KAAK,GAAG;AACZ,mBAAa;AACb;AAAA,IACF;AACA,UAAM,UAAU,SAAS,KAAK,SAAS;AACvC,QAAI,QAAS,KAAI,KAAK,OAAO;AAC7B,gBAAY;AAAA,EACd;AAEA,SAAO;AACT;AAEO,SAAS,QAAQ,MAAY,GAAiB;AACnD,MAAI,KAAK,EAAG,QAAO,CAAC;AACpB,QAAM,OAAO,QAAQ,IAAI;AACzB,MAAI,OAAO,EAAG,QAAO,aAAa,MAAM,CAAC;AACzC,MAAI,SAAS,EAAG,QAAO;AACvB,SAAO,CAAC,GAAG,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,IAAI,GAAG,UAAU,KAAK,CAAC;AACjE;AAEO,SAAS,SAAS,MAAc,OAAe,WAAW,UAAkB;AACjF,MAAI,KAAK,UAAU,MAAO,QAAO;AACjC,MAAI,SAAS,SAAS,OAAQ,QAAO,SAAS,MAAM,GAAG,KAAK;AAC5D,SAAO,KAAK,MAAM,GAAG,QAAQ,SAAS,MAAM,IAAI;AAClD;AAEO,SAAS,SAAS,MAAc,GAAqB;AAC1D,MAAI,KAAK,EAAG,QAAO,CAAC,EAAE;AACtB,MAAI,KAAK,UAAU,EAAG,QAAO,CAAC,IAAI;AAElC,QAAM,SAAmB,CAAC;AAC1B,MAAI,MAAM;AACV,SAAO,MAAM,KAAK,QAAQ;AACxB,QAAI,MAAM,KAAK,KAAK,QAAQ;AAC1B,aAAO,KAAK,KAAK,MAAM,GAAG,CAAC;AAC3B;AAAA,IACF;AACA,QAAI,UAAU,KAAK,YAAY,KAAK,MAAM,CAAC;AAC3C,QAAI,WAAW,KAAK;AAElB,aAAO,KAAK,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AACpC,aAAO;AAAA,IACT,OAAO;AACL,aAAO,KAAK,KAAK,MAAM,KAAK,OAAO,CAAC;AACpC,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACA,SAAO,OAAO,SAAS,IAAI,SAAS,CAAC,EAAE;AACzC;;;ACxGA,SAAS,UAAU,GAAW,MAA4B;AACxD,QAAM,QAAQ,gBAAgB,CAAC;AAC/B,MAAI,SAAS,EAAG,QAAO,CAAC;AACxB,MAAI,UAAU,EAAG,QAAO,CAAC,EAAE,MAAM,UAAU,OAAO,MAAM,OAAO,UAAU,KAAK,CAAC;AAE/E,QAAM,EAAE,OAAO,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC1C,QAAM,aAAa,QAAQ;AAI3B,QAAM,cAAc,cAAc,SAAS,OAAO,MAAM,SAAS,IAAI,KAAK;AAC1E,MAAI,WAAW;AACf,MAAI,OAAO;AACT,UAAM,YAAY,MAAM,SAAS,cAAc,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI;AAC1F,eAAW,UAAU,SAAS,IAAI,YAAY,YAAY,MAAM;AAAA,EAClE;AAEA,QAAM,YAAY,KAAK,IAAI,GAAG,aAAa,SAAS,UAAU,SAAS,OAAO,MAAM,SAAS,IAAI,EAAE;AAEnG,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC,EAAE,MAAM,WAAW,WAAW,GAAG,SAAS,IAAI,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,EACzF;AAEA,SAAO;AAAA,IACL,EAAE,MAAM,WAAW,WAAW,GAAG,SAAS,GAAG,OAAO,UAAU,KAAK;AAAA,IACnE,EAAE,MAAM,MAAM,OAAO,QAAQ,KAAK,OAAO,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,UAAU,KAAK;AAAA,IACxG,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK;AAAA,EAC1C;AACF;AAEA,SAAS,aAAa,GAAW,OAAsB;AACrD,QAAM,QAAQ,gBAAgB,CAAC;AAC/B,MAAI,SAAS,EAAG,QAAO,CAAC;AACxB,MAAI,UAAU,EAAG,QAAO,CAAC,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,CAAC;AAClE,SAAO,CAAC,EAAE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,UAAU,OAAO,UAAU,KAAK,CAAC;AAC9E;AAEO,SAAS,MACd,SACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,KAAK,OAAO,YAAY,aAAa,QAAQ,CAAC,IAAI;AACxD,WAAO,GAAG,IAAI,CAAC,SAAS,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1C;AACF;AAEO,SAAS,IACd,SACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,QAAI,QAAQ,EAAG,QAAO,QAAQ,KAAK;AAEnC,UAAM,KAAK,MAAM;AACjB,UAAM,QAAQ,QAAQ;AACtB,UAAM,eAAe,QAAQ,KAAK;AAClC,UAAM,SAAgB,CAAC;AACvB,WAAO,KAAK,UAAU,OAAO,EAAE,OAAO,MAAM,OAAO,OAAO,IAAI,QAAQ,MAAM,OAAO,CAAC,CAAC;AACrF,eAAW,QAAQ,cAAc;AAC/B,aAAO,KAAK;AAAA,QACV,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,QAC5C,GAAG,QAAQ,MAAM,KAAK;AAAA,QACtB,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,MAC9C,CAAC;AAAA,IACH;AACA,WAAO,KAAK,aAAa,OAAO,EAAE,CAAC;AACnC,WAAO;AAAA,EACT;AACF;AAEO,SAAS,OACd,UACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,IAAI,SAAS;AACnB,QAAI,MAAM,EAAG,QAAO,CAAC;AACrB,UAAM,MAAM,gBAAgB,MAAM,OAAO,CAAC;AAC1C,UAAM,WAAW,OAAO,IAAI;AAE5B,QAAI;AACJ,QAAI,MAAM,UAAU,KAAK,OAAO,WAAW,GAAG;AAC5C,oBAAc,KAAK,OAAO,IAAI,CAAC,OAAO,gBAAgB,EAAE,CAAC;AAAA,IAC3D,OAAO;AACL,YAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,QAAQ;AAC9C,YAAM,OAAO,KAAK,MAAM,YAAY,CAAC;AACrC,YAAM,YAAY,YAAY,OAAO;AACrC,oBAAc,SAAS,IAAI,CAAC,GAAG,MAAM,QAAQ,IAAI,YAAY,IAAI,EAAE;AAAA,IACrE;AAEA,UAAM,SAAS,SAAS,IAAI,CAAC,OAAO,MAAM,MAAM,YAAY,CAAC,CAAE,CAAC;AAChE,UAAM,WAAW,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACxD,UAAM,SAAS,MAAM,IAAI,IAAI,OAAO,GAAG,IAAI;AAE3C,UAAM,SAAgB,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,YAAM,OAAa,CAAC;AACpB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAI,IAAI,KAAK,OAAQ,MAAK,KAAK,MAAM;AACrC,cAAM,YAAY,OAAO,CAAC,EAAG,CAAC;AAC9B,YAAI,WAAW;AACb,eAAK,KAAK,GAAG,QAAQ,WAAW,YAAY,CAAC,CAAE,CAAC;AAAA,QAClD,OAAO;AACL,eAAK,KAAK,IAAI,OAAO,YAAY,CAAC,CAAE,CAAC;AAAA,QACvC;AAAA,MACF;AACA,aAAO,KAAK,IAAI;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,UAAU,UAAgC;AACxD,SAAO,CAAC,MAAM;AACZ,UAAM,SAAgB,CAAC;AACvB,eAAW,SAAS,UAAU;AAC5B,aAAO,KAAK,GAAG,MAAM,CAAC,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,UAAU,OAAgB,MAAyB;AACjE,SAAO,CAAC,MAAM;AACZ,UAAM,IAAI,QAAQ;AAClB,WAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC,CAAC,GAAG,OAAO,UAAU,KAAK,CAAC,CAAC;AAAA,EACzE;AACF;AAEO,SAAS,MAAM,QAAQ,GAAa;AACzC,SAAO,CAAC,MAAM;AACZ,UAAM,OAAO,CAAC,IAAI,OAAO,gBAAgB,CAAC,CAAC,CAAC;AAC5C,UAAM,SAAgB,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,OAAO,IAAK,QAAO,KAAK,IAAI;AAChD,WAAO;AAAA,EACT;AACF;AAEO,SAAS,QACd,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,IAAI,MAAM,QAAQ;AACxB,UAAM,SAAS,IAAI,KAAK;AACxB,QAAI,OAAO,UAAU,OAAO;AAC1B,YAAM,KAAK,MAAM,cAAc,MAAM;AACrC,aAAO,CAAC,CAAC,KAAK,EAAE,MAAM,OAAO,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,OAAO,MAAM,GAAG,KAAK,CAAC,CAAC;AAAA,IACrF;AACA,UAAM,YAAY,QAAQ,OAAO;AACjC,UAAM,UAAU,KAAK,MAAM,YAAY,CAAC;AACxC,UAAM,WAAW,YAAY;AAC7B,UAAM,YAAY,MAAM;AACxB,UAAM,aAAa,MAAM,cAAc,MAAM;AAC7C,UAAM,OAAa;AAAA,MACjB,EAAE,MAAM,EAAE,OAAO,OAAO,GAAG,OAAO,WAAW,UAAU,KAAK;AAAA,MAC5D,aAAa,EAAE,MAAM,QAAQ,OAAO,WAAW,IAAI;AAAA,MACnD,EAAE,MAAM,EAAE,OAAO,QAAQ,GAAG,OAAO,WAAW,UAAU,KAAK;AAAA,IAC/D;AACA,WAAO,CAAC,IAAI;AAAA,EACd;AACF;AAEO,SAAS,KACd,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI;AAClC,UAAM,MAAM,gBAAgB,KAAK,OAAO,CAAC;AACzC,UAAM,SAAS,gBAAgB,KAAK,UAAU,CAAC;AAC/C,UAAM,WAAW,OAAO,OAAO;AAC/B,UAAM,YAAY,KAAK,IAAI,GAAG,KAAK,OAAO,QAAQ,YAAY,IAAI,CAAC;AACnE,UAAM,SAAS,MAAM,IAAI,IAAI,OAAO,GAAG,IAAI;AAC3C,UAAM,SAAgB,CAAC;AAEvB,aAAS,WAAW,GAAG,WAAW,MAAM,QAAQ,YAAY,MAAM;AAChE,UAAI,WAAW,KAAK,SAAS,GAAG;AAC9B,cAAM,YAAkB,CAAC,IAAI,OAAO,KAAK,CAAC;AAC1C,iBAAS,IAAI,GAAG,IAAI,QAAQ,IAAK,QAAO,KAAK,SAAS;AAAA,MACxD;AACA,YAAM,WAAW,MAAM,MAAM,UAAU,WAAW,IAAI;AACtD,YAAM,SAAS,SAAS,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;AACrD,YAAM,WAAW,KAAK,IAAI,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAE3D,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,cAAM,OAAa,CAAC;AACpB,iBAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,cAAI,IAAI,KAAK,OAAQ,MAAK,KAAK,MAAM;AACrC,gBAAM,QAAQ,OAAO,CAAC;AACtB,cAAI,SAAS,MAAM,CAAC,GAAG;AACrB,iBAAK,KAAK,GAAG,QAAQ,MAAM,CAAC,GAAI,SAAS,CAAC;AAAA,UAC5C,OAAO;AACL,iBAAK,KAAK,IAAI,OAAO,SAAS,CAAC;AAAA,UACjC;AAAA,QACF;AACA,eAAO,KAAK,QAAQ,MAAM,KAAK,CAAC;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,OACd,SACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,OAAO,gBAAgB,KAAK,SAAS;AAC3C,UAAM,WAAW,KAAK,IAAI,GAAG,QAAQ,CAAC;AACtC,UAAM,YAAY,QAAQ,QAAQ;AAClC,UAAM,aAAa,UAAU;AAE7B,QAAI,cAAc,MAAM;AACtB,aAAO,UAAU,IAAI,CAAC,SAAS,QAAQ,MAAM,KAAK,CAAC;AAAA,IACrD;AAEA,UAAM,YAAY,KAAK,IAAI,GAAG,aAAa,IAAI;AAC/C,UAAM,SAAS,KAAK,IAAI,WAAW,KAAK,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC;AAChE,UAAM,UAAU,UAAU,MAAM,QAAQ,SAAS,IAAI;AAErD,UAAM,cAAc,KAAK,IAAI,GAAG,KAAK,MAAO,OAAO,aAAc,IAAI,CAAC;AACtE,UAAM,aAAa,KAAK,MAAO,SAAS,aAAc,OAAO,YAAY;AAEzE,UAAM,SAAgB,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,UAAU,KAAK,cAAc,IAAI,aAAa;AACpD,YAAM,aAAa,UAAU,WAAW;AACxC,YAAM,OAAa;AAAA,QACjB,GAAG,QAAQ,QAAQ,CAAC,GAAI,QAAQ;AAAA,QAChC,EAAE,MAAM,YAAY,OAAO,KAAK,gBAAgB,UAAU,KAAK;AAAA,MACjE;AACA,UAAI,KAAK,UAAU;AACjB,yBAAiB,MAAM,EAAE,UAAU,KAAK,UAAU,YAAY,WAAW,MAAM,OAAO,CAAC;AAAA,MACzF;AACA,aAAO,KAAK,IAAI;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,QACd,SACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,IAAI,gBAAgB,MAAM,OAAO,MAAM,KAAK,CAAC;AACnD,UAAM,IAAI,gBAAgB,MAAM,UAAU,MAAM,KAAK,CAAC;AACtD,UAAM,IAAI,gBAAgB,MAAM,QAAQ,MAAM,KAAK,CAAC;AACpD,UAAM,IAAI,gBAAgB,MAAM,SAAS,MAAM,KAAK,CAAC;AACrD,UAAM,SAAS,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC;AACxC,UAAM,QAAQ,QAAQ,MAAM;AAC5B,UAAM,SAAgB,CAAC;AACvB,UAAM,YAAkB,CAAC,IAAI,OAAO,KAAK,CAAC;AAC1C,aAAS,IAAI,GAAG,IAAI,GAAG,IAAK,QAAO,KAAK,SAAS;AACjD,UAAM,UAAU,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI;AACxC,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAe,UAAU,CAAC,SAAS,GAAG,IAAI,IAAI;AACpD,aAAO,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,IACpC;AACA,aAAS,IAAI,GAAG,IAAI,GAAG,IAAK,QAAO,KAAK,SAAS;AACjD,WAAO;AAAA,EACT;AACF;;;ACnRA,SAAS,SACP,IACA,GACA,GACA,GACA,OACM;AACN,QAAM,OAAa,CAAC,EAAE,MAAM,GAAG,OAAO,UAAU,KAAK,CAAC;AACtD,WAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,SAAK,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,CAAE,GAAG,OAAO,UAAU,MAAM,MAAM,EAAE,CAAC;AAC9D,SAAK,KAAK,EAAE,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,GAAG,OAAO,UAAU,KAAK,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAEA,SAAS,SAAS,IAAc,OAAsB;AACpD,SAAO,SAAS,IAAI,UAAU,UAAU,UAAU,KAAK;AACzD;AAEA,SAAS,SAAS,IAAc,OAAsB;AACpD,SAAO,SAAS,IAAI,UAAU,UAAU,UAAU,KAAK;AACzD;AAEA,SAAS,SAAS,IAAc,OAAsB;AACpD,SAAO,SAAS,IAAI,UAAU,UAAU,UAAU,KAAK;AACzD;AAcO,SAAS,MACd,SACA,MACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,gBAAgB,MAAM,eAAe,CAAC;AACjD,UAAM,OAAO,QAAQ,SAAS;AAC9B,UAAM,cAAc;AACpB,UAAM,cAAc,KAAK,IAAI,GAAG,gBAAgB,CAAC,IAAI,IAAI;AACzD,UAAM,SAAS,IAAI,OAAO,EAAE;AAG5B,UAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ;AAC9B,UAAI,IAAI,MAAO,QAAO,KAAK,IAAI,aAAa,IAAI,KAAK;AACrD,YAAM,eAAe,IAAI,SAAS,IAAI;AACtC,YAAM,SAAS,aAAa,SAAS,IAAI;AACzC,YAAM,QAAQ,KAAK;AAAA,QACjB,GAAG,KAAK,IAAI,CAAC,QAAQ,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,SAAS,IAAI,EAAE;AAAA,QAC/D;AAAA,MACF;AACA,aAAO,KAAK,IAAI,aAAa,QAAQ,KAAK;AAAA,IAC5C,CAAC;AAGD,QAAI,MAAM,aAAa,cAAc,GAAG;AACtC,YAAM,OAAO,GAAG,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACzC,YAAM,YAAY,cAAc;AAChC,UAAI,YAAY,KAAK,GAAG,SAAS,GAAG;AAClC,cAAM,OAAO,KAAK,MAAM,YAAY,GAAG,MAAM;AAC7C,cAAM,MAAM,YAAY,GAAG;AAC3B,iBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,aAAG,CAAC,IAAI,GAAG,CAAC,IAAK,QAAQ,IAAI,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,GAAG;AACnB,UAAI,OAAO,GAAG,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACvC,UAAI,WAAW,OAAO;AACtB,aAAO,WAAW,GAAG;AACnB,YAAI,MAAM;AACV,YAAI,SAAS;AACb,iBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,cAAI,GAAG,CAAC,IAAK,eAAe,GAAG,CAAC,IAAK,QAAQ;AAC3C,qBAAS,GAAG,CAAC;AACb,kBAAM;AAAA,UACR;AAAA,QACF;AACA,YAAI,QAAQ,GAAI;AAChB,WAAG,GAAG,IAAI,GAAG,GAAG,IAAK;AACrB,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAgB,CAAC;AAGvB,WAAO,KAAK,SAAS,IAAI,EAAE,CAAC;AAG5B,UAAM,aAAmB,CAAC,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK,CAAC;AACvE,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,MAAM,QAAQ,CAAC;AACrB,YAAM,eAAe,IAAI,SAAS,IAAI;AACtC,YAAM,SAAS,KAAK,IAAI,GAAG,GAAG,CAAC,IAAK,IAAI,EAAE;AAC1C,YAAM,OAAO,SAAS,IAAI,cAAc,QAAQ,IAAI,UAAU,OAAO,IAAI;AACzE,iBAAW,KAAK;AAAA,QACd;AAAA,QACA,OAAO,IAAI,eAAe;AAAA,QAC1B,MAAM,IAAI,cAAc;AAAA,QACxB,MAAM;AAAA,MACR,CAAC;AACD,iBAAW,KAAK,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK,CAAC;AAAA,IAC/D;AACA,WAAO,KAAK,UAAU;AAGtB,WAAO,KAAK,SAAS,IAAI,EAAE,CAAC;AAG5B,eAAW,OAAO,MAAM;AACtB,YAAM,UAAsB,QAAQ,IAAI,CAAC,KAAK,OAAO;AACnD,cAAM,MAAM,OAAO,IAAI,IAAI,GAAG,KAAK,EAAE;AACrC,cAAM,SAAS,KAAK,IAAI,GAAG,GAAG,EAAE,IAAK,IAAI,EAAE;AAC3C,eAAO,SAAS,KAAK,MAAM;AAAA,MAC7B,CAAC;AACD,YAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC;AAE7D,eAAS,KAAK,GAAG,KAAK,WAAW,MAAM;AACrC,cAAM,WAAiB,CAAC,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK,CAAC;AACrE,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,gBAAM,MAAM,QAAQ,CAAC;AACrB,gBAAM,WAAW,QAAQ,CAAC,EAAG,EAAE,KAAK;AACpC,gBAAM,SAAS,KAAK,IAAI,GAAG,GAAG,CAAC,IAAK,IAAI,EAAE;AAC1C,gBAAM,OAAO,SAAS,IAAI,UAAU,QAAQ,IAAI,UAAU,OAAO,IAAI;AACrE,gBAAM,QACJ,OAAO,IAAI,UAAU,aACjB,IAAI,MAAM,IAAI,IAAI,GAAG,GAAG,GAAG,IAC3B,IAAI;AACV,gBAAM,MACJ,OAAO,IAAI,QAAQ,aACf,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IACzB,IAAI;AACV,gBAAM,YAAY,OAAO,IAAI,YAAY,aAAa,MAAM,IAAI,QAAS,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI;AAC9F,mBAAS,KAAK,EAAE,MAAM,OAAO,SAAS,QAAW,KAAK,OAAO,QAAW,SAAS,WAAW,MAAM,EAAE,CAAC;AACrG,mBAAS,KAAK,EAAE,MAAM,UAAU,OAAO,IAAI,UAAU,KAAK,CAAC;AAAA,QAC7D;AACA,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,IACF;AAGA,WAAO,KAAK,SAAS,IAAI,EAAE,CAAC;AAG5B,eAAW,QAAQ,OAAQ,eAAc,IAAI;AAC7C,WAAO;AAAA,EACT;AACF;;;ACjKO,SAAS,UACd,MACA,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,WAAW,MAAM;AAAA,MACrB,CAAC,KAAK,MAAM,OAAO,OAAO,MAAM,WAAW,EAAE,SAAS,EAAE,KAAK;AAAA,MAC7D;AAAA,IACF;AACA,UAAM,YAAY,KAAK,IAAI,GAAG,IAAI,QAAQ;AAC1C,UAAM,aAAa,QAAQ,MAAM,SAAS;AAE1C,UAAM,QAAQ,MAAM;AACpB,UAAM,KAAK,MAAM,MAAM,OAAO,WAAW,UAAU;AACnD,UAAM,QAAQ,MAAM,SAAS,OAAO,WAAW,UAAU;AACzD,UAAM,OAAa,CAAC,GAAG,YAAY,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ;AACxD,UAAI,OAAO,QAAQ,UAAU;AAC3B,eAAO,MAAM,QAAQ,EAAE,MAAM,KAAK,IAAI,MAAM,IAAI;AAAA,MAClD;AACA,aAAO,EAAE,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,SAAS,MAAM;AAAA,IAC/D,CAAC;AACD,WAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1B;AACF;AAEO,SAAS,KACd,OACA,QACA,MASU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,OAAa,CAAC;AACpB,UAAM,WAAW,MAAM;AACvB,UAAM,IAAI,MAAM;AAChB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,WAAW,MAAM;AACvB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,OAAO,WAAW,KAAK,YAAY,IAAI,QAAQ;AAC7D,YAAM,UAAU,MAAM,WAAW,CAAC,MAAM,WAAW,MAAM,SAAS,CAAC,IAAI;AAEvE,UAAI,UAAU;AACZ,aAAK,KAAK;AAAA,UACR,MAAM;AAAA,UACN,OAAO,MAAM,eAAe,GAAG,WAAW,KAAK;AAAA,UAC/C,IAAI,MAAM,YAAY,GAAG,WAAW,KAAK;AAAA,UACzC;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,aAAK,KAAK;AAAA,UACR,MAAM;AAAA,UACN,OAAO,MAAM,iBAAiB,GAAG,WAAW,KAAK;AAAA,UACjD;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,IAAI,MAAM,SAAS,GAAG;AACxB,aAAK,KAAK,EAAE,MAAM,UAAU,OAAO,MAAM,kBAAkB,GAAG,WAAW,KAAK,WAAW,UAAU,KAAK,CAAC;AAAA,MAC3G;AAAA,IACF;AACA,WAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1B;AACF;AAEO,SAAS,MACd,OACA,MACS;AACT,QAAM,IAAI,MAAM;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,MAAM,SAAS,GAAG,WAAW,MAAM;AAAA,IAC1C,IAAI,MAAM,MAAM,GAAG,WAAW,MAAM;AAAA,IACpC,SAAS,MAAM;AAAA,EACjB;AACF;AAUO,SAAS,GACd,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,MAAM,MAAM,aAAa;AAC/B,UAAM,SAAS,MAAM,YAAY,KAAK,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC;AAC9E,UAAM,SAAiB,CAAC;AAExB,eAAW,QAAQ,OAAO;AACxB,YAAM,UAAU,IAAI,KAAK,KAAK,MAAM;AACpC,YAAM,WAAW,KAAK,YAAY,MAAM;AACxC,YAAM,SAAkB,WAAW,EAAE,MAAM,SAAS,OAAO,SAAS,IAAI;AAExE,UAAI,OAAO,KAAK,UAAU,UAAU;AAClC,cAAM,WAAW,KAAK,cAAc,MAAM;AAC1C,cAAM,SACJ,YAAY,KAAK,UACb,EAAE,MAAM,KAAK,OAAO,OAAO,UAAU,SAAS,KAAK,QAAQ,IAC3D,KAAK;AACX,eAAO,KAAK,QAAQ,CAAC,QAAQ,KAAK,MAAM,GAAG,KAAK,CAAC;AAAA,MACnD,OAAO;AACL,eAAO,KAAK,QAAQ,CAAC,QAAQ,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,QACd,SACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,SAAS,MAAM,UAAU,MAAM;AACrC,UAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,CAAC;AAExC,QAAI;AACJ,QAAI,OAAO,YAAY,UAAU;AAC/B,YAAM,UAAU,SAAS,SAAS,UAAU;AAC5C,cAAQ,QAAQ,IAAI,CAAC,SAAS;AAC5B,cAAM,MAAY,MAAM,QAAQ,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI;AAC3E,eAAO,QAAQ,KAAK,UAAU;AAAA,MAChC,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,QAAQ,UAAU;AAAA,IAC5B;AAEA,UAAM,SAAgB,CAAC;AAEvB,QAAI,MAAM,OAAO;AACf,YAAM,YAAkB;AAAA,QACtB,EAAE,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAK;AAAA,QAChD;AAAA,QACA,EAAE,MAAM,KAAK,OAAO,OAAO,QAAQ,MAAM,KAAK;AAAA,MAChD;AACA,aAAO,KAAK,QAAQ,WAAW,KAAK,CAAC;AAAA,IACvC;AAEA,eAAW,QAAQ,OAAO;AACxB,aAAO,KAAK;AAAA,QACV,EAAE,MAAM,UAAU,OAAO,QAAQ,UAAU,KAAK;AAAA,QAChD;AAAA,QACA,GAAG,QAAQ,MAAM,UAAU;AAAA,MAC7B,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,SACd,SACA,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,QAAQ,UAAU,WAAW;AACnC,UAAM,SAAkB;AAAA,MACtB,MAAM,IAAI,KAAK;AAAA,MACf,OAAO,MAAM,cAAc,MAAM;AAAA,MACjC,SAAS,MAAM;AAAA,IACjB;AACA,UAAM,WAAoB,MAAM,UAC5B,EAAE,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,IAC9D,MAAM,QACJ,EAAE,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,MAAM,IACvC,IAAI,KAAK;AACf,WAAO,CAAC,QAAQ,CAAC,QAAQ,QAAQ,GAAG,KAAK,CAAC;AAAA,EAC5C;AACF;AAEO,SAAS,WACd,OACA,MAQU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,aAAa,gBAAgB,MAAM,SAAS,CAAC;AACnD,UAAM,aAAa,KAAK,IAAI,GAAG,aAAa,CAAC;AAC7C,UAAM,KAAK,MAAM;AACjB,UAAM,UAAU,MAAM,WAAW;AAEjC,UAAM,UAAU,SAAS,MAAM,eAAe;AAC9C,UAAM,gBAAgB,CAAC,SAAS,MAAM;AAEtC,UAAM,gBACJ,QAAQ,SAAS,aACb,QAAQ,MAAM,QAAQ,SAAS,UAAU,IACzC;AACN,UAAM,SAAS,IAAI,iBAAiB,UAAU,WAAW,KAAK,UAAU;AAExE,UAAM,OAAa;AAAA,MACjB,EAAE,MAAM,UAAU,WAAW,KAAK,OAAO,IAAI,UAAU,KAAK;AAAA,MAC5D,gBACI,EAAE,MAAM,QAAQ,KAAK,MAAM,OAAO,MAAM,OAAO,SAAS,MAAM,QAAQ,IACtE,MAAM,SAAS,MAAM,UACnB,EAAE,MAAM,QAAQ,OAAO,MAAM,OAAO,SAAS,MAAM,QAAQ,IAC3D;AAAA,MACN,EAAE,MAAM,UAAU,WAAW,KAAK,OAAO,IAAI,UAAU,KAAK;AAAA,IAC9D;AACA,WAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1B;AACF;;;AC/LO,SAAS,aAAa,MAA0B;AACrD,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,OAAO,GAAG,KAAK,SAAS,IAAI,YAAY,CAAC;AAAA,IAElD,KAAK;AACH,aAAO,OAAO,KAAK,SAAS,IAAI,YAAY,GAAG;AAAA,QAC7C,KAAK,KAAK;AAAA,QACV,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,IAEH,KAAK;AACH,aAAO,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG;AAAA,QACrD,OAAO,KAAK;AAAA,QACZ,aAAa,KAAK;AAAA,MACpB,CAAC;AAAA,IAEH,KAAK;AACH,aAAO,MAAM,KAAK,OAAO;AAAA,IAE3B,KAAK;AACH,aAAO,UAAU,KAAK,KAAK;AAAA,IAE7B,KAAK;AACH,aAAO,MAAM;AAAA,IAEf,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,KAAK,MAAM;AAAA,QACpC,aAAa,KAAK;AAAA,QAClB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IAEH,KAAK;AACH,aAAO,UAAU,KAAK,MAAM,KAAK,OAAO;AAAA,QACtC,IAAI,KAAK;AAAA,QACT,OAAO,KAAK;AAAA,MACd,CAAC;AAAA,IAEH,KAAK;AACH,aAAO,KAAK,KAAK,OAAO,KAAK,QAAQ;AAAA,QACnC,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,QACf,eAAe,KAAK;AAAA,QACpB,gBAAgB,KAAK;AAAA,MACvB,CAAC;AAAA,IAEH,KAAK;AACH,aAAO,CAAC,MAAM;AACZ,cAAM,WAAW,KAAK,QAAQ,MAAM,KAAK,QAAQ;AACjD,cAAM,OAAO,KAAK,IAAI,GAAG,IAAI,IAAI,SAAS,MAAM;AAChD,eAAO,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG,OAAO,KAAK,MAAM,GAAG,QAAQ,CAAC;AAAA,MACvF;AAAA,IAEF,KAAK;AACH,aAAO,MAAM,CAAC,KAAK,QAAQ,CAAC;AAAA,EAChC;AACF;;;ACtFO,SAAS,KACd,MACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,SAAgB,CAAC;AACvB,aAAS,KAAK,OAAmB,QAAgB;AAC/C,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAO,MAAM,CAAC;AACpB,cAAM,OAAO,MAAM,MAAM,SAAS;AAClC,cAAM,UAAU,KAAK,YAAY,KAAK,SAAS,SAAS;AACxD,cAAM,YAAY,OAAO,wBAAwB;AACjD,cAAM,OAAa,CAAC;AACpB,YAAI,OAAQ,MAAK,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,eAAe,MAAM,OAAO,UAAU,KAAK,CAAC;AAC/F,aAAK,KAAK,EAAE,MAAM,WAAW,OAAO,MAAM,eAAe,MAAM,OAAO,UAAU,KAAK,CAAC;AACtF,aAAK,KAAK,EAAE,MAAM,KAAK,OAAO,OAAO,UAAU,MAAM,QAAS,MAAM,aAAa,MAAM,OAAQ,SAAS,KAAK,QAAQ,CAAC;AACtH,eAAO,KAAK,QAAQ,MAAM,CAAC,CAAC;AAC5B,YAAI,SAAS;AACX,eAAK,KAAK,UAAW,UAAU,OAAO,SAAS,YAAY;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AACA,SAAK,MAAM,EAAE;AACb,WAAO;AAAA,EACT;AACF;AAIO,SAAS,KACd,OACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,SAAgB,CAAC;AACvB,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,SAAS,OAAO,MAAM,MAAM,EAAE;AACpC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,OAAO,OAAO,SAAS,WAAW,OAAO,KAAK;AACpD,YAAM,YAAY,OAAO,SAAS,WAAW,MAAM,QAAS,KAAK,SAAS,MAAM;AAChF,YAAM,YAAY,OAAO,SAAS,WAAW,SAAY,KAAK;AAC9D,YAAM,SAAS,UACX,IAAI,OAAO,IAAI,CAAC,EAAE,SAAS,QAAQ,GAAG,CAAC,OACvC;AACJ,YAAM,SAAS,IAAI,OAAO,OAAO,MAAM;AACvC,YAAM,UAAU,SAAS,MAAM,IAAI,OAAO,MAAM;AAChD,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,cAAM,OAAa,CAAC;AACpB,YAAI,MAAM,GAAG;AACX,eAAK,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,YAAY,CAAC;AAAA,QACtD,OAAO;AACL,eAAK,KAAK,MAAM;AAAA,QAClB;AACA,aAAK,KAAK,aAAa,YAAY,EAAE,MAAM,QAAQ,CAAC,GAAI,OAAO,WAAW,SAAS,UAAU,IAAI,QAAQ,CAAC,CAAE;AAC5G,eAAO,KAAK,QAAQ,MAAM,CAAC,CAAC;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;ACrDA,SAAS,MAAM,OAAsC;AACnD,SAAO,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO;AAAA,IACrC,SAAS,IAAI,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACvC;AAAA,EACF,EAAE;AACJ;AAEA,IAAM,WAAW,MAAM;AAAA,EACrB,CAAC,UAAU,SAAS;AAAA,EACpB,CAAC,oBAAoB,SAAS;AAAA,EAC9B,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,sRAAsR,SAAS;AAAA,EAChS,CAAC,iDAAiD,QAAQ;AAAA,EAC1D,CAAC,yBAAyB,MAAM;AAAA,EAChC,CAAC,+BAA+B,UAAU;AAAA,EAC1C,CAAC,MAAM,aAAa;AAAA,EACpB,CAAC,kCAAkC,aAAa;AAClD,CAAC;AAED,IAAM,aAAa,MAAM;AAAA,EACvB,CAAC,6BAA6B,UAAU;AAAA,EACxC,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,2BAA2B,SAAS;AAAA,EACrC,CAAC,mDAAmD,QAAQ;AAAA,EAC5D,CAAC,cAAc,aAAa;AAC9B,CAAC;AAED,IAAM,aAAa,MAAM;AAAA,EACvB,CAAC,OAAO,SAAS;AAAA,EACjB,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,eAAe,MAAM;AAAA,EACtB,CAAC,kBAAkB,MAAM;AAAA,EACzB,CAAC,6OAA6O,SAAS;AAAA,EACvP,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,mBAAmB,aAAa;AACnC,CAAC;AAED,IAAM,gBAAgB,MAAM;AAAA,EAC1B,CAAC,UAAU,SAAS;AAAA,EACpB,CAAC,OAAO,SAAS;AAAA,EACjB,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,iDAAiD,QAAQ;AAAA,EAC1D,CAAC,yBAAyB,MAAM;AAAA,EAChC,CAAC,kCAAkC,aAAa;AAClD,CAAC;AAED,SAAS,SAAS,MAAuB;AACvC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,IAAI,KAAK,YAAY;AAC3B,MAAI,MAAM,UAAU,MAAM,QAAS,QAAO;AAC1C,MAAI,MAAM,UAAU,MAAM,QAAQ,MAAM,SAAS,MAAM,QAAS,QAAO;AACvE,MAAI,MAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,gBAAgB,MAAM,aAAc,QAAO;AAC/G,SAAO;AACT;AAEA,SAAS,aAAa,MAAc,WAA4B;AAC9D,QAAM,SAAkB,CAAC;AACzB,MAAI,MAAM;AACV,SAAO,MAAM,KAAK,QAAQ;AAExB,QAAI,KAAK,GAAG,MAAM,OAAO,KAAK,GAAG,MAAM,KAAM;AAC3C,UAAI,KAAK;AACT,aAAO,KAAK,KAAK,WAAW,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,MAAM,KAAO;AACpE,aAAO,KAAK,EAAE,MAAM,KAAK,MAAM,KAAK,EAAE,GAAG,MAAM,UAAU,CAAC;AAC1D,YAAM;AACN;AAAA,IACF;AACA,QAAI,UAAU;AACd,eAAW,QAAQ,WAAW;AAC5B,WAAK,QAAQ,YAAY;AACzB,YAAM,IAAI,KAAK,QAAQ,KAAK,IAAI;AAChC,UAAI,KAAK,EAAE,UAAU,KAAK;AACxB,eAAO,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC;AAC3C,eAAO,EAAE,CAAC,EAAE;AACZ,kBAAU;AACV;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,SAAS;AAEZ,YAAM,QAAQ;AACd;AACA,aAAO,MAAM,KAAK,UAAU,KAAK,GAAG,MAAM,OAAO,KAAK,GAAG,MAAM,KAAM;AACnE,YAAI,WAAW;AACf,mBAAW,QAAQ,WAAW;AAC5B,eAAK,QAAQ,YAAY;AACzB,gBAAM,IAAI,KAAK,QAAQ,KAAK,IAAI;AAChC,cAAI,KAAK,EAAE,UAAU,KAAK;AAAE,uBAAW;AAAM;AAAA,UAAO;AAAA,QACtD;AACA,YAAI,SAAU;AACd;AAAA,MACF;AACA,aAAO,KAAK,EAAE,MAAM,KAAK,MAAM,OAAO,GAAG,GAAG,MAAM,UAAU,CAAC;AAAA,IAC/D;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,SAAS,QAAgB,UAA8B;AACrE,QAAM,YAAY,SAAS,QAAQ;AACnC,SAAO,OAAO,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,aAAa,MAAM,SAAS,CAAC;AACvE;;;ACpFA,IAAM,eAA6B;AAAA,EACjC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AACf;AAEA,IAAM,gBAA+B;AAAA,EACnC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AACV;AAEA,IAAM,cAA2B;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,EACV,MAAM;AACR;AAEA,IAAM,gBAA+B;AAAA,EACnC,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AACd;AAEA,IAAM,kBAAmC;AAAA,EACvC,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEA,IAAM,gBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AACf;AAEA,IAAM,iBAAgC;AAAA,EACpC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AACV;AAEA,IAAM,eAA4B;AAAA,EAChC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,EACV,MAAM;AACR;AAEA,IAAM,iBAAgC;AAAA,EACpC,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AACd;AAEA,IAAM,mBAAoC;AAAA,EACxC,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEO,IAAM,mBAA8B;AAAA,EACzC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AACX;AAEO,SAAS,iBACd,YACA,aAAwB,QACb;AACX,SAAO,eAAe,WAAW,aAAa;AAChD;AAEO,SAAS,aACd,MACA,aAA8B,QAC9B,MACO;AACP,QAAM,OAAO,iBAAiB,YAAY,MAAM,cAAc,MAAM;AACpE,QAAM,aAAa,KAAK,MAAM,IAAI,KAAK,iBAAiB,MAAM,IAAI;AAElE,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,OAAO,KAAK;AAAA,IACZ,SAAS,KAAK;AAAA,IACd;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,UAAU,WAAW;AAAA,IACrB,QAAQ,WAAW;AAAA,IACnB,UAAU,WAAW;AAAA,IACrB,YAAY,WAAW;AAAA,IACvB,OAAO,WAAW,QAAQ;AAAA,IAC1B,KAAK,WAAW,QAAQ;AAAA,IACxB,OAAO,WAAW,QAAQ;AAAA,IAC1B,QAAQ,WAAW,QAAQ;AAAA,IAC3B,MAAM,WAAW,QAAQ;AAAA,IACzB,SAAS,WAAW,QAAQ;AAAA,IAC5B,MAAM,WAAW,QAAQ;AAAA,IACzB,OAAO,WAAW,QAAQ;AAAA,IAC1B,aAAa,WAAW,QAAQ;AAAA,IAChC,aAAa,WAAW,QAAQ;AAAA,IAChC,QAAQ,WAAW,SAAS;AAAA,IAC5B,IAAI,WAAW,SAAS;AAAA,EAC1B;AACF;AAEO,IAAM,OAAO,aAAa,kBAAkB,MAAM;AAClD,IAAM,QAAQ,aAAa,kBAAkB,OAAO;AAEpD,SAAS,eAAe,OAAsC;AACnE,SAAO;AAAA,IACL,eAAe,MAAM,SAAS;AAAA,IAC9B,eAAe,MAAM,SAAS;AAAA,IAC9B,kBAAkB,MAAM,SAAS;AAAA,IACjC,mBAAmB,MAAM,SAAS;AAAA,IAClC,0BAA0B,MAAM,SAAS;AAAA,IACzC,iBAAiB,MAAM,SAAS;AAAA,IAChC,oBAAoB,MAAM,SAAS;AAAA,IACnC,iBAAiB,MAAM,SAAS;AAAA,IAChC,mBAAmB,MAAM,SAAS;AAAA,IAClC,uBAAuB,MAAM,SAAS;AAAA,IACtC,uBAAuB,MAAM,SAAS;AAAA,EACxC;AACF;AAEO,SAAS,eAAe,MAAqC;AAClE,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK,MAAM,IAAI;AAAA,EACzB,SAAS,OAAO;AACd,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,iBAAiB,QAAQ,MAAM,UAAU,eAAe,CAAC;AAAA,IAC1F;AAAA,EACF;AACA,SAAO,kBAAkB,KAAK;AAChC;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,MAAM,MAAc,SAAuC;AAClE,SAAO,EAAE,MAAM,QAAQ;AACzB;AAEA,SAAS,aAAa,OAAwB;AAC5C,QAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,wDAAwD,KAAK,CAAC,EAAG,QAAO;AAC5E,MAAI,2DAA2D,KAAK,CAAC,EAAG,QAAO;AAC/E,MAAI,4BAA4B,KAAK,CAAC,EAAG,QAAO;AAChD,MAAI,cAAc,KAAK,CAAC,EAAG,QAAO;AAClC,SAAO;AACT;AAEA,SAAS,mBACP,OACA,MACA,QACA;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AACxD;AAAA,EACF;AACA,MAAI,CAAC,aAAa,KAAK,GAAG;AACxB,WAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAAA,EACpD;AACF;AAEA,SAAS,4BACP,OACA,MACA,QACA;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACzD,WAAO,KAAK,MAAM,MAAM,qCAAqC,CAAC;AAC9D;AAAA,EACF;AACA,MAAI,QAAQ,KAAK,QAAQ,GAAG;AAC1B,WAAO,KAAK,MAAM,MAAM,qCAAqC,CAAC;AAAA,EAChE;AACF;AAEA,SAAS,mBACP,OACA,MACA,QACA,QACA;AACA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C;AAAA,EACF;AACA,aAAW,SAAS,QAAQ;AAC1B,uBAAmB,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM;AAAA,EAC7D;AACF;AAEA,SAAS,uBACP,OACA,MACA,QACA;AACA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C;AAAA,EACF;AAEA,qBAAmB,MAAM,eAAe,GAAG,IAAI,kBAAkB,MAAM;AACvE,8BAA4B,MAAM,qBAAqB,GAAG,IAAI,wBAAwB,MAAM;AAE5F,MAAI,CAAC,SAAS,MAAM,QAAQ,GAAG;AAC7B,WAAO,KAAK,MAAM,GAAG,IAAI,aAAa,oBAAoB,CAAC;AAAA,EAC7D,OAAO;AACL,eAAW,SAAS,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAY;AACjE,yBAAmB,MAAM,SAAS,KAAK,GAAG,GAAG,IAAI,aAAa,KAAK,IAAI,MAAM;AAAA,IAC/E;AAAA,EACF;AAEA,aAAW,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,uBAAmB,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM;AAAA,EAC7D;AACF;AAEA,SAAS,wBACP,OACA,MACA,QACA;AACA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C;AAAA,EACF;AAEA;AAAA,IACE,MAAM;AAAA,IACN,GAAG,IAAI;AAAA,IACP,CAAC,YAAY,YAAY,cAAc,WAAW;AAAA,IAClD;AAAA,EACF;AACA,qBAAmB,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,GAAG,MAAM;AAC7E,qBAAmB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,GAAG,MAAM;AACrE,qBAAmB,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,IAAI,GAAG,MAAM;AACzE;AAEA,SAAS,mBACP,OACA,MACA,QACA;AACA,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C;AAAA,EACF;AAEA;AAAA,IACE,MAAM;AAAA,IACN,GAAG,IAAI;AAAA,IACP;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA;AAAA,IACE,MAAM;AAAA,IACN,GAAG,IAAI;AAAA,IACP;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA;AAAA,IACE,MAAM;AAAA,IACN,GAAG,IAAI;AAAA,IACP;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,yBAAuB,MAAM,UAAU,GAAG,IAAI,aAAa,MAAM;AACjE,0BAAwB,MAAM,YAAY,GAAG,IAAI,eAAe,MAAM;AACxE;AAEO,SAAS,kBAAkB,OAAuC;AACvE,QAAM,SAAiC,CAAC;AACxC,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO,EAAE,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,oBAAoB,CAAC,EAAE;AAAA,EACjE;AAEA,MAAI,OAAO,MAAM,OAAO,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG;AACpD,WAAO,KAAK,MAAM,QAAQ,6BAA6B,CAAC;AAAA,EAC1D;AAEA,MAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,MAAM,KAAK,GAAG;AAC1D,WAAO,KAAK,MAAM,WAAW,6BAA6B,CAAC;AAAA,EAC7D;AAEA,MAAI,OAAO,MAAM,YAAY,YAAY,CAAC,OAAO,UAAU,MAAM,OAAO,KAAK,MAAM,UAAU,GAAG;AAC9F,WAAO,KAAK,MAAM,aAAa,6BAA6B,CAAC;AAAA,EAC/D;AAEA,MAAI,CAAC,SAAS,MAAM,KAAK,GAAG;AAC1B,WAAO,KAAK,MAAM,WAAW,0CAA0C,CAAC;AAAA,EAC1E,OAAO;AACL,uBAAmB,MAAM,MAAM,MAAM,gBAAgB,MAAM;AAC3D,uBAAmB,MAAM,MAAM,OAAO,iBAAiB,MAAM;AAAA,EAC/D;AAEA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO,EAAE,IAAI,OAAO,OAAO;AAAA,EAC7B;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ,CAAC;AAAA,IACT,OAAO;AAAA,EACT;AACF;;;ACrgBO,SAAS,WAAW,MAAiB,OAAsB;AAChE,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAW,aAAO,MAAM,OAAO;AAAA,IACpC,KAAK;AAAU,aAAO,MAAM,OAAO;AAAA,IACnC,KAAK;AAAU,aAAO,MAAM,OAAO;AAAA,IACnC,KAAK;AAAW,aAAO,MAAM,OAAO;AAAA,IACpC,KAAK;AAAe,aAAO,MAAM,OAAO;AAAA,IACxC,KAAK;AAAY,aAAO,MAAM,OAAO;AAAA,IACrC,KAAK;AAAQ,aAAO,MAAM,OAAO;AAAA,IACjC;AAAS,aAAO,MAAM,OAAO;AAAA,EAC/B;AACF;AAEO,SAAS,KACd,QACA,MACU;AACV,QAAM,IAAI,MAAM,SAAS;AACzB,QAAM,SAAS,SAAS,QAAQ,MAAM,QAAQ;AAC9C,QAAM,aAAa,MAAM,aAAa,QAClC,EAAE,OAAO,MAAM,SAAS,MAAM,UAAU,UAAU,UAAU,MAAM,GAAG,OAAO,EAAE,SAAS,WAAW,IAClG;AACJ,SAAO;AAAA,IACL;AAAA,MACE,OAAO,SAAS,IACZ,OAAO;AAAA,QAAI,CAAC,eACV,WAAW,WAAW,IAClB,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,SAAS,UAAU,CAAC,IAC3C,WAAW,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,MAAM,OAAO,WAAW,IAAI,MAAM,CAAC,EAAE,EAAE;AAAA,MAClF,IACA,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,SAAS,WAAW,KAAK,KAAK,CAAC,CAAC;AAAA,IAC9D;AAAA,IACA;AAAA,MACE,OAAO,MAAM,UAAU,MAAM,WAAW,QAAQ,KAAK,QAAQ,KAAK;AAAA,MAClE,aAAa,MAAM,eAAe,EAAE,SAAS;AAAA,MAC7C,QAAQ,MAAM,UAAU;AAAA,IAC1B;AAAA,EACF;AACF;;;ACvCA,SAAS,OAAO,GAAmB;AACjC,MAAI,KAAK,IAAI,CAAC,KAAK,IAAM,SAAQ,IAAI,KAAM,QAAQ,CAAC,IAAI;AACxD,MAAI,OAAO,UAAU,CAAC,EAAG,QAAO,OAAO,CAAC;AACxC,SAAO,EAAE,QAAQ,CAAC;AACpB;AAEO,SAAS,MACd,MACA,MACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM;AACpB,UAAM,YAAY,MAAM;AAExB,QAAI,KAAK,WAAW,KAAK,QAAQ,KAAK,SAAS,EAAG,QAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAE5E,UAAM,MAAM,KAAK,IAAI,GAAG,IAAI;AAC5B,UAAM,MAAM,KAAK,IAAI,GAAG,IAAI;AAC5B,UAAM,QAAQ,MAAM,OAAO;AAE3B,UAAM,WAAW,OAAO,GAAG;AAC3B,UAAM,WAAW,OAAO,GAAG;AAC3B,UAAM,SAAS,KAAK,IAAI,SAAS,QAAQ,SAAS,MAAM;AACxD,UAAM,QAAQ,SAAS;AACvB,UAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ,KAAK;AAGvC,UAAM,SAAmB,CAAC;AAC1B,QAAI,KAAK,WAAW,GAAG;AACrB,eAAS,IAAI,GAAG,IAAI,OAAO,IAAK,QAAO,KAAK,KAAK,CAAC,CAAE;AAAA,IACtD,OAAO;AACL,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAM,MAAO,KAAK,QAAQ,MAAO,KAAK,SAAS;AAC/C,cAAM,KAAK,KAAK,MAAM,GAAG;AACzB,cAAM,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,SAAS,CAAC;AAC3C,cAAM,IAAI,MAAM;AAChB,eAAO,KAAK,KAAK,EAAE,KAAM,IAAI,KAAK,KAAK,EAAE,IAAK,CAAC;AAAA,MACjD;AAAA,IACF;AAGA,UAAM,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,OAAQ,IAAI,OAAO,SAAU,SAAS,EAAE,CAAC;AAE7E,UAAM,SAAgB,CAAC;AACvB,aAAS,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO;AAC1C,YAAM,OAAa,CAAC;AAGpB,UAAI,QAAQ;AACZ,UAAI,QAAQ,SAAS,EAAG,SAAQ;AAAA,eACvB,QAAQ,EAAG,SAAQ;AAC5B,WAAK,KAAK,EAAE,MAAM,MAAM,SAAS,MAAM,IAAI,WAAW,OAAO,WAAW,UAAU,KAAK,CAAC;AAGxF,UAAI,OAAO;AACX,eAAS,MAAM,GAAG,MAAM,OAAO,OAAO;AACpC,cAAM,MAAM,KAAK,GAAG;AACpB,YAAI,QAAQ,IAAK,SAAQ;AAAA,iBAChB,MAAM,QAAQ,MAAM,IAAK,SAAQ;AAAA,YACrC,SAAQ;AAAA,MACf;AACA,WAAK,KAAK,QAAQ,EAAE,MAAM,MAAM,IAAI,IAAI;AACxC,aAAO,KAAK,QAAQ,MAAM,KAAK,CAAC;AAAA,IAClC;AAGA,UAAM,QAAc;AAAA,MAClB,EAAE,MAAM,IAAI,OAAO,MAAM,IAAI,YAAY,SAAS,OAAO,KAAK,GAAG,OAAO,WAAW,UAAU,KAAK;AAAA,IACpG;AACA,WAAO,KAAK,QAAQ,OAAO,KAAK,CAAC;AAEjC,WAAO;AAAA,EACT;AACF;;;AC5EA,SAAS,gBAAgB,OAAoD;AAC3E,MAAI,SAAS,EAAG,QAAO;AACvB,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO;AACT;AAEO,SAAS,aAAa,OAAe,OAAc,WAA4C;AACpG,QAAM,MAAM,gBAAgB,KAAK;AACjC,SAAO,WAAW,WAAW,GAAG,KAAK,MAAM,SAAS,SAAS,GAAG;AAClE;AAEO,SAAS,eAAe,OAAyB;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO,OAAO,SAAS,KAAK;AAC3D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,qCAAqC,KAAK,OAAO;AAC1D;AAEO,SAASC,UAAS,MAAc,UAA4B;AACjE,QAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ;AAClC,QAAM,aAAa,KAAK,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAClD,MAAI,CAAC,WAAY,QAAO,CAAC,EAAE;AAE3B,QAAM,WAAqB,CAAC;AAC5B,MAAI,OAAO;AAEX,SAAO,KAAK,SAAS,OAAO;AAC1B,UAAM,QAAQ,KAAK,MAAM,GAAG,QAAQ,CAAC;AACrC,UAAM,UAAU,MAAM,YAAY,GAAG;AACrC,UAAM,MAAM,UAAU,IAAI,UAAU;AACpC,aAAS,KAAK,KAAK,MAAM,GAAG,GAAG,EAAE,QAAQ,CAAC;AAC1C,WAAO,KAAK,MAAM,GAAG,EAAE,UAAU;AAAA,EACnC;AAEA,WAAS,KAAK,IAAI;AAClB,SAAO;AACT;AAEO,SAAS,mBACd,MACA,OACA,QACA,oBACA,WACQ;AACR,QAAM,aAAa,OAAO,WAAW,WAAW,SAAS,OAAO;AAChE,QAAM,UAAUA,UAAS,MAAM,QAAQ,WAAW,MAAM;AAExD,SAAO,QAAQ,IAAI,CAAC,OAAO,UAAU;AACnC,QAAI,UAAU,GAAG;AACf,aAAO,CAAC,QAAQ,YAAY,EAAE,MAAM,OAAO,GAAG,UAAU,IAAI,KAAK;AAAA,IACnE;AACA,WAAO,CAAC,oBAAoB,YAAY,EAAE,MAAM,OAAO,GAAG,UAAU,IAAI,KAAK;AAAA,EAC/E,CAAC;AACH;AAEO,SAAS,kBAAkB,MAAsB;AACtD,SAAO,KAAK,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACxC;AAEA,SAASC,UAAS,OAAkD;AAClE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,eAAe,QAAiB,MAAuB;AAC9D,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,UAAmB;AACvB,aAAW,QAAQ,OAAO;AACxB,QAAI,CAACA,UAAS,OAAO,EAAG,QAAO;AAC/B,cAAU,QAAQ,IAAI;AAAA,EACxB;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAAkC,OAAkC;AACpG,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,MAAM,KAAK;AACvB,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,WAAW,MAAM,GAAkB;AACzC,MAAI,OAAO,aAAa,SAAU,QAAO;AACzC,QAAM,SAAS,eAAe,OAAO,GAAG;AACxC,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,SAAO;AACT;AAEO,SAAS,aAAa,IAAa,OAAc,OAAqC;AAC3F,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,kBAAkB,GAAG,aAAa,IAAI,GAAG,KAAK;AAC5D,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,IAAa,MAAkC;AAC9E,QAAM,MAAM,GAAG,aAAa,IAAI;AAChC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,IAAI,OAAO,SAAS,IAAI,KAAK,GAAG,EAAE;AACxC,SAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAClC;AAEO,SAAS,kBAAkB,IAAiC;AACjE,QAAM,WAAW,GAAG,aAAa,UAAU,KAAK,GAAG,aAAa,eAAe;AAC/E,MAAI,YAAY,SAAS,KAAK,EAAG,QAAO,SAAS,KAAK;AAEtD,QAAM,QAAQ,GAAG,aAAa,OAAO,KAAK;AAC1C,QAAM,QAAQ,MAAM,MAAM,wBAAwB;AAClD,SAAO,QAAQ,CAAC;AAClB;;;ACnFA,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,kBAAkB,oBAAI,IAA6B;AAEzD,SAAS,MAAM,UAAwB,KAAyB;AAC9D,SAAO,EAAE,MAAM,SAAS,KAAK,SAAS;AACxC;AAaA,SAAS,cAAc,KAAa,IAAiC;AACnE,QAAM,QAAQ,IAAI,MAAM,oCAAoC;AAC5D,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,OAAO,WAAW,MAAM,CAAC,CAAE;AACzC,QAAM,QAAQ,MAAM,CAAC,KAAK,MAAM,YAAY;AAC5C,MAAI,SAAS,MAAM;AACjB,UAAM,KAAK,WAAW,iBAAiB,EAAE,EAAE,UAAU;AACrD,UAAM,QAAQ,OAAO,SAAS,EAAE,KAAK,KAAK,IAAI,KAAK;AACnD,WAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC9C;AACA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAAS,cAAc,IAAwB;AAC7C,MAAI,CAAC,GAAG,eAAe,OAAO,qBAAqB,WAAY,QAAO,CAAC;AAEvE,QAAM,KAAK,iBAAiB,EAAE;AAC9B,QAAM,UAAU,GAAG;AACnB,QAAM,SAAS,YAAY,UAAU,YAAY;AACjD,QAAM,SAAS,YAAY,UAAU,YAAY;AACjD,MAAI,CAAC,UAAU,CAAC,OAAQ,QAAO,CAAC;AAEhC,QAAM,SAAoB,EAAE,SAAS,SAAS,SAAS,OAAO;AAE9D,MAAI,QAAQ;AACV,UAAM,MAAM,GAAG;AACf,QAAI,QAAQ,SAAS,QAAQ,SAAU,QAAO,YAAY;AAAA,EAC5D;AAEA,MAAI,QAAQ;AACV,UAAM,OAAO,GAAG;AAChB,QAAI,QAAQ,SAAS,QAAQ;AAC3B,YAAM,QAAQ,KAAK,MAAM,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;AAC5D,UAAI,QAAQ,EAAG,QAAO,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,MAAM,GAAG;AACf,MAAI,OAAO,QAAQ,YAAY,QAAQ,OAAO;AAC5C,WAAO,MAAM,cAAc,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,IAAa,MAAoC;AAC5E,QAAM,MAAM,GAAG,aAAa,IAAI;AAChC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,IAAI,MAAM,SAAS,GAAG;AACxC,QAAI,CAAC,MAAO;AACZ,UAAM,IAAI,OAAO,SAAS,OAAO,EAAE;AACnC,QAAI,CAAC,OAAO,SAAS,CAAC,EAAG,QAAO;AAChC,QAAI,KAAK,CAAC;AAAA,EACZ;AACA,SAAO,IAAI,SAAS,IAAI,MAAM;AAChC;AAEA,SAAS,iBAAiB,KAAmC;AAC3D,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACpD,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,OAAO;AACjC,UAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO;AACnC,YAAMC,QAAO,OACV,IAAI,CAAC,UAAW,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK,CAAE,EAClE,OAAO,CAAC,UAAU,OAAO,SAAS,KAAK,CAAC;AAC3C,aAAOA,MAAK,SAAS,IAAIA,QAAO;AAAA,IAClC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,OAAO,QACV,MAAM,SAAS,EACf,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC,EAClC,IAAI,CAAC,UAAU,OAAO,WAAW,KAAK,CAAC,EACvC,OAAO,CAAC,UAAU,OAAO,SAAS,KAAK,CAAC;AAC3C,SAAO,KAAK,SAAS,IAAI,OAAO;AAClC;AAEA,SAAS,iBAAiB,IAAa,MAAmC;AACxE,QAAM,MAAM,GAAG,aAAa,IAAI;AAChC,MAAI,QAAQ,KAAM,QAAO;AACzB,QAAM,QAAQ,IAAI,KAAK,EAAE,YAAY;AACrC,MAAI,CAAC,SAAS,UAAU,UAAU,UAAU,OAAO,UAAU,SAAS,UAAU,KAAM,QAAO;AAC7F,MAAI,UAAU,WAAW,UAAU,OAAO,UAAU,QAAQ,UAAU,MAAO,QAAO;AACpF,SAAO;AACT;AAEA,SAAS,UAAU,IAAa,OAAqC;AACnE,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,GAAG,aAAa,IAAI;AAClC,QAAI,UAAU,KAAM,QAAO;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,IAAa,OAAqC;AAC3E,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,iBAAiB,IAAI,IAAI;AACvC,QAAI,UAAU,OAAW,QAAO;AAAA,EAClC;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,IAAa,OAAsC;AAC5E,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,iBAAiB,IAAI,IAAI;AACvC,QAAI,UAAU,OAAW,QAAO;AAAA,EAClC;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,IAAa,OAAuC;AACjF,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,GAAG,aAAa,IAAI;AAChC,QAAI,CAAC,IAAK;AACV,UAAM,SAAS,iBAAiB,GAAG;AACnC,QAAI,OAAQ,QAAO;AAAA,EACrB;AACA,SAAO;AACT;AAEA,SAAS,eAAe,IAAa,MAAkC;AACrE,QAAM,MAAM,GAAG,aAAa,IAAI;AAChC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,IAAI,OAAO,WAAW,IAAI,KAAK,CAAC;AACtC,SAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAClC;AAEA,SAAS,gBAAgB,IAAa,OAAqC;AACzE,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,eAAe,IAAI,IAAI;AACrC,QAAI,UAAU,OAAW,QAAO;AAAA,EAClC;AACA,SAAO;AACT;AAEA,SAAS,eAAe,IAAqC;AAC3D,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAS,GAAmB,WAAW,CAAC,CAAC,GAAG;AAC5E,QAAI,OAAO,UAAU,SAAU,KAAI,GAAG,IAAI;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,IAAwB;AAC1D,SAAO,MAAM,KAAK,GAAG,UAAU,EAAE,OAAO,CAAC,MAAoB,EAAE,aAAa,CAAC;AAC/E;AAEA,SAAS,eAAe,IAAa,OAAqC;AACxE,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,GAAG,cAAc,gBAAgB,IAAI,IAAI;AACtD,QAAI,CAAC,KAAM;AACX,WAAO,KAAK,eAAe;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAsB;AAC9C,QAAM,OAAO,IAAI,KAAK;AACtB,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,IAAmC;AAC5D,QAAM,UAAU,GAAG,iBAAiB,eAAe;AACnD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,MAAgB,CAAC;AACvB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,IAAI,QAAQ,CAAC;AACnB,UAAM,IAAI,OAAO,WAAW,EAAE,aAAa,OAAO,KAAK,EAAE;AACzD,QAAI,CAAC,OAAO,SAAS,CAAC,EAAG,QAAO;AAChC,QAAI,KAAK,CAAC;AAAA,EACZ;AACA,SAAO,IAAI,SAAS,IAAI,MAAM;AAChC;AAEA,SAAS,iBAAiB,IAAa,KAAqC;AAC1E,QAAM,YAAY,GAAG,eAAe,IAAI,KAAK;AAC7C,QAAM,OACJ,sBAAsB,IAAI,CAAC,QAAQ,UAAU,eAAe,UAAU,aAAa,CAAC,KACpF,kBAAkB,EAAE,KACpB,iBAAiB,QAAQ,KACzB,CAAC;AAEH,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,QAAQ,kBAAkB,IAAI,CAAC,UAAU,aAAa,CAAC;AAAA,IACvD,MAAM,kBAAkB,IAAI,CAAC,QAAQ,WAAW,CAAC;AAAA,IACjD,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,IAC1D,WAAW,aAAa,IAAI,IAAI,OAAO,CAAC,cAAc,iBAAiB,CAAC;AAAA,EAC1E;AACF;AAEA,SAAS,qBAAqB,IAAa,KAAqC;AAC9E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,UAAU,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK;AAAA,IAC9C,OAAO,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,IACjD,IAAI,aAAa,IAAI,IAAI,OAAO,CAAC,MAAM,WAAW,cAAc,iBAAiB,CAAC;AAAA,IAClF,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,EAC5D;AACF;AAEA,SAAS,eAAe,IAAa,KAAqC;AACxE,QAAM,YAAY,kBAAkB,GAAG,eAAe,EAAE;AACxD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,UAAU,IAAI,CAAC,SAAS,cAAc,cAAc,OAAO,CAAC,MAAM,aAAa;AAAA,IACtF,OAAO,gBAAgB,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,IACvD,KAAK,gBAAgB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,IACjD,OAAO,kBAAkB,IAAI,CAAC,SAAS,cAAc,aAAa,gBAAgB,CAAC;AAAA,IACnF,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,IAC1D,aAAa,kBAAkB,IAAI,CAAC,WAAW,gBAAgB,gBAAgB,mBAAmB,CAAC;AAAA,EACrG;AACF;AAEA,SAAS,oBAAoB,IAAyB;AACpD,QAAM,QACJ,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KACrC,eAAe,IAAI,CAAC,iBAAiB,iBAAiB,CAAC,MACtD,GAAG,eAAe;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,IAAyB;AAChD,QAAM,cACJ,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KACrC,eAAe,IAAI,CAAC,oBAAoB,WAAW,CAAC,MACnD,GAAG,eAAe;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,iBAAiB,WAAW;AAAA,IACnC,OAAO,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,EACnD;AACF;AAEA,SAAS,gBAAgB,IAAa,KAAqC;AACzE,QAAM,QACJ,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KACrC,eAAe,IAAI,CAAC,aAAa,uBAAuB,CAAC,KACzD,GAAG;AAEL,SAAO,gBAAgB,OAAO;AAAA,IAC5B,OAAO,IAAI;AAAA,IACX,WAAW,IAAI;AAAA,IACf,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,SAAS,oBAAoB,IAAa,KAA4C;AACpF,QAAM,MAAM,UAAU,IAAI,CAAC,aAAa,eAAe,SAAS,CAAC;AACjE,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,OAAO,IAAI,KAAK,EAAE,YAAY;AACpC,MAAI,CAAC,KAAM,QAAO;AAElB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,QACnD,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,QACnD,QAAQ,sBAAsB,IAAI,CAAC,UAAU,aAAa,CAAC;AAAA,QAC3D,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,QACjD,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,MAAM,SAAS;AAAA,QACrB,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,QACnD,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,kBAAkB,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK;AAAA,QACtD,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,QACnD,QAAQ,kBAAkB,IAAI,CAAC,WAAW,cAAc,CAAC,KAAK;AAAA,QAC9D,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,QAClF,MAAM,UAAU,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK;AAAA,MAChD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,QACjD,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,QAClF,MAAM,UAAU,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK;AAAA,QAC9C,YAAY,aAAa,IAAI,IAAI,OAAO,CAAC,eAAe,kBAAkB,CAAC,KAAK;AAAA,MAClF;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,kBAAkB,IAAI,CAAC,SAAS,YAAY,CAAC,KAAK;AAAA,MAC3D;AAAA,IACF,KAAK;AAAA,IACL,KAAK,UAAU;AACb,YAAM,QAAQ;AAAA,QACZ,GAAG,eAAe,UAAU,IAAI,CAAC,SAAS,cAAc,YAAY,CAAC,KAAK;AAAA,MAC5E;AACA,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,KACJ,UAAU,IAAI,CAAC,UAAU,eAAe,MAAM,CAAC,KAC/C;AACF,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,QAC1D,IAAI,aAAa,IAAI,IAAI,OAAO,CAAC,MAAM,WAAW,cAAc,iBAAiB,CAAC;AAAA,QAClF,QAAQ,IAAI,kBAAkB,IAAI,EAAE,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACH,aAAO,iBAAiB,IAAI,GAAG;AAAA,IACjC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAoB,EAAE;AAAA,IAC/B,KAAK;AACH,aAAO,gBAAgB,EAAE;AAAA,IAC3B,KAAK;AACH,aAAO,gBAAgB,IAAI,GAAG;AAAA,IAChC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAe,IAAI,GAAG;AAAA,IAC/B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,qBAAqB,IAAI,GAAG;AAAA,IACrC;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,2BAAiC;AACxC,MAAI,gBAAgB,OAAO,EAAG;AAE9B,WAAS,QAAQ,GAAG,SAAS,GAAG,SAAS;AACvC,oBAAgB,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,QAAQ;AAC5C,YAAM,OAAO,kBAAkB,GAAG,eAAe,EAAE;AACnD,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,aAAa,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC;AAAA,MAChF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,kBAAgB,IAAI,KAAK,CAAC,IAAI,QAAQ;AACpC,UAAM,OAAO,kBAAkB,GAAG,eAAe,EAAE;AACnD,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OACE,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KACnD,IAAI,WAAW,aACf,IAAI,MAAM,SAAS;AAAA,IACvB;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,MAAM,CAAC,OAAO;AAChC,UAAM,QAAQ,2BAA2B,EAAE,EACxC,OAAO,CAAC,UAAU,MAAM,QAAQ,YAAY,MAAM,IAAI,EACtD,IAAI,CAAC,SAAS,kBAAkB,KAAK,eAAe,EAAE,CAAC,EACvD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAO,EAAE,MAAM,QAAQ,SAAS,OAAO,OAAO,GAAG,MAAM;AAAA,EACzD,CAAC;AAED,kBAAgB,IAAI,MAAM,CAAC,OAAO;AAChC,UAAM,QAAQ,2BAA2B,EAAE,EACxC,OAAO,CAAC,UAAU,MAAM,QAAQ,YAAY,MAAM,IAAI,EACtD,IAAI,CAAC,SAAS,kBAAkB,KAAK,eAAe,EAAE,CAAC,EACvD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO,iBAAiB,IAAI,OAAO,KAAK;AAAA,MACxC;AAAA,IACF;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,cAAc,CAAC,IAAI,QAAQ;AAC7C,UAAM,OAAO,kBAAkB,GAAG,eAAe,EAAE;AACnD,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,WAAW,eACf,IAAI,MAAM,SAAS;AAAA,MACrB,OAAO,IAAI,WAAW,aAAa,IAAI,MAAM,SAAS;AAAA,IACxD;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,MAAM,CAAC,IAAI,QAAQ;AACrC,UAAM,QAAQ,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC;AACnD,QAAI,OAAO;AACT,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,QAClF,MAAM,UAAU,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK;AAAA,QAC9C,YAAY,aAAa,IAAI,IAAI,OAAO,CAAC,eAAe,kBAAkB,CAAC,KAAK;AAAA,MAClF;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OACE,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KACnD,IAAI,WAAW,aACf,IAAI,MAAM,SAAS;AAAA,IACvB;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,OAAO,CAAC,IAAI,QAAQ;AACtC,UAAM,WAAW,kBAAkB,EAAE,KAAK,kBAAkB,GAAG,cAAc,MAAM,KAAK,EAAE;AAC1F,UAAM,OAAO,GAAG,eAAe,IAAI,QAAQ,SAAS,IAAI;AACxD,UAAM,UAAU,IAAI,QAAQ,cAAc,EAAE;AAE5C,UAAMC,SAAQ,QAAQ,SAAS,IAAI,QAAQ,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;AACnG,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAAA;AAAA,MACA;AAAA,MACA,WACE,aAAa,IAAI,IAAI,OAAO,CAAC,cAAc,mBAAmB,SAAS,YAAY,CAAC,KACpF,IAAI,WAAW,YACf,IAAI,MAAM,SAAS;AAAA,MACrB,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,WAAW,cACf,IAAI,MAAM,SAAS;AAAA,MACrB,YAAY,IAAI,WAAW,aAAa,IAAI,MAAM,SAAS;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,SAAS,CAAC,IAAI,QAAQ;AACxC,UAAM,cAAyB,CAAC;AAChC,eAAW,SAAS,2BAA2B,EAAE,GAAG;AAClD,YAAM,MAAM,MAAM,QAAQ,YAAY;AACtC,UAAI,QAAQ,MAAM;AAChB,oBAAY,KAAK,KAAK;AACtB;AAAA,MACF;AACA,UAAI,QAAQ,WAAW,QAAQ,WAAW,QAAQ,QAAS;AAC3D,iBAAW,OAAO,2BAA2B,KAAK,GAAG;AACnD,YAAI,IAAI,QAAQ,YAAY,MAAM,KAAM,aAAY,KAAK,GAAG;AAAA,MAC9D;AAAA,IACF;AAEA,UAAM,OAAO,YACV,IAAI,CAAC,UAAU;AACd,YAAM,SAAS,MAAM,eAAe,QAAQ,YAAY,MAAM;AAC9D,aAAO,2BAA2B,KAAK,EACpC,OAAO,CAAC,SAAS;AAChB,cAAM,MAAM,KAAK,QAAQ,YAAY;AACrC,eAAO,QAAQ,QAAQ,QAAQ;AAAA,MACjC,CAAC,EACA,IAAI,CAAC,UAAU;AAAA,QACd,MAAM,kBAAkB,KAAK,eAAe,EAAE;AAAA,QAC9C,QAAQ,UAAU,KAAK,QAAQ,YAAY,MAAM;AAAA,MACnD,EAAE;AAAA,IACN,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAErC,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO,IAAI,MAAM,SAAS;AAAA,MAC5B;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,CAAC;AACpB,UAAM,YAAY,MAAM,KAAK,CAAC,SAAS,KAAK,MAAM;AAClD,UAAM,UAAU,YACZ,MAAM,IAAI,CAAC,MAAM,UAAU,KAAK,QAAQ,OAAO,QAAQ,CAAC,EAAE,IAC1D,MAAM,IAAI,CAAC,GAAG,UAAU,OAAO,QAAQ,CAAC,EAAE;AAC9C,UAAM,WAAW,KACd,MAAM,YAAY,IAAI,CAAC,EACvB,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,GAAG,UAAU,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;AAEjE,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,WAAW,eACf,IAAI,MAAM,SAAS;AAAA,MACrB,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,WAAW,eACf,IAAI,MAAM,SAAS;AAAA,IACvB;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,UAAU,CAAC,IAAI,QAAQ;AACzC,UAAM,QAAQ,kBAAkB,GAAG,eAAe,GAAG,aAAa,OAAO,KAAK,EAAE;AAChF,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,KACJ,GAAG,aAAa,QAAQ,KACxB,GAAG,aAAa,aAAa,KAC7B,GAAG,aAAa,MAAM,KACtB;AACF,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,MAC1D,IAAI,aAAa,IAAI,IAAI,OAAO,CAAC,MAAM,WAAW,cAAc,iBAAiB,CAAC;AAAA,MAClF,QAAQ,IAAI,kBAAkB,IAAI,EAAE,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC;AAAA,IACvE;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,YAAY,CAAC,IAAI,QAAQ,eAAe,IAAI,GAAG,CAAC;AAEpE,kBAAgB,IAAI,eAAe,CAAC,IAAI,QAAQ;AAC9C,UAAM,QAAQ,kBAAkB,GAAG,eAAe,GAAG,aAAa,OAAO,KAAK,EAAE;AAChF,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,KACJ,GAAG,aAAa,QAAQ,KACxB,GAAG,aAAa,aAAa,KAC7B,GAAG,aAAa,MAAM,KACtB;AACF,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC;AAAA,MAC1D,IAAI,aAAa,IAAI,IAAI,OAAO,CAAC,MAAM,WAAW,cAAc,iBAAiB,CAAC;AAAA,MAClF,QAAQ,IAAI,kBAAkB,IAAI,EAAE,MAAM,UAAU,IAAI,MAAM,MAAM,CAAC;AAAA,IACvE;AAAA,EACF,CAAC;AAED,kBAAgB,IAAI,KAAK,CAAC,IAAI,QAAQ;AACpC,UAAM,OAAO,kBAAkB,GAAG,eAAe,EAAE;AACnD,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAO,GAAG,aAAa,MAAM,GAAG,KAAK;AAC3C,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,MAClF,QAAQ,IAAI,kBAAkB,IAAI,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAW,KAAK,CAAC;AAAA,IACnF;AAAA,EACF,CAAC;AAID,kBAAgB,IAAI,WAAW,CAAC,IAAI,QAAQ;AAC1C,UAAM,QAAQ,GAAG,aAAa,OAAO,KAAK;AAC1C,QAAI,OAAO;AACT,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,MAAM,SAAS;AAAA,QACrB,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,QACnD,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAClC;AAAA,IACF;AACA,WAAO,MAAM,IAAI,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;AAAA,EACvF,CAAC;AAGD,kBAAgB,IAAI,UAAU,CAAC,IAAI,QAAQ;AACzC,UAAM,OAAO,sBAAsB,IAAI,CAAC,QAAQ,UAAU,eAAe,UAAU,aAAa,CAAC;AACjG,QAAI,KAAM,QAAO,iBAAiB,IAAI,GAAG;AACzC,WAAO,MAAM,IAAI,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;AAAA,EACvF,CAAC;AAGD,kBAAgB,IAAI,UAAU,CAAC,IAAI,QAAQ;AACzC,UAAM,OAAO,UAAU,IAAI,CAAC,QAAQ,WAAW,CAAC;AAChD,UAAM,QAAQ,UAAU,IAAI,CAAC,SAAS,YAAY,CAAC;AACnD,QAAI,SAAS,UAAa,UAAU,OAAW,QAAO,qBAAqB,IAAI,GAAG;AAClF,WAAO,MAAM,IAAI,gBAAgB,EAAE,GAAG,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;AAAA,EACvF,CAAC;AAGD,kBAAgB,IAAI,OAAO,CAAC,IAAI,SAAS;AAAA,IACvC,MAAM;AAAA,IACN,KAAK,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK;AAAA,IACnD,QAAQ,sBAAsB,IAAI,CAAC,UAAU,aAAa,CAAC;AAAA,IAC3D,UAAU,IAAI,gBAAgB,EAAE;AAAA,EAClC,EAAE;AAEF,kBAAgB,IAAI,eAAe,CAAC,IAAI,SAAS;AAAA,IAC/C,MAAM;AAAA,IACN,KAAK,iBAAiB,IAAI,KAAK,KAAK;AAAA,IACpC,UAAU,IAAI,gBAAgB,EAAE;AAAA,EAClC,EAAE;AAEF,kBAAgB,IAAI,eAAe,CAAC,IAAI,SAAS;AAAA,IAC/C,MAAM;AAAA,IACN,KAAK,iBAAiB,IAAI,KAAK,KAAK;AAAA,IACpC,QAAQ,oBAAoB,IAAI,QAAQ;AAAA,IACxC,UAAU,IAAI,gBAAgB,EAAE;AAAA,EAClC,EAAE;AAEF,kBAAgB,IAAI,YAAY,CAAC,IAAI,SAAS;AAAA,IAC5C,MAAM;AAAA,IACN,OAAO,GAAG,aAAa,OAAO,KAAK;AAAA,IACnC,aACE,aAAa,IAAI,IAAI,OAAO,CAAC,gBAAgB,mBAAmB,CAAC,KACjE,IAAI,MAAM,SAAS;AAAA,IACrB,KAAK,iBAAiB,IAAI,KAAK,KAAK;AAAA,IACpC,UAAU,IAAI,gBAAgB,EAAE;AAAA,EAClC,EAAE;AAEF,kBAAgB,IAAI,cAAc,CAAC,IAAI,QAAQ,iBAAiB,IAAI,GAAG,CAAC;AAExE,kBAAgB,IAAI,iBAAiB,CAAC,OAAO,oBAAoB,EAAE,CAAC;AAEpE,kBAAgB,IAAI,aAAa,CAAC,OAAO,gBAAgB,EAAE,CAAC;AAE5D,kBAAgB,IAAI,aAAa,CAAC,IAAI,QAAQ,gBAAgB,IAAI,GAAG,CAAC;AAEtE,kBAAgB,IAAI,kBAAkB,CAAC,IAAI,QAAQ,qBAAqB,IAAI,GAAG,CAAC;AAEhF,kBAAgB,IAAI,YAAY,CAAC,IAAI,QAAQ,eAAe,IAAI,GAAG,CAAC;AAEpE,kBAAgB,IAAI,aAAa,CAAC,IAAI,SAAS;AAAA,IAC7C,MAAM;AAAA,IACN,MAAM,iBAAiB,IAAI,MAAM,KAAK;AAAA,IACtC,KAAK,iBAAiB,IAAI,KAAK,KAAK;AAAA,IACpC,QAAQ,iBAAiB,IAAI,SAAS,KAAK;AAAA,IAC3C,UAAU,IAAI,gBAAgB,EAAE;AAAA,EAClC,EAAE;AAEF,kBAAgB,IAAI,gBAAgB,CAAC,IAAI,SAAS;AAAA,IAChD,MAAM;AAAA,IACN,OAAO,GAAG,aAAa,OAAO,KAAK;AAAA,IACnC,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,IAClF,MAAM,GAAG,aAAa,MAAM,KAAK;AAAA,IACjC,YACE,aAAa,IAAI,IAAI,OAAO,CAAC,eAAe,kBAAkB,CAAC,KAAK;AAAA,EACxE,EAAE;AAEF,kBAAgB,IAAI,kBAAkB,CAAC,IAAI,SAAS;AAAA,IAClD,MAAM;AAAA,IACN,OAAO,aAAa,IAAI,IAAI,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,IAAI,MAAM,SAAS;AAAA,IAClF,MAAM,GAAG,aAAa,MAAM,KAAK;AAAA,EACnC,EAAE;AAEF,kBAAgB,IAAI,cAAc,CAAC,QAAQ;AAAA,IACzC,MAAM;AAAA,IACN,OAAO,iBAAiB,IAAI,OAAO,KAAK;AAAA,EAC1C,EAAE;AACJ;AAEA,SAAS,qBAAqB,SAE5B;AACA,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,MAAI;AAEJ,QAAM,cAAc,CAAC,SAAuC;AAC1D,QAAI,KAAK,aAAa,GAAG;AACvB,YAAM,OAAO,kBAAkB,KAAK,eAAe,EAAE;AACrD,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,OAAO,QAAQ,WAAW,aAAa,QAAQ,MAAM,SAAS;AAAA,MAChE;AAAA,IACF;AACA,QAAI,KAAK,aAAa,EAAG,QAAO;AAChC,WAAO,eAAe,IAAe;AAAA,EACvC;AAEA,QAAM,kBAAkB,CAAC,OAA8B;AACrD,UAAM,MAAoB,CAAC;AAC3B,eAAW,QAAQ,MAAM,KAAK,GAAG,UAAU,GAAG;AAC5C,YAAM,OAAO,YAAY,IAAI;AAC7B,UAAI,KAAM,KAAI,KAAK,IAAI;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,CAAC,IAAa,UAAkC;AAAA,IACxE,GAAG;AAAA,IACH,KAAK,GAAG,QAAQ,YAAY;AAAA,IAC5B,SAAS,eAAe,EAAE;AAAA,IAC1B,eAAe;AAAA,EACjB;AAEA,QAAM,iBAAiB,CAAC,OAAmC;AACzD,UAAM,eAAe,oBAAoB,IAAI,GAAG;AAChD,QAAI,aAAc,QAAO;AAEzB,UAAM,MAAM,GAAG,QAAQ,YAAY;AACnC,UAAM,WAAW,gBAAgB,IAAI,GAAG;AACxC,QAAI,SAAU,QAAO,SAAS,IAAI,GAAG;AAErC,QAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,YAAM,SAAS,cAAc,EAAE;AAC/B,YAAM,OAAO,kBAAkB,IAAI,CAAC,QAAQ,WAAW,CAAC,KAAK,OAAO;AACpE,YAAM,MAAM,kBAAkB,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,OAAO;AACjE,YAAM,WAAW,gBAAgB,EAAE;AAEnC,UAAI,QAAQ,OAAO,YAAY,QAAQ;AACrC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,QAAQ;AAAA,UACd,KAAK,OAAO;AAAA,UACZ,QAAQ,kBAAkB,IAAI,CAAC,WAAW,cAAc,CAAC,KAAK;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,YAAY,UAAU,OAAO,cAAc,UAAU;AAC9D,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,OAAO;AAAA,UACZ,QAAQ,sBAAsB,IAAI,CAAC,UAAU,aAAa,CAAC;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAEA,aAAO,MAAM,UAAU,OAAO,YAAY;AAAA,IAC5C;AAEA,UAAM,OAAO,kBAAkB,GAAG,eAAe,EAAE;AACnD,QAAI,CAAC,KAAM,QAAO,MAAM,gBAAgB,EAAE,GAAG,YAAY;AACzD,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,OAAO,aAAa,IAAI,QAAQ,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,QAAQ,MAAM,SAAS;AAAA,IAC5F;AAAA,EACF;AAEA,QAAM;AAAA,IACJ,OAAO,QAAQ;AAAA,IACf,WAAW,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,EAAE,eAAe;AAC1B;AAEA,yBAAyB;AAElB,SAAS,wBAAwB,KAAa,UAAiC;AACpF,2BAAyB;AACzB,kBAAgB,IAAI,IAAI,KAAK,EAAE,YAAY,GAAG,QAAQ;AACxD;AAEO,SAAS,uBAAuB,MAAe,SAA6C;AACjG,2BAAyB;AACzB,QAAM,EAAE,eAAe,IAAI,qBAAqB,OAAO;AACvD,SAAO,eAAe,IAAI,KAAK,MAAM,CAAC,GAAG,QAAQ,gBAAgB,CAAC;AACpE;AAEO,SAAS,gBAAgB,MAAc,SAA6C;AACzF,MAAI,OAAO,cAAc,aAAa;AACpC,WAAO,MAAM,CAAC,GAAG,QAAQ,gBAAgB,CAAC;AAAA,EAC5C;AACA,QAAM,MAAM,IAAI,UAAU,EAAE,gBAAgB,MAAM,WAAW;AAC7D,QAAM,OAAO,IAAI,KAAK,cAAc,MAAM;AAC1C,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,uBAAuB,MAAM,OAAO;AAC7C;;;ACv0BA,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAsC;AAEtC,SAAS,WAAW,OAAmC;AACrD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,OAAQ,MAA6B;AAC3C,SAAO,OAAO,SAAS,YAAY,gBAAgB,IAAI,IAA+D;AACxH;AAEA,SAASC,UAAS,OAAkD;AAClE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,eACP,OACA,OACgE;AAChE,MAAI,OAAO,UAAU,SAAU,QAAO,EAAE,OAAO,MAAM,MAAM;AAC3D,MAAI,OAAO,UAAU,SAAU,QAAO,EAAE,OAAO,MAAM,OAAO;AAC5D,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO,EAAE,OAAO,QAAQ,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK;AAAA,EAC9D;AACA,MAAI,UAAU,KAAM,QAAO,EAAE,OAAO,MAAM,aAAa,KAAK,KAAK;AACjE,SAAO;AACT;AAEA,SAAS,cAAc,OAAwB;AAC7C,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO,OAAO,KAAK;AAChF,MAAI,UAAU,OAAW,QAAO;AAChC,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,qBAAqB,OAAyB;AACrD,SACE,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU;AAErB;AAEA,SAAS,sBAAsB,OAAoC;AACjE,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,qBAAqB,IAAI,CAAC;AACjF;AAEA,SAAS,cAAc,SAA0B;AAC/C,SAAO,OAAO,YAAY,WAAW,QAAQ,SAAS,QAAQ,KAAK;AACrE;AAEA,SAAS,WAAW,MAAoB;AACtC,MAAI,QAAQ;AACZ,aAAW,WAAW,KAAM,UAAS,cAAc,OAAO;AAC1D,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAgB,OAAuB;AAC/D,QAAM,OAAO,cAAc,KAAK;AAChC,QAAM,QAAQ,eAAe,OAAO,KAAK;AACzC,SAAO,QAAQ,EAAE,MAAM,GAAG,MAAM,IAAI;AACtC;AAEA,SAAS,aAAa,QAAkB,QAA0B;AAChE,SAAO,CAAC,MAAM;AACZ,QAAI,UAAU,EAAG,QAAO,OAAO,CAAC;AAChC,UAAMC,OAAM,IAAI,OAAO,MAAM;AAC7B,QAAI,KAAK,OAAQ,QAAO,OAAO,CAAC;AAChC,WAAO,OAAO,IAAI,MAAM,EAAE,IAAI,CAAC,SAAS,CAACA,MAAK,GAAG,IAAI,CAAC;AAAA,EACxD;AACF;AAEA,SAAS,cAAc,OAAe,OAAwB;AAC5D,SAAO,CAAC,MAAM;AACZ,UAAM,QAAQ,IAAI,KAAK;AACvB,UAAM,YAAY,KAAK,IAAI,GAAG,IAAI,MAAM,MAAM;AAC9C,WAAO,CAAC;AAAA,MACN,EAAE,MAAM,OAAO,OAAO,MAAM,aAAa,MAAM,KAAK;AAAA,MACpD,EAAE,MAAM,SAAI,OAAO,SAAS,GAAG,OAAO,MAAM,OAAO;AAAA,IACrD,CAAC;AAAA,EACH;AACF;AAEA,SAAS,sBAAsB,OAAyB;AACtD,MAAID,UAAS,KAAK,GAAG;AACnB,UAAM,OAAO,OAAO,OAAO,KAAK;AAChC,WAAO,KAAK,MAAM,CAAC,SAAS,qBAAqB,IAAI,KAAK,sBAAsB,IAAI,CAAC;AAAA,EACvF;AACA,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,MAAM,CAAC,SAAS,qBAAqB,IAAI,CAAC;AACjF,SAAO,qBAAqB,KAAK;AACnC;AAEA,SAAS,iBAAiB,UAAgC;AACxD,MAAI,SAAS,WAAW,EAAG,QAAO,MAAM;AACxC,MAAI,SAAS,WAAW,EAAG,QAAO,SAAS,CAAC;AAE5C,QAAM,UAAsB,CAAC;AAC7B,WAAS,QAAQ,CAAC,OAAO,UAAU;AACjC,QAAI,QAAQ,EAAG,SAAQ,KAAK,MAAM,CAAC;AACnC,YAAQ,KAAK,KAAK;AAAA,EACpB,CAAC;AACD,SAAO,OAAO,GAAG,OAAO;AAC1B;AAEA,SAAS,qBAAqB,OAAgB,OAAwB;AACpE,SAAO,CAAC,MAAM;AACZ,UAAM,OAAO,cAAc,KAAK;AAChC,UAAM,QAAQ,eAAe,OAAO,KAAK;AACzC,UAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,UAAM,MAAc,CAAC;AAErB,eAAW,OAAO,MAAM;AACtB,YAAM,UAAUE,UAAS,KAAK,CAAC;AAC/B,iBAAW,SAAS,SAAS;AAC3B,YAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC;AAAA,MACtD;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,EAC3D;AACF;AAEA,SAAS,+BAA+B,OAAkB,OAAwB;AAChF,SAAO,CAAC,MAAM;AACZ,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,CAAC,CAAC,EAAE,MAAM,iBAAiB,OAAO,MAAM,aAAa,KAAK,KAAK,CAAC,CAAC;AAAA,IAC1E;AAEA,UAAM,MAAc,CAAC;AACrB,UAAM,SAAS,OAAO,MAAM,MAAM,EAAE;AACpC,UAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,YAAM,SAAS,IAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,QAAQ,GAAG,CAAC;AAC1D,UAAI;AAAA,QACF,GAAG;AAAA,UACD,cAAc,IAAI;AAAA,UAClB;AAAA,UACA,EAAE,MAAM,QAAQ,OAAO,MAAM,YAAY;AAAA,UACzC,IAAI,OAAO,OAAO,MAAM;AAAA,UACxB,eAAe,MAAM,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,OAAsD;AAClF,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,CAAC,MAAM,MAAM,CAAC,SAASF,UAAS,IAAI,CAAC,EAAG,QAAO;AAEnD,QAAM,OAAO,OAAO,KAAK,MAAM,CAAC,CAAE;AAClC,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,SAAO,MAAM,MAAM,CAAC,QAAQ;AAC1B,UAAM,UAAU,OAAO,KAAK,GAAG;AAC/B,QAAI,QAAQ,WAAW,KAAK,OAAQ,QAAO;AAC3C,QAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,QAAQ,SAAS,GAAG,CAAC,EAAG,QAAO;AACxD,WAAO,KAAK,MAAM,CAAC,QAAQ,qBAAqB,IAAI,GAAG,CAAC,CAAC;AAAA,EAC3D,CAAC;AACH;AAEA,SAAS,yBACP,MACA,OACU;AACV,QAAM,OAAO,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;AAEtC,QAAM,UAAoB,KAAK,IAAI,CAAC,QAAQ;AAC1C,UAAM,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;AACzC,UAAM,YAAY,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,SAAS;AAC5D,UAAM,WAAW,OAAO,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC;AAEtD,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,MACP,OAAO,WAAW,UAAU;AAAA,MAC5B,aAAa,MAAM;AAAA,MACnB,OAAO,YACH,CAAC,UACC,UAAU,OAAO,MAAM,QAAQ,UAAU,QAAQ,MAAM,MAAM,SAC/D,WACE,MAAM,SACN;AAAA,IACR;AAAA,EACF,CAAC;AAED,SAAO,MAAM,SAAS,MAAM;AAAA,IAC1B,aAAa,MAAM;AAAA,EACrB,CAAC;AACH;AAEA,SAAS,iBAAiB,OAAkB,OAAwB;AAClE,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,CAAC,EAAE,MAAM,iBAAiB,OAAO,MAAM,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC;AAAA,EACjF;AAEA,MAAI,qBAAqB,KAAK,GAAG;AAC/B,WAAO,yBAAyB,OAAO,KAAK;AAAA,EAC9C;AAEA,MAAI,MAAM,MAAM,CAAC,SAAS,qBAAqB,IAAI,CAAC,GAAG;AACrD,WAAO,+BAA+B,OAAO,KAAK;AAAA,EACpD;AAEA,QAAM,WAAW,MAAM;AAAA,IAAI,CAAC,MAAM,UAChC,kBAAkB,QAAQ,QAAQ,CAAC,IAAI,MAAM,KAAK;AAAA,EACpD;AACA,SAAO,iBAAiB,QAAQ;AAClC;AAMA,SAAS,oBAAoB,MAAsB,OAAwB;AACzE,SAAO,CAAC,MAAM;AACZ,UAAM,MAAc,CAAC;AACrB,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,MAAM,GAAG,CAAC;AAEjE,eAAW,OAAO,MAAM;AACtB,YAAM,YAAY,IAAI,IAAI,IAAI,OAAO,QAAQ,CAAC;AAE9C,UAAI,IAAI,SAAS,aAAa;AAC5B,YAAI;AAAA,UACF,GAAG;AAAA,YACD,cAAc,IAAI,KAAK;AAAA,YACvB;AAAA,YACA,EAAE,MAAM,WAAW,OAAO,MAAM,YAAY;AAAA,YAC5C,IAAI,OAAO,UAAU,MAAM;AAAA,YAC3B,eAAe,IAAI,OAAO,KAAK;AAAA,UACjC;AAAA,QACF;AACA;AAAA,MACF;AAEA,UAAI,IAAI,MAAM,WAAW,GAAG;AAC1B,YAAI,KAAK;AAAA,UACP,EAAE,MAAM,WAAW,OAAO,MAAM,YAAY;AAAA,UAC5C,EAAE,MAAM,WAAW,OAAO,MAAM,aAAa,KAAK,KAAK;AAAA,QACzD,CAAC;AACD;AAAA,MACF;AAEA,YAAM,iBAA4B,CAAC;AACnC,UAAI,MAAM,QAAQ,CAAC,MAAM,UAAU;AACjC,YAAI,QAAQ,EAAG,gBAAe,KAAK,EAAE,MAAM,MAAM,OAAO,MAAM,YAAY,CAAC;AAC3E,uBAAe,KAAK,iBAAiB,MAAM,KAAK,CAAC;AAAA,MACnD,CAAC;AACD,YAAM,aAAmB,CAAC,EAAE,MAAM,WAAW,OAAO,MAAM,YAAY,GAAG,GAAG,cAAc;AAE1F,UAAI,WAAW,UAAU,KAAK,GAAG;AAC/B,YAAI,KAAK,UAAU;AACnB;AAAA,MACF;AAEA,UAAI,KAAK,CAAC,EAAE,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,MAAM,YAAY,CAAC,CAAC;AAC7D,YAAM,SAAS,OAAO,IAAI,MAAM,MAAM,EAAE;AACxC,UAAI,MAAM,QAAQ,CAAC,MAAM,UAAU;AACjC,cAAM,aAAa,MAAM,OAAO,QAAQ,CAAC,EAAE,SAAS,QAAQ,GAAG,CAAC;AAChE,YAAI;AAAA,UACF,GAAG;AAAA,YACD,cAAc,IAAI;AAAA,YAClB;AAAA,YACA,EAAE,MAAM,YAAY,OAAO,MAAM,YAAY;AAAA,YAC7C,IAAI,OAAO,WAAW,MAAM;AAAA,YAC5B,eAAe,MAAM,KAAK;AAAA,UAC5B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,OAAgC,OAAwB;AACjF,QAAM,UAAU,OAAO,QAAQ,KAAK;AACpC,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,MAAM,CAAC,CAAC,EAAE,MAAM,kBAAkB,OAAO,MAAM,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC;AAAA,EAClF;AAEA,QAAM,SAAqB,CAAC;AAC5B,MAAI,cAA8B,CAAC;AACnC,QAAM,YAAY,MAAM;AACtB,QAAI,YAAY,WAAW,EAAG;AAC9B,WAAO,KAAK,oBAAoB,aAAa,KAAK,CAAC;AACnD,kBAAc,CAAC;AAAA,EACjB;AAEA,aAAW,CAAC,KAAK,IAAI,KAAK,SAAS;AACjC,QAAI,qBAAqB,IAAI,GAAG;AAC9B,kBAAY,KAAK,EAAE,MAAM,aAAa,KAAK,OAAO,KAAK,CAAC;AACxD;AAAA,IACF;AAEA,QAAI,sBAAsB,IAAI,GAAG;AAC/B,kBAAY,KAAK,EAAE,MAAM,SAAS,KAAK,OAAO,KAAK,CAAC;AACpD;AAAA,IACF;AAEA,cAAU;AACV,WAAO,KAAK,kBAAkB,KAAK,MAAM,KAAK,CAAC;AAAA,EACjD;AAEA,YAAU;AAEV,SAAO,iBAAiB,MAAM;AAChC;AAEA,SAAS,kBAAkB,OAAgB,OAAwB;AACjE,MAAIA,UAAS,KAAK,EAAG,QAAO,kBAAkB,OAAO,KAAK;AAC1D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,iBAAiB,OAAO,KAAK;AAC9D,SAAO,qBAAqB,OAAO,KAAK;AAC1C;AAEA,SAAS,kBAAkB,OAAe,OAAgB,OAAwB;AAChF,MAAI,MAAM,QAAQ,KAAK,KAAK,qBAAqB,KAAK,GAAG;AACvD,WAAO,OAAO,cAAc,OAAO,KAAK,GAAG,aAAa,kBAAkB,OAAO,KAAK,GAAG,CAAC,CAAC;AAAA,EAC7F;AAEA,MAAI,sBAAsB,KAAK,GAAG;AAChC,WAAO,OAAO,cAAc,OAAO,KAAK,GAAG,aAAa,kBAAkB,OAAO,KAAK,GAAG,CAAC,CAAC;AAAA,EAC7F;AAEA,SAAO,IAAI,kBAAkB,OAAO,KAAK,GAAG;AAAA,IAC1C;AAAA,IACA,aAAa,MAAM;AAAA,EACrB,CAAC;AACH;AAEO,SAAS,SACd,OACA,MACU;AACV,QAAM,QAAQ,MAAM,SAAS;AAC7B,MAAI,cAAc;AAElB,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI;AACF,oBAAc,KAAK,MAAM,KAAK;AAAA,IAChC,QAAQ;AACN,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,EAAG,QAAO,aAAa,WAAW;AAE5D,QAAM,UAAU,kBAAkB,aAAa,KAAK;AACpD,MAAI,MAAM,OAAO;AACf,WAAO,IAAI,SAAS;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;ACjWA,SAAS,aAAa,MAAuB;AAC3C,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO;AACvC,MAAI,OAAO,KAAK,OAAO,EAAG,QAAO;AACjC,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO;AAClC,MAAI,YAAY,KAAK,OAAO,EAAG,QAAO;AACtC,MAAI,YAAY,KAAK,OAAO,EAAG,QAAO;AACtC,QAAM,YAAY,QAAQ,QAAQ,QAAQ,EAAE;AAC5C,SAAO,yBAAyB,KAAK,SAAS;AAChD;AAEA,SAAS,eAAe,MAA+B;AACrD,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,CAAC,QAAQ,SAAS,GAAG,EAAG,QAAO;AAEnC,MAAI,OAAO;AACX,MAAI,KAAK,WAAW,GAAG,EAAG,QAAO,KAAK,MAAM,CAAC;AAC7C,MAAI,KAAK,SAAS,GAAG,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE;AAC/C,QAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACvD,SAAO,MAAM,UAAU,IAAI,QAAQ;AACrC;AAEA,SAAS,mBAAmB,MAAuB;AACjD,QAAM,QAAQ,eAAe,IAAI;AACjC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,MAAM,CAAC,SAAS,cAAc,KAAK,IAAI,CAAC;AACvD;AAEA,SAAS,cAAc,UAAmC;AACxD,QAAM,OAAO,SAAS,QAAQ,SAAS,IAAI,EAAE,MAAM,IAAI;AACvD,QAAM,SAA0B,CAAC;AAEjC,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,UAAM,MAAM,KAAK,CAAC,KAAK;AACvB,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,CAAC,SAAS;AACZ,WAAK;AACL;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,MAAM,oBAAoB;AACpD,QAAI,WAAW;AACb,WAAK;AACL,YAAM,YAAsB,CAAC;AAC7B,aAAO,IAAI,KAAK,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,WAAW,KAAK,GAAG;AACnE,kBAAU,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ,OAAO,IAAI,CAAC;AACnD,aAAK;AAAA,MACP;AACA,UAAI,IAAI,KAAK,OAAQ,MAAK;AAC1B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,UAAU,UAAU,CAAC;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,MAAM,mBAAmB;AACjD,QAAI,SAAS;AACX,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,QAAQ,CAAC,EAAG;AAAA,QACnB,MAAM,QAAQ,CAAC,EAAG,KAAK;AAAA,MACzB,CAAC;AACD,WAAK;AACL;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,QAAQ,QAAQ,EAAE;AAC5C,QAAI,yBAAyB,KAAK,SAAS,GAAG;AAC5C,aAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,WAAK;AACL;AAAA,IACF;AAEA,UAAM,mBAAmB,eAAe,GAAG;AAC3C,UAAM,WAAW,KAAK,IAAI,CAAC,KAAK;AAChC,QAAI,oBAAoB,mBAAmB,QAAQ,GAAG;AACpD,YAAM,UAAU;AAChB,WAAK;AACL,YAAM,WAAuB,CAAC;AAC9B,aAAO,IAAI,KAAK,QAAQ;AACtB,cAAM,WAAW,eAAe,KAAK,CAAC,KAAK,EAAE;AAC7C,YAAI,CAAC,SAAU;AACf,cAAM,aAAa,QAAQ,IAAI,CAAC,GAAG,QAAQ,SAAS,GAAG,KAAK,EAAE;AAC9D,iBAAS,KAAK,UAAU;AACxB,aAAK;AAAA,MACP;AACA,aAAO,KAAK,EAAE,MAAM,SAAS,SAAS,MAAM,SAAS,CAAC;AACtD;AAAA,IACF;AAEA,QAAI,QAAQ,KAAK,OAAO,GAAG;AACzB,YAAM,aAAuB,CAAC;AAC9B,aAAO,IAAI,KAAK,QAAQ;AACtB,cAAM,KAAK,KAAK,CAAC,KAAK,IAAI,MAAM,eAAe;AAC/C,YAAI,CAAC,EAAG;AACR,mBAAW,KAAK,EAAE,CAAC,CAAE;AACrB,aAAK;AAAA,MACP;AACA,aAAO,KAAK,EAAE,MAAM,SAAS,OAAO,WAAW,CAAC;AAChD;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,MAAM,gBAAgB;AAC9C,QAAI,SAAS;AACX,YAAM,QAAkB,CAAC;AACzB,aAAO,IAAI,KAAK,QAAQ;AACtB,cAAM,WAAW,KAAK,CAAC,KAAK,IAAI,KAAK;AACrC,cAAM,OAAO,QAAQ,MAAM,gBAAgB;AAC3C,YAAI,MAAM;AACR,gBAAM,KAAK,KAAK,CAAC,EAAG,KAAK,CAAC;AAC1B,eAAK;AACL;AAAA,QACF;AACA,cAAM,gBAAgB,KAAK,CAAC,KAAK,IAAI,MAAM,cAAc;AACzD,YAAI,gBAAgB,MAAM,SAAS,GAAG;AACpC,gBAAM,OAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AACxC,gBAAM,MAAM,SAAS,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC,EAAG,KAAK,GAAG,KAAK;AACtE,eAAK;AACL;AAAA,QACF;AACA;AAAA,MACF;AACA,aAAO,KAAK,EAAE,MAAM,kBAAkB,MAAM,CAAC;AAC7C;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,MAAM,kBAAkB;AAChD,QAAI,SAAS;AACX,YAAM,QAAkB,CAAC;AACzB,YAAM,QAAQ,OAAO,QAAQ,CAAC,CAAC;AAC/B,aAAO,IAAI,KAAK,QAAQ;AACtB,cAAM,WAAW,KAAK,CAAC,KAAK,IAAI,KAAK;AACrC,cAAM,OAAO,QAAQ,MAAM,gBAAgB;AAC3C,YAAI,MAAM;AACR,gBAAM,KAAK,KAAK,CAAC,EAAG,KAAK,CAAC;AAC1B,eAAK;AACL;AAAA,QACF;AACA,cAAM,gBAAgB,KAAK,CAAC,KAAK,IAAI,MAAM,cAAc;AACzD,YAAI,gBAAgB,MAAM,SAAS,GAAG;AACpC,gBAAM,OAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AACxC,gBAAM,MAAM,SAAS,CAAC,KAAK,OAAO,MAAM,aAAa,CAAC,EAAG,KAAK,GAAG,KAAK;AACtE,eAAK;AACL;AAAA,QACF;AACA;AAAA,MACF;AACA,aAAO,KAAK,EAAE,MAAM,gBAAgB,OAAO,MAAM,CAAC;AAClD;AAAA,IACF;AAEA,UAAM,gBAA0B,CAAC,OAAO;AACxC,SAAK;AACL,WAAO,IAAI,KAAK,QAAQ;AACtB,YAAM,UAAU,KAAK,CAAC,KAAK;AAC3B,YAAM,QAAQ,KAAK,CAAC,KAAK,IAAI,KAAK;AAClC,YAAM,kBACJ,eAAe,OAAO,MAAM,QAAQ,mBAAmB,KAAK,IAAI,CAAC,KAAK,EAAE;AAC1E,UAAI,CAAC,QAAQ,aAAa,IAAI,KAAK,gBAAiB;AACpD,oBAAc,KAAK,IAAI;AACvB,WAAK;AAAA,IACP;AACA,WAAO,KAAK,EAAE,MAAM,aAAa,MAAM,cAAc,KAAK,GAAG,EAAE,CAAC;AAAA,EAClE;AAEA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,OACA,WACU;AACV,QAAM,KAAK,MAAM;AAEjB,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,CAAC,MACN;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA;AAAA,UACE,MAAM,IAAI,OAAO,MAAM,KAAK,IAAI;AAAA,UAChC,OAAO,WAAW,iBAAiB,GAAG;AAAA,QACxC;AAAA,QACA,IAAI,OAAO,MAAM,QAAQ,CAAC;AAAA,QAC1B;AAAA,UACE,OAAO,aAAa,MAAM,OAAO,OAAO,SAAS;AAAA,UACjD,MAAM,MAAM,UAAU,WAAW,uBAAuB,GAAG;AAAA,QAC7D;AAAA,MACF;AAAA,IAEJ,KAAK;AACH,aAAO,CAAC,MACNG,UAAS,MAAM,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS;AAAA,QACpC,EAAE,MAAM,MAAM,OAAO,WAAW,aAAa,GAAG,UAAU;AAAA,MAC5D,CAAC;AAAA,IAEL,KAAK;AACH,aAAO,CAAC,MAAM;AACZ,cAAM,MAAc,CAAC;AACrB,mBAAW,QAAQ,MAAM,OAAO;AAC9B,cAAI;AAAA,YACF,GAAG;AAAA,cACD;AAAA,cACA;AAAA,cACA,EAAE,MAAM,YAAO,OAAO,WAAW,mBAAmB,GAAG,gBAAgB;AAAA,cACvE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IAEF,KAAK;AACH,aAAO,CAAC,MAAM;AACZ,cAAM,MAAc,CAAC;AACrB,cAAM,aAAa,MAAM,QAAQ,MAAM,MAAM,SAAS;AACtD,cAAM,SAAS,OAAO,KAAK,IAAI,MAAM,OAAO,UAAU,CAAC,EAAE;AACzD,iBAAS,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,KAAK;AAC3C,gBAAM,IAAI,OAAO,MAAM,QAAQ,CAAC,EAAE,SAAS,QAAQ,GAAG;AACtD,gBAAM,SAAS;AAAA,YACb,MAAM,GAAG,CAAC;AAAA,YACV,OAAO,WAAW,iBAAiB,GAAG;AAAA,UACxC;AACA,cAAI,KAAK,GAAG,mBAAmB,MAAM,MAAM,CAAC,GAAI,GAAG,QAAQ,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC;AAAA,QACpF;AACA,eAAO;AAAA,MACT;AAAA,IAEF,KAAK,SAAS;AACZ,YAAM,OAAO,MAAM,QAAQ,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE;AAChD,YAAM,UAAoB,MAAM,QAAQ,IAAI,CAAC,QAAQ,OAAO;AAAA,QAC1D,KAAK,KAAK,CAAC;AAAA,QACX,OAAO,UAAU,OAAO,IAAI,CAAC;AAAA,QAC7B,OAAO,MAAM,KAAK,MAAM,CAAC,QAAQ,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,UAAU;AAAA,QAC3E,aAAa,WAAW,eAAe,GAAG;AAAA,MAC5C,EAAE;AAEF,YAAM,OAAO,MAAM,KAAK,IAAI,CAAC,QAAQ;AACnC,cAAM,MAA8B,CAAC;AACrC,aAAK,QAAQ,CAAC,KAAK,MAAM;AACvB,cAAI,GAAG,IAAI,IAAI,CAAC,KAAK;AAAA,QACvB,CAAC;AACD,eAAO;AAAA,MACT,CAAC;AAED,aAAO,MAAM,SAAS,MAAM;AAAA,QAC1B,aAAa,WAAW,eAAe,GAAG;AAAA,MAC5C,CAAC;AAAA,IACH;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,MAAM;AACZ,cAAM,MAAc,CAAC;AACrB,mBAAW,aAAa,MAAM,OAAO;AACnC,cAAI;AAAA,YACF,GAAG;AAAA,cACD;AAAA,cACA;AAAA,cACA,EAAE,MAAM,WAAM,OAAO,WAAW,eAAe,GAAG,YAAY;AAAA,cAC9D;AAAA,cACA,EAAE,OAAO,WAAW,aAAa,GAAG,WAAW,KAAK,KAAK;AAAA,YAC3D;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IAEF,KAAK;AACH,aAAO,UAAU,WAAW,aAAa,GAAG,SAAS;AAAA,IAEvD,KAAK,QAAQ;AACX,YAAM,aAAa,MAAM,MAAM,KAAK,IAAI;AACxC,aAAO;AAAA,QACL;AAAA,UACE,MAAM,MAAM,SAAS,IACjB,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK,OAAO,WAAW,YAAY,GAAG,SAAS,CAAC,CAAC,IAC5F,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,WAAW,aAAa,GAAG,WAAW,KAAK,KAAK,CAAC,CAAC;AAAA,QAC9E;AAAA,QACA;AAAA,UACE,OAAO,MAAM,WAAW,QAAQ,MAAM,QAAQ,KAAK;AAAA,UACnD,aAAa,WAAW,cAAc,GAAG;AAAA,UACzC,QAAQ;AAAA,YACN,OAAO;AAAA,YACP,SAAS,MAAM,UAAU,UAAU,UAAU,UAAU;AAAA,YACvD,OAAO,MAAM,SAAS;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,aACd,UACA,MACU;AACV,QAAM,QAAQ,MAAM,SAAS;AAC7B,QAAM,SAAS,cAAc,QAAQ;AACrC,QAAM,UAAU,OAAO,IAAI,CAAC,UAAU,oBAAoB,OAAO,OAAO,MAAM,SAAS,CAAC;AAExF,SAAO,CAAC,MAAM;AACZ,QAAI,QAAQ,WAAW,EAAG,QAAO,MAAM,EAAE,CAAC;AAE1C,UAAM,MAAc,CAAC;AACrB,YAAQ,QAAQ,CAAC,QAAQ,UAAU;AACjC,UAAI,QAAQ,EAAG,KAAI,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;AACrC,UAAI,KAAK,GAAG,OAAO,CAAC,CAAC;AAAA,IACvB,CAAC;AACD,WAAO;AAAA,EACT;AACF;;;ACvTA,SAAS,aAAa,UAAsB,KAAuB;AACjE,MAAI,SAAS,WAAW,EAAG,QAAO,MAAM;AACxC,MAAI,SAAS,WAAW,KAAK,OAAO,EAAG,QAAO,SAAS,CAAC;AACxD,MAAI,OAAO,EAAG,QAAO,OAAO,GAAG,QAAQ;AAEvC,QAAM,WAAuB,CAAC;AAC9B,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,GAAG;AACT,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,UAAS,KAAK,MAAM,CAAC;AAAA,IACrD;AACA,aAAS,KAAK,SAAS,CAAC,CAAE;AAAA,EAC5B;AACA,SAAO,OAAO,GAAG,QAAQ;AAC3B;AAEA,SAAS,gBAAgB,MAAc,OAA0B;AAC/D,SAAO,CAAC,MAAM;AACZ,UAAM,UAAUC,UAAS,MAAM,CAAC;AAChC,QAAI,CAAC,MAAO,QAAO,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/C,WAAO,QAAQ,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,MAAM,MAAM,CAAC,CAAC;AAAA,EACtD;AACF;AAEA,SAAS,cACP,MACA,SACU;AACV,QAAM,KAAK,QAAQ,MAAM;AACzB,SAAO,CAAC,MACN;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM,IAAI,OAAO,KAAK,KAAK,IAAI;AAAA,MAC/B,OAAO,KAAK,eAAe,QAAQ,WAAW,iBAAiB,GAAG;AAAA,IACpE;AAAA,IACA,IAAI,OAAO,KAAK,QAAQ,CAAC;AAAA,IACzB;AAAA,MACE,OAAO,aAAa,KAAK,OAAO,QAAQ,OAAO,QAAQ,SAAS;AAAA,MAChE,MAAM,KAAK,UAAU,QAAQ,WAAW,uBAAuB,GAAG;AAAA,IACpE;AAAA,EACF;AACJ;AAEA,SAAS,WACP,MACA,SACU;AACV,SAAO,CAAC,MAAM;AACZ,UAAM,MAAc,CAAC;AACrB,UAAM,KAAK,QAAQ,MAAM;AAEzB,QAAI,KAAK,SAAS;AAChB,YAAM,SAAS,OAAO,KAAK,QAAQ,KAAK,MAAM,SAAS,CAAC,EAAE;AAC1D,eAAS,QAAQ,GAAG,QAAQ,KAAK,MAAM,QAAQ,SAAS;AACtD,cAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,cAAM,IAAI,OAAO,KAAK,QAAQ,KAAK,EAAE,SAAS,QAAQ,GAAG;AACzD,YAAI;AAAA,UACF,GAAG;AAAA,YACD;AAAA,YACA;AAAA,YACA,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,QAAQ,WAAW,iBAAiB,GAAG,cAAc;AAAA,YAC9E,IAAI,OAAO,SAAS,CAAC;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AACA,aAAO,IAAI,SAAS,IAAI,MAAM,MAAM,EAAE,CAAC;AAAA,IACzC;AAEA,eAAW,QAAQ,KAAK,OAAO;AAC7B,UAAI;AAAA,QACF,GAAG;AAAA,UACD;AAAA,UACA;AAAA,UACA,EAAE,MAAM,YAAO,OAAO,QAAQ,WAAW,mBAAmB,GAAG,gBAAgB;AAAA,UAC/E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,IAAI,SAAS,IAAI,MAAM,MAAM,EAAE,CAAC;AAAA,EACzC;AACF;AAEA,SAAS,iBACP,MACA,SACU;AACV,SAAO,CAAC,MACN;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO,KAAK,eAAe,QAAQ,WAAW,eAAe,QAAQ,MAAM,SAAS;AAAA,IACtF;AAAA,IACA;AAAA,IACA;AAAA,MACE,OAAO,KAAK,SAAS,QAAQ,WAAW,aAAa,QAAQ,MAAM,SAAS;AAAA,MAC5E,KAAK;AAAA,IACP;AAAA,EACF;AACJ;AAEA,SAAS,UACP,MACA,SACU;AACV,SAAO;AAAA,IACL;AAAA,MACE,KAAK,MAAM,SAAS,IAChB,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK,OAAO,KAAK,UAAU,CAAC,CAAC,IACvE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,MACE,OAAO,KAAK,WAAW,QAAQ,KAAK,QAAQ,KAAK;AAAA,MACjD,aAAa,KAAK;AAAA,IACpB;AAAA,EACF;AACF;AAEA,SAAS,YAAY,MAAwD;AAC3E,MAAI,KAAK,QAAQ,WAAW,EAAG,QAAO,gBAAgB,eAAe;AAErE,QAAM,OAAO,KAAK,QAAQ,IAAI,CAAC,GAAG,UAAU,IAAI,KAAK,EAAE;AACvD,QAAM,UAA4C,KAAK,QAAQ,IAAI,CAAC,QAAQ,WAAW;AAAA,IACrF,KAAK,KAAK,KAAK;AAAA,IACf,OAAO;AAAA,IACP,OAAO,KAAK,KAAK,MAAM,CAAC,QAAQ,eAAe,IAAI,KAAK,KAAK,EAAE,CAAC,IAAI,UAAU;AAAA,IAC9E,aAAa,KAAK;AAAA,EACpB,EAAE;AAEF,QAAM,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ;AAClC,UAAM,OAA+B,CAAC;AACtC,aAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAChD,WAAK,KAAK,KAAK,CAAE,IAAI,IAAI,KAAK,KAAK;AAAA,IACrC;AACA,WAAO;AAAA,EACT,CAAC;AAED,SAAO,MAAM,SAAS,MAAM,EAAE,aAAa,KAAK,YAAY,CAAC;AAC/D;AAEA,SAAS,cAAc,QAAoB,SAAwD;AACjG,MAAI,CAAC,QAAQ,YAAY,CAAC,OAAO,cAAe,QAAO;AACvD,SAAO,MAAM;AACX,QAAI,OAAO,yBAAyB,aAAa;AAC/C,aAAO,cAAc,MAAM;AAAA,IAC7B;AACA,YAAQ,WAAW,MAAM;AAAA,EAC3B;AACF;AAEA,SAAS,aACP,MACA,SACU;AACV,QAAM,QAAQ,KAAK,SAAS,QAAQ,MAAM,WAAW,OAAO;AAC5D,QAAM,KAAK,KAAK,MAAM,QAAQ,MAAM,WAAW,OAAO;AACtD,QAAM,UAAmB;AAAA,IACvB,MAAM,KAAK,KAAK,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,IACA,SAAS,cAAc,KAAK,QAAQ,OAAO;AAAA,EAC7C;AACA,SAAO,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B;AAEA,SAAS,WACP,MACA,SACU;AACV,QAAM,UAAmB;AAAA,IACvB,MAAM,KAAK;AAAA,IACX,OAAO,KAAK,SAAS,QAAQ,MAAM,SAAS;AAAA,IAC5C,SAAS,cAAc,KAAK,QAAQ,OAAO;AAAA,EAC7C;AACA,SAAO,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B;AAEA,SAAS,UAAU,MAAsD;AACvE,SAAO,MAAM,CAAC,MAAM;AAClB,UAAM,MAAM,OAAO,SAAS,KAAK,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,MAAM;AACnE,UAAM,QAAQ,OAAO,SAAS,KAAK,KAAK,IAAI,KAAK,QAAQ;AACzD,UAAM,QAAQ,KAAK,QAAQ,GAAG,KAAK,KAAK,MAAM;AAC9C,UAAM,cAAc,KAAK,gBAAgB;AACzC,UAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAO,QAAQ,MAAO,GAAG,CAAC,CAAC;AAC1E,UAAM,cAAc,cAAc,IAAI,OAAO,MAAM;AAEnD,UAAM,YAAY,KAAK,IAAI,GAAG,IAAI,MAAM,SAAS,YAAY,MAAM;AACnE,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,SAAS,WAAW,SAAS,CAAC;AAEzE,UAAM,OAAa,CAAC;AACpB,QAAI,MAAO,MAAK,KAAK,KAAK;AAC1B,SAAK,KAAK,EAAE,MAAM,IAAQ,OAAO,KAAK,QAAQ,GAAG,OAAO,KAAK,MAAM,CAAC;AACpE,QAAI,YAAa,MAAK,KAAK,WAAW;AACtC,WAAO,CAAC,IAAI;AAAA,EACd,CAAC;AACH;AAEA,SAAS,kBAAkB,UAAwB,SAA0C;AAC3F,QAAM,MAAkB,CAAC;AACzB,aAAW,SAAS,UAAU;AAC5B,QAAI,KAAK,aAAa,OAAO,OAAO,CAAC;AAAA,EACvC;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAAkB,SAAwC;AACrF,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,aAAa,kBAAkB,KAAK,UAAU,OAAO,GAAG,KAAK,GAAG;AAAA,IACzE,KAAK;AACH,aAAO,OAAO,kBAAkB,KAAK,UAAU,OAAO,GAAG;AAAA,QACvD,KAAK,KAAK;AAAA,QACV,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,IACH,KAAK;AACH,aAAO,KAAK,kBAAkB,KAAK,UAAU,OAAO,GAAG;AAAA,QACrD,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,IACH,KAAK,OAAO;AACV,YAAM,UAAU,aAAa,kBAAkB,KAAK,UAAU,OAAO,GAAG,KAAK,GAAG;AAChF,aAAO,IAAI,SAAS;AAAA,QAClB,OAAO,KAAK;AAAA,QACZ,aAAa,KAAK,eAAe,QAAQ,MAAM,SAAS;AAAA,MAC1D,CAAC;AAAA,IACH;AAAA,IACA,KAAK;AACH,aAAO,MAAM,KAAK,KAAK;AAAA,IACzB,KAAK;AACH,aAAO,UAAU,KAAK,SAAS,QAAQ,MAAM,SAAS,QAAQ,KAAK,IAAI;AAAA,IACzE,KAAK;AACH,aAAO,QAAQ,KAAK,OAAO;AAAA,QACzB,OAAO,KAAK,SAAS,QAAQ,MAAM,SAAS;AAAA,QAC5C,MAAM,KAAK;AAAA,QACX,YAAY,KAAK;AAAA,MACnB,CAAC;AAAA,IACH,KAAK;AACH,aAAO,gBAAgB,KAAK,MAAM,KAAK,KAAK;AAAA,IAC9C,KAAK;AACH,aAAO,cAAc,MAAM,OAAO;AAAA,IACpC,KAAK;AACH,aAAO,WAAW,MAAM,OAAO;AAAA,IACjC,KAAK;AACH,aAAO,iBAAiB,MAAM,OAAO;AAAA,IACvC,KAAK;AACH,aAAO,UAAU,MAAM,OAAO;AAAA,IAChC,KAAK;AACH,aAAO,aAAa,KAAK,OAAO;AAAA,QAC9B,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,MACrB,CAAC;AAAA,IACH,KAAK;AACH,aAAO,SAAS,KAAK,OAAO;AAAA,QAC1B,OAAO,QAAQ;AAAA,QACf,OAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACH,KAAK;AACH,aAAO,MAAM,KAAK,MAAM;AAAA,QACtB,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,MACb,CAAC;AAAA,IACH,KAAK;AACH,aAAO;AAAA,QACL,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;AAAA,QACpB,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,QACrB;AAAA,UACE,IAAI,KAAK;AAAA,UACT,OAAO,KAAK;AAAA,UACZ,OAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,UAAU,IAAI;AAAA,IACvB,KAAK;AACH,aAAO,YAAY,IAAI;AAAA,IACzB,KAAK;AACH,aAAO,aAAa,MAAM,OAAO;AAAA,IACnC,KAAK;AACH,aAAO,WAAW,MAAM,OAAO;AAAA,IACjC;AACE,aAAO,MAAM;AAAA,EACjB;AACF;;;ACjTO,SAAS,qBAAqB,KAAa,UAAiC;AACjF,0BAAwB,KAAK,QAAQ;AACvC;AAEO,SAAS,gBACd,MACA,MACU;AACV,QAAM,QAAQ,MAAM,SAAS;AAC7B,QAAM,KAAK,uBAAuB,MAAM;AAAA,IACtC;AAAA,IACA,WAAW,MAAM;AAAA,EACnB,CAAC;AACD,SAAO,aAAa,IAAI;AAAA,IACtB;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,UAAU,MAAM;AAAA,EAClB,CAAC;AACH;AAEO,SAAS,SACd,MACA,MACU;AACV,QAAM,QAAQ,MAAM,SAAS;AAE7B,MAAI,OAAO,cAAc,aAAa;AACpC,WAAO,aAAa,MAAM,EAAE,OAAO,WAAW,MAAM,UAAU,CAAC;AAAA,EACjE;AAEA,QAAM,KAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,IACA,WAAW,MAAM;AAAA,EACnB,CAAC;AACD,SAAO,aAAa,IAAI;AAAA,IACtB;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,UAAU,MAAM;AAAA,EAClB,CAAC;AACH;;;AC5CO,SAAS,aACd,QACA,MAKA;AACA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,aAAa,OAAO,OAAO;AAAA,MAChC,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,IACnB,CAAC;AAAA,EACH;AACA,MAAI,OAAO,WAAW,QAAQ;AAC5B,WAAO,SAAS,OAAO,OAAO;AAAA,MAC5B,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,IACnB,CAAC;AAAA,EACH;AACA,SAAO,SAAS,OAAO,OAAO;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf,CAAC;AACH;;;AC5BA,SAAS,YAAY,KAAc,OAA+B;AAChE,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,MAAI,OAAO,QAAQ,UAAU;AAC3B,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAEA,OAAK,cAAc,IAAI;AACvB,MAAI,IAAI,UAAU;AAChB,SAAK,MAAM,QAAQ,IAAI,SAAS,MAAM,SAAS;AAC/C,SAAK,MAAM,kBAAkB,IAAI,MAAM,MAAM,SAAS;AAAA,EACxD,OAAO;AACL,QAAI,IAAI,MAAO,MAAK,MAAM,QAAQ,IAAI;AACtC,QAAI,IAAI,GAAI,MAAK,MAAM,kBAAkB,IAAI;AAAA,EAC/C;AACA,MAAI,IAAI,KAAM,MAAK,MAAM,aAAa;AACtC,MAAI,IAAI,IAAK,MAAK,MAAM,UAAU;AAClC,MAAI,IAAI,MAAO,MAAK,MAAM,YAAY;AACtC,MAAI,IAAI,SAAU,MAAK,MAAM,aAAa;AAE1C,MAAI,IAAI,SAAS;AACf,SAAK,UAAU,IAAI,kBAAkB;AACrC,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,iBAAiB,SAAS,IAAI,OAAO;AAC1C,SAAK,iBAAiB,WAAW,CAAC,UAAU;AAC1C,UAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,IAAK;AAChD,YAAM,eAAe;AACrB,UAAI,UAAU;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,MAAY,OAA8B;AAC1D,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,YAAY;AAChB,aAAW,OAAO,MAAM;AACtB,QAAI,YAAY,YAAY,KAAK,KAAK,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,eAAe,GAAqB,GAA8B;AACzE,SACE,EAAE,aAAa,EAAE,YACjB,EAAE,eAAe,EAAE,cACnB,EAAE,cAAc,EAAE,aAClB,EAAE,WAAW,EAAE;AAEnB;AAEA,SAAS,iBAAiBC,QAAe,MAAwB,OAA8B;AAC7F,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,YAAY;AAChB,MAAI;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AACT,YAAM,eAAe;AACrB,YAAM,OAAO,MAAM,SAAS,IAAI,IAAI;AACpC,YAAM,YAAY,KAAK,IAAI,GAAG,KAAK,aAAa,KAAK,SAAS;AAC9D,YAAM,OAAO,KAAK,IAAI,WAAW,KAAK,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC;AAChE,UAAI,SAAS,KAAK,OAAQ,MAAK,SAAS,IAAI;AAAA,IAC9C;AAAA,IACA,EAAE,SAAS,MAAM;AAAA,EACnB;AACA,aAAW,QAAQA,OAAO,KAAI,YAAY,SAAS,MAAM,KAAK,CAAC;AAC/D,SAAO;AACT;AAEO,SAAS,gBAAgB,QAAqB,OAAc,OAAoB;AACrF,QAAM,WAAW,SAAS,uBAAuB;AACjD,MAAI,cAAsB,CAAC;AAC3B,MAAI,aAAsC;AAE1C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,cAAc,YAAY,WAAW,EAAG;AAC7C,aAAS,YAAY,iBAAiB,aAAa,YAAY,KAAK,CAAC;AACrE,kBAAc,CAAC;AACf,iBAAa;AAAA,EACf;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,oBAAoB,IAAI;AACrC,QAAI,CAAC,MAAM;AACT,kBAAY;AACZ,eAAS,YAAY,SAAS,MAAM,KAAK,CAAC;AAC1C;AAAA,IACF;AAEA,QAAI,CAAC,cAAc,CAAC,eAAe,YAAY,IAAI,GAAG;AACpD,kBAAY;AACZ,mBAAa;AAAA,IACf;AACA,gBAAY,KAAK,IAAI;AAAA,EACvB;AAEA,cAAY;AACZ,SAAO,gBAAgB,QAAQ;AACjC;;;AClGA,IAAM,eAAe;AACrB,IAAM,eAAe,IAAI,OAAO,GAAG;AAEnC,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDpB,SAAS,iBAA4B;AACnC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO;AAAA,EACT;AACA,SAAO,OAAO,WAAW,8BAA8B,EAAE,UAAU,SAAS;AAC9E;AAEA,SAAS,UAAU,KAAqC;AACtD,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,OAAO,IAAI,KAAK,EAAE,YAAY;AACpC,MAAI,SAAS,WAAW,SAAS,UAAU,SAAS,SAAU,QAAO;AACrE,SAAO;AACT;AAEA,SAAS,WAAW,KAAwC;AAC1D,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,OAAO,SAAS,KAAK,EAAE;AACtC,SAAO,OAAO,SAAS,MAAM,KAAK,SAAS,IAAI,SAAS;AAC1D;AAEA,SAAS,kBAAkB,KAAkC;AAC3D,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,IAAI,KAAK,EAAE,YAAY;AACtC,MAAI,WAAW,cAAc,WAAW,UAAU,WAAW,OAAQ,QAAO;AAC5E,SAAO;AACT;AAEA,SAASC,gBAAe,MAAe,OAAqC;AAC1E,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,KAAK,cAAc,gBAAgB,IAAI,IAAI;AACxD,QAAI,CAAC,KAAM;AACX,WAAO,KAAK,eAAe;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAsB;AAC7C,QAAM,OAAO,IAAI,KAAK;AACtB,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,QAAuC;AAC1D,SAAO,IAAI,YAAwB,iBAAiB;AAAA,IAClD,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,gBAAN,cAA4B,YAAY;AAAA,EAC7C,OAAO,qBAAqB,CAAC,SAAS,QAAQ,UAAU,iBAAiB,YAAY;AAAA,EAEpE;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EAEpB,cAAc;AACZ,UAAM;AACN,UAAM,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AACjD,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc;AAEpB,SAAK,QAAQ,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,YAAY;AACvB,SAAK,OAAO,SAAS,cAAc,KAAK;AACxC,SAAK,KAAK,YAAY;AACtB,SAAK,MAAM,YAAY,KAAK,IAAI;AAChC,WAAO,OAAO,OAAO,KAAK,KAAK;AAAA,EACjC;AAAA,EAEA,oBAA0B;AACxB,SAAK,iBAAiB,IAAI,eAAe,MAAM,KAAK,YAAY,CAAC;AACjE,SAAK,eAAe,QAAQ,IAAI;AAEhC,SAAK,mBAAmB,IAAI,iBAAiB,MAAM,KAAK,YAAY,CAAC;AACrE,SAAK,iBAAiB,QAAQ,MAAM;AAAA,MAClC,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,IACd,CAAC;AAED,QAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAK,aAAa,OAAO,WAAW,8BAA8B;AAClE,WAAK,qBAAqB,MAAM;AAC9B,YAAI,UAAU,KAAK,aAAa,MAAM,CAAC,MAAM,SAAU,MAAK,YAAY;AAAA,MAC1E;AACA,WAAK,WAAW,iBAAiB,UAAU,KAAK,kBAAkB;AAAA,IACpE;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,uBAA6B;AAC3B,SAAK,gBAAgB,WAAW;AAChC,SAAK,iBAAiB;AACtB,SAAK,kBAAkB,WAAW;AAClC,SAAK,mBAAmB;AACxB,QAAI,KAAK,cAAc,KAAK,oBAAoB;AAC9C,WAAK,WAAW,oBAAoB,UAAU,KAAK,kBAAkB;AAAA,IACvE;AACA,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,2BAAiC;AAC/B,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,SAAe;AACb,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,SAA+B;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAO,MAAmC;AAC5C,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,cAAoB;AAC1B,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,mBAAe,MAAM;AACnB,WAAK,YAAY;AACjB,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEQ,WAAW,CAAC,WAA6B;AAC/C,SAAK,cAAc,YAAY,MAAM,CAAC;AAAA,EACxC;AAAA,EAEQ,wBAAgC;AACtC,UAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,UAAM,YAAY;AAClB,UAAM,cAAc;AACpB,SAAK,MAAM,YAAY,KAAK;AAC5B,UAAM,QAAQ,MAAM,sBAAsB,EAAE,QAAQ,aAAa;AACjE,UAAM,OAAO;AACb,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAyB;AAC/B,UAAM,WAAW,WAAW,KAAK,aAAa,OAAO,CAAC;AACtD,QAAI,SAAU,QAAO;AAErB,UAAM,YAAY,KAAK,sBAAsB;AAC7C,QAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,EAAG,QAAO;AAE1D,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,EAAG,QAAO;AAC1D,WAAO,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,SAAS,CAAC;AAAA,EACtD;AAAA,EAEQ,aAAa,WAAmC;AACtD,UAAM,QAAQ,aAAa,kBAAkB,WAAW,EAAE,YAAY,eAAe,EAAE,CAAC;AACxF,UAAM,UAAU,eAAe,KAAK;AACpC,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,WAAK,MAAM,MAAM,YAAY,MAAM,KAAK;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAkB;AACxB,UAAM,OAAO,UAAU,KAAK,aAAa,MAAM,CAAC;AAChD,UAAM,eAAe,kBAAkB,KAAK,aAAa,eAAe,CAAC;AACzE,UAAM,OAAO,KAAK,eAAe;AACjC,SAAK,MAAM,MAAM,QAAQ,GAAG,IAAI;AAEhC,UAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,UAAM,SAAS,KAAK,aAAa,QAAQ;AACzC,UAAM,UAAU,MAAM;AACpB,UAAI,KAAK,eAAgB,QAAO,KAAK;AAErC,UAAI,WAAW,MAAM;AACnB,YAAI,iBAAiB,YAAY;AAC/B,iBAAO,aAAa,QAAQ,EAAE,MAAM,CAAC;AAAA,QACvC;AACA,YAAI,iBAAiB,QAAQ;AAC3B,iBAAO,SAAS,gBAAgB,MAAM,GAAG;AAAA,YACvC;AAAA,YACA,OAAO,KAAK,aAAa,YAAY,KAAK;AAAA,UAC5C,CAAC;AAAA,QACH;AACA,eAAO,SAAS,QAAQ,EAAE,OAAO,UAAU,KAAK,SAAS,CAAC;AAAA,MAC5D;AAEA,UAAI,iBAAiB,YAAY;AAC/B,cAAM,eAAeA,gBAAe,MAAM,CAAC,iBAAiB,iBAAiB,CAAC;AAC9E,cAAM,WAAW,gBAAgB,KAAK,eAAe;AACrD,eAAO,aAAa,UAAU,EAAE,MAAM,CAAC;AAAA,MACzC;AAEA,UAAI,iBAAiB,QAAQ;AAC3B,cAAM,eAAeA,gBAAe,MAAM,CAAC,oBAAoB,WAAW,CAAC;AAC3E,cAAM,WAAW,gBAAgB,KAAK,eAAe;AACrD,eAAO,SAAS,gBAAgB,QAAQ,GAAG;AAAA,UACzC;AAAA,UACA,OAAO,KAAK,aAAa,YAAY,KAAK;AAAA,QAC5C,CAAC;AAAA,MACH;AAEA,aAAO,gBAAgB,MAAM,EAAE,OAAO,UAAU,KAAK,SAAS,CAAC;AAAA,IACjE,GAAG;AACH,UAAM,QAAQ,OAAO,IAAI;AACzB,oBAAgB,KAAK,MAAM,OAAO,KAAK;AAAA,EACzC;AACF;AAEO,IAAM,cAAc;AAEpB,SAAS,sBAAsB,UAAU,aAAmB;AACjE,MAAI,OAAO,mBAAmB,YAAa;AAC3C,MAAI,eAAe,IAAI,OAAO,EAAG;AACjC,iBAAe,OAAO,SAAS,aAAa;AAC9C;","names":["text","wrapText","isRecord","nums","lines","isRecord","pad","wrapText","wrapText","wrapText","lines","readScriptText"]}
1
+ {"version":3,"sources":["../src/termui/table-tag.ts","../src/termui/scroll-tag.ts","../src/termui/base.ts","../src/termui/text.ts","../src/termui/layout.ts","../src/termui/table.ts","../src/termui/widgets.ts","../src/termui/json.ts","../src/termui/tree-list.ts","../src/tokenize.ts","../src/theme.ts","../src/termui/code.ts","../src/termui/chart.ts","../src/document/common.ts","../src/core/html-compiler.ts","../src/document/json.ts","../src/document/markdown.ts","../src/core/ir-layout.ts","../src/document/html.ts","../src/document/index.ts","../src/dom-render.ts","../src/term-element.ts"],"sourcesContent":["import type { Line } from \"./base\";\n\nconst TABLE_TAG = Symbol(\"tableLine\");\ntype TableTaggedLine = Line & { [TABLE_TAG]?: true };\n\nfunction toTaggedLine(line: Line): TableTaggedLine {\n return line as TableTaggedLine;\n}\n\nexport function markTableLine(line: Line): Line {\n toTaggedLine(line)[TABLE_TAG] = true;\n return line;\n}\n\nexport function isTableLine(line: Line): boolean {\n return toTaggedLine(line)[TABLE_TAG] === true;\n}\n\nexport function preserveTableTag(source: Line, target: Line): void {\n if (toTaggedLine(source)[TABLE_TAG]) toTaggedLine(target)[TABLE_TAG] = true;\n}\n","import type { Line } from \"./base\";\n\nconst SCROLL_KEY = Symbol(\"scrollRegion\");\n\nexport type ScrollRegionMeta = {\n onScroll: (offset: number) => void;\n totalLines: number;\n maxHeight: number;\n offset: number;\n};\n\ntype ScrollTaggedLine = Line & { [SCROLL_KEY]?: ScrollRegionMeta };\n\nfunction toTagged(line: Line): ScrollTaggedLine {\n return line as ScrollTaggedLine;\n}\n\nexport function markScrollRegion(line: Line, meta: ScrollRegionMeta): Line {\n toTagged(line)[SCROLL_KEY] = meta;\n return line;\n}\n\nexport function getScrollRegionMeta(line: Line): ScrollRegionMeta | undefined {\n return toTagged(line)[SCROLL_KEY];\n}\n\nexport function preserveScrollTag(source: Line, target: Line): void {\n const meta = toTagged(source)[SCROLL_KEY];\n if (meta) toTagged(target)[SCROLL_KEY] = meta;\n}\n","export type Style = {\n text: string;\n color?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n inverted?: boolean;\n blink?: boolean;\n interactionId?: string;\n onClick?: () => void;\n noSelect?: boolean;\n cell?: number;\n};\n\nexport type Segment = string | Style;\nexport type Line = Segment[];\nexport type Block = Line[];\nexport type LayoutFn = (width: number) => Block;\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemePreference = ThemeMode | \"system\";\n\nexport type ThemePalette = {\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n};\n\nexport type ThemeSemantic = {\n frameBg: string;\n frameFg: string;\n frameMuted: string;\n border: string;\n borderStrong: string;\n inverseFg: string;\n inverseBg: string;\n info: string;\n success: string;\n warn: string;\n danger: string;\n};\n\nexport type ThemeSyntax = {\n default: string;\n keyword: string;\n string: string;\n number: string;\n comment: string;\n punctuation: string;\n function: string;\n type: string;\n};\n\nexport type ThemeMarkdown = {\n headingMarker: string;\n headingBoldMaxLevel: number;\n headings: {\n h1: string;\n h2: string;\n h3: string;\n h4: string;\n h5: string;\n h6: string;\n };\n paragraph: string;\n unorderedBullet: string;\n orderedMarker: string;\n tableHeader: string;\n tableBorder: string;\n quoteMarker: string;\n quoteText: string;\n separator: string;\n codeText: string;\n codeEmpty: string;\n codeBorder: string;\n};\n\nexport type ThemeComponents = {\n tabs: {\n activeFg: string;\n activeBg: string;\n inactiveFg: string;\n separator: string;\n };\n statusbar: {\n fg: string;\n bg: string;\n };\n badge: {\n fg: string;\n bg: string;\n };\n button: {\n fg: string;\n bg: string;\n };\n};\n\nexport type Theme = {\n id: string;\n label: string;\n version: number;\n mode: ThemeMode;\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n\n // Convenience aliases for the most common color paths.\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightWhite: string;\n border: string;\n bg: string;\n};\n\nexport function normalizedWidth(width: number): number {\n if (!Number.isFinite(width)) return 0;\n return Math.max(0, Math.floor(width));\n}\n","import { type Line, type Segment } from \"./base\";\nimport { normalizedWidth } from \"./base\";\n\nexport function pad(s: string, w: number, right?: boolean): string {\n if (s.length >= w) return s.slice(0, w);\n const space = \" \".repeat(w - s.length);\n return right ? space + s : s + space;\n}\n\nexport function hl(n: number): string {\n return \"\\u2500\".repeat(normalizedWidth(n));\n}\n\nexport function bar(val: number, max: number, w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0) return \"\";\n if (!Number.isFinite(max) || max <= 0) return \"\\u2591\".repeat(width);\n\n const ratio = Number.isFinite(val) ? val / max : 0;\n const filled = Math.round(Math.min(1, Math.max(0, ratio)) * width);\n return \"\\u2588\".repeat(filled) + \"\\u2591\".repeat(width - filled);\n}\n\nexport function spark(data: number[], w: number): string {\n const width = normalizedWidth(w);\n if (width <= 0 || data.length === 0) return \"\";\n\n const ticks = \"\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588\";\n const v = data.slice(-width);\n const mn = Math.min(...v);\n const mx = Math.max(...v);\n const rg = mx - mn || 1;\n return v.map((x) => ticks[Math.round(((x - mn) / rg) * 7)]).join(\"\");\n}\n\nfunction segLen(seg: Segment): number {\n return typeof seg === \"string\" ? seg.length : seg.text.length;\n}\n\nfunction lineLen(line: Line): number {\n let n = 0;\n for (const seg of line) n += segLen(seg);\n return n;\n}\n\nfunction sliceSeg(seg: Segment, end: number): Segment | null {\n if (end <= 0) return null;\n if (typeof seg === \"string\") {\n const text = seg.slice(0, end);\n return text.length > 0 ? text : null;\n }\n const text = seg.text.slice(0, end);\n if (text.length === 0) return null;\n return { ...seg, text };\n}\n\nfunction truncateLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const out: Line = [];\n let remaining = w;\n\n for (const seg of line) {\n if (remaining <= 0) break;\n const len = segLen(seg);\n if (len <= remaining) {\n out.push(seg);\n remaining -= len;\n continue;\n }\n const clipped = sliceSeg(seg, remaining);\n if (clipped) out.push(clipped);\n remaining = 0;\n }\n\n return out;\n}\n\nexport function padLine(line: Line, w: number): Line {\n if (w <= 0) return [];\n const used = lineLen(line);\n if (used > w) return truncateLine(line, w);\n if (used === w) return line;\n return [...line, { text: \" \".repeat(w - used), noSelect: true }];\n}\n\nexport function truncate(text: string, width: number, ellipsis = \"\\u2026\"): string {\n if (text.length <= width) return text;\n if (width <= ellipsis.length) return ellipsis.slice(0, width);\n return text.slice(0, width - ellipsis.length) + ellipsis;\n}\n\nexport function wrapText(text: string, w: number): string[] {\n if (w <= 0) return [\"\"];\n if (text.length <= w) return [text];\n\n const result: string[] = [];\n let pos = 0;\n while (pos < text.length) {\n if (pos + w >= text.length) {\n result.push(text.slice(pos));\n break;\n }\n let breakAt = text.lastIndexOf(\" \", pos + w);\n if (breakAt <= pos) {\n // No word boundary — hard break\n result.push(text.slice(pos, pos + w));\n pos += w;\n } else {\n result.push(text.slice(pos, breakAt));\n pos = breakAt + 1;\n }\n }\n return result.length > 0 ? result : [\"\"];\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { hl, padLine } from \"./text\";\nimport { markScrollRegion } from \"./scroll-tag\";\n\nexport type BoxAction = { label: string; onClick: () => void; color?: string };\n\ntype BorderTopOpts = { title?: string; color?: string; action?: BoxAction };\n\nfunction borderTop(w: number, opts?: BorderTopOpts): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u250c\", color: opts?.color, noSelect: true }];\n\n const { title, color, action } = opts ?? {};\n const innerWidth = width - 2; // minus corners\n\n // Title prefix: \"─ title \" (3 chars of framing + title length)\n // Reserve 1 extra char so there's always at least one dash of fill.\n const titleBudget = innerWidth - (action ? action.label.length + 2 : 0) - 4;\n let titleStr = \"\";\n if (title) {\n const safeTitle = title.length > titleBudget ? title.slice(0, Math.max(0, titleBudget)) : title;\n titleStr = safeTitle.length > 0 ? \"\\u2500 \" + safeTitle + \" \" : \"\";\n }\n\n const fillWidth = Math.max(0, innerWidth - titleStr.length - (action ? action.label.length + 2 : 0));\n\n if (!action) {\n return [{ text: \"\\u250c\" + titleStr + hl(fillWidth) + \"\\u2510\", color, noSelect: true }];\n }\n\n return [\n { text: \"\\u250c\" + titleStr + hl(fillWidth), color, noSelect: true },\n { text: \" \" + action.label + \" \", color: action.color ?? color, onClick: action.onClick, noSelect: true },\n { text: \"\\u2510\", color, noSelect: true },\n ];\n}\n\nfunction borderBottom(w: number, color?: string): Line {\n const width = normalizedWidth(w);\n if (width <= 0) return [];\n if (width === 1) return [{ text: \"\\u2514\", color, noSelect: true }];\n return [{ text: \"\\u2514\" + hl(width - 2) + \"\\u2518\", color, noSelect: true }];\n}\n\nexport function lines(\n content: Line[] | ((w: number) => Line[]),\n): LayoutFn {\n return (w) => {\n const ls = typeof content === \"function\" ? content(w) : content;\n return ls.map((line) => padLine(line, w));\n };\n}\n\nexport function box(\n content: LayoutFn,\n opts?: { title?: string; borderColor?: string; action?: BoxAction },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n if (width < 2) return content(width);\n\n const bc = opts?.borderColor;\n const inner = width - 2;\n const contentBlock = content(inner);\n const result: Block = [];\n result.push(borderTop(width, { title: opts?.title, color: bc, action: opts?.action }));\n for (const line of contentBlock) {\n result.push([\n { text: \"\\u2502\", color: bc, noSelect: true },\n ...padLine(line, inner),\n { text: \"\\u2502\", color: bc, noSelect: true },\n ]);\n }\n result.push(borderBottom(width, bc));\n return result;\n };\n}\n\nexport function hstack(\n children: LayoutFn[],\n opts?: { gap?: number; widths?: number[] },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const n = children.length;\n if (n === 0) return [];\n const gap = normalizedWidth(opts?.gap ?? 1);\n const totalGap = gap * (n - 1);\n\n let childWidths: number[];\n if (opts?.widths && opts.widths.length === n) {\n childWidths = opts.widths.map((cw) => normalizedWidth(cw));\n } else {\n const available = Math.max(0, width - totalGap);\n const base = Math.floor(available / n);\n const remainder = available - base * n;\n childWidths = children.map((_, i) => base + (i < remainder ? 1 : 0));\n }\n\n const blocks = children.map((child, i) => child(childWidths[i]!));\n const maxLines = Math.max(...blocks.map((b) => b.length));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n\n const result: Block = [];\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < blocks.length; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const childLine = blocks[j]![i];\n if (childLine) {\n line.push(...padLine(childLine, childWidths[j]!));\n } else {\n line.push(\" \".repeat(childWidths[j]!));\n }\n }\n result.push(line);\n }\n return result;\n };\n}\n\nexport function vstack(...children: LayoutFn[]): LayoutFn {\n return (w) => {\n const result: Block = [];\n for (const child of children) {\n result.push(...child(w));\n }\n return result;\n };\n}\n\nexport function separator(color?: string, char?: string): LayoutFn {\n return (w) => {\n const c = char ?? \"\\u2500\";\n return [[{ text: c.repeat(normalizedWidth(w)), color, noSelect: true }]];\n };\n}\n\nexport function blank(count = 1): LayoutFn {\n return (w) => {\n const line = [\" \".repeat(normalizedWidth(w))];\n const result: Block = [];\n for (let i = 0; i < count; i++) result.push(line);\n return result;\n };\n}\n\nexport function divider(\n label: string,\n opts?: { color?: string; char?: string; labelColor?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const c = opts?.char ?? \"\\u2500\";\n const padded = ` ${label} `;\n if (padded.length >= width) {\n const lc = opts?.labelColor ?? opts?.color;\n return [[lc ? { text: padded.slice(0, width), color: lc } : padded.slice(0, width)]];\n }\n const remaining = width - padded.length;\n const leftLen = Math.floor(remaining / 2);\n const rightLen = remaining - leftLen;\n const lineColor = opts?.color;\n const labelColor = opts?.labelColor ?? opts?.color;\n const line: Line = [\n { text: c.repeat(leftLen), color: lineColor, noSelect: true },\n labelColor ? { text: padded, color: labelColor } : padded,\n { text: c.repeat(rightLen), color: lineColor, noSelect: true },\n ];\n return [line];\n };\n}\n\nexport function grid(\n cells: LayoutFn[],\n opts: { cols: number; gap?: number; rowGap?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const cols = Math.max(1, opts.cols);\n const gap = normalizedWidth(opts.gap ?? 1);\n const rowGap = normalizedWidth(opts.rowGap ?? 0);\n const totalGap = gap * (cols - 1);\n const cellWidth = Math.max(1, Math.floor((width - totalGap) / cols));\n const gapStr = gap > 0 ? \" \".repeat(gap) : \"\";\n const result: Block = [];\n\n for (let rowStart = 0; rowStart < cells.length; rowStart += cols) {\n if (rowStart > 0 && rowGap > 0) {\n const emptyLine: Line = [\" \".repeat(width)];\n for (let g = 0; g < rowGap; g++) result.push(emptyLine);\n }\n const rowCells = cells.slice(rowStart, rowStart + cols);\n const blocks = rowCells.map((cell) => cell(cellWidth));\n const maxLines = Math.max(0, ...blocks.map((b) => b.length));\n\n for (let i = 0; i < maxLines; i++) {\n const line: Line = [];\n for (let j = 0; j < cols; j++) {\n if (j > 0 && gapStr) line.push(gapStr);\n const block = blocks[j];\n if (block && block[i]) {\n line.push(...padLine(block[i]!, cellWidth));\n } else {\n line.push(\" \".repeat(cellWidth));\n }\n }\n result.push(padLine(line, width));\n }\n }\n\n return result;\n };\n}\n\nexport function scroll(\n content: LayoutFn,\n opts: { maxHeight: number; offset?: number; scrollbarColor?: string; onScroll?: (offset: number) => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const maxH = normalizedWidth(opts.maxHeight);\n const contentW = Math.max(1, width - 1);\n const fullBlock = content(contentW);\n const totalLines = fullBlock.length;\n\n if (totalLines <= maxH) {\n return fullBlock.map((line) => padLine(line, width));\n }\n\n const maxOffset = Math.max(0, totalLines - maxH);\n const offset = Math.min(maxOffset, Math.max(0, opts.offset ?? 0));\n const visible = fullBlock.slice(offset, offset + maxH);\n\n const thumbHeight = Math.max(1, Math.round((maxH / totalLines) * maxH));\n const thumbStart = Math.round((offset / maxOffset) * (maxH - thumbHeight));\n\n const result: Block = [];\n for (let i = 0; i < visible.length; i++) {\n const inThumb = i >= thumbStart && i < thumbStart + thumbHeight;\n const scrollChar = inThumb ? \"\\u2588\" : \"\\u2591\";\n const line: Line = [\n ...padLine(visible[i]!, contentW),\n { text: scrollChar, color: opts.scrollbarColor, noSelect: true },\n ];\n if (opts.onScroll) {\n markScrollRegion(line, { onScroll: opts.onScroll, totalLines, maxHeight: maxH, offset });\n }\n result.push(line);\n }\n\n return result;\n };\n}\n\nexport function padding(\n content: LayoutFn,\n opts?: { x?: number; y?: number; top?: number; bottom?: number; left?: number; right?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const t = normalizedWidth(opts?.top ?? opts?.y ?? 0);\n const b = normalizedWidth(opts?.bottom ?? opts?.y ?? 0);\n const l = normalizedWidth(opts?.left ?? opts?.x ?? 0);\n const r = normalizedWidth(opts?.right ?? opts?.x ?? 0);\n const innerW = Math.max(1, width - l - r);\n const block = content(innerW);\n const result: Block = [];\n const emptyLine: Line = [\" \".repeat(width)];\n for (let i = 0; i < t; i++) result.push(emptyLine);\n const leftPad = l > 0 ? \" \".repeat(l) : \"\";\n for (const line of block) {\n const padded: Line = leftPad ? [leftPad, ...line] : line;\n result.push(padLine(padded, width));\n }\n for (let i = 0; i < b; i++) result.push(emptyLine);\n return result;\n };\n}\n","import { type Block, type LayoutFn, type Line } from \"./base\";\nimport { markTableLine } from \"./table-tag\";\nimport { hl, pad, wrapText } from \"./text\";\nimport { normalizedWidth } from \"./base\";\n\nfunction tableSep(\n ws: number[],\n l: string,\n m: string,\n r: string,\n color?: string,\n): Line {\n const line: Line = [{ text: l, color, noSelect: true }];\n for (let i = 0; i < ws.length; i++) {\n line.push({ text: hl(ws[i]!), color, noSelect: true, cell: i });\n line.push({ text: i < ws.length - 1 ? m : r, color, noSelect: true });\n }\n return line;\n}\n\nfunction tableTop(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u250c\", \"\\u252c\", \"\\u2510\", color);\n}\n\nfunction tableMid(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u251c\", \"\\u253c\", \"\\u2524\", color);\n}\n\nfunction tableBot(ws: number[], color?: string): Line {\n return tableSep(ws, \"\\u2514\", \"\\u2534\", \"\\u2518\", color);\n}\n\nexport type Column<T extends Record<string, unknown> = Record<string, unknown>> = {\n key: keyof T & string;\n title?: string;\n width?: number;\n align?: \"left\" | \"right\";\n headerColor?: string;\n headerBold?: boolean;\n color?: string | ((value: unknown, row: T) => string | undefined);\n dim?: boolean | ((value: unknown, row: T) => boolean);\n onClick?: (value: unknown, row: T) => void;\n};\n\nexport function table<T extends Record<string, unknown>>(\n columns: Column<T>[],\n data: T[],\n opts?: { borderColor?: string; fillWidth?: boolean; headerColor?: string; cellPadding?: number },\n): LayoutFn {\n return (w) => {\n const bc = opts?.borderColor;\n const hc = opts?.headerColor;\n const cp = normalizedWidth(opts?.cellPadding ?? 1);\n const nSep = columns.length + 1; // separators: │col│col│...│\n const minColWidth = 1;\n const widthBudget = Math.max(0, normalizedWidth(w) - nSep);\n const padStr = \" \".repeat(cp);\n\n // Compute column widths\n const ws = columns.map((col) => {\n if (col.width) return Math.max(minColWidth, col.width);\n const displayTitle = col.title ?? col.key;\n const titleW = displayTitle.length + 2 * cp;\n const dataW = Math.max(\n ...data.map((row) => String(row[col.key] ?? \"\").length + 2 * cp),\n 0,\n );\n return Math.max(minColWidth, titleW, dataW);\n });\n\n // If fillWidth, distribute remaining space\n if (opts?.fillWidth && widthBudget > 0) {\n const used = ws.reduce((a, b) => a + b, 0);\n const remaining = widthBudget - used;\n if (remaining > 0 && ws.length > 0) {\n const even = Math.floor(remaining / ws.length);\n const rem = remaining % ws.length;\n for (let i = 0; i < ws.length; i++) {\n ws[i] = ws[i]! + even + (i < rem ? 1 : 0);\n }\n }\n }\n\n if (widthBudget > 0) {\n let used = ws.reduce((a, b) => a + b, 0);\n let overflow = used - widthBudget;\n while (overflow > 0) {\n let idx = -1;\n let widest = 0;\n for (let i = 0; i < ws.length; i++) {\n if (ws[i]! > minColWidth && ws[i]! > widest) {\n widest = ws[i]!;\n idx = i;\n }\n }\n if (idx === -1) break;\n ws[idx] = ws[idx]! - 1;\n overflow -= 1;\n }\n }\n\n const result: Block = [];\n\n // Top border\n result.push(tableTop(ws, bc));\n\n // Header row\n const headerLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const displayTitle = col.title ?? col.key;\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(displayTitle, innerW, col.align === \"right\") + padStr;\n headerLine.push({\n text,\n color: col.headerColor ?? hc,\n bold: col.headerBold ?? true,\n cell: i,\n });\n headerLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(headerLine);\n\n // Mid separator\n result.push(tableMid(ws, bc));\n\n // Data rows — wrap cell text instead of truncating\n for (const row of data) {\n const wrapped: string[][] = columns.map((col, ci) => {\n const val = String(row[col.key] ?? \"\");\n const innerW = Math.max(1, ws[ci]! - 2 * cp);\n return wrapText(val, innerW);\n });\n const rowHeight = Math.max(...wrapped.map((c) => c.length), 1);\n\n for (let ln = 0; ln < rowHeight; ln++) {\n const dataLine: Line = [{ text: \"\\u2502\", color: bc, noSelect: true }];\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i]!;\n const cellLine = wrapped[i]![ln] ?? \"\";\n const innerW = Math.max(0, ws[i]! - 2 * cp);\n const text = padStr + pad(cellLine, innerW, col.align === \"right\") + padStr;\n const color =\n typeof col.color === \"function\"\n ? col.color(row[col.key], row)\n : col.color;\n const dim =\n typeof col.dim === \"function\"\n ? col.dim(row[col.key], row)\n : col.dim;\n const cellClick = typeof col.onClick === \"function\" ? () => col.onClick!(row[col.key], row) : undefined;\n dataLine.push({ text, color: color || undefined, dim: dim || undefined, onClick: cellClick, cell: i });\n dataLine.push({ text: \"\\u2502\", color: bc, noSelect: true });\n }\n result.push(dataLine);\n }\n }\n\n // Bottom border\n result.push(tableBot(ws, bc));\n\n // Tag all lines so the renderer can emit HTML <table>\n for (const line of result) markTableLine(line);\n return result;\n };\n}\n","import type { Block, LayoutFn, Line, Segment, Theme } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { pad, padLine, wrapText } from \"./text\";\n\nexport function statusbar(\n left: Segment[],\n right: Segment[],\n opts?: { bg?: string; color?: string; theme?: Theme },\n): LayoutFn {\n return (w) => {\n const rightLen = right.reduce(\n (acc, s) => acc + (typeof s === \"string\" ? s.length : s.text.length),\n 0,\n );\n const leftWidth = Math.max(0, w - rightLen);\n const paddedLeft = padLine(left, leftWidth);\n\n const theme = opts?.theme;\n const bg = opts?.bg ?? theme?.components.statusbar.bg;\n const color = opts?.color ?? theme?.components.statusbar.fg;\n const line: Line = [...paddedLeft, ...right].map((seg) => {\n if (typeof seg === \"string\") {\n return bg || color ? { text: seg, bg, color } : seg;\n }\n return { ...seg, bg: seg.bg ?? bg, color: seg.color ?? color };\n });\n return [padLine(line, w)];\n };\n}\n\nexport function tabs(\n names: string[],\n active: number,\n opts?: {\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n onSelect?: (index: number) => void;\n onClicks?: ((() => void) | undefined)[];\n interactionIds?: (string | undefined)[];\n theme?: Theme;\n },\n): LayoutFn {\n return (w) => {\n const line: Line = [];\n const onSelect = opts?.onSelect;\n const t = opts?.theme;\n for (let i = 0; i < names.length; i++) {\n const isActive = i === active;\n const name = names[i]!;\n const label = \" \" + (isActive ? name.toUpperCase() : name) + \" \";\n const onClick = opts?.onClicks?.[i] ?? (onSelect ? () => onSelect(i) : undefined);\n const interactionId = onClick ? opts?.interactionIds?.[i] : undefined;\n\n if (isActive) {\n line.push({\n text: label,\n color: opts?.activeColor ?? t?.components.tabs.activeFg,\n bg: opts?.activeBg ?? t?.components.tabs.activeBg,\n interactionId,\n onClick,\n });\n } else {\n line.push({\n text: label,\n color: opts?.inactiveColor ?? t?.components.tabs.inactiveFg,\n interactionId,\n onClick,\n });\n }\n\n if (i < names.length - 1) {\n line.push({ text: \"\\u2502\", color: opts?.separatorColor ?? t?.components.tabs.separator, noSelect: true });\n }\n }\n return [padLine(line, w)];\n };\n}\n\nexport function badge(\n label: string,\n opts?: { color?: string; bg?: string; onClick?: () => void; theme?: Theme },\n): Segment {\n const t = opts?.theme;\n return {\n text: label,\n color: opts?.color ?? t?.components.badge.fg,\n bg: opts?.bg ?? t?.components.badge.bg,\n onClick: opts?.onClick,\n };\n}\n\nexport type KVPair = {\n key: string;\n value: string | Segment[];\n keyColor?: string;\n valueColor?: string;\n onClick?: () => void;\n};\n\nexport function kv(\n pairs: KVPair[],\n opts?: { separator?: string; keyColor?: string; valueColor?: string; keyWidth?: number },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const sep = opts?.separator ?? \" \";\n const maxKey = opts?.keyWidth ?? Math.max(0, ...pairs.map((p) => p.key.length));\n const result: Line[] = [];\n\n for (const pair of pairs) {\n const keyText = pad(pair.key, maxKey);\n const keyColor = pair.keyColor ?? opts?.keyColor;\n const keySeg: Segment = keyColor ? { text: keyText, color: keyColor } : keyText;\n\n if (typeof pair.value === \"string\") {\n const valColor = pair.valueColor ?? opts?.valueColor;\n const valSeg: Segment =\n valColor || pair.onClick\n ? { text: pair.value, color: valColor, onClick: pair.onClick }\n : pair.value;\n result.push(padLine([keySeg, sep, valSeg], width));\n } else {\n result.push(padLine([keySeg, sep, ...pair.value], width));\n }\n }\n\n return result;\n };\n}\n\nexport function callout(\n content: LayoutFn | string,\n opts?: { color?: string; accent?: string; label?: string },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const accent = opts?.accent ?? opts?.color;\n const innerWidth = Math.max(1, width - 2);\n\n let block: Block;\n if (typeof content === \"string\") {\n const wrapped = wrapText(content, innerWidth);\n block = wrapped.map((line) => {\n const seg: Line = opts?.color ? [{ text: line, color: opts.color }] : [line];\n return padLine(seg, innerWidth);\n });\n } else {\n block = content(innerWidth);\n }\n\n const result: Block = [];\n\n if (opts?.label) {\n const labelLine: Line = [\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n { text: opts.label, color: accent, bold: true },\n ];\n result.push(padLine(labelLine, width));\n }\n\n for (const line of block) {\n result.push([\n { text: \"\\u2590\", color: accent, noSelect: true },\n \" \",\n ...padLine(line, innerWidth),\n ]);\n }\n\n return result;\n };\n}\n\nexport function checkbox(\n checked: boolean,\n label: string,\n opts?: { color?: string; checkColor?: string; onClick?: () => void },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const check = checked ? \"\\u2713\" : \" \";\n const boxSeg: Segment = {\n text: `[${check}]`,\n color: opts?.checkColor ?? opts?.color,\n onClick: opts?.onClick,\n };\n const labelSeg: Segment = opts?.onClick\n ? { text: ` ${label}`, color: opts.color, onClick: opts.onClick }\n : opts?.color\n ? { text: ` ${label}`, color: opts.color }\n : ` ${label}`;\n return [padLine([boxSeg, labelSeg], width)];\n };\n}\n\nexport function inputField(\n value: string,\n opts?: {\n placeholder?: string;\n width?: number;\n focused?: boolean;\n color?: string;\n borderColor?: string;\n onClick?: () => void;\n },\n): LayoutFn {\n return (w) => {\n const totalWidth = normalizedWidth(opts?.width ?? w);\n const innerWidth = Math.max(1, totalWidth - 2);\n const bc = opts?.borderColor;\n const focused = opts?.focused ?? false;\n\n const display = value || opts?.placeholder || \"\";\n const isPlaceholder = !value && opts?.placeholder;\n\n const textTruncated =\n display.length > innerWidth\n ? display.slice(display.length - innerWidth)\n : display;\n const padded = pad(textTruncated + (focused ? \"\\u2588\" : \"\"), innerWidth);\n\n const line: Line = [\n { text: focused ? \"\\u2502\" : \"[\", color: bc, noSelect: true },\n isPlaceholder\n ? { text: padded, dim: true, color: opts?.color, onClick: opts?.onClick }\n : opts?.color || opts?.onClick\n ? { text: padded, color: opts?.color, onClick: opts?.onClick }\n : padded,\n { text: focused ? \"\\u2502\" : \"]\", color: bc, noSelect: true },\n ];\n return [padLine(line, w)];\n };\n}\n","import type { LayoutFn, Line, Segment } from \"./base\";\nimport { bar } from \"./text\";\nimport { blank, box, hstack, lines, separator, vstack } from \"./layout\";\nimport { type Column, table } from \"./table\";\nimport { statusbar, tabs } from \"./widgets\";\n\nexport type JsonNode =\n | { type: \"vstack\"; children: JsonNode[] }\n | { type: \"hstack\"; gap?: number; widths?: number[]; children: JsonNode[] }\n | { type: \"box\"; title?: string; borderColor?: string; children: JsonNode[] }\n | { type: \"lines\"; content: Line[] }\n | { type: \"separator\"; color?: string }\n | { type: \"blank\" }\n | {\n type: \"table\";\n columns: Column[];\n data: Record<string, unknown>[];\n borderColor?: string;\n fillWidth?: boolean;\n }\n | {\n type: \"statusbar\";\n left: Segment[];\n right: Segment[];\n bg?: string;\n color?: string;\n }\n | {\n type: \"tabs\";\n names: string[];\n active: number;\n activeColor?: string;\n activeBg?: string;\n inactiveColor?: string;\n separatorColor?: string;\n }\n | { type: \"bar\"; value: number; max: number; color?: string; label?: string }\n | { type: \"text\"; segments: Segment[] };\n\nexport function fromJsonNode(node: JsonNode): LayoutFn {\n switch (node.type) {\n case \"vstack\":\n return vstack(...node.children.map(fromJsonNode));\n\n case \"hstack\":\n return hstack(node.children.map(fromJsonNode), {\n gap: node.gap,\n widths: node.widths,\n });\n\n case \"box\":\n return box(vstack(...node.children.map(fromJsonNode)), {\n title: node.title,\n borderColor: node.borderColor,\n });\n\n case \"lines\":\n return lines(node.content);\n\n case \"separator\":\n return separator(node.color);\n\n case \"blank\":\n return blank();\n\n case \"table\":\n return table(node.columns, node.data, {\n borderColor: node.borderColor,\n fillWidth: node.fillWidth,\n });\n\n case \"statusbar\":\n return statusbar(node.left, node.right, {\n bg: node.bg,\n color: node.color,\n });\n\n case \"tabs\":\n return tabs(node.names, node.active, {\n activeColor: node.activeColor,\n activeBg: node.activeBg,\n inactiveColor: node.inactiveColor,\n separatorColor: node.separatorColor,\n });\n\n case \"bar\":\n return (w) => {\n const labelStr = node.label ? \" \" + node.label : \"\";\n const barW = Math.max(0, w - 1 - labelStr.length); // 1 for leading space\n return [[\" \", { text: bar(node.value, node.max, barW), color: node.color }, labelStr]];\n };\n\n case \"text\":\n return lines([node.segments]);\n }\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { padLine, wrapText } from \"./text\";\n\nexport type TreeNode = {\n label: string;\n onClick?: () => void;\n children?: TreeNode[];\n};\n\nexport function tree(\n data: TreeNode[],\n opts?: { color?: string; branchColor?: string; leafColor?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n function walk(nodes: TreeNode[], prefix: string) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!;\n const last = i === nodes.length - 1;\n const hasKids = node.children && node.children.length > 0;\n const connector = last ? \"\\u2514\\u2500\\u2500 \" : \"\\u251c\\u2500\\u2500 \";\n const line: Line = [];\n if (prefix) line.push({ text: prefix, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: connector, color: opts?.branchColor ?? opts?.color, noSelect: true });\n line.push({ text: node.label, color: hasKids ? opts?.color : (opts?.leafColor ?? opts?.color), onClick: node.onClick });\n result.push(padLine(line, w));\n if (hasKids) {\n walk(node.children!, prefix + (last ? \" \" : \"\\u2502 \"));\n }\n }\n }\n walk(data, \"\");\n return result;\n };\n}\n\nexport type ListItem = string | { text: string; color?: string; onClick?: () => void };\n\nexport function list(\n items: ListItem[],\n opts?: { ordered?: boolean; bulletColor?: string; color?: string },\n): LayoutFn {\n return (w) => {\n const result: Block = [];\n const ordered = opts?.ordered ?? false;\n const digits = String(items.length).length;\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const text = typeof item === \"string\" ? item : item.text;\n const itemColor = typeof item === \"string\" ? opts?.color : (item.color ?? opts?.color);\n const itemClick = typeof item === \"string\" ? undefined : item.onClick;\n const prefix = ordered\n ? ` ${String(i + 1).padStart(digits, \" \")}. `\n : \" * \";\n const indent = \" \".repeat(prefix.length);\n const wrapped = wrapText(text, w - prefix.length);\n for (let j = 0; j < wrapped.length; j++) {\n const line: Line = [];\n if (j === 0) {\n line.push({ text: prefix, color: opts?.bulletColor });\n } else {\n line.push(indent);\n }\n line.push(itemColor || itemClick ? { text: wrapped[j]!, color: itemColor, onClick: itemClick } : wrapped[j]!);\n result.push(padLine(line, w));\n }\n }\n return result;\n };\n}\n","// termui — regex-based syntax tokenizer for TCode\n\nexport type TokenType =\n | \"keyword\"\n | \"string\"\n | \"number\"\n | \"comment\"\n | \"punctuation\"\n | \"function\"\n | \"type\"\n | \"default\";\n\nexport type Token = { text: string; type: TokenType };\n\ntype Rule = { pattern: RegExp; type: TokenType };\n\nfunction rules(pairs: [RegExp, TokenType][]): Rule[] {\n return pairs.map(([pattern, type]) => ({\n pattern: new RegExp(pattern.source, \"y\"),\n type,\n }));\n}\n\nconst JS_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/\\/\\*[\\s\\S]*?\\*\\//, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/`(?:[^`\\\\]|\\\\.)*`/, \"string\"],\n [/\\b(?:const|let|var|function|return|if|else|for|while|do|class|import|export|from|async|await|new|throw|try|catch|finally|typeof|instanceof|in|of|void|delete|switch|case|break|continue|default|yield|extends|implements|interface|type|as|this|super|null|undefined|true|false)\\b/, \"keyword\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/\\b[a-zA-Z_$][\\w$]*(?=\\s*\\()/, \"function\"],\n [/=>/, \"punctuation\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nconst JSON_RULES = rules([\n [/\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/, \"function\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/\\b(?:true|false|null)\\b/, \"keyword\"],\n [/-?\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/[{}\\[\\]:,]/, \"punctuation\"],\n]);\n\nconst BASH_RULES = rules([\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'[^']*'/, \"string\"],\n [/\\$\\{[^}]*\\}/, \"type\"],\n [/\\$[A-Za-z_]\\w*/, \"type\"],\n [/\\b(?:if|then|else|elif|fi|for|do|done|while|until|case|esac|function|in|return|exit|echo|export|local|readonly|source|alias|cd|ls|rm|cp|mv|mkdir|grep|sed|awk|cat|chmod|chown|sudo|apt|brew|npm|npx|bun|yarn|git|docker|curl|wget|pipe)\\b/, \"keyword\"],\n [/\\b\\d+\\b/, \"number\"],\n [/[|;&<>()\\[\\]{}]/, \"punctuation\"],\n]);\n\nconst GENERIC_RULES = rules([\n [/\\/\\/.*/, \"comment\"],\n [/#.*/, \"comment\"],\n [/\"(?:[^\"\\\\]|\\\\.)*\"/, \"string\"],\n [/'(?:[^'\\\\]|\\\\.)*'/, \"string\"],\n [/\\b\\d[\\d_.]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d+)?\\b/, \"number\"],\n [/\\b[A-Z][a-zA-Z0-9]*\\b/, \"type\"],\n [/[{}()\\[\\];:.,<>=!+\\-*/%&|?@^~]/, \"punctuation\"],\n]);\n\nfunction rulesFor(lang?: string): Rule[] {\n if (!lang) return GENERIC_RULES;\n const l = lang.toLowerCase();\n if (l === \"json\" || l === \"jsonc\") return JSON_RULES;\n if (l === \"bash\" || l === \"sh\" || l === \"zsh\" || l === \"shell\") return BASH_RULES;\n if (l === \"js\" || l === \"jsx\" || l === \"ts\" || l === \"tsx\" || l === \"javascript\" || l === \"typescript\") return JS_RULES;\n return GENERIC_RULES;\n}\n\nfunction tokenizeLine(line: string, langRules: Rule[]): Token[] {\n const tokens: Token[] = [];\n let pos = 0;\n while (pos < line.length) {\n // Skip whitespace as default\n if (line[pos] === \" \" || line[pos] === \"\\t\") {\n let ws = pos;\n while (ws < line.length && (line[ws] === \" \" || line[ws] === \"\\t\")) ws++;\n tokens.push({ text: line.slice(pos, ws), type: \"default\" });\n pos = ws;\n continue;\n }\n let matched = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) {\n tokens.push({ text: m[0], type: rule.type });\n pos += m[0].length;\n matched = true;\n break;\n }\n }\n if (!matched) {\n // Consume one char as default\n const start = pos;\n pos++;\n while (pos < line.length && line[pos] !== \" \" && line[pos] !== \"\\t\") {\n let anyMatch = false;\n for (const rule of langRules) {\n rule.pattern.lastIndex = pos;\n const m = rule.pattern.exec(line);\n if (m && m.index === pos) { anyMatch = true; break; }\n }\n if (anyMatch) break;\n pos++;\n }\n tokens.push({ text: line.slice(start, pos), type: \"default\" });\n }\n }\n return tokens;\n}\n\nexport function tokenize(source: string, language?: string): Token[][] {\n const langRules = rulesFor(language);\n return source.split(\"\\n\").map((line) => tokenizeLine(line, langRules));\n}\n","import type {\n Theme,\n ThemeComponents,\n ThemeMarkdown,\n ThemeMode,\n ThemePalette,\n ThemePreference,\n ThemeSemantic,\n ThemeSyntax,\n} from \"./termui/base\";\n\nexport type ThemeModeTokens = {\n palette: ThemePalette;\n semantic: ThemeSemantic;\n syntax: ThemeSyntax;\n markdown: ThemeMarkdown;\n components: ThemeComponents;\n};\n\nexport type ThemeSpec = {\n id: string;\n label: string;\n version: number;\n modes: Record<ThemeMode, ThemeModeTokens>;\n};\n\nexport type ThemeValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type ThemeValidationResult = {\n ok: boolean;\n issues: ThemeValidationIssue[];\n theme?: ThemeSpec;\n};\n\nconst DARK_PALETTE: ThemePalette = {\n black: \"#0c0c0c\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n magenta: \"#c678dd\",\n cyan: \"#56b6c2\",\n white: \"#cccccc\",\n brightBlack: \"#555555\",\n brightWhite: \"#ffffff\",\n};\n\nconst DARK_SEMANTIC: ThemeSemantic = {\n frameBg: \"#0c0c0c\",\n frameFg: \"#cccccc\",\n frameMuted: \"#555555\",\n border: \"#555555\",\n borderStrong: \"#808080\",\n inverseFg: \"#0c0c0c\",\n inverseBg: \"#ffffff\",\n info: \"#56b6c2\",\n success: \"#98c379\",\n warn: \"#e5c07b\",\n danger: \"#e06c75\",\n};\n\nconst DARK_SYNTAX: ThemeSyntax = {\n default: \"#ffffff\",\n keyword: \"#c678dd\",\n string: \"#98c379\",\n number: \"#e5c07b\",\n comment: \"#555555\",\n punctuation: \"#555555\",\n function: \"#61afef\",\n type: \"#56b6c2\",\n};\n\nconst DARK_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#555555\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#e5c07b\",\n h2: \"#56b6c2\",\n h3: \"#98c379\",\n h4: \"#c678dd\",\n h5: \"#cccccc\",\n h6: \"#cccccc\",\n },\n paragraph: \"#cccccc\",\n unorderedBullet: \"#56b6c2\",\n orderedMarker: \"#56b6c2\",\n tableHeader: \"#56b6c2\",\n tableBorder: \"#555555\",\n quoteMarker: \"#555555\",\n quoteText: \"#555555\",\n separator: \"#555555\",\n codeText: \"#ffffff\",\n codeEmpty: \"#555555\",\n codeBorder: \"#555555\",\n};\n\nconst DARK_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#0c0c0c\",\n activeBg: \"#e5c07b\",\n inactiveFg: \"#555555\",\n separator: \"#555555\",\n },\n statusbar: {\n fg: \"#0c0c0c\",\n bg: \"#98c379\",\n },\n badge: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n button: {\n fg: \"#0c0c0c\",\n bg: \"#ffffff\",\n },\n};\n\nconst LIGHT_PALETTE: ThemePalette = {\n black: \"#1f2328\",\n red: \"#cf222e\",\n green: \"#1a7f37\",\n yellow: \"#9a6700\",\n blue: \"#0969da\",\n magenta: \"#8250df\",\n cyan: \"#1b7c83\",\n white: \"#30363d\",\n brightBlack: \"#6e7781\",\n brightWhite: \"#0f172a\",\n};\n\nconst LIGHT_SEMANTIC: ThemeSemantic = {\n frameBg: \"#f6f8fa\",\n frameFg: \"#1f2328\",\n frameMuted: \"#6e7781\",\n border: \"#d0d7de\",\n borderStrong: \"#8c959f\",\n inverseFg: \"#f6f8fa\",\n inverseBg: \"#0f172a\",\n info: \"#0969da\",\n success: \"#1a7f37\",\n warn: \"#9a6700\",\n danger: \"#cf222e\",\n};\n\nconst LIGHT_SYNTAX: ThemeSyntax = {\n default: \"#1f2328\",\n keyword: \"#8250df\",\n string: \"#116329\",\n number: \"#9a6700\",\n comment: \"#6e7781\",\n punctuation: \"#6e7781\",\n function: \"#0969da\",\n type: \"#1b7c83\",\n};\n\nconst LIGHT_MARKDOWN: ThemeMarkdown = {\n headingMarker: \"#6e7781\",\n headingBoldMaxLevel: 3,\n headings: {\n h1: \"#9a6700\",\n h2: \"#0969da\",\n h3: \"#1a7f37\",\n h4: \"#8250df\",\n h5: \"#1f2328\",\n h6: \"#1f2328\",\n },\n paragraph: \"#1f2328\",\n unorderedBullet: \"#0969da\",\n orderedMarker: \"#0969da\",\n tableHeader: \"#0969da\",\n tableBorder: \"#d0d7de\",\n quoteMarker: \"#6e7781\",\n quoteText: \"#6e7781\",\n separator: \"#d0d7de\",\n codeText: \"#1f2328\",\n codeEmpty: \"#6e7781\",\n codeBorder: \"#d0d7de\",\n};\n\nconst LIGHT_COMPONENTS: ThemeComponents = {\n tabs: {\n activeFg: \"#f6f8fa\",\n activeBg: \"#0969da\",\n inactiveFg: \"#6e7781\",\n separator: \"#8c959f\",\n },\n statusbar: {\n fg: \"#f6f8fa\",\n bg: \"#0969da\",\n },\n badge: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n button: {\n fg: \"#f6f8fa\",\n bg: \"#0f172a\",\n },\n};\n\nexport const defaultThemeSpec: ThemeSpec = {\n id: \"termui-default\",\n label: \"TermUI Default\",\n version: 1,\n modes: {\n dark: {\n palette: DARK_PALETTE,\n semantic: DARK_SEMANTIC,\n syntax: DARK_SYNTAX,\n markdown: DARK_MARKDOWN,\n components: DARK_COMPONENTS,\n },\n light: {\n palette: LIGHT_PALETTE,\n semantic: LIGHT_SEMANTIC,\n syntax: LIGHT_SYNTAX,\n markdown: LIGHT_MARKDOWN,\n components: LIGHT_COMPONENTS,\n },\n },\n};\n\nexport const builtinThemes = {\n default: defaultThemeSpec,\n} as const;\n\nexport function resolveThemeMode(\n preference: ThemePreference,\n systemMode: ThemeMode = \"dark\",\n): ThemeMode {\n return preference === \"system\" ? systemMode : preference;\n}\n\nexport function resolveTheme(\n spec: ThemeSpec,\n preference: ThemePreference = \"dark\",\n opts?: { systemMode?: ThemeMode },\n): Theme {\n const mode = resolveThemeMode(preference, opts?.systemMode ?? \"dark\");\n const modeTokens = spec.modes[mode] ?? defaultThemeSpec.modes[mode];\n\n return {\n id: spec.id,\n label: spec.label,\n version: spec.version,\n mode,\n palette: modeTokens.palette,\n semantic: modeTokens.semantic,\n syntax: modeTokens.syntax,\n markdown: modeTokens.markdown,\n components: modeTokens.components,\n black: modeTokens.palette.black,\n red: modeTokens.palette.red,\n green: modeTokens.palette.green,\n yellow: modeTokens.palette.yellow,\n blue: modeTokens.palette.blue,\n magenta: modeTokens.palette.magenta,\n cyan: modeTokens.palette.cyan,\n white: modeTokens.palette.white,\n brightBlack: modeTokens.palette.brightBlack,\n brightWhite: modeTokens.palette.brightWhite,\n border: modeTokens.semantic.border,\n bg: modeTokens.semantic.frameBg,\n };\n}\n\nexport const dark = resolveTheme(defaultThemeSpec, \"dark\");\nexport const light = resolveTheme(defaultThemeSpec, \"light\");\n\nexport function themeToCssVars(theme: Theme): Record<string, string> {\n return {\n \"--termui-bg\": theme.semantic.frameBg,\n \"--termui-fg\": theme.semantic.frameFg,\n \"--termui-muted\": theme.semantic.frameMuted,\n \"--termui-border\": theme.semantic.border,\n \"--termui-border-strong\": theme.semantic.borderStrong,\n \"--termui-info\": theme.semantic.info,\n \"--termui-success\": theme.semantic.success,\n \"--termui-warn\": theme.semantic.warn,\n \"--termui-danger\": theme.semantic.danger,\n \"--termui-inverse-fg\": theme.semantic.inverseFg,\n \"--termui-inverse-bg\": theme.semantic.inverseBg,\n };\n}\n\nexport function parseThemeSpec(json: string): ThemeValidationResult {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch (error) {\n return {\n ok: false,\n issues: [{ path: \"$\", message: error instanceof Error ? error.message : \"Invalid JSON\" }],\n };\n }\n return validateThemeSpec(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction issue(path: string, message: string): ThemeValidationIssue {\n return { path, message };\n}\n\nfunction isColorValue(value: string): boolean {\n const v = value.trim();\n if (!v) return false;\n if (/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(v)) return true;\n if (/^(?:rgb|rgba|hsl|hsla|oklch|oklab|lab|lch|color)\\(.+\\)$/i.test(v)) return true;\n if (/^var\\(--[a-zA-Z0-9-_]+\\)$/.test(v)) return true;\n if (/^[a-zA-Z]+$/.test(v)) return true;\n return false;\n}\n\nfunction validateColorField(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"string\") {\n issues.push(issue(path, \"Expected a string color value\"));\n return;\n }\n if (!isColorValue(value)) {\n issues.push(issue(path, \"Invalid CSS color value\"));\n }\n}\n\nfunction validateHeadingBoldMaxLevel(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n return;\n }\n if (value < 1 || value > 6) {\n issues.push(issue(path, \"Expected an integer between 1 and 6\"));\n }\n}\n\nfunction validateTokenGroup(\n value: unknown,\n path: string,\n fields: readonly string[],\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n for (const field of fields) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateMarkdownTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateColorField(value.headingMarker, `${path}.headingMarker`, issues);\n validateHeadingBoldMaxLevel(value.headingBoldMaxLevel, `${path}.headingBoldMaxLevel`, issues);\n\n if (!isRecord(value.headings)) {\n issues.push(issue(`${path}.headings`, \"Expected an object\"));\n } else {\n for (const level of [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const) {\n validateColorField(value.headings[level], `${path}.headings.${level}`, issues);\n }\n }\n\n for (const field of [\n \"paragraph\",\n \"unorderedBullet\",\n \"orderedMarker\",\n \"tableHeader\",\n \"tableBorder\",\n \"quoteMarker\",\n \"quoteText\",\n \"separator\",\n \"codeText\",\n \"codeEmpty\",\n \"codeBorder\",\n ] as const) {\n validateColorField(value[field], `${path}.${field}`, issues);\n }\n}\n\nfunction validateComponentTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.tabs,\n `${path}.tabs`,\n [\"activeFg\", \"activeBg\", \"inactiveFg\", \"separator\"],\n issues,\n );\n validateTokenGroup(value.statusbar, `${path}.statusbar`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.badge, `${path}.badge`, [\"fg\", \"bg\"], issues);\n validateTokenGroup(value.button, `${path}.button`, [\"fg\", \"bg\"], issues);\n}\n\nfunction validateModeTokens(\n value: unknown,\n path: string,\n issues: ThemeValidationIssue[],\n) {\n if (!isRecord(value)) {\n issues.push(issue(path, \"Expected an object\"));\n return;\n }\n\n validateTokenGroup(\n value.palette,\n `${path}.palette`,\n [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightWhite\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.semantic,\n `${path}.semantic`,\n [\n \"frameBg\",\n \"frameFg\",\n \"frameMuted\",\n \"border\",\n \"borderStrong\",\n \"inverseFg\",\n \"inverseBg\",\n \"info\",\n \"success\",\n \"warn\",\n \"danger\",\n ],\n issues,\n );\n\n validateTokenGroup(\n value.syntax,\n `${path}.syntax`,\n [\n \"default\",\n \"keyword\",\n \"string\",\n \"number\",\n \"comment\",\n \"punctuation\",\n \"function\",\n \"type\",\n ],\n issues,\n );\n\n validateMarkdownTokens(value.markdown, `${path}.markdown`, issues);\n validateComponentTokens(value.components, `${path}.components`, issues);\n}\n\nexport function validateThemeSpec(value: unknown): ThemeValidationResult {\n const issues: ThemeValidationIssue[] = [];\n if (!isRecord(value)) {\n return { ok: false, issues: [issue(\"$\", \"Expected an object\")] };\n }\n\n if (typeof value.id !== \"string\" || !value.id.trim()) {\n issues.push(issue(\"$.id\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.label !== \"string\" || !value.label.trim()) {\n issues.push(issue(\"$.label\", \"Expected a non-empty string\"));\n }\n\n if (typeof value.version !== \"number\" || !Number.isInteger(value.version) || value.version < 1) {\n issues.push(issue(\"$.version\", \"Expected a positive integer\"));\n }\n\n if (!isRecord(value.modes)) {\n issues.push(issue(\"$.modes\", \"Expected an object with light/dark modes\"));\n } else {\n validateModeTokens(value.modes.dark, \"$.modes.dark\", issues);\n validateModeTokens(value.modes.light, \"$.modes.light\", issues);\n }\n\n if (issues.length > 0) {\n return { ok: false, issues };\n }\n\n return {\n ok: true,\n issues: [],\n theme: value as ThemeSpec,\n };\n}\n","import { tokenize, type TokenType } from \"../tokenize\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"./base\";\nimport { box, lines, type BoxAction } from \"./layout\";\n\nexport function tokenColor(type: TokenType, theme: Theme): string {\n switch (type) {\n case \"keyword\": return theme.syntax.keyword;\n case \"string\": return theme.syntax.string;\n case \"number\": return theme.syntax.number;\n case \"comment\": return theme.syntax.comment;\n case \"punctuation\": return theme.syntax.punctuation;\n case \"function\": return theme.syntax.function;\n case \"type\": return theme.syntax.type;\n default: return theme.syntax.default;\n }\n}\n\nexport function code(\n source: string,\n opts?: { language?: string; title?: string; borderColor?: string; theme?: Theme; copyable?: boolean; action?: BoxAction },\n): LayoutFn {\n const t = opts?.theme ?? dark;\n const tokens = tokenize(source, opts?.language);\n const copyAction = opts?.copyable !== false\n ? { label: \"cp\", onClick: () => navigator.clipboard.writeText(source), color: t.semantic.frameMuted }\n : undefined;\n return box(\n lines(\n tokens.length > 0\n ? tokens.map((lineTokens) =>\n lineTokens.length === 0\n ? [{ text: \" \", color: t.markdown.codeEmpty }]\n : lineTokens.map((tok) => ({ text: tok.text, color: tokenColor(tok.type, t) })),\n )\n : [[{ text: \" \", color: t.markdown.codeEmpty, dim: true }]],\n ),\n {\n title: opts?.title ?? (opts?.language ? `code:${opts.language}` : \"code\"),\n borderColor: opts?.borderColor ?? t.markdown.codeBorder,\n action: opts?.action ?? copyAction,\n },\n );\n}\n","import type { Block, LayoutFn, Line } from \"./base\";\nimport { normalizedWidth } from \"./base\";\nimport { padLine } from \"./text\";\n\nfunction fmtNum(n: number): string {\n if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1) + \"k\";\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(1);\n}\n\nexport function chart(\n data: number[],\n opts?: { height?: number; color?: string; axisColor?: string; fill?: boolean },\n): LayoutFn {\n return (w) => {\n const width = normalizedWidth(w);\n const height = opts?.height ?? 8;\n const color = opts?.color;\n const axisColor = opts?.axisColor;\n\n if (data.length === 0 || width < 4 || height < 2) return [padLine([], width)];\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const minLabel = fmtNum(min);\n const maxLabel = fmtNum(max);\n const labelW = Math.max(minLabel.length, maxLabel.length);\n const axisW = labelW + 2;\n const plotW = Math.max(1, width - axisW);\n\n // Resample data to plotW points\n const points: number[] = [];\n if (data.length === 1) {\n for (let i = 0; i < plotW; i++) points.push(data[0]!);\n } else {\n for (let i = 0; i < plotW; i++) {\n const idx = (i / (plotW - 1)) * (data.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.min(lo + 1, data.length - 1);\n const t = idx - lo;\n points.push(data[lo]! * (1 - t) + data[hi]! * t);\n }\n }\n\n // Map to row indices (0 = bottom, height-1 = top)\n const rows = points.map((v) => Math.round(((v - min) / range) * (height - 1)));\n\n const result: Block = [];\n for (let row = height - 1; row >= 0; row--) {\n const line: Line = [];\n\n // Y axis\n let label = \"\";\n if (row === height - 1) label = maxLabel;\n else if (row === 0) label = minLabel;\n line.push({ text: label.padStart(labelW) + \" \\u2502\", color: axisColor, noSelect: true });\n\n // Plot area\n let text = \"\";\n for (let col = 0; col < plotW; col++) {\n const val = rows[col]!;\n if (val === row) text += \"\\u2584\";\n else if (opts?.fill && val > row) text += \"\\u2588\";\n else text += \" \";\n }\n line.push(color ? { text, color } : text);\n result.push(padLine(line, width));\n }\n\n // X axis\n const xAxis: Line = [\n { text: \" \".repeat(labelW) + \" \\u2514\" + \"\\u2500\".repeat(plotW), color: axisColor, noSelect: true },\n ];\n result.push(padLine(xAxis, width));\n\n return result;\n };\n}\n","import type { Line, Segment, Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\nfunction headingLevelKey(level: number): keyof Theme[\"markdown\"][\"headings\"] {\n if (level <= 1) return \"h1\";\n if (level === 2) return \"h2\";\n if (level === 3) return \"h3\";\n if (level === 4) return \"h4\";\n if (level === 5) return \"h5\";\n return \"h6\";\n}\n\nexport function headingColor(level: number, theme: Theme, overrides?: MarkdownThemeOverrides): string {\n const key = headingLevelKey(level);\n return overrides?.headings?.[key] ?? theme.markdown.headings[key];\n}\n\nexport function isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n return /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/.test(trimmed);\n}\n\nexport function wrapText(text: string, maxWidth: number): string[] {\n const width = Math.max(1, maxWidth);\n const normalized = text.replace(/\\s+/g, \" \").trim();\n if (!normalized) return [\"\"];\n\n const linesOut: string[] = [];\n let rest = normalized;\n\n while (rest.length > width) {\n const slice = rest.slice(0, width + 1);\n const splitAt = slice.lastIndexOf(\" \");\n const end = splitAt > 0 ? splitAt : width;\n linesOut.push(rest.slice(0, end).trimEnd());\n rest = rest.slice(end).trimStart();\n }\n\n linesOut.push(rest);\n return linesOut;\n}\n\nexport function renderPrefixedText(\n text: string,\n width: number,\n prefix: Segment,\n continuationPrefix: string,\n textStyle?: Omit<Exclude<Segment, string>, \"text\" | \"onClick\">,\n): Line[] {\n const prefixText = typeof prefix === \"string\" ? prefix : prefix.text;\n const wrapped = wrapText(text, width - prefixText.length);\n\n return wrapped.map((chunk, index) => {\n if (index === 0) {\n return [prefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n }\n return [continuationPrefix, textStyle ? { text: chunk, ...textStyle } : chunk];\n });\n}\n\nexport function normalizeHtmlText(text: string): string {\n return text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction getValueByPath(source: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = source;\n for (const part of parts) {\n if (!isRecord(current)) return undefined;\n current = current[part];\n }\n return current;\n}\n\nexport function resolveThemeColor(value: string | null | undefined, theme: Theme): string | undefined {\n if (!value) return undefined;\n const raw = value.trim();\n if (!raw) return undefined;\n const topLevel = theme[raw as keyof Theme];\n if (typeof topLevel === \"string\") return topLevel;\n const nested = getValueByPath(theme, raw);\n if (typeof nested === \"string\") return nested;\n return raw;\n}\n\nexport function getColorAttr(el: Element, theme: Theme, names: string[]): string | undefined {\n for (const name of names) {\n const value = resolveThemeColor(el.getAttribute(name), theme);\n if (value) return value;\n }\n return undefined;\n}\n\nexport function parseIntegerAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseInt(raw.trim(), 10);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function parseCodeLanguage(el: Element): string | undefined {\n const explicit = el.getAttribute(\"language\");\n if (explicit && explicit.trim()) return explicit.trim();\n\n const klass = el.getAttribute(\"class\") ?? \"\";\n const match = klass.match(/\\blanguage-([\\w+-]+)\\b/);\n return match?.[1];\n}\n","import type { Theme } from \"../termui\";\nimport {\n getColorAttr,\n normalizeHtmlText,\n parseCodeLanguage,\n parseIntegerAttr,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport { type TermAction, type TermIRNode } from \"./ir\";\n\ntype ActionSeed =\n | { type: \"action\"; id?: string; text: string }\n | { type: \"link\"; href?: string; text: string };\n\nexport type HtmlTagCompiler = (el: Element, ctx: HtmlCompileContext) => TermIRNode | null;\n\nexport type HtmlCompileContext = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n compileChildren: (el: Element) => TermIRNode[];\n compileNode: (node: ChildNode) => TermIRNode | null;\n actionFromElement: (el: Element, seed: ActionSeed) => TermAction;\n};\n\nexport type CompileHtmlToIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n containerGap?: number;\n};\n\nconst htmlTagRegistry = new Map<string, HtmlTagCompiler>();\n\nfunction stack(children: TermIRNode[], gap: number): TermIRNode {\n return { kind: \"stack\", gap, children };\n}\n\n// ---------------------------------------------------------------------------\n// CSS layout inference -- read display/gap/grid from getComputedStyle\n// ---------------------------------------------------------------------------\n\ntype CSSLayout = {\n display?: \"flex\" | \"grid\";\n direction?: \"row\" | \"column\";\n gap?: number;\n cols?: number;\n};\n\nfunction cssGapToLines(raw: string, el: Element): number | undefined {\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)\\s*(px|rem|em|ch)?/);\n if (!match) return undefined;\n const value = Number.parseFloat(match[1]!);\n const unit = (match[2] ?? \"px\").toLowerCase();\n if (unit === \"px\") {\n const lh = parseFloat(getComputedStyle(el).lineHeight);\n const cellH = Number.isFinite(lh) && lh > 0 ? lh : 16;\n return Math.max(0, Math.round(value / cellH));\n }\n return Math.max(0, Math.round(value));\n}\n\nfunction resolveLayout(el: Element): CSSLayout {\n if (!el.isConnected || typeof getComputedStyle !== \"function\") return {};\n\n const cs = getComputedStyle(el);\n const display = cs.display;\n const isFlex = display === \"flex\" || display === \"inline-flex\";\n const isGrid = display === \"grid\" || display === \"inline-grid\";\n if (!isFlex && !isGrid) return {};\n\n const result: CSSLayout = { display: isFlex ? \"flex\" : \"grid\" };\n\n if (isFlex) {\n const dir = cs.flexDirection;\n if (dir === \"row\" || dir === \"column\") result.direction = dir;\n }\n\n if (isGrid) {\n const cols = cs.gridTemplateColumns;\n if (cols && cols !== \"none\") {\n const count = cols.split(/\\s+/).filter((t) => t.length > 0).length;\n if (count > 0) result.cols = count;\n }\n }\n\n const gap = cs.gap;\n if (gap && gap !== \"normal\" && gap !== \"0px\") {\n result.gap = cssGapToLines(gap, el);\n }\n\n return result;\n}\n\nfunction parseNumericList(raw: string): number[] | undefined {\n const trimmed = raw.trim();\n if (!trimmed) return undefined;\n\n if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (!Array.isArray(parsed)) return undefined;\n const nums = parsed\n .map((value) => (typeof value === \"number\" ? value : Number(value)))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n } catch {\n return undefined;\n }\n }\n\n const nums = trimmed\n .split(/[\\s,]+/g)\n .filter((token) => token.length > 0)\n .map((token) => Number.parseFloat(token))\n .filter((value) => Number.isFinite(value));\n return nums.length > 0 ? nums : undefined;\n}\n\nfunction parseBooleanAttr(el: Element, name: string): boolean | undefined {\n const raw = el.getAttribute(name);\n if (raw === null) return undefined;\n const value = raw.trim().toLowerCase();\n if (!value || value === \"true\" || value === \"1\" || value === \"yes\" || value === \"on\") return true;\n if (value === \"false\" || value === \"0\" || value === \"no\" || value === \"off\") return false;\n return true;\n}\n\nfunction firstAttr(el: Element, names: string[]): string | undefined {\n for (const name of names) {\n const value = el.getAttribute(name);\n if (value !== null) return value;\n }\n return undefined;\n}\n\nfunction parseIntegerAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseIntegerAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseBooleanAttrs(el: Element, names: string[]): boolean | undefined {\n for (const name of names) {\n const value = parseBooleanAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseNumericListAttrs(el: Element, names: string[]): number[] | undefined {\n for (const name of names) {\n const raw = el.getAttribute(name);\n if (!raw) continue;\n const parsed = parseNumericList(raw);\n if (parsed) return parsed;\n throw new Error(`Invalid numeric list in \"${name}\" attribute: ${raw}`);\n }\n return undefined;\n}\n\nfunction parseFloatAttr(el: Element, name: string): number | undefined {\n const raw = el.getAttribute(name);\n if (!raw) return undefined;\n const n = Number.parseFloat(raw.trim());\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseFloatAttrs(el: Element, names: string[]): number | undefined {\n for (const name of names) {\n const value = parseFloatAttr(el, name);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction parseDataAttrs(el: Element): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries((el as HTMLElement).dataset ?? {})) {\n if (typeof value === \"string\") out[key] = value;\n }\n return out;\n}\n\nfunction elementPathKey(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current) {\n const tag = current.tagName.toLowerCase();\n let ordinal = 0;\n let prev = current.previousElementSibling;\n while (prev) {\n if (prev.tagName.toLowerCase() === tag) ordinal += 1;\n prev = prev.previousElementSibling;\n }\n parts.push(`${tag}:${ordinal}`);\n current = current.parentElement;\n }\n return parts.reverse().join(\"/\");\n}\n\nfunction actionKeyFromSeed(el: Element, seed: ActionSeed): string {\n const scope = elementPathKey(el);\n if (seed.type === \"action\") {\n return seed.id ? `a:${seed.id}:${scope}` : `a:${scope}`;\n }\n return seed.href ? `l:${seed.href}:${scope}` : `l:${scope}`;\n}\n\nfunction collectDirectChildElements(el: Element): Element[] {\n return Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n}\n\nfunction parseDataChildren(el: Element): number[] | undefined {\n const dataEls = el.querySelectorAll(\":scope > data\");\n if (dataEls.length === 0) return undefined;\n const out: number[] = [];\n for (let i = 0; i < dataEls.length; i++) {\n const d = dataEls[i]!;\n const raw = d.getAttribute(\"value\");\n const v = Number.parseFloat(raw ?? \"\");\n if (!Number.isFinite(v)) {\n throw new Error(`Invalid <data> value at index ${i}: ${raw ?? \"(missing)\"}`);\n }\n out.push(v);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction controlActionId(el: Element): string | undefined {\n return firstAttr(el, [\"action\"]) ?? undefined;\n}\n\nfunction compactLabel(raw: string, max = 28): string {\n const text = normalizeHtmlText(raw);\n if (text.length <= max) return text;\n return `${text.slice(0, Math.max(1, max - 3))}...`;\n}\n\nfunction compileChartNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const dataText = (el.textContent ?? \"\").trim();\n const data =\n parseNumericListAttrs(el, [\"values\"]) ??\n parseDataChildren(el) ??\n parseNumericList(dataText) ??\n [];\n\n return {\n kind: \"chart\",\n data,\n height: parseIntegerAttrs(el, [\"height\"]),\n fill: parseBooleanAttrs(el, [\"fill\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n axisColor: getColorAttr(el, ctx.theme, [\"axis-color\"]),\n };\n}\n\nfunction compileStatusbarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n return {\n kind: \"statusbar\",\n left: firstAttr(el, [\"left\"]) ?? \"\",\n right: firstAttr(el, [\"right\"]) ?? \"\",\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"background\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n };\n}\n\nfunction compileBarNode(el: Element, ctx: HtmlCompileContext): TermIRNode {\n const textLabel = normalizeHtmlText(el.textContent ?? \"\");\n return {\n kind: \"bar\",\n label: firstAttr(el, [\"label\", \"aria-label\", \"title\"]) ?? (textLabel || undefined),\n value: parseFloatAttrs(el, [\"value\"]) ?? 0,\n max: parseFloatAttrs(el, [\"max\"]) ?? 100,\n width: parseIntegerAttrs(el, [\"width\"]),\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n showPercent: parseBooleanAttrs(el, [\"show-percent\"]),\n };\n}\n\nfunction registerDefaultCompilers(): void {\n if (htmlTagRegistry.size > 0) return;\n\n for (let level = 1; level <= 6; level++) {\n htmlTagRegistry.set(`h${level}`, (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"heading\",\n level,\n text,\n markerColor: getColorAttr(el, ctx.theme, [\"marker-color\"]),\n };\n });\n }\n\n htmlTagRegistry.set(\"p\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color:\n getColorAttr(el, ctx.theme, [\"color\"]) ??\n ctx.overrides?.paragraph ??\n ctx.theme.markdown.paragraph,\n };\n });\n\n htmlTagRegistry.set(\"ul\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return { kind: \"list\", ordered: false, start: 1, items };\n });\n\n htmlTagRegistry.set(\"ol\", (el) => {\n const items = collectDirectChildElements(el)\n .filter((child) => child.tagName.toLowerCase() === \"li\")\n .map((item) => normalizeHtmlText(item.textContent ?? \"\"))\n .filter((text) => text.length > 0);\n if (items.length === 0) return null;\n return {\n kind: \"list\",\n ordered: true,\n start: parseIntegerAttr(el, \"start\") ?? 1,\n items,\n };\n });\n\n htmlTagRegistry.set(\"blockquote\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"blockquote\",\n text,\n markerColor:\n getColorAttr(el, ctx.theme, [\"marker-color\"]) ??\n ctx.overrides?.quoteMarker ??\n ctx.theme.markdown.quoteMarker,\n color: ctx.overrides?.quoteText ?? ctx.theme.markdown.quoteText,\n };\n });\n\n htmlTagRegistry.set(\"hr\", (el, ctx) => {\n const label = firstAttr(el, [\"label\"]);\n if (label) {\n return {\n kind: \"divider\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\"]) ?? ctx.theme.semantic.border,\n char: firstAttr(el, [\"char\"]) ?? undefined,\n labelColor: getColorAttr(el, ctx.theme, [\"label-color\"]) ?? undefined,\n };\n }\n return {\n kind: \"separator\",\n color:\n getColorAttr(el, ctx.theme, [\"color\"]) ??\n ctx.overrides?.separator ??\n ctx.theme.markdown.separator,\n };\n });\n\n htmlTagRegistry.set(\"pre\", (el, ctx) => {\n const language = parseCodeLanguage(el) ?? parseCodeLanguage(el.querySelector(\"code\") ?? el);\n const raw = (el.textContent ?? \"\").replace(/\\r\\n/g, \"\\n\");\n const trimmed = raw.replace(/^\\n+|\\n+$/g, \"\");\n\n const lines = trimmed.length > 0 ? trimmed.split(\"\\n\").map((line) => line.replace(/\\t/g, \" \")) : [];\n return {\n kind: \"pre\",\n lines,\n language,\n textColor:\n getColorAttr(el, ctx.theme, [\"text-color\", \"color\"]) ??\n ctx.overrides?.codeText ??\n ctx.theme.markdown.codeText,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.overrides?.codeBorder ??\n ctx.theme.markdown.codeBorder,\n emptyColor: ctx.overrides?.codeEmpty ?? ctx.theme.markdown.codeEmpty,\n };\n });\n\n htmlTagRegistry.set(\"table\", (el, ctx) => {\n const rowElements: Element[] = [];\n for (const child of collectDirectChildElements(el)) {\n const tag = child.tagName.toLowerCase();\n if (tag === \"tr\") {\n rowElements.push(child);\n continue;\n }\n if (tag !== \"thead\" && tag !== \"tbody\" && tag !== \"tfoot\") continue;\n for (const row of collectDirectChildElements(child)) {\n if (row.tagName.toLowerCase() === \"tr\") rowElements.push(row);\n }\n }\n\n const rows = rowElements\n .map((rowEl) => {\n const inHead = rowEl.parentElement?.tagName.toLowerCase() === \"thead\";\n return collectDirectChildElements(rowEl)\n .filter((cell) => {\n const tag = cell.tagName.toLowerCase();\n return tag === \"th\" || tag === \"td\";\n })\n .map((cell) => ({\n text: normalizeHtmlText(cell.textContent ?? \"\"),\n header: inHead || cell.tagName.toLowerCase() === \"th\",\n }));\n })\n .filter((cells) => cells.length > 0);\n\n if (rows.length === 0) {\n return {\n kind: \"paragraph\",\n text: \"(empty table)\",\n color: ctx.theme.semantic.frameMuted,\n };\n }\n\n const first = rows[0]!;\n const hasHeader = first.some((cell) => cell.header);\n const headers = hasHeader\n ? first.map((cell, index) => cell.text || `col_${index + 1}`)\n : first.map((_, index) => `col_${index + 1}`);\n const bodyRows = rows\n .slice(hasHeader ? 1 : 0)\n .map((row) => headers.map((_, index) => row[index]?.text ?? \"\"));\n\n return {\n kind: \"table\",\n headers,\n rows: bodyRows,\n headerColor:\n getColorAttr(el, ctx.theme, [\"header-color\"]) ??\n ctx.overrides?.tableHeader ??\n ctx.theme.markdown.tableHeader,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.overrides?.tableBorder ??\n ctx.theme.markdown.tableBorder,\n };\n });\n\n htmlTagRegistry.set(\"button\", (el, ctx) => {\n const label = normalizeHtmlText(el.textContent ?? el.getAttribute(\"label\") ?? \"\");\n if (!label) return null;\n const id = controlActionId(el);\n return {\n kind: \"button\",\n label,\n color: getColorAttr(el, ctx.theme, [\"color\"]),\n bg: getColorAttr(el, ctx.theme, [\"bg\", \"background\"]),\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n });\n\n htmlTagRegistry.set(\"summary\", (el, ctx) => {\n const parent = el.parentElement;\n const open = parent instanceof HTMLDetailsElement ? parent.open : false;\n const id = controlActionId(parent ?? el);\n const label = compactLabel(normalizeHtmlText(el.textContent ?? \"\") || \"details\");\n const text = `${open ? \"[-]\" : \"[+]\"} ${label}`;\n return {\n kind: \"button\",\n label: text,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"details\", (el, ctx) => {\n const gap = parseIntegerAttrs(el, [\"gap\"]) ?? 1;\n const children = ctx.compileChildren(el);\n if ((el as HTMLDetailsElement).open) {\n return stack(children, gap);\n }\n const summary = children[0];\n return stack(summary ? [summary] : [], gap);\n });\n\n htmlTagRegistry.set(\"input\", (el, ctx) => {\n const input = el as HTMLInputElement;\n const type = (input.type || \"text\").toLowerCase();\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n\n if (type === \"hidden\") return null;\n\n if (type === \"checkbox\") {\n const fallback = input.name || input.id || \"checkbox\";\n const label = compactLabel(firstAttr(el, [\"label\", \"aria-label\"]) ?? fallback);\n const state = input.checked ? \"[x]\" : \"[ ]\";\n const text = label ? `${state} ${label}` : state;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n }\n\n if (type === \"radio\") {\n const fallback = input.name || input.id || \"radio\";\n const label = compactLabel(firstAttr(el, [\"label\", \"aria-label\"]) ?? fallback);\n const state = input.checked ? \"(*)\" : \"( )\";\n const text = label ? `${state} ${label}` : state;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n }\n\n if (type === \"button\" || type === \"submit\" || type === \"reset\") {\n const label = compactLabel(\n normalizeHtmlText(input.value || firstAttr(el, [\"label\", \"aria-label\"]) || type),\n );\n return {\n kind: \"button\",\n label,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text: label }),\n };\n }\n\n const value = compactLabel(input.value || input.placeholder || input.name || input.id || type);\n const text = type === \"file\" ? `[file] ${value}` : `[input] ${value}`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"textarea\", (el, ctx) => {\n const area = el as HTMLTextAreaElement;\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n const value = compactLabel(area.value || area.placeholder || area.name || area.id || \"textarea\");\n const text = `[textarea] ${value}`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"select\", (el, ctx) => {\n const select = el as HTMLSelectElement;\n const id = controlActionId(el);\n const color = getColorAttr(el, ctx.theme, [\"color\"]);\n const bg = getColorAttr(el, ctx.theme, [\"bg\", \"background\"]);\n const selected = select.selectedOptions[0] ?? select.options[select.selectedIndex] ?? select.options[0];\n const selectedText = compactLabel(selected?.textContent ?? \"\");\n const label = compactLabel(select.name || select.id || \"select\");\n const text = selectedText ? `${label}: ${selectedText}` : `${label}: (none)`;\n return {\n kind: \"button\",\n label: text,\n color,\n bg,\n action: ctx.actionFromElement(el, { type: \"action\", id, text }),\n };\n });\n\n htmlTagRegistry.set(\"progress\", (el, ctx) => compileBarNode(el, ctx));\n\n htmlTagRegistry.set(\"a\", (el, ctx) => {\n const text = normalizeHtmlText(el.textContent ?? \"\");\n if (!text) return null;\n const href = el.getAttribute(\"href\")?.trim();\n return {\n kind: \"link\",\n text,\n color: getColorAttr(el, ctx.theme, [\"color\"]) ?? ctx.theme.semantic.info,\n action: ctx.actionFromElement(el, { type: \"link\", href: href || undefined, text }),\n };\n });\n\n // -- Smart semantic inference --\n // <article title=\"...\"> → box\n htmlTagRegistry.set(\"article\", (el, ctx) => {\n const title = el.getAttribute(\"title\") ?? undefined;\n if (title) {\n return {\n kind: \"box\",\n title,\n borderColor:\n getColorAttr(el, ctx.theme, [\"border-color\"]) ??\n ctx.theme.semantic.border,\n gap: parseIntegerAttrs(el, [\"gap\"]) ?? 0,\n children: ctx.compileChildren(el),\n };\n }\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 1);\n });\n\n // <figure values=\"...\"> → chart; otherwise container\n htmlTagRegistry.set(\"figure\", (el, ctx) => {\n const data = parseNumericListAttrs(el, [\"values\"]);\n if (data) return compileChartNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 0);\n });\n\n // <footer left=\"...\" right=\"...\"> → statusbar; otherwise container\n htmlTagRegistry.set(\"footer\", (el, ctx) => {\n const left = firstAttr(el, [\"left\"]);\n const right = firstAttr(el, [\"right\"]);\n if (left !== undefined || right !== undefined) return compileStatusbarNode(el, ctx);\n return stack(ctx.compileChildren(el), parseIntegerAttrs(el, [\"gap\"]) ?? 1);\n });\n\n // <nav> → hstack (navigation is inherently horizontal)\n htmlTagRegistry.set(\"nav\", (el, ctx) => ({\n kind: \"hstack\",\n gap: parseIntegerAttrs(el, [\"gap\"]) ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\"]),\n children: ctx.compileChildren(el),\n }));\n}\n\nfunction createCompileContext(options: CompileHtmlToIROptions): {\n compileElement: (el: Element) => TermIRNode | null;\n} {\n const containerGap = options.containerGap ?? 1;\n let ctx!: HtmlCompileContext;\n\n const compileNode = (node: ChildNode): TermIRNode | null => {\n if (node.nodeType === 3) {\n const text = normalizeHtmlText(node.textContent ?? \"\");\n if (!text) return null;\n return {\n kind: \"paragraph\",\n text,\n color: options.overrides?.paragraph ?? options.theme.markdown.paragraph,\n };\n }\n if (node.nodeType !== 1) return null;\n return compileElement(node as Element);\n };\n\n const compileChildren = (el: Element): TermIRNode[] => {\n const out: TermIRNode[] = [];\n for (const node of Array.from(el.childNodes)) {\n const next = compileNode(node);\n if (next) out.push(next);\n }\n return out;\n };\n\n const actionFromElement = (el: Element, seed: ActionSeed): TermAction => ({\n ...seed,\n key: actionKeyFromSeed(el, seed),\n tag: el.tagName.toLowerCase(),\n dataset: parseDataAttrs(el),\n sourceElement: el,\n });\n\n const compileElement = (el: Element): TermIRNode | null => {\n const tag = el.tagName.toLowerCase();\n const compiler = htmlTagRegistry.get(tag);\n if (compiler) return compiler(el, ctx);\n\n const layout = resolveLayout(el);\n const cols = parseIntegerAttrs(el, [\"cols\"]) ?? layout.cols;\n const gap = parseIntegerAttrs(el, [\"gap\"]) ?? layout.gap;\n const children = compileChildren(el);\n const effectiveChildren = (() => {\n if (children.length > 0) return children;\n if (!(el instanceof HTMLElement)) return children;\n if (!el.shadowRoot || el.shadowRoot.mode !== \"open\") return children;\n const shadowChildren: TermIRNode[] = [];\n for (const node of Array.from(el.shadowRoot.childNodes)) {\n const next = compileNode(node);\n if (next) shadowChildren.push(next);\n }\n return shadowChildren.length > 0 ? shadowChildren : children;\n })();\n\n if (cols || layout.display === \"grid\") {\n return {\n kind: \"grid\",\n cols: cols ?? 2,\n gap: gap ?? 1,\n rowGap: parseIntegerAttrs(el, [\"row-gap\"]) ?? 0,\n children: effectiveChildren,\n };\n }\n\n if (layout.display === \"flex\" && layout.direction !== \"column\") {\n return {\n kind: \"hstack\",\n gap: gap ?? 1,\n widths: parseNumericListAttrs(el, [\"widths\"]),\n children: effectiveChildren,\n };\n }\n\n return stack(effectiveChildren, gap ?? containerGap);\n };\n\n ctx = {\n theme: options.theme,\n overrides: options.overrides,\n compileChildren,\n compileNode,\n actionFromElement,\n };\n\n return { compileElement };\n}\n\nregisterDefaultCompilers();\n\nexport function registerHtmlTagCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerDefaultCompilers();\n htmlTagRegistry.set(tag.trim().toLowerCase(), compiler);\n}\n\nexport function compileHtmlElementToIR(root: Element, options: CompileHtmlToIROptions): TermIRNode {\n registerDefaultCompilers();\n const { compileElement } = createCompileContext(options);\n return compileElement(root) ?? stack([], options.containerGap ?? 1);\n}\n\nexport function compileHtmlToIR(html: string, options: CompileHtmlToIROptions): TermIRNode {\n if (typeof DOMParser === \"undefined\") {\n throw new Error(\"DOMParser is unavailable; HTML compilation requires a DOM environment.\");\n }\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n return compileHtmlElementToIR(doc.body, options);\n}\n","import {\n blank,\n box,\n fromJsonNode,\n lines,\n table,\n vstack,\n type Column,\n type JsonNode,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport { isNumericValue, renderPrefixedText, wrapText } from \"./common\";\n\nconst JSON_NODE_TYPES = new Set([\n \"vstack\",\n \"hstack\",\n \"box\",\n \"lines\",\n \"separator\",\n \"blank\",\n \"table\",\n \"statusbar\",\n \"tabs\",\n \"bar\",\n \"text\",\n] as const satisfies readonly string[]);\n\nfunction isJsonNode(value: unknown): value is JsonNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" && JSON_NODE_TYPES.has(type as typeof JSON_NODE_TYPES extends Set<infer T> ? T : never);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction primitiveStyle(\n value: unknown,\n theme: Theme,\n): Omit<Exclude<Segment, string>, \"text\" | \"onClick\"> | undefined {\n if (typeof value === \"string\") return { color: theme.green };\n if (typeof value === \"number\") return { color: theme.yellow };\n if (typeof value === \"boolean\") {\n return { color: value ? theme.green : theme.red, bold: true };\n }\n if (value === null) return { color: theme.brightBlack, dim: true };\n return undefined;\n}\n\nfunction primitiveText(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === undefined) return \"undefined\";\n return String(value);\n}\n\nfunction isPrimitiveJsonValue(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isPrimitiveArrayValue(value: unknown): value is unknown[] {\n return Array.isArray(value) && value.every((item) => isPrimitiveJsonValue(item));\n}\n\nfunction segmentLength(segment: Segment): number {\n return typeof segment === \"string\" ? segment.length : segment.text.length;\n}\n\nfunction lineLength(line: Line): number {\n let total = 0;\n for (const segment of line) total += segmentLength(segment);\n return total;\n}\n\nfunction primitiveSegment(value: unknown, theme: Theme): Segment {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n return style ? { text, ...style } : text;\n}\n\nfunction indentLayout(layout: LayoutFn, indent: number): LayoutFn {\n return (w) => {\n if (indent <= 0) return layout(w);\n const pad = \" \".repeat(indent);\n if (w <= indent) return layout(w);\n return layout(w - indent).map((line) => [pad, ...line]);\n };\n}\n\nfunction sectionHeader(title: string, theme: Theme): LayoutFn {\n return (w) => {\n const label = ` ${title} `;\n const remaining = Math.max(0, w - label.length);\n return [[\n { text: label, color: theme.brightBlack, bold: true },\n { text: \"─\".repeat(remaining), color: theme.border },\n ]];\n };\n}\n\nfunction isShallowSectionValue(value: unknown): boolean {\n if (isRecord(value)) {\n const vals = Object.values(value);\n return vals.every((item) => isPrimitiveJsonValue(item) || isPrimitiveArrayValue(item));\n }\n if (Array.isArray(value)) return value.every((item) => isPrimitiveJsonValue(item));\n return isPrimitiveJsonValue(value);\n}\n\nfunction stackWithSpacing(children: LayoutFn[]): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1) return children[0]!;\n\n const layouts: LayoutFn[] = [];\n children.forEach((child, index) => {\n if (index > 0) layouts.push(blank());\n layouts.push(child);\n });\n return vstack(...layouts);\n}\n\nfunction renderPrimitiveValue(value: unknown, theme: Theme): LayoutFn {\n return (w) => {\n const text = primitiveText(value);\n const style = primitiveStyle(value, theme);\n const rows = text.split(\"\\n\");\n const out: Line[] = [];\n\n for (const row of rows) {\n const wrapped = wrapText(row, w);\n for (const chunk of wrapped) {\n out.push([style ? { text: chunk, ...style } : chunk]);\n }\n }\n\n return out.length > 0 ? out : [[{ text: \" \", dim: true }]];\n };\n}\n\nfunction renderStandalonePrimitiveArray(value: unknown[], theme: Theme): LayoutFn {\n return (w) => {\n if (value.length === 0) {\n return [[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]];\n }\n\n const out: Line[] = [];\n const digits = String(value.length).length;\n value.forEach((item, index) => {\n const prefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: prefix, color: theme.brightBlack },\n \" \".repeat(prefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n return out;\n };\n}\n\nfunction isTabularRecordArray(value: unknown[]): value is Record<string, unknown>[] {\n if (value.length === 0) return false;\n if (!value.every((item) => isRecord(item))) return false;\n\n const keys = Object.keys(value[0]!);\n if (keys.length < 2) return false;\n\n return value.every((row) => {\n const rowKeys = Object.keys(row);\n if (rowKeys.length !== keys.length) return false;\n if (!keys.every((key) => rowKeys.includes(key))) return false;\n return keys.every((key) => isPrimitiveJsonValue(row[key]));\n });\n}\n\nfunction renderTabularRecordArray(\n rows: Record<string, unknown>[],\n theme: Theme,\n): LayoutFn {\n const keys = Object.keys(rows[0] ?? {});\n\n const columns: Column[] = keys.map((key) => {\n const values = rows.map((row) => row[key]);\n const isBoolCol = values.every((v) => typeof v === \"boolean\");\n const isNumCol = values.every((v) => isNumericValue(v));\n\n return {\n key,\n title: key,\n align: isNumCol ? \"right\" : \"left\",\n headerColor: theme.cyan,\n color: isBoolCol\n ? (value: unknown) =>\n value === true ? theme.green : value === false ? theme.red : undefined\n : isNumCol\n ? theme.yellow\n : undefined,\n };\n });\n\n return table(columns, rows, {\n borderColor: theme.border,\n });\n}\n\nfunction renderArrayValue(value: unknown[], theme: Theme): LayoutFn {\n if (value.length === 0) {\n return lines([[{ text: \"(empty array)\", color: theme.brightBlack, dim: true }]]);\n }\n\n if (isTabularRecordArray(value)) {\n return renderTabularRecordArray(value, theme);\n }\n\n if (value.every((item) => isPrimitiveJsonValue(item))) {\n return renderStandalonePrimitiveArray(value, theme);\n }\n\n const children = value.map((item, index) =>\n renderJsonSection(`item ${index + 1}`, item, theme),\n );\n return stackWithSpacing(children);\n}\n\ntype PrimitiveRow =\n | { kind: \"primitive\"; key: string; value: unknown }\n | { kind: \"array\"; key: string; value: unknown[] };\n\nfunction renderPrimitiveRows(rows: PrimitiveRow[], theme: Theme): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const keyWidth = Math.max(...rows.map((row) => row.key.length), 0);\n\n for (const row of rows) {\n const keyPrefix = ` ${row.key.padEnd(keyWidth)}: `;\n\n if (row.kind === \"primitive\") {\n out.push(\n ...renderPrefixedText(\n primitiveText(row.value),\n w,\n { text: keyPrefix, color: theme.brightBlack },\n \" \".repeat(keyPrefix.length),\n primitiveStyle(row.value, theme),\n ),\n );\n continue;\n }\n\n if (row.value.length === 0) {\n out.push([\n { text: keyPrefix, color: theme.brightBlack },\n { text: \"(empty)\", color: theme.brightBlack, dim: true },\n ]);\n continue;\n }\n\n const inlineSegments: Segment[] = [];\n row.value.forEach((item, index) => {\n if (index > 0) inlineSegments.push({ text: \", \", color: theme.brightBlack });\n inlineSegments.push(primitiveSegment(item, theme));\n });\n const inlineLine: Line = [{ text: keyPrefix, color: theme.brightBlack }, ...inlineSegments];\n\n if (lineLength(inlineLine) <= w) {\n out.push(inlineLine);\n continue;\n }\n\n out.push([{ text: ` ${row.key}:`, color: theme.brightBlack }]);\n const digits = String(row.value.length).length;\n row.value.forEach((item, index) => {\n const listPrefix = ` ${String(index + 1).padStart(digits, \" \")}. `;\n out.push(\n ...renderPrefixedText(\n primitiveText(item),\n w,\n { text: listPrefix, color: theme.brightBlack },\n \" \".repeat(listPrefix.length),\n primitiveStyle(item, theme),\n ),\n );\n });\n }\n\n return out;\n };\n}\n\nfunction renderObjectValue(value: Record<string, unknown>, theme: Theme): LayoutFn {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return lines([[{ text: \"(empty object)\", color: theme.brightBlack, dim: true }]]);\n }\n\n const groups: LayoutFn[] = [];\n let pendingRows: PrimitiveRow[] = [];\n const flushRows = () => {\n if (pendingRows.length === 0) return;\n groups.push(renderPrimitiveRows(pendingRows, theme));\n pendingRows = [];\n };\n\n for (const [key, item] of entries) {\n if (isPrimitiveJsonValue(item)) {\n pendingRows.push({ kind: \"primitive\", key, value: item });\n continue;\n }\n\n if (isPrimitiveArrayValue(item)) {\n pendingRows.push({ kind: \"array\", key, value: item });\n continue;\n }\n\n flushRows();\n groups.push(renderJsonSection(key, item, theme));\n }\n\n flushRows();\n\n return stackWithSpacing(groups);\n}\n\nfunction renderJsonContent(value: unknown, theme: Theme): LayoutFn {\n if (isRecord(value)) return renderObjectValue(value, theme);\n if (Array.isArray(value)) return renderArrayValue(value, theme);\n return renderPrimitiveValue(value, theme);\n}\n\nfunction renderJsonSection(title: string, value: unknown, theme: Theme): LayoutFn {\n if (Array.isArray(value) && isTabularRecordArray(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n if (isShallowSectionValue(value)) {\n return vstack(sectionHeader(title, theme), indentLayout(renderJsonContent(value, theme), 1));\n }\n\n return box(renderJsonContent(value, theme), {\n title,\n borderColor: theme.border,\n });\n}\n\nexport function fromJson(\n value: unknown,\n opts?: { theme?: Theme; title?: string },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n let parsedValue = value;\n\n if (typeof value === \"string\") {\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n }\n\n if (isJsonNode(parsedValue)) return fromJsonNode(parsedValue);\n\n const content = renderJsonContent(parsedValue, theme);\n if (opts?.title) {\n return box(content, {\n title: opts.title,\n borderColor: theme.border,\n });\n }\n return content;\n}\n","import {\n blank,\n box,\n lines,\n separator,\n table,\n type Column,\n type LayoutFn,\n type Line,\n type Theme,\n} from \"../termui\";\nimport { dark } from \"../theme\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"./common\";\nimport type { MarkdownThemeOverrides } from \"./types\";\n\ntype MarkdownBlock =\n | { type: \"heading\"; level: number; text: string }\n | { type: \"paragraph\"; text: string }\n | { type: \"unordered-list\"; items: string[] }\n | { type: \"ordered-list\"; start: number; items: string[] }\n | { type: \"table\"; headers: string[]; rows: string[][] }\n | { type: \"code\"; language?: string; lines: string[] }\n | { type: \"quote\"; lines: string[] }\n | { type: \"separator\" };\n\nfunction isBlockStart(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (/^#{1,6}\\s+/.test(trimmed)) return true;\n if (/^```/.test(trimmed)) return true;\n if (/^>\\s?/.test(trimmed)) return true;\n if (/^[-*+]\\s+/.test(trimmed)) return true;\n if (/^\\d+\\.\\s+/.test(trimmed)) return true;\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n return /^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed);\n}\n\nfunction parsePipeCells(line: string): string[] | null {\n const trimmed = line.trim();\n if (!trimmed.includes(\"|\")) return null;\n\n let core = trimmed;\n if (core.startsWith(\"|\")) core = core.slice(1);\n if (core.endsWith(\"|\")) core = core.slice(0, -1);\n const cells = core.split(\"|\").map((cell) => cell.trim());\n return cells.length >= 2 ? cells : null;\n}\n\nfunction isTableDividerLine(line: string): boolean {\n const cells = parsePipeCells(line);\n if (!cells) return false;\n return cells.every((cell) => /^:?-{3,}:?$/.test(cell));\n}\n\nfunction parseMarkdown(markdown: string): MarkdownBlock[] {\n const rows = markdown.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: MarkdownBlock[] = [];\n\n let i = 0;\n while (i < rows.length) {\n const raw = rows[i] ?? \"\";\n const trimmed = raw.trim();\n\n if (!trimmed) {\n i += 1;\n continue;\n }\n\n const codeStart = trimmed.match(/^```([\\w+-]+)?\\s*$/);\n if (codeStart) {\n i += 1;\n const codeLines: string[] = [];\n while (i < rows.length && !(rows[i] ?? \"\").trim().startsWith(\"```\")) {\n codeLines.push((rows[i] ?? \"\").replace(/\\t/g, \" \"));\n i += 1;\n }\n if (i < rows.length) i += 1;\n blocks.push({\n type: \"code\",\n language: codeStart[1],\n lines: codeLines,\n });\n continue;\n }\n\n const heading = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (heading) {\n blocks.push({\n type: \"heading\",\n level: heading[1]!.length,\n text: heading[2]!.trim(),\n });\n i += 1;\n continue;\n }\n\n const collapsed = trimmed.replace(/\\s+/g, \"\");\n if (/^(-{3,}|\\*{3,}|_{3,})$/.test(collapsed)) {\n blocks.push({ type: \"separator\" });\n i += 1;\n continue;\n }\n\n const maybeHeaderCells = parsePipeCells(raw);\n const nextLine = rows[i + 1] ?? \"\";\n if (maybeHeaderCells && isTableDividerLine(nextLine)) {\n const headers = maybeHeaderCells;\n i += 2; // consume header + divider\n const dataRows: string[][] = [];\n while (i < rows.length) {\n const rowCells = parsePipeCells(rows[i] ?? \"\");\n if (!rowCells) break;\n const normalized = headers.map((_, idx) => rowCells[idx] ?? \"\");\n dataRows.push(normalized);\n i += 1;\n }\n blocks.push({ type: \"table\", headers, rows: dataRows });\n continue;\n }\n\n if (/^>\\s?/.test(trimmed)) {\n const quoteLines: string[] = [];\n while (i < rows.length) {\n const m = (rows[i] ?? \"\").match(/^\\s*>\\s?(.*)$/);\n if (!m) break;\n quoteLines.push(m[1]!);\n i += 1;\n }\n blocks.push({ type: \"quote\", lines: quoteLines });\n continue;\n }\n\n const ulStart = trimmed.match(/^[-*+]\\s+(.*)$/);\n if (ulStart) {\n const items: string[] = [];\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^[-*+]\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"unordered-list\", items });\n continue;\n }\n\n const olStart = trimmed.match(/^(\\d+)\\.\\s+(.*)$/);\n if (olStart) {\n const items: string[] = [];\n const start = Number(olStart[1]);\n while (i < rows.length) {\n const current = (rows[i] ?? \"\").trim();\n const item = current.match(/^\\d+\\.\\s+(.*)$/);\n if (item) {\n items.push(item[1]!.trim());\n i += 1;\n continue;\n }\n const continuation = (rows[i] ?? \"\").match(/^\\s{2,}(.*)$/);\n if (continuation && items.length > 0) {\n const last = items[items.length - 1] ?? \"\";\n items[items.length - 1] = (last + \" \" + continuation[1]!.trim()).trim();\n i += 1;\n continue;\n }\n break;\n }\n blocks.push({ type: \"ordered-list\", start, items });\n continue;\n }\n\n const paragraphRows: string[] = [trimmed];\n i += 1;\n while (i < rows.length) {\n const nextRaw = rows[i] ?? \"\";\n const next = (rows[i] ?? \"\").trim();\n const maybeTableStart =\n parsePipeCells(nextRaw) !== null && isTableDividerLine(rows[i + 1] ?? \"\");\n if (!next || isBlockStart(next) || maybeTableStart) break;\n paragraphRows.push(next);\n i += 1;\n }\n blocks.push({ type: \"paragraph\", text: paragraphRows.join(\" \") });\n }\n\n return blocks;\n}\n\nfunction renderMarkdownBlock(\n block: MarkdownBlock,\n theme: Theme,\n overrides?: MarkdownThemeOverrides,\n): LayoutFn {\n const md = theme.markdown;\n\n switch (block.type) {\n case \"heading\":\n return (w) =>\n renderPrefixedText(\n block.text,\n w,\n {\n text: \"#\".repeat(block.level) + \" \",\n color: overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(block.level + 1),\n {\n color: headingColor(block.level, theme, overrides),\n bold: block.level <= (overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n\n case \"paragraph\":\n return (w) =>\n wrapText(block.text, w).map((line) => [\n { text: line, color: overrides?.paragraph ?? md.paragraph },\n ]);\n\n case \"unordered-list\":\n return (w) => {\n const out: Line[] = [];\n for (const item of block.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out;\n };\n\n case \"ordered-list\":\n return (w) => {\n const out: Line[] = [];\n const lastNumber = block.start + block.items.length - 1;\n const digits = String(Math.max(block.start, lastNumber)).length;\n for (let i = 0; i < block.items.length; i++) {\n const n = String(block.start + i).padStart(digits, \" \");\n const prefix = {\n text: `${n}. `,\n color: overrides?.orderedMarker ?? md.orderedMarker,\n };\n out.push(...renderPrefixedText(block.items[i]!, w, prefix, \" \".repeat(digits + 2)));\n }\n return out;\n };\n\n case \"table\": {\n const keys = block.headers.map((_, i) => `c${i}`);\n const columns: Column[] = block.headers.map((header, i) => ({\n key: keys[i]!,\n title: header || `col_${i + 1}`,\n align: block.rows.every((row) => isNumericValue(row[i] ?? \"\")) ? \"right\" : \"left\",\n headerColor: overrides?.tableHeader ?? md.tableHeader,\n }));\n\n const data = block.rows.map((row) => {\n const out: Record<string, string> = {};\n keys.forEach((key, i) => {\n out[key] = row[i] ?? \"\";\n });\n return out;\n });\n\n return table(columns, data, {\n borderColor: overrides?.tableBorder ?? md.tableBorder,\n });\n }\n\n case \"quote\":\n return (w) => {\n const out: Line[] = [];\n for (const quoteLine of block.lines) {\n out.push(\n ...renderPrefixedText(\n quoteLine,\n w,\n { text: \"▌ \", color: overrides?.quoteMarker ?? md.quoteMarker },\n \" \",\n { color: overrides?.quoteText ?? md.quoteText, dim: true },\n ),\n );\n }\n return out;\n };\n\n case \"separator\":\n return separator(overrides?.separator ?? md.separator);\n\n case \"code\": {\n const codeSource = block.lines.join(\"\\n\");\n return box(\n lines(\n block.lines.length > 0\n ? block.lines.map((line) => [{ text: line || \" \", color: overrides?.codeText ?? md.codeText }])\n : [[{ text: \" \", color: overrides?.codeEmpty ?? md.codeEmpty, dim: true }]],\n ),\n {\n title: block.language ? `code:${block.language}` : \"code\",\n borderColor: overrides?.codeBorder ?? md.codeBorder,\n action: {\n label: \"cp\",\n onClick: () => navigator.clipboard.writeText(codeSource),\n color: theme.semantic.frameMuted,\n },\n },\n );\n }\n }\n}\n\nexport function fromMarkdown(\n markdown: string,\n opts?: { theme?: Theme; overrides?: MarkdownThemeOverrides },\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const blocks = parseMarkdown(markdown);\n const layouts = blocks.map((block) => renderMarkdownBlock(block, theme, opts?.overrides));\n\n return (w) => {\n if (layouts.length === 0) return blank()(w);\n\n const out: Line[] = [];\n layouts.forEach((layout, index) => {\n if (index > 0) out.push(...blank()(w));\n out.push(...layout(w));\n });\n return out;\n };\n}\n","import {\n bar as barText,\n blank,\n box,\n chart,\n divider,\n grid,\n hstack,\n lines,\n separator,\n statusbar,\n table,\n vstack,\n type Column,\n type LayoutFn,\n type Line,\n type Segment,\n type Theme,\n} from \"../termui\";\nimport { fromJson } from \"../document/json\";\nimport { fromMarkdown } from \"../document/markdown\";\nimport {\n headingColor,\n isNumericValue,\n renderPrefixedText,\n wrapText,\n} from \"../document/common\";\nimport type { MarkdownThemeOverrides } from \"../document/types\";\nimport type { TermAction, TermIRNode } from \"./ir\";\n\nexport type LayoutFromIROptions = {\n theme: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: TermAction) => void;\n};\n\nfunction stackLayouts(children: LayoutFn[], gap: number): LayoutFn {\n if (children.length === 0) return blank();\n if (children.length === 1 && gap <= 0) return children[0]!;\n if (gap <= 0) return vstack(...children);\n\n const expanded: LayoutFn[] = [];\n for (let i = 0; i < children.length; i++) {\n if (i > 0) {\n for (let j = 0; j < gap; j++) expanded.push(blank());\n }\n expanded.push(children[i]!);\n }\n return vstack(...expanded);\n}\n\nfunction paragraphLayout(text: string, color?: string): LayoutFn {\n return (w) => {\n const wrapped = wrapText(text, w);\n if (!color) return wrapped.map((line) => [line]);\n return wrapped.map((line) => [{ text: line, color }]);\n };\n}\n\nfunction headingLayout(\n node: Extract<TermIRNode, { kind: \"heading\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const md = options.theme.markdown;\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"#\".repeat(node.level) + \" \",\n color: node.markerColor ?? options.overrides?.headingMarker ?? md.headingMarker,\n },\n \" \".repeat(node.level + 1),\n {\n color: headingColor(node.level, options.theme, options.overrides),\n bold: node.level <= (options.overrides?.headingBoldMaxLevel ?? md.headingBoldMaxLevel),\n },\n );\n}\n\nfunction listLayout(\n node: Extract<TermIRNode, { kind: \"list\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) => {\n const out: Line[] = [];\n const md = options.theme.markdown;\n\n if (node.ordered) {\n const digits = String(node.start + node.items.length - 1).length;\n for (let index = 0; index < node.items.length; index++) {\n const item = node.items[index]!;\n const n = String(node.start + index).padStart(digits, \" \");\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: `${n}. `, color: options.overrides?.orderedMarker ?? md.orderedMarker },\n \" \".repeat(digits + 2),\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n }\n\n for (const item of node.items) {\n out.push(\n ...renderPrefixedText(\n item,\n w,\n { text: \" • \", color: options.overrides?.unorderedBullet ?? md.unorderedBullet },\n \" \",\n ),\n );\n }\n return out.length > 0 ? out : blank()(w);\n };\n}\n\nfunction blockquoteLayout(\n node: Extract<TermIRNode, { kind: \"blockquote\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return (w) =>\n renderPrefixedText(\n node.text,\n w,\n {\n text: \"▌ \",\n color: node.markerColor ?? options.overrides?.quoteMarker ?? options.theme.markdown.quoteMarker,\n },\n \" \",\n {\n color: node.color ?? options.overrides?.quoteText ?? options.theme.markdown.quoteText,\n dim: true,\n },\n );\n}\n\nfunction preLayout(\n node: Extract<TermIRNode, { kind: \"pre\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n return box(\n lines(\n node.lines.length > 0\n ? node.lines.map((line) => [{ text: line || \" \", color: node.textColor }])\n : [[{ text: \" \", color: node.emptyColor, dim: true }]],\n ),\n {\n title: node.language ? `code:${node.language}` : \"code\",\n borderColor: node.borderColor,\n },\n );\n}\n\nfunction tableLayout(node: Extract<TermIRNode, { kind: \"table\" }>): LayoutFn {\n if (node.headers.length === 0) return paragraphLayout(\"(empty table)\");\n\n const keys = node.headers.map((_, index) => `c${index}`);\n const columns: Column<Record<string, string>>[] = node.headers.map((header, index) => ({\n key: keys[index]!,\n title: header,\n align: node.rows.every((row) => isNumericValue(row[index] ?? \"\")) ? \"right\" : \"left\",\n headerColor: node.headerColor,\n }));\n\n const rows = node.rows.map((row) => {\n const data: Record<string, string> = {};\n for (let index = 0; index < keys.length; index++) {\n data[keys[index]!] = row[index] ?? \"\";\n }\n return data;\n });\n\n return table(columns, rows, { borderColor: node.borderColor });\n}\n\nfunction setNativeInputValue(input: HTMLInputElement, value: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, \"value\");\n if (!descriptor?.set) throw new Error(\"Missing HTMLInputElement.value setter\");\n descriptor.set.call(input, value);\n}\n\nfunction setNativeTextAreaValue(area: HTMLTextAreaElement, value: string): void {\n const descriptor = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, \"value\");\n if (!descriptor?.set) throw new Error(\"Missing HTMLTextAreaElement.value setter\");\n descriptor.set.call(area, value);\n}\n\nfunction dispatchInputAndChange(el: HTMLElement): void {\n el.dispatchEvent(new Event(\"input\", { bubbles: true, cancelable: true, composed: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true, cancelable: true, composed: true }));\n}\n\nfunction editInputValue(input: HTMLInputElement): void {\n const next = window.prompt(input.name || input.id || \"value\", input.value);\n if (next === null || next === input.value) return;\n setNativeInputValue(input, next);\n dispatchInputAndChange(input);\n}\n\nfunction editTextAreaValue(area: HTMLTextAreaElement): void {\n const next = window.prompt(area.name || area.id || \"value\", area.value);\n if (next === null || next === area.value) return;\n setNativeTextAreaValue(area, next);\n dispatchInputAndChange(area);\n}\n\nfunction cycleSelect(select: HTMLSelectElement): void {\n const enabledOptions = Array.from(select.options).filter((option) => !option.disabled);\n if (enabledOptions.length === 0) return;\n\n const current = select.selectedOptions[0];\n const currentIndex = current ? enabledOptions.indexOf(current) : -1;\n const nextOption = enabledOptions[(currentIndex + 1 + enabledOptions.length) % enabledOptions.length]!;\n select.value = nextOption.value;\n dispatchInputAndChange(select);\n}\n\nfunction activateSourceElement(sourceElement: Element): void {\n if (sourceElement instanceof HTMLInputElement) {\n if (sourceElement.disabled) return;\n const type = sourceElement.type.toLowerCase();\n if (\n type === \"checkbox\" ||\n type === \"radio\" ||\n type === \"button\" ||\n type === \"submit\" ||\n type === \"reset\" ||\n type === \"file\" ||\n type === \"color\" ||\n type === \"date\" ||\n type === \"datetime-local\" ||\n type === \"month\" ||\n type === \"time\" ||\n type === \"week\"\n ) {\n sourceElement.click();\n return;\n }\n editInputValue(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLTextAreaElement) {\n if (sourceElement.disabled) return;\n editTextAreaValue(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLSelectElement) {\n if (sourceElement.disabled) return;\n cycleSelect(sourceElement);\n return;\n }\n\n if (sourceElement instanceof HTMLDetailsElement) {\n sourceElement.open = !sourceElement.open;\n sourceElement.dispatchEvent(new Event(\"toggle\", { bubbles: true, cancelable: false, composed: true }));\n return;\n }\n\n if (sourceElement instanceof HTMLElement) {\n sourceElement.click();\n }\n}\n\nfunction actionHandler(action: TermAction, options: LayoutFromIROptions): (() => void) | undefined {\n if (!options.onAction && !action.sourceElement) return undefined;\n return () => {\n if (action.sourceElement) activateSourceElement(action.sourceElement);\n options.onAction?.(action);\n };\n}\n\nfunction buttonLayout(\n node: Extract<TermIRNode, { kind: \"button\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const color = node.color ?? options.theme.components.button.fg;\n const bg = node.bg ?? options.theme.components.button.bg;\n const segment: Segment = {\n text: `[ ${node.label} ]`,\n color,\n bg,\n interactionId: node.action.key,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction linkLayout(\n node: Extract<TermIRNode, { kind: \"link\" }>,\n options: LayoutFromIROptions,\n): LayoutFn {\n const segment: Segment = {\n text: node.text,\n color: node.color ?? options.theme.semantic.info,\n interactionId: node.action.key,\n onClick: actionHandler(node.action, options),\n };\n return lines([[segment]]);\n}\n\nfunction barLayout(node: Extract<TermIRNode, { kind: \"bar\" }>): LayoutFn {\n return lines((w) => {\n const max = Number.isFinite(node.max) && node.max > 0 ? node.max : 100;\n const value = Number.isFinite(node.value) ? node.value : 0;\n const label = node.label ? `${node.label} ` : \"\";\n const showPercent = node.showPercent !== false;\n const percent = Math.max(0, Math.min(100, Math.round((value / max) * 100)));\n const percentText = showPercent ? ` ${percent}%` : \"\";\n\n const available = Math.max(1, w - label.length - percentText.length);\n const barWidth = Math.max(1, Math.min(node.width ?? available, available));\n\n const line: Line = [];\n if (label) line.push(label);\n line.push({ text: barText(value, max, barWidth), color: node.color });\n if (percentText) line.push(percentText);\n return [line];\n });\n}\n\nfunction childrenToLayouts(children: TermIRNode[], options: LayoutFromIROptions): LayoutFn[] {\n const out: LayoutFn[] = [];\n for (const child of children) {\n out.push(layoutFromIR(child, options));\n }\n return out;\n}\n\nexport function layoutFromIR(node: TermIRNode, options: LayoutFromIROptions): LayoutFn {\n switch (node.kind) {\n case \"stack\":\n return stackLayouts(childrenToLayouts(node.children, options), node.gap);\n case \"hstack\":\n return hstack(childrenToLayouts(node.children, options), {\n gap: node.gap,\n widths: node.widths,\n });\n case \"grid\":\n return grid(childrenToLayouts(node.children, options), {\n cols: node.cols,\n gap: node.gap,\n rowGap: node.rowGap,\n });\n case \"box\": {\n const content = stackLayouts(childrenToLayouts(node.children, options), node.gap);\n return box(content, {\n title: node.title,\n borderColor: node.borderColor ?? options.theme.semantic.border,\n });\n }\n case \"blank\":\n return blank(node.lines);\n case \"separator\":\n return separator(node.color ?? options.theme.semantic.border, node.char);\n case \"divider\":\n return divider(node.label, {\n color: node.color ?? options.theme.semantic.border,\n char: node.char,\n labelColor: node.labelColor,\n });\n case \"paragraph\":\n return paragraphLayout(node.text, node.color);\n case \"heading\":\n return headingLayout(node, options);\n case \"list\":\n return listLayout(node, options);\n case \"blockquote\":\n return blockquoteLayout(node, options);\n case \"pre\":\n return preLayout(node, options);\n case \"markdown\":\n return fromMarkdown(node.value, {\n theme: options.theme,\n overrides: options.overrides,\n });\n case \"json\":\n return fromJson(node.value, {\n theme: options.theme,\n title: node.title,\n });\n case \"chart\":\n return chart(node.data, {\n height: node.height,\n color: node.color,\n axisColor: node.axisColor,\n fill: node.fill,\n });\n case \"statusbar\":\n return statusbar(\n [{ text: node.left }],\n [{ text: node.right }],\n {\n bg: node.bg,\n color: node.color,\n theme: options.theme,\n },\n );\n case \"bar\":\n return barLayout(node);\n case \"table\":\n return tableLayout(node);\n case \"button\":\n return buttonLayout(node, options);\n case \"link\":\n return linkLayout(node, options);\n default:\n return blank();\n }\n}\n","import { compileHtmlElementToIR, compileHtmlToIR, layoutFromIR, registerHtmlTagCompiler } from \"../core\";\nimport { dark } from \"../theme\";\nimport { type LayoutFn, type Theme } from \"../termui\";\nimport type { MarkdownThemeOverrides } from \"./types\";\nimport type { TermAction } from \"../core\";\nimport type { HtmlTagCompiler } from \"../core\";\n\nexport type HtmlAction = TermAction;\n\nexport type HtmlRenderOptions = {\n theme?: Theme;\n overrides?: MarkdownThemeOverrides;\n onAction?: (action: HtmlAction) => void;\n};\n\nexport type { HtmlTagCompiler };\n\nexport function registerHtmlCompiler(tag: string, compiler: HtmlTagCompiler): void {\n registerHtmlTagCompiler(tag, compiler);\n}\n\nexport function fromHtmlElement(\n root: Element,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n const ir = compileHtmlElementToIR(root, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n\nexport function fromHtml(\n html: string,\n opts?: HtmlRenderOptions,\n): LayoutFn {\n const theme = opts?.theme ?? dark;\n\n if (typeof DOMParser === \"undefined\") {\n throw new Error(\"DOMParser is unavailable; fromHtml requires a DOM environment.\");\n }\n\n const ir = compileHtmlToIR(html, {\n theme,\n overrides: opts?.overrides,\n });\n return layoutFromIR(ir, {\n theme,\n overrides: opts?.overrides,\n onAction: opts?.onAction,\n });\n}\n","import { fromHtml, fromHtmlElement } from \"./html\";\nimport { fromJson } from \"./json\";\nimport { fromMarkdown } from \"./markdown\";\nimport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nimport type { Theme } from \"../termui\";\n\nexport { fromMarkdown } from \"./markdown\";\nexport { fromHtml, fromHtmlElement };\nexport { registerHtmlCompiler } from \"./html\";\nexport { fromJson } from \"./json\";\nexport type { DocumentSource, MarkdownThemeOverrides } from \"./types\";\nexport type { HtmlAction, HtmlRenderOptions, HtmlTagCompiler } from \"./html\";\n\nexport function fromDocument(\n source: DocumentSource,\n opts?: {\n theme?: Theme;\n jsonTitle?: string;\n markdownOverrides?: MarkdownThemeOverrides;\n },\n) {\n if (source.format === \"markdown\") {\n return fromMarkdown(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n if (source.format === \"html\") {\n return fromHtml(source.value, {\n theme: opts?.theme,\n overrides: opts?.markdownOverrides,\n });\n }\n return fromJson(source.value, {\n theme: opts?.theme,\n title: opts?.jsonTitle,\n });\n}\n","import {\n getScrollRegionMeta,\n type Block,\n type Line,\n type Segment,\n type ScrollRegionMeta,\n type Theme,\n} from \"./termui\";\n\nconst ACTION_ID_ATTR = \"data-termui-action-id\";\n\ntype RenderUnit =\n | {\n kind: \"line\";\n line: Line;\n }\n | {\n kind: \"scroll\";\n lines: Line[];\n meta: ScrollRegionMeta;\n };\n\ntype RenderState = {\n actions: Map<string, () => void>;\n};\n\ntype ScrollRegionElement = HTMLDivElement & {\n __termuiScrollMeta?: ScrollRegionMeta;\n __termuiWheelBound?: true;\n};\n\nconst renderStateByRoot = new WeakMap<HTMLElement, RenderState>();\n\nfunction sameScrollMeta(a: ScrollRegionMeta, b: ScrollRegionMeta): boolean {\n return (\n a.onScroll === b.onScroll &&\n a.totalLines === b.totalLines &&\n a.maxHeight === b.maxHeight &&\n a.offset === b.offset\n );\n}\n\nfunction buildRenderUnits(block: Block): RenderUnit[] {\n const units: RenderUnit[] = [];\n let scrollLines: Line[] = [];\n let scrollMeta: ScrollRegionMeta | undefined;\n\n const flushScroll = (): void => {\n if (!scrollMeta || scrollLines.length === 0) return;\n units.push({ kind: \"scroll\", lines: scrollLines, meta: scrollMeta });\n scrollLines = [];\n scrollMeta = undefined;\n };\n\n for (const line of block) {\n const meta = getScrollRegionMeta(line);\n if (!meta) {\n flushScroll();\n units.push({ kind: \"line\", line });\n continue;\n }\n if (!scrollMeta || !sameScrollMeta(scrollMeta, meta)) {\n flushScroll();\n scrollMeta = meta;\n }\n scrollLines.push(line);\n }\n\n flushScroll();\n return units;\n}\n\nfunction interactiveElement(target: EventTarget | null, root: HTMLElement): HTMLElement | null {\n if (!(target instanceof Node)) return null;\n const element = target instanceof Element ? target : target.parentElement;\n if (!element) return null;\n const interactive = element.closest<HTMLElement>(`[${ACTION_ID_ATTR}]`);\n if (!interactive || !root.contains(interactive)) return null;\n return interactive;\n}\n\nfunction activateInteraction(state: RenderState, element: HTMLElement): void {\n const actionId = element.getAttribute(ACTION_ID_ATTR);\n if (!actionId) throw new Error(\"Interactive segment is missing an action id.\");\n const handler = state.actions.get(actionId);\n if (!handler) throw new Error(`Missing handler for action \"${actionId}\".`);\n handler();\n}\n\nfunction ensureRenderState(target: HTMLElement): RenderState {\n const existing = renderStateByRoot.get(target);\n if (existing) return existing;\n\n const state: RenderState = { actions: new Map() };\n\n target.addEventListener(\"pointerdown\", (event) => {\n if (event.button !== 0) return;\n const element = interactiveElement(event.target, target);\n if (!element) return;\n event.preventDefault();\n element.focus();\n activateInteraction(state, element);\n });\n\n target.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n const element =\n interactiveElement(event.target, target) ??\n interactiveElement(document.activeElement, target);\n if (!element) return;\n event.preventDefault();\n activateInteraction(state, element);\n });\n\n renderStateByRoot.set(target, state);\n return state;\n}\n\nfunction createOrReplaceChildDiv(\n parent: HTMLElement,\n index: number,\n className: string,\n): HTMLDivElement {\n const existing = parent.children[index];\n if (existing instanceof HTMLDivElement && existing.className === className) return existing;\n const div = document.createElement(\"div\");\n div.className = className;\n if (existing) parent.replaceChild(div, existing);\n else parent.appendChild(div);\n return div;\n}\n\nfunction applySegmentStyle(span: HTMLSpanElement, seg: Exclude<Segment, string>, theme: Theme): void {\n span.textContent = seg.text;\n if (seg.inverted) {\n span.style.color = seg.color ?? theme.semantic.inverseFg;\n span.style.backgroundColor = seg.bg ?? theme.semantic.inverseBg;\n } else {\n span.style.color = seg.color ?? \"\";\n span.style.backgroundColor = seg.bg ?? \"\";\n }\n span.style.fontWeight = seg.bold ? \"bold\" : \"\";\n span.style.opacity = seg.dim ? \"0.6\" : \"\";\n span.style.animation = seg.blink ? \"bk 1s step-end infinite\" : \"\";\n span.style.userSelect = seg.noSelect ? \"none\" : \"\";\n}\n\nfunction clearSegmentStyle(span: HTMLSpanElement, text: string): void {\n span.textContent = text;\n span.style.color = \"\";\n span.style.backgroundColor = \"\";\n span.style.fontWeight = \"\";\n span.style.opacity = \"\";\n span.style.animation = \"\";\n span.style.userSelect = \"\";\n}\n\nfunction patchSegment(\n span: HTMLSpanElement,\n seg: Segment,\n theme: Theme,\n actions: Map<string, () => void>,\n fallbackId: string,\n): void {\n if (typeof seg === \"string\") {\n clearSegmentStyle(span, seg);\n span.classList.remove(\"termui-clickable\");\n span.removeAttribute(\"role\");\n span.removeAttribute(\"tabindex\");\n span.removeAttribute(ACTION_ID_ATTR);\n return;\n }\n\n applySegmentStyle(span, seg, theme);\n\n if (!seg.onClick) {\n span.classList.remove(\"termui-clickable\");\n span.removeAttribute(\"role\");\n span.removeAttribute(\"tabindex\");\n span.removeAttribute(ACTION_ID_ATTR);\n return;\n }\n\n const actionId = seg.interactionId ?? fallbackId;\n if (actions.has(actionId)) {\n throw new Error(`Duplicate interaction id \"${actionId}\" in rendered block.`);\n }\n actions.set(actionId, seg.onClick);\n span.classList.add(\"termui-clickable\");\n span.setAttribute(\"role\", \"button\");\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(ACTION_ID_ATTR, actionId);\n}\n\nfunction patchLine(\n lineDiv: HTMLDivElement,\n line: Line,\n theme: Theme,\n actions: Map<string, () => void>,\n lineKey: string,\n): void {\n for (let segmentIndex = 0; segmentIndex < line.length; segmentIndex++) {\n const seg = line[segmentIndex]!;\n const current = lineDiv.children[segmentIndex];\n let span: HTMLSpanElement;\n if (current instanceof HTMLSpanElement) {\n span = current;\n } else {\n const next = document.createElement(\"span\");\n if (current) lineDiv.replaceChild(next, current);\n else lineDiv.appendChild(next);\n span = next;\n }\n patchSegment(span, seg, theme, actions, `${lineKey}:s${segmentIndex}`);\n }\n\n while (lineDiv.children.length > line.length) {\n lineDiv.lastElementChild?.remove();\n }\n}\n\nfunction bindScrollWheel(region: ScrollRegionElement): void {\n if (region.__termuiWheelBound) return;\n region.addEventListener(\n \"wheel\",\n (event) => {\n const meta = region.__termuiScrollMeta;\n if (!meta) throw new Error(\"Scroll region received wheel input without metadata.\");\n event.preventDefault();\n const step = event.deltaY > 0 ? 1 : -1;\n const maxOffset = Math.max(0, meta.totalLines - meta.maxHeight);\n const next = Math.min(maxOffset, Math.max(0, meta.offset + step));\n if (next !== meta.offset) meta.onScroll(next);\n },\n { passive: false },\n );\n region.__termuiWheelBound = true;\n}\n\nfunction patchScrollRegion(\n region: ScrollRegionElement,\n lines: Line[],\n meta: ScrollRegionMeta,\n theme: Theme,\n actions: Map<string, () => void>,\n regionKey: string,\n): void {\n region.__termuiScrollMeta = meta;\n bindScrollWheel(region);\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex]!;\n const lineDiv = createOrReplaceChildDiv(region, lineIndex, \"termui-line\");\n patchLine(lineDiv, line, theme, actions, `${regionKey}:l${lineIndex}`);\n }\n\n while (region.children.length > lines.length) {\n region.lastElementChild?.remove();\n }\n}\n\nfunction patchRoot(\n target: HTMLElement,\n units: RenderUnit[],\n theme: Theme,\n actions: Map<string, () => void>,\n): void {\n for (let unitIndex = 0; unitIndex < units.length; unitIndex++) {\n const unit = units[unitIndex]!;\n if (unit.kind === \"line\") {\n const lineDiv = createOrReplaceChildDiv(target, unitIndex, \"termui-line\");\n patchLine(lineDiv, unit.line, theme, actions, `u${unitIndex}:l0`);\n continue;\n }\n\n const region = createOrReplaceChildDiv(target, unitIndex, \"termui-scroll-region\") as ScrollRegionElement;\n patchScrollRegion(region, unit.lines, unit.meta, theme, actions, `u${unitIndex}`);\n }\n\n while (target.children.length > units.length) {\n target.lastElementChild?.remove();\n }\n}\n\nexport function renderTermBlock(target: HTMLElement, block: Block, theme: Theme): void {\n const state = ensureRenderState(target);\n const actions = new Map<string, () => void>();\n const units = buildRenderUnits(block);\n patchRoot(target, units, theme, actions);\n state.actions = actions;\n}\n","import { renderTermBlock } from \"./dom-render\";\nimport {\n fromHtml,\n fromHtmlElement,\n fromJson,\n fromMarkdown,\n type HtmlAction,\n} from \"./document\";\nimport { defaultThemeSpec, resolveTheme, themeToCssVars } from \"./theme\";\nimport type { LayoutFn, Theme, ThemeMode, ThemePreference } from \"./termui\";\n\nconst DEFAULT_COLS = 80;\nconst PROBE_SAMPLE = \"0\".repeat(120);\ntype SourceFormat = \"html\" | \"markdown\" | \"json\";\nconst TERM_UI_CSS = `\n:host {\n display: block;\n}\n@keyframes bk { 50% { opacity: 0 } }\n.termui-frame {\n --cell-h: 1.15em;\n --termui-bg: #0c0c0c;\n --termui-fg: #cccccc;\n font-family: \"Iosevka Term\", \"JetBrains Mono\", Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: inherit;\n line-height: var(--cell-h);\n letter-spacing: inherit;\n white-space: pre;\n overflow: clip;\n background: var(--termui-bg);\n color: var(--termui-fg);\n user-select: text;\n}\n.termui-root {\n white-space: pre;\n}\n.termui-line {\n line-height: var(--cell-h);\n min-height: var(--cell-h);\n}\n.termui-clickable {\n cursor: pointer;\n}\n.termui-clickable:focus-visible {\n outline: 1px solid var(--termui-info, currentColor);\n outline-offset: 1px;\n}\n.termui-scroll-region {\n overflow: hidden;\n}\n.termui-probe {\n font: inherit;\n white-space: pre;\n visibility: hidden;\n position: absolute;\n pointer-events: none;\n inset: -9999px auto auto -9999px;\n}\n`;\n\nexport type TermUIActionEvent = CustomEvent<HtmlAction>;\n\nfunction readSystemMode(): ThemeMode {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nfunction parseMode(raw: string | null): ThemePreference {\n if (!raw) return \"system\";\n const mode = raw.trim().toLowerCase();\n if (mode === \"light\" || mode === \"dark\" || mode === \"system\") return mode;\n throw new Error(`Invalid mode \"${raw}\". Expected \"light\", \"dark\", or \"system\".`);\n}\n\nfunction parseWidth(raw: string | null): number | undefined {\n if (!raw) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n throw new Error(`Invalid width \"${raw}\". Expected a positive integer.`);\n}\n\nfunction parseSourceFormat(raw: string | null): SourceFormat {\n if (!raw) return \"html\";\n const format = raw.trim().toLowerCase();\n if (format === \"markdown\" || format === \"json\" || format === \"html\") return format;\n throw new Error(`Invalid source-format \"${raw}\". Expected \"html\", \"markdown\", or \"json\".`);\n}\n\nfunction readScriptText(host: Element, types: string[]): string | undefined {\n for (const type of types) {\n const node = host.querySelector(`script[type=\"${type}\"]`);\n if (!node) continue;\n return node.textContent ?? \"\";\n }\n return undefined;\n}\n\nfunction parseJsonSource(raw: string): unknown {\n const text = raw.trim();\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Invalid JSON\";\n throw new Error(`Invalid JSON source: ${message}`);\n }\n}\n\nfunction actionEvent(action: HtmlAction): TermUIActionEvent {\n return new CustomEvent<HtmlAction>(\"termui-action\", {\n detail: action,\n bubbles: true,\n composed: true,\n });\n}\n\nexport class TermUIElement extends HTMLElement {\n static observedAttributes = [\"width\", \"mode\", \"source\", \"source-format\", \"json-title\"] as const;\n\n private readonly frame: HTMLDivElement;\n private readonly root: HTMLDivElement;\n private layoutOverride?: LayoutFn;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private observedShadowRoots = new WeakSet<ShadowRoot>();\n private mediaQuery?: MediaQueryList;\n private mediaQueryListener?: (event: MediaQueryListEvent) => void;\n private renderQueued = false;\n private renderFrameId: number | undefined;\n\n constructor() {\n super();\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = TERM_UI_CSS;\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"termui-frame\";\n this.root = document.createElement(\"div\");\n this.root.className = \"termui-root\";\n this.frame.appendChild(this.root);\n shadow.append(style, this.frame);\n }\n\n connectedCallback(): void {\n this.resizeObserver = new ResizeObserver(() => this.queueRender());\n this.resizeObserver.observe(this);\n\n this.mutationObserver = new MutationObserver(() => {\n this.observeOpenShadowRoots();\n this.queueRender();\n });\n this.mutationObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n this.observeOpenShadowRoots();\n\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n this.mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.mediaQueryListener = () => {\n if (parseMode(this.getAttribute(\"mode\")) === \"system\") this.queueRender();\n };\n this.mediaQuery.addEventListener(\"change\", this.mediaQueryListener);\n }\n\n this.queueRender();\n }\n\n disconnectedCallback(): void {\n if (this.renderFrameId !== undefined) {\n cancelAnimationFrame(this.renderFrameId);\n this.renderFrameId = undefined;\n this.renderQueued = false;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n this.observedShadowRoots = new WeakSet<ShadowRoot>();\n if (this.mediaQuery && this.mediaQueryListener) {\n this.mediaQuery.removeEventListener(\"change\", this.mediaQueryListener);\n }\n this.mediaQuery = undefined;\n this.mediaQueryListener = undefined;\n }\n\n attributeChangedCallback(): void {\n this.queueRender();\n }\n\n render(): void {\n this.queueRender();\n }\n\n get layout(): LayoutFn | undefined {\n return this.layoutOverride;\n }\n\n set layout(next: LayoutFn | null | undefined) {\n this.layoutOverride = next ?? undefined;\n this.queueRender();\n }\n\n private queueRender(): void {\n if (this.renderQueued) return;\n if (typeof requestAnimationFrame !== \"function\") {\n throw new Error(\"requestAnimationFrame is unavailable; term-ui rendering requires a browser frame loop.\");\n }\n this.renderQueued = true;\n this.renderFrameId = requestAnimationFrame(() => {\n this.renderQueued = false;\n this.renderFrameId = undefined;\n this.renderNow();\n });\n }\n\n private observeOpenShadowRoots(): void {\n if (!this.mutationObserver) return;\n const stack: Element[] = Array.from(this.children);\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n\n for (const child of Array.from(current.children)) {\n stack.push(child);\n }\n\n if (!(current instanceof HTMLElement)) continue;\n const shadowRoot = current.shadowRoot;\n if (!shadowRoot || shadowRoot.mode !== \"open\") continue;\n if (!this.observedShadowRoots.has(shadowRoot)) {\n this.mutationObserver.observe(shadowRoot, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n this.observedShadowRoots.add(shadowRoot);\n }\n\n for (const shadowChild of Array.from(shadowRoot.children)) {\n stack.push(shadowChild);\n }\n }\n }\n\n private onAction = (action: HtmlAction): void => {\n this.dispatchEvent(actionEvent(action));\n };\n\n private measureCharacterWidth(): number {\n const probe = document.createElement(\"span\");\n probe.className = \"termui-probe\";\n probe.textContent = PROBE_SAMPLE;\n this.frame.appendChild(probe);\n const width = probe.getBoundingClientRect().width / PROBE_SAMPLE.length;\n probe.remove();\n return width;\n }\n\n private resolveColumns(): number {\n const explicit = parseWidth(this.getAttribute(\"width\"));\n if (explicit) return explicit;\n\n const charWidth = this.measureCharacterWidth();\n if (!Number.isFinite(charWidth) || charWidth <= 0) return DEFAULT_COLS;\n\n const available = this.clientWidth;\n if (!Number.isFinite(available) || available <= 0) return DEFAULT_COLS;\n return Math.max(1, Math.floor(available / charWidth));\n }\n\n private resolveTheme(themeMode: ThemePreference): Theme {\n const theme = resolveTheme(defaultThemeSpec, themeMode, { systemMode: readSystemMode() });\n const cssVars = themeToCssVars(theme);\n for (const [name, value] of Object.entries(cssVars)) {\n this.frame.style.setProperty(name, value);\n }\n return theme;\n }\n\n private renderNow(): void {\n const mode = parseMode(this.getAttribute(\"mode\"));\n const sourceFormat = parseSourceFormat(this.getAttribute(\"source-format\"));\n const cols = this.resolveColumns();\n this.frame.style.width = `${cols}ch`;\n\n const theme = this.resolveTheme(mode);\n const source = this.getAttribute(\"source\");\n const layout = (() => {\n if (this.layoutOverride) return this.layoutOverride;\n\n if (source !== null) {\n if (sourceFormat === \"markdown\") {\n return fromMarkdown(source, { theme });\n }\n if (sourceFormat === \"json\") {\n return fromJson(parseJsonSource(source), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n return fromHtml(source, { theme, onAction: this.onAction });\n }\n\n if (sourceFormat === \"markdown\") {\n const scriptSource = readScriptText(this, [\"text/markdown\"]);\n const markdown = scriptSource ?? this.textContent ?? \"\";\n return fromMarkdown(markdown, { theme });\n }\n\n if (sourceFormat === \"json\") {\n const scriptSource = readScriptText(this, [\"application/json\"]);\n const jsonText = scriptSource ?? this.textContent ?? \"\";\n return fromJson(parseJsonSource(jsonText), {\n theme,\n title: this.getAttribute(\"json-title\") ?? undefined,\n });\n }\n\n return fromHtmlElement(this, { theme, onAction: this.onAction });\n })();\n const block = layout(cols);\n renderTermBlock(this.root, block, theme);\n }\n}\n\nexport const TERM_UI_TAG = \"term-ui\";\n\nexport function registerTermUIElement(tagName = TERM_UI_TAG): void {\n if (typeof customElements === \"undefined\") return;\n if (customElements.get(tagName)) return;\n customElements.define(tagName, TermUIElement);\n}\n"],"mappings":"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","names":["text","wrapText","isRecord","nums","lines","text","isRecord","pad","wrapText","wrapText","wrapText","lines","stack"]}