{"version":3,"sources":["../src/config/InkConfig.ts","../src/parser/tokenizer.ts","../src/types/ast.ts","../src/parser/parser.ts","../src/services/ParserService.ts","../src/renderer/sanitize-url.ts","../src/highlighter/index.ts","../src/renderer/transformer.ts","../src/types/errors.ts","../src/services/TransformerService.ts","../src/services/SanitizerService.ts","../src/services/InkService.ts","../src/services/live.ts","../src/parser/index.ts","../src/renderer/Ink.tsx","../src/styles/prose.ts","../src/styles/index.ts","../src/schemas/ast.ts","../src/index.ts"],"names":["Config","Effect","cells","endPos","Data","isAtEnd","peek","advance","Context","pipe","Layer","CreateElementNode","EFFUSE_NODE","jsx","make","match","define","computed","defineLayer","Schema","parseSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Config, Effect } from 'effect';\n\nexport const InkConfig = {\n\tsanitize: Config.boolean('INK_SANITIZE').pipe(Config.withDefault(true)),\n\tallowRawHtml: Config.boolean('INK_ALLOW_RAW_HTML').pipe(\n\t\tConfig.withDefault(false)\n\t),\n\tmaxNestingDepth: Config.number('INK_MAX_NESTING_DEPTH').pipe(\n\t\tConfig.withDefault(10)\n\t),\n\tdebug: Config.boolean('INK_DEBUG').pipe(Config.withDefault(false)),\n};\n\nexport type InkConfigType = {\n\tsanitize: boolean;\n\tallowRawHtml: boolean;\n\tmaxNestingDepth: number;\n\tdebug: boolean;\n};\n\nexport const defaultInkConfig: InkConfigType = {\n\tsanitize: true,\n\tallowRawHtml: false,\n\tmaxNestingDepth: 10,\n\tdebug: false,\n};\n\nexport const loadInkConfig = Effect.all({\n\tsanitize: InkConfig.sanitize,\n\tallowRawHtml: InkConfig.allowRawHtml,\n\tmaxNestingDepth: InkConfig.maxNestingDepth,\n\tdebug: InkConfig.debug,\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { ParseError } from '../types/errors.js';\nimport type { SourcePosition } from '../types/ast.js';\n\nexport type TokenType =\n\t| 'heading'\n\t| 'codeBlockStart'\n\t| 'codeBlockEnd'\n\t| 'blockquote'\n\t| 'listItem'\n\t| 'horizontalRule'\n\t| 'componentBlockStart'\n\t| 'componentBlockEnd'\n\t| 'componentInline'\n\t| 'slotMarker'\n\t| 'tableRow'\n\t| 'tableSeparator'\n\t| 'blankLine'\n\t| 'text'\n\t| 'inlineCode'\n\t| 'bold'\n\t| 'italic'\n\t| 'strikethrough'\n\t| 'link'\n\t| 'image'\n\t| 'lineBreak'\n\t| 'eof';\n\nexport interface Token {\n\treadonly type: TokenType;\n\treadonly value: string;\n\treadonly position: SourcePosition;\n\treadonly end: number;\n\treadonly meta?: Record<string, unknown>;\n}\n\ninterface TokenizerState {\n\treadonly input: string;\n\treadonly pos: number;\n\treadonly line: number;\n\treadonly column: number;\n}\n\nconst createState = (input: string): TokenizerState => ({\n\tinput,\n\tpos: 0,\n\tline: 1,\n\tcolumn: 1,\n});\n\nconst isAtEnd = (state: TokenizerState): boolean =>\n\tstate.pos >= state.input.length;\n\nconst peek = (state: TokenizerState, offset = 0): string =>\n\tstate.input[state.pos + offset] ?? '';\n\nconst peekSlice = (state: TokenizerState, length: number): string =>\n\tstate.input.slice(state.pos, state.pos + length);\n\nconst advance = (state: TokenizerState, count = 1): TokenizerState => {\n\tlet { pos, line, column } = state;\n\tfor (let i = 0; i < count && pos < state.input.length; i++) {\n\t\tif (state.input[pos] === '\\n') {\n\t\t\tline++;\n\t\t\tcolumn = 1;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t}\n\t\tpos++;\n\t}\n\treturn { ...state, pos, line, column };\n};\n\nconst currentPosition = (state: TokenizerState): SourcePosition => ({\n\tline: state.line,\n\tcolumn: state.column,\n\toffset: state.pos,\n});\n\nconst isLineStart = (state: TokenizerState): boolean =>\n\tstate.column === 1 || state.pos === 0;\n\nconst matchHeading = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\n\tlet level = 0;\n\twhile (peek(state, level) === '#' && level < 7) level++;\n\n\tif (level === 0 || level > 6) return null;\n\tif (peek(state, level) !== ' ') return null;\n\n\tlet endPos = state.pos + level + 1;\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tendPos++;\n\t}\n\n\tconst value = state.input.slice(state.pos + level + 1, endPos).trim();\n\n\treturn {\n\t\ttype: 'heading',\n\t\tvalue,\n\t\tposition: currentPosition(state),\n\t\tend: endPos,\n\t\tmeta: { level },\n\t};\n};\n\nconst matchCodeBlockStart = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peekSlice(state, 3) !== '```') return null;\n\n\tlet endPos = state.pos + 3;\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tendPos++;\n\t}\n\n\tconst language = state.input.slice(state.pos + 3, endPos).trim();\n\n\treturn {\n\t\ttype: 'codeBlockStart',\n\t\tvalue: language,\n\t\tposition: currentPosition(state),\n\t\tend: endPos + 1,\n\t\tmeta: { language: language || undefined },\n\t};\n};\n\nconst matchHorizontalRule = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\n\tconst chars = ['---', '***', '___'];\n\tfor (const pattern of chars) {\n\t\tif (peekSlice(state, 3) === pattern) {\n\t\t\tlet endPos = state.pos + 3;\n\t\t\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\t\t\tconst ch = state.input[endPos];\n\t\t\t\tif (ch !== ' ' && ch !== pattern[0]) return null;\n\t\t\t\tendPos++;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: 'horizontalRule',\n\t\t\t\tvalue: pattern,\n\t\t\t\tposition: currentPosition(state),\n\t\t\t\tend: endPos + 1,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n};\n\nconst matchBlockquote = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peek(state) !== '>') return null;\n\n\tlet endPos = state.pos + 1;\n\tif (peek(state, 1) === ' ') endPos++;\n\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tendPos++;\n\t}\n\n\tconst value = state.input.slice(\n\t\tstate.pos + (peek(state, 1) === ' ' ? 2 : 1),\n\t\tendPos\n\t);\n\n\treturn {\n\t\ttype: 'blockquote',\n\t\tvalue,\n\t\tposition: currentPosition(state),\n\t\tend: endPos + 1,\n\t};\n};\n\nconst matchListItem = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\n\tlet indent = 0;\n\tlet pos = state.pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\t(state.input[pos] === ' ' || state.input[pos] === '\\t')\n\t) {\n\t\tif (state.input[pos] === '\\t') {\n\t\t\tindent += 2;\n\t\t} else {\n\t\t\tindent++;\n\t\t}\n\t\tpos++;\n\t}\n\n\tconst depth = Math.floor(indent / 2);\n\n\tconst unorderedChars = ['-', '*', '+'];\n\tif (\n\t\tunorderedChars.includes(state.input[pos] ?? '') &&\n\t\tstate.input[pos + 1] === ' '\n\t) {\n\t\tlet endPos = pos + 2;\n\t\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\t\tendPos++;\n\t\t}\n\t\tconst value = state.input.slice(pos + 2, endPos);\n\n\t\tlet checked: boolean | undefined;\n\t\tlet actualValue = value;\n\t\tif (value.startsWith('[ ] ')) {\n\t\t\tchecked = false;\n\t\t\tactualValue = value.slice(4);\n\t\t} else if (value.startsWith('[x] ') || value.startsWith('[X] ')) {\n\t\t\tchecked = true;\n\t\t\tactualValue = value.slice(4);\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'listItem',\n\t\t\tvalue: actualValue,\n\t\t\tposition: currentPosition(state),\n\t\t\tend: endPos + 1,\n\t\t\tmeta: { ordered: false, checked, depth },\n\t\t};\n\t}\n\n\tlet numEnd = pos;\n\twhile (/\\d/.test(state.input[numEnd] ?? '')) {\n\t\tnumEnd++;\n\t}\n\tif (\n\t\tnumEnd > pos &&\n\t\tstate.input[numEnd] === '.' &&\n\t\tstate.input[numEnd + 1] === ' '\n\t) {\n\t\tconst start = parseInt(state.input.slice(pos, numEnd), 10);\n\t\tlet endPos = numEnd + 2;\n\t\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\t\tendPos++;\n\t\t}\n\t\tconst value = state.input.slice(numEnd + 2, endPos);\n\t\treturn {\n\t\t\ttype: 'listItem',\n\t\t\tvalue,\n\t\t\tposition: currentPosition(state),\n\t\t\tend: endPos + 1,\n\t\t\tmeta: { ordered: true, start, depth },\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst matchComponentBlockStart = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peekSlice(state, 2) !== '::') return null;\n\n\tlet pos = state.pos + 2;\n\n\tconst nameStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\t/[a-zA-Z0-9_]/.test(state.input[pos] ?? '')\n\t) {\n\t\tpos++;\n\t}\n\tconst name = state.input.slice(nameStart, pos);\n\tif (!name) return null;\n\n\tlet props = '{}';\n\tif (state.input[pos] === '{') {\n\t\tconst propsStart = pos;\n\t\tlet braceCount = 1;\n\t\tpos++;\n\t\twhile (pos < state.input.length && braceCount > 0) {\n\t\t\tif (state.input[pos] === '{') braceCount++;\n\t\t\telse if (state.input[pos] === '}') braceCount--;\n\t\t\tpos++;\n\t\t}\n\t\tprops = state.input.slice(propsStart, pos);\n\t}\n\n\tlet selfClosing = false;\n\tlet endPos = pos;\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tif (peekSlice({ ...state, pos: endPos } as TokenizerState, 2) === '::') {\n\t\t\tselfClosing = true;\n\t\t\tendPos += 2;\n\t\t\tbreak;\n\t\t}\n\t\tif (state.input[endPos] !== ' ') break;\n\t\tendPos++;\n\t}\n\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tendPos++;\n\t}\n\n\treturn {\n\t\ttype: selfClosing ? 'componentInline' : 'componentBlockStart',\n\t\tvalue: name,\n\t\tposition: currentPosition(state),\n\t\tend: endPos + 1,\n\t\tmeta: { name, props, selfClosing },\n\t};\n};\n\nconst matchComponentBlockEnd = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peekSlice(state, 2) !== '::') return null;\n\n\tlet pos = state.pos + 2;\n\twhile (pos < state.input.length && state.input[pos] === ' ') {\n\t\tpos++;\n\t}\n\tif (pos < state.input.length && state.input[pos] !== '\\n') {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\ttype: 'componentBlockEnd',\n\t\tvalue: '',\n\t\tposition: currentPosition(state),\n\t\tend: pos + 1,\n\t};\n};\n\nconst matchSlotMarker = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peek(state) !== '#') return null;\n\n\tlet pos = state.pos + 1;\n\tconst nameStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\t/[a-zA-Z0-9_]/.test(state.input[pos] ?? '')\n\t) {\n\t\tpos++;\n\t}\n\tconst name = state.input.slice(nameStart, pos);\n\tif (!name) return null;\n\n\twhile (pos < state.input.length && state.input[pos] !== '\\n') {\n\t\tpos++;\n\t}\n\n\treturn {\n\t\ttype: 'slotMarker',\n\t\tvalue: name,\n\t\tposition: currentPosition(state),\n\t\tend: pos + 1,\n\t};\n};\n\nconst matchComponentInline = (state: TokenizerState): Token | null => {\n\tif (peek(state) !== '<') return null;\n\n\tlet pos = state.pos + 1;\n\n\tconst nameStart = pos;\n\tif (!/[A-Z]/.test(state.input[pos] ?? '')) return null;\n\twhile (\n\t\tpos < state.input.length &&\n\t\t/[a-zA-Z0-9_]/.test(state.input[pos] ?? '')\n\t) {\n\t\tpos++;\n\t}\n\tconst name = state.input.slice(nameStart, pos);\n\tif (!name) return null;\n\n\twhile (pos < state.input.length && state.input[pos] === ' ') {\n\t\tpos++;\n\t}\n\n\tconst propsStart = pos;\n\twhile (pos < state.input.length) {\n\t\tif (peekSlice({ ...state, pos } as TokenizerState, 2) === '/>') {\n\t\t\tconst propsStr = state.input.slice(propsStart, pos).trim();\n\t\t\treturn {\n\t\t\t\ttype: 'componentInline',\n\t\t\t\tvalue: name,\n\t\t\t\tposition: currentPosition(state),\n\t\t\t\tend: pos + 2,\n\t\t\t\tmeta: { name, propsString: propsStr, selfClosing: true },\n\t\t\t};\n\t\t}\n\t\tif (state.input[pos] === '>') {\n\t\t\treturn null;\n\t\t}\n\t\tif (state.input[pos] === '\\n') return null;\n\t\tpos++;\n\t}\n\n\treturn null;\n};\n\nconst matchBlankLine = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peek(state) !== '\\n') return null;\n\n\treturn {\n\t\ttype: 'blankLine',\n\t\tvalue: '',\n\t\tposition: currentPosition(state),\n\t\tend: state.pos + 1,\n\t};\n};\n\nconst matchTableRow = (state: TokenizerState): Token | null => {\n\tif (!isLineStart(state)) return null;\n\tif (peek(state) !== '|') return null;\n\n\tlet endPos = state.pos;\n\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\tendPos++;\n\t}\n\n\tconst line = state.input.slice(state.pos, endPos);\n\n\tconst isSeparator = /^\\|?[\\s:|-]+\\|?$/.test(line) && line.includes('-');\n\n\tif (isSeparator) {\n\t\tconst cells = line.split('|').filter((c) => c.trim());\n\t\tconst alignments = cells.map((cell) => {\n\t\t\tconst trimmed = cell.trim();\n\t\t\tconst left = trimmed.startsWith(':');\n\t\t\tconst right = trimmed.endsWith(':');\n\t\t\tif (left && right) return 'center';\n\t\t\tif (right) return 'right';\n\t\t\tif (left) return 'left';\n\t\t\treturn null;\n\t\t});\n\n\t\treturn {\n\t\t\ttype: 'tableSeparator',\n\t\t\tvalue: line,\n\t\t\tposition: currentPosition(state),\n\t\t\tend: endPos + 1,\n\t\t\tmeta: { alignments },\n\t\t};\n\t}\n\n\tconst parts = line.split('|');\n\n\tlet cells = parts.slice(1);\n\tif (cells.length > 0 && cells[cells.length - 1]?.trim() === '') {\n\t\tcells = cells.slice(0, -1);\n\t}\n\tcells = cells.map((c) => c.trim());\n\n\treturn {\n\t\ttype: 'tableRow',\n\t\tvalue: line,\n\t\tposition: currentPosition(state),\n\t\tend: endPos + 1,\n\t\tmeta: { cells },\n\t};\n};\n\nconst matchInlineCode = (state: TokenizerState): Token | null => {\n\tif (peek(state) !== '`') return null;\n\tif (peek(state, 1) === '`') return null;\n\n\tlet pos = state.pos + 1;\n\twhile (\n\t\tpos < state.input.length &&\n\t\tstate.input[pos] !== '`' &&\n\t\tstate.input[pos] !== '\\n'\n\t) {\n\t\tpos++;\n\t}\n\n\tif (state.input[pos] !== '`') return null;\n\n\treturn {\n\t\ttype: 'inlineCode',\n\t\tvalue: state.input.slice(state.pos + 1, pos),\n\t\tposition: currentPosition(state),\n\t\tend: pos + 1,\n\t};\n};\n\nconst matchEmphasis = (state: TokenizerState): Token | null => {\n\tconst ch = peek(state);\n\n\tif ((ch === '*' || ch === '_') && peek(state, 1) === ch) {\n\t\tconst marker = ch + ch;\n\t\tlet pos = state.pos + 2;\n\t\twhile (pos < state.input.length - 1) {\n\t\t\tif (state.input.slice(pos, pos + 2) === marker) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'bold',\n\t\t\t\t\tvalue: state.input.slice(state.pos + 2, pos),\n\t\t\t\t\tposition: currentPosition(state),\n\t\t\t\t\tend: pos + 2,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (state.input[pos] === '\\n') break;\n\t\t\tpos++;\n\t\t}\n\t}\n\n\tif (ch === '*' || ch === '_') {\n\t\tlet pos = state.pos + 1;\n\t\twhile (pos < state.input.length) {\n\t\t\tif (state.input[pos] === ch && state.input[pos - 1] !== '\\\\') {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'italic',\n\t\t\t\t\tvalue: state.input.slice(state.pos + 1, pos),\n\t\t\t\t\tposition: currentPosition(state),\n\t\t\t\t\tend: pos + 1,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (state.input[pos] === '\\n') break;\n\t\t\tpos++;\n\t\t}\n\t}\n\n\tif (ch === '~' && peek(state, 1) === '~') {\n\t\tlet pos = state.pos + 2;\n\t\twhile (pos < state.input.length - 1) {\n\t\t\tif (state.input.slice(pos, pos + 2) === '~~') {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'strikethrough',\n\t\t\t\t\tvalue: state.input.slice(state.pos + 2, pos),\n\t\t\t\t\tposition: currentPosition(state),\n\t\t\t\t\tend: pos + 2,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (state.input[pos] === '\\n') break;\n\t\t\tpos++;\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst matchLink = (state: TokenizerState): Token | null => {\n\tif (peek(state) !== '[') return null;\n\n\tlet pos = state.pos + 1;\n\n\tconst textStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\tstate.input[pos] !== ']' &&\n\t\tstate.input[pos] !== '\\n'\n\t) {\n\t\tpos++;\n\t}\n\tif (state.input[pos] !== ']') return null;\n\tconst text = state.input.slice(textStart, pos);\n\tpos++;\n\n\tif (state.input[pos] !== '(') return null;\n\tpos++;\n\n\tconst urlStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\tstate.input[pos] !== ')' &&\n\t\tstate.input[pos] !== '\\n'\n\t) {\n\t\tpos++;\n\t}\n\tif (state.input[pos] !== ')') return null;\n\tconst url = state.input.slice(urlStart, pos);\n\tpos++;\n\n\treturn {\n\t\ttype: 'link',\n\t\tvalue: text,\n\t\tposition: currentPosition(state),\n\t\tend: pos,\n\t\tmeta: { url, text },\n\t};\n};\n\nconst matchImage = (state: TokenizerState): Token | null => {\n\tif (peek(state) !== '!' || peek(state, 1) !== '[') return null;\n\n\tlet pos = state.pos + 2;\n\n\tconst altStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\tstate.input[pos] !== ']' &&\n\t\tstate.input[pos] !== '\\n'\n\t) {\n\t\tpos++;\n\t}\n\tif (state.input[pos] !== ']') return null;\n\tconst alt = state.input.slice(altStart, pos);\n\tpos++;\n\n\tif (state.input[pos] !== '(') return null;\n\tpos++;\n\n\tconst urlStart = pos;\n\twhile (\n\t\tpos < state.input.length &&\n\t\tstate.input[pos] !== ')' &&\n\t\tstate.input[pos] !== '\\n'\n\t) {\n\t\tpos++;\n\t}\n\tif (state.input[pos] !== ')') return null;\n\tconst url = state.input.slice(urlStart, pos);\n\tpos++;\n\n\treturn {\n\t\ttype: 'image',\n\t\tvalue: alt,\n\t\tposition: currentPosition(state),\n\t\tend: pos,\n\t\tmeta: { url, alt },\n\t};\n};\n\nconst matchText = (state: TokenizerState): Token => {\n\tconst specialChars = [\n\t\t'*',\n\t\t'_',\n\t\t'~',\n\t\t'`',\n\t\t'[',\n\t\t'!',\n\t\t'<',\n\t\t'\\n',\n\t\t'#',\n\t\t'>',\n\t\t'-',\n\t\t':',\n\t\t'{',\n\t];\n\tlet pos = state.pos;\n\n\twhile (pos < state.input.length) {\n\t\tconst ch = state.input[pos];\n\t\tif (ch === undefined || specialChars.includes(ch)) break;\n\t\tpos++;\n\t}\n\n\tif (pos === state.pos) {\n\t\tpos = state.pos + 1;\n\t}\n\n\treturn {\n\t\ttype: 'text',\n\t\tvalue: state.input.slice(state.pos, pos),\n\t\tposition: currentPosition(state),\n\t\tend: pos,\n\t};\n};\n\nconst scanToken = (state: TokenizerState): Token => {\n\tif (isLineStart(state)) {\n\t\tconst blockMatchers = [\n\t\t\tmatchBlankLine,\n\t\t\tmatchHeading,\n\t\t\tmatchCodeBlockStart,\n\t\t\tmatchHorizontalRule,\n\t\t\tmatchBlockquote,\n\t\t\tmatchListItem,\n\t\t\tmatchTableRow,\n\t\t\tmatchComponentBlockEnd,\n\t\t\tmatchComponentBlockStart,\n\t\t\tmatchSlotMarker,\n\t\t];\n\n\t\tfor (const matcher of blockMatchers) {\n\t\t\tconst token = matcher(state);\n\t\t\tif (token) return token;\n\t\t}\n\t}\n\n\tconst inlineMatchers = [\n\t\tmatchInlineCode,\n\t\tmatchEmphasis,\n\t\tmatchImage,\n\t\tmatchLink,\n\t\tmatchComponentInline,\n\t];\n\n\tfor (const matcher of inlineMatchers) {\n\t\tconst token = matcher(state);\n\t\tif (token) return token;\n\t}\n\n\treturn matchText(state);\n};\n\n// Convert markdown input to token stream\nexport const tokenize = (input: string): Effect.Effect<Token[], ParseError> =>\n\tEffect.sync(() => {\n\t\tconst tokens: Token[] = [];\n\t\tlet state = createState(input);\n\t\tlet inCodeBlock = false;\n\n\t\twhile (!isAtEnd(state)) {\n\t\t\tif (inCodeBlock) {\n\t\t\t\tif (isLineStart(state) && peekSlice(state, 3) === '```') {\n\t\t\t\t\tlet endPos = state.pos + 3;\n\t\t\t\t\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\t\t\t\t\tendPos++;\n\t\t\t\t\t}\n\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: 'codeBlockEnd',\n\t\t\t\t\t\tvalue: '```',\n\t\t\t\t\t\tposition: currentPosition(state),\n\t\t\t\t\t\tend: endPos + 1,\n\t\t\t\t\t});\n\t\t\t\t\tstate = advance(state, endPos + 1 - state.pos);\n\t\t\t\t\tinCodeBlock = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet endPos = state.pos;\n\t\t\t\twhile (endPos < state.input.length && state.input[endPos] !== '\\n') {\n\t\t\t\t\tendPos++;\n\t\t\t\t}\n\t\t\t\tif (endPos < state.input.length) endPos++;\n\n\t\t\t\ttokens.push({\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tvalue: state.input.slice(state.pos, endPos),\n\t\t\t\t\tposition: currentPosition(state),\n\t\t\t\t\tend: endPos,\n\t\t\t\t});\n\t\t\t\tstate = advance(state, endPos - state.pos);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst token = scanToken(state);\n\t\t\ttokens.push(token);\n\n\t\t\tif (token.type === 'codeBlockStart') {\n\t\t\t\tinCodeBlock = true;\n\t\t\t}\n\n\t\t\tstate = advance(state, token.end - state.pos);\n\t\t}\n\n\t\ttokens.push({\n\t\t\ttype: 'eof',\n\t\t\tvalue: '',\n\t\t\tposition: currentPosition(state),\n\t\t\tend: state.pos,\n\t\t});\n\n\t\treturn tokens;\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\nimport type { InkComponents } from '../renderer/transformer.js';\n\nexport interface SourcePosition {\n\treadonly line: number;\n\treadonly column: number;\n\treadonly offset: number;\n}\n\nexport interface SourceRange {\n\treadonly start: SourcePosition;\n\treadonly end: SourcePosition;\n}\n\ninterface BaseNodeFields {\n\treadonly position?: SourceRange;\n}\n\nexport type InlineNode = Data.TaggedEnum<{\n\tText: BaseNodeFields & { readonly value: string };\n\tInlineCode: BaseNodeFields & { readonly value: string };\n\tEmphasis: BaseNodeFields & {\n\t\treadonly style: 'italic' | 'bold' | 'strikethrough';\n\t\treadonly children: InlineNode[];\n\t};\n\tLink: BaseNodeFields & {\n\t\treadonly url: string;\n\t\treadonly title?: string;\n\t\treadonly children: InlineNode[];\n\t};\n\tImage: BaseNodeFields & {\n\t\treadonly url: string;\n\t\treadonly alt: string;\n\t\treadonly title?: string;\n\t};\n\tLineBreak: BaseNodeFields;\n\tInlineComponent: BaseNodeFields & {\n\t\treadonly name: string;\n\t\treadonly props: Record<string, unknown>;\n\t\treadonly children: MarkdownNode[];\n\t\treadonly slots: Record<string, MarkdownNode[]>;\n\t\treadonly selfClosing: boolean;\n\t};\n}>;\n\nconst InlineNodeEnum = Data.taggedEnum<InlineNode>();\n\nexport const {\n\tText: TextNode,\n\tInlineCode: InlineCodeNode,\n\tEmphasis: EmphasisNode,\n\tLink: LinkNode,\n\tImage: ImageNode,\n\tLineBreak: LineBreakNode,\n\tInlineComponent: InlineComponentNode,\n\t$is: InlineNode$is,\n\t$match: InlineNode$match,\n} = InlineNodeEnum;\n\nexport type TextNode = Extract<InlineNode, { _tag: 'Text' }>;\nexport type InlineCodeNode = Extract<InlineNode, { _tag: 'InlineCode' }>;\nexport type EmphasisNode = Extract<InlineNode, { _tag: 'Emphasis' }>;\nexport type LinkNode = Extract<InlineNode, { _tag: 'Link' }>;\nexport type ImageNode = Extract<InlineNode, { _tag: 'Image' }>;\nexport type LineBreakNode = Extract<InlineNode, { _tag: 'LineBreak' }>;\n\nexport type ListItemNode = {\n\treadonly _tag: 'ListItem';\n\treadonly position?: SourceRange;\n\treadonly checked?: boolean;\n\treadonly children: BlockNode[];\n};\n\nexport type TableRowNode = {\n\treadonly _tag: 'TableRow';\n\treadonly position?: SourceRange;\n\treadonly cells: TableCellNode[];\n};\n\nexport type TableCellNode = {\n\treadonly _tag: 'TableCell';\n\treadonly position?: SourceRange;\n\treadonly children: InlineNode[];\n};\n\nexport const ListItemNode = (\n\targs: Omit<ListItemNode, '_tag'>\n): ListItemNode => ({\n\t_tag: 'ListItem',\n\t...args,\n});\n\nexport const TableRowNode = (\n\targs: Omit<TableRowNode, '_tag'>\n): TableRowNode => ({\n\t_tag: 'TableRow',\n\t...args,\n});\n\nexport const TableCellNode = (\n\targs: Omit<TableCellNode, '_tag'>\n): TableCellNode => ({\n\t_tag: 'TableCell',\n\t...args,\n});\n\nexport type BlockNode = Data.TaggedEnum<{\n\tHeading: BaseNodeFields & {\n\t\treadonly level: 1 | 2 | 3 | 4 | 5 | 6;\n\t\treadonly children: InlineNode[];\n\t};\n\tParagraph: BaseNodeFields & { readonly children: InlineNode[] };\n\tCodeBlock: BaseNodeFields & {\n\t\treadonly language?: string;\n\t\treadonly code: string;\n\t};\n\tBlockquote: BaseNodeFields & { readonly children: BlockNode[] };\n\tList: BaseNodeFields & {\n\t\treadonly ordered: boolean;\n\t\treadonly start?: number;\n\t\treadonly children: ListItemNode[];\n\t};\n\tHorizontalRule: BaseNodeFields;\n\tTable: BaseNodeFields & {\n\t\treadonly header: TableRowNode;\n\t\treadonly rows: TableRowNode[];\n\t\treadonly alignments: ('left' | 'center' | 'right' | null)[];\n\t};\n\tComponent: BaseNodeFields & {\n\t\treadonly name: string;\n\t\treadonly props: Record<string, unknown>;\n\t\treadonly children: MarkdownNode[];\n\t\treadonly slots: Record<string, MarkdownNode[]>;\n\t\treadonly selfClosing: boolean;\n\t};\n}>;\n\nconst BlockNodeEnum = Data.taggedEnum<BlockNode>();\n\nexport const {\n\tHeading: HeadingNode,\n\tParagraph: ParagraphNode,\n\tCodeBlock: CodeBlockNode,\n\tBlockquote: BlockquoteNode,\n\tList: ListNode,\n\tHorizontalRule: HorizontalRuleNode,\n\tTable: TableNode,\n\tComponent: ComponentNode,\n\t$is: BlockNode$is,\n\t$match: BlockNode$match,\n} = BlockNodeEnum;\n\nexport type HeadingNode = Extract<BlockNode, { _tag: 'Heading' }>;\nexport type ParagraphNode = Extract<BlockNode, { _tag: 'Paragraph' }>;\nexport type CodeBlockNode = Extract<BlockNode, { _tag: 'CodeBlock' }>;\nexport type BlockquoteNode = Extract<BlockNode, { _tag: 'Blockquote' }>;\nexport type ListNode = Extract<BlockNode, { _tag: 'List' }>;\nexport type HorizontalRuleNode = Extract<BlockNode, { _tag: 'HorizontalRule' }>;\nexport type TableNode = Extract<BlockNode, { _tag: 'Table' }>;\nexport type ComponentNode = Extract<BlockNode, { _tag: 'Component' }>;\n\nexport type MarkdownNode =\n\t| BlockNode\n\t| InlineNode\n\t| ListItemNode\n\t| TableRowNode\n\t| TableCellNode;\n\nexport type DocumentNode = {\n\treadonly _tag: 'Document';\n\treadonly position?: SourceRange;\n\treadonly children: BlockNode[];\n};\n\nexport const DocumentNode = (\n\targs: Omit<DocumentNode, '_tag'>\n): DocumentNode => ({\n\t_tag: 'Document',\n\t...args,\n});\n\nexport interface InkProps {\n\treadonly [key: string]: unknown;\n\treadonly content: string | { readonly value: string };\n\treadonly components?: InkComponents;\n\treadonly class?: string;\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { Token, TokenType } from './tokenizer.js';\nimport type { ParseError } from '../types/errors.js';\nimport {\n\ttype BlockNode,\n\ttype InlineNode,\n\ttype DocumentNode,\n\ttype HeadingNode,\n\ttype ParagraphNode,\n\ttype CodeBlockNode,\n\ttype BlockquoteNode,\n\ttype ListNode,\n\ttype ListItemNode,\n\ttype HorizontalRuleNode,\n\ttype TableNode,\n\ttype TableRowNode,\n\tHeadingNode as CreateHeadingNode,\n\tParagraphNode as CreateParagraphNode,\n\tCodeBlockNode as CreateCodeBlockNode,\n\tBlockquoteNode as CreateBlockquoteNode,\n\tListNode as CreateListNode,\n\tHorizontalRuleNode as CreateHorizontalRuleNode,\n\tTableNode as CreateTableNode,\n\tComponentNode as CreateComponentNode,\n\tTextNode as CreateTextNode,\n\tInlineCodeNode as CreateInlineCodeNode,\n\tEmphasisNode as CreateEmphasisNode,\n\tLinkNode as CreateLinkNode,\n\tImageNode as CreateImageNode,\n\tInlineComponentNode as CreateInlineComponentNode,\n\tListItemNode as CreateListItemNode,\n\tTableRowNode as CreateTableRowNode,\n\tTableCellNode as CreateTableCellNode,\n\tDocumentNode as CreateDocumentNode,\n} from '../types/ast.js';\n\ninterface ParserState {\n\treadonly tokens: Token[];\n\tcurrent: number;\n}\n\nconst createParserState = (tokens: Token[]): ParserState => ({\n\ttokens,\n\tcurrent: 0,\n});\n\nconst isAtEnd = (state: ParserState): boolean => {\n\tconst token = state.tokens[state.current];\n\treturn !token || token.type === 'eof';\n};\n\nconst peek = (state: ParserState): Token | undefined =>\n\tstate.tokens[state.current];\n\nconst peekType = (state: ParserState): TokenType | undefined =>\n\tpeek(state)?.type;\n\nconst advance = (state: ParserState): Token | undefined => {\n\tif (!isAtEnd(state)) {\n\t\tstate.current++;\n\t}\n\treturn state.tokens[state.current - 1];\n};\n\nconst check = (state: ParserState, type: TokenType): boolean =>\n\tpeekType(state) === type;\n\nconst match = (state: ParserState, ...types: TokenType[]): boolean => {\n\tfor (const type of types) {\n\t\tif (check(state, type)) {\n\t\t\tadvance(state);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nconst parsePropsString = (propsStr: string): Record<string, unknown> => {\n\tif (!propsStr || propsStr === '{}') return {};\n\n\ttry {\n\t\tlet normalized = propsStr;\n\n\t\tif (normalized.startsWith('{') && normalized.endsWith('}')) {\n\t\t\tnormalized = normalized.slice(1, -1);\n\t\t}\n\n\t\tconst result: Record<string, unknown> = {};\n\t\tconst pairs = normalized\n\t\t\t.split(',')\n\t\t\t.map((s) => s.trim())\n\t\t\t.filter(Boolean);\n\n\t\tfor (const pair of pairs) {\n\t\t\tconst colonIdx = pair.indexOf(':');\n\t\t\tif (colonIdx === -1) continue;\n\n\t\t\tconst key = pair.slice(0, colonIdx).trim();\n\t\t\tconst value = pair.slice(colonIdx + 1).trim();\n\n\t\t\tif (value.startsWith('\"') && value.endsWith('\"')) {\n\t\t\t\tresult[key] = value.slice(1, -1);\n\t\t\t} else if (value.startsWith(\"'\") && value.endsWith(\"'\")) {\n\t\t\t\tresult[key] = value.slice(1, -1);\n\t\t\t} else if (value === 'true') {\n\t\t\t\tresult[key] = true;\n\t\t\t} else if (value === 'false') {\n\t\t\t\tresult[key] = false;\n\t\t\t} else if (value === 'null') {\n\t\t\t\tresult[key] = null;\n\t\t\t} else if (!isNaN(Number(value))) {\n\t\t\t\tresult[key] = Number(value);\n\t\t\t} else {\n\t\t\t\tresult[key] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} catch {\n\t\treturn {};\n\t}\n};\n\nconst parseAttributeProps = (propsStr: string): Record<string, unknown> => {\n\tif (!propsStr) return {};\n\n\tconst result: Record<string, unknown> = {};\n\tconst attrRegex = /(\\w+)=(?:\"([^\"]*)\"|{([^}]*)})/g;\n\tlet matchResult;\n\n\twhile ((matchResult = attrRegex.exec(propsStr)) !== null) {\n\t\tconst [, key, stringVal, exprVal] = matchResult;\n\t\tif (key) {\n\t\t\tif (stringVal !== undefined) {\n\t\t\t\tresult[key] = stringVal;\n\t\t\t} else if (exprVal !== undefined) {\n\t\t\t\tif (exprVal === 'true') result[key] = true;\n\t\t\t\telse if (exprVal === 'false') result[key] = false;\n\t\t\t\telse if (!isNaN(Number(exprVal))) result[key] = Number(exprVal);\n\t\t\t\telse result[key] = exprVal;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n};\n\nconst parseHeading = (state: ParserState): HeadingNode | null => {\n\tconst token = peek(state);\n\tif (!token || token.type !== 'heading') return null;\n\n\tadvance(state);\n\n\tconst level = (token.meta?.level as 1 | 2 | 3 | 4 | 5 | 6 | undefined) ?? 1;\n\tconst inlineNodes = parseInlineContent(token.value);\n\n\treturn CreateHeadingNode({\n\t\tlevel,\n\t\tchildren: inlineNodes,\n\t\tposition: {\n\t\t\tstart: token.position,\n\t\t\tend: { ...token.position, offset: token.end },\n\t\t},\n\t});\n};\n\nconst parseCodeBlock = (state: ParserState): CodeBlockNode | null => {\n\tconst startToken = peek(state);\n\tif (!startToken || startToken.type !== 'codeBlockStart') return null;\n\n\tadvance(state);\n\n\tconst codeLines: string[] = [];\n\n\twhile (!isAtEnd(state) && peekType(state) !== 'codeBlockEnd') {\n\t\tconst token = advance(state);\n\t\tif (token) {\n\t\t\tcodeLines.push(token.value);\n\t\t}\n\t}\n\n\tif (check(state, 'codeBlockEnd')) {\n\t\tadvance(state);\n\t}\n\n\tconst language = startToken.meta?.language as string | undefined;\n\n\treturn CreateCodeBlockNode({\n\t\t...(language && { language }),\n\t\tcode: codeLines.join(''),\n\t\tposition: {\n\t\t\tstart: startToken.position,\n\t\t\tend: peek(state)?.position ?? startToken.position,\n\t\t},\n\t});\n};\n\nconst parseBlockquote = (state: ParserState): BlockquoteNode | null => {\n\tconst token = peek(state);\n\tif (!token || token.type !== 'blockquote') return null;\n\n\tconst lines: string[] = [];\n\n\twhile (check(state, 'blockquote')) {\n\t\tconst t = advance(state);\n\t\tif (t) lines.push(t.value);\n\t}\n\n\tconst content = lines.join('\\n');\n\tconst children: BlockNode[] = [\n\t\tCreateParagraphNode({\n\t\t\tchildren: parseInlineContent(content),\n\t\t}),\n\t];\n\n\treturn CreateBlockquoteNode({\n\t\tchildren,\n\t\tposition: {\n\t\t\tstart: token.position,\n\t\t\tend: peek(state)?.position ?? token.position,\n\t\t},\n\t});\n};\n\nconst parseList = (state: ParserState): ListNode | null => {\n\tconst firstToken = peek(state);\n\tif (!firstToken || firstToken.type !== 'listItem') return null;\n\n\tconst parseListAtDepth = (targetDepth: number): ListNode | null => {\n\t\tconst startToken = peek(state);\n\t\tif (!startToken || startToken.type !== 'listItem') return null;\n\n\t\tconst tokenDepth = (startToken.meta?.depth as number | undefined) ?? 0;\n\t\tif (tokenDepth !== targetDepth) return null;\n\n\t\tconst ordered = (startToken.meta?.ordered as boolean | undefined) ?? false;\n\t\tconst start = startToken.meta?.start as number | undefined;\n\t\tconst items: ListItemNode[] = [];\n\n\t\twhile (check(state, 'listItem')) {\n\t\t\tconst token = peek(state);\n\t\t\tif (!token) break;\n\n\t\t\tconst currentDepth = (token.meta?.depth as number | undefined) ?? 0;\n\t\t\tconst itemOrdered = (token.meta?.ordered as boolean | undefined) ?? false;\n\n\t\t\tif (currentDepth < targetDepth) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (currentDepth > targetDepth) {\n\t\t\t\tconst nestedList = parseListAtDepth(currentDepth);\n\t\t\t\tif (nestedList && items.length > 0) {\n\t\t\t\t\tconst lastItem = items[items.length - 1];\n\t\t\t\t\tif (lastItem) {\n\t\t\t\t\t\tlastItem.children.push(nestedList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (itemOrdered !== ordered) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tadvance(state);\n\n\t\t\tconst checked = token.meta?.checked as boolean | undefined;\n\t\t\tconst itemNode = CreateListItemNode({\n\t\t\t\t...(checked !== undefined && { checked }),\n\t\t\t\tchildren: [\n\t\t\t\t\tCreateParagraphNode({\n\t\t\t\t\t\tchildren: parseInlineContent(token.value),\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t});\n\n\t\t\titems.push(itemNode);\n\t\t}\n\n\t\tif (items.length === 0) return null;\n\n\t\treturn CreateListNode({\n\t\t\tordered,\n\t\t\t...(ordered && start !== undefined && start !== 1 && { start }),\n\t\t\tchildren: items,\n\t\t\tposition: {\n\t\t\t\tstart: startToken.position,\n\t\t\t\tend: peek(state)?.position ?? startToken.position,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst firstDepth = (firstToken.meta?.depth as number | undefined) ?? 0;\n\treturn parseListAtDepth(firstDepth);\n};\n\nconst parseHorizontalRule = (state: ParserState): HorizontalRuleNode | null => {\n\tconst token = peek(state);\n\tif (!token || token.type !== 'horizontalRule') return null;\n\n\tadvance(state);\n\n\treturn CreateHorizontalRuleNode({\n\t\tposition: {\n\t\t\tstart: token.position,\n\t\t\tend: { ...token.position, offset: token.end },\n\t\t},\n\t});\n};\n\nconst parseComponent = (state: ParserState): BlockNode | null => {\n\tconst token = peek(state);\n\tif (!token) return null;\n\n\tif (token.type === 'componentInline') {\n\t\tadvance(state);\n\n\t\tconst name = (token.meta?.name as string | undefined) ?? token.value;\n\t\tconst propsStr =\n\t\t\t(token.meta?.props as string | undefined) ??\n\t\t\t(token.meta?.propsString as string | undefined) ??\n\t\t\t'{}';\n\t\tconst props = propsStr.includes('=')\n\t\t\t? parseAttributeProps(propsStr)\n\t\t\t: parsePropsString(propsStr);\n\n\t\treturn CreateComponentNode({\n\t\t\tname,\n\t\t\tprops,\n\t\t\tchildren: [],\n\t\t\tslots: {},\n\t\t\tselfClosing: true,\n\t\t\tposition: {\n\t\t\t\tstart: token.position,\n\t\t\t\tend: { ...token.position, offset: token.end },\n\t\t\t},\n\t\t});\n\t}\n\n\tif (token.type === 'componentBlockStart') {\n\t\tadvance(state);\n\n\t\tconst name = (token.meta?.name as string | undefined) ?? token.value;\n\t\tconst propsStr = (token.meta?.props as string | undefined) ?? '{}';\n\t\tconst props = parsePropsString(propsStr);\n\n\t\tconst children: BlockNode[] = [];\n\t\tconst slots: Record<string, BlockNode[]> = {};\n\t\tlet currentSlot: string | null = null;\n\n\t\twhile (!isAtEnd(state) && !check(state, 'componentBlockEnd')) {\n\t\t\tif (check(state, 'slotMarker')) {\n\t\t\t\tconst slotToken = advance(state);\n\t\t\t\tif (slotToken) {\n\t\t\t\t\tcurrentSlot = slotToken.value;\n\t\t\t\t\tslots[currentSlot] = [];\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst block = parseBlock(state);\n\t\t\tif (block) {\n\t\t\t\tif (currentSlot) {\n\t\t\t\t\tconst slotArr = slots[currentSlot];\n\t\t\t\t\tif (slotArr) slotArr.push(block);\n\t\t\t\t} else {\n\t\t\t\t\tchildren.push(block);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tadvance(state);\n\t\t\t}\n\t\t}\n\n\t\tif (check(state, 'componentBlockEnd')) {\n\t\t\tadvance(state);\n\t\t}\n\n\t\treturn CreateComponentNode({\n\t\t\tname,\n\t\t\tprops,\n\t\t\tchildren,\n\t\t\tslots,\n\t\t\tselfClosing: false,\n\t\t\tposition: {\n\t\t\t\tstart: token.position,\n\t\t\t\tend: peek(state)?.position ?? token.position,\n\t\t\t},\n\t\t});\n\t}\n\n\treturn null;\n};\n\nconst isBlockBreak = (tokenType: TokenType | undefined): boolean =>\n\ttokenType === 'heading' ||\n\ttokenType === 'codeBlockStart' ||\n\ttokenType === 'blockquote' ||\n\ttokenType === 'listItem' ||\n\ttokenType === 'horizontalRule' ||\n\ttokenType === 'componentBlockStart' ||\n\ttokenType === 'componentBlockEnd' ||\n\ttokenType === 'slotMarker' ||\n\ttokenType === 'blankLine';\n\nconst tokenToInlineNode = (token: Token): InlineNode | null => {\n\tswitch (token.type) {\n\t\tcase 'text':\n\t\t\treturn CreateTextNode({ value: token.value });\n\t\tcase 'bold':\n\t\t\treturn CreateEmphasisNode({\n\t\t\t\tstyle: 'bold',\n\t\t\t\tchildren: parseInlineContent(token.value),\n\t\t\t});\n\t\tcase 'italic':\n\t\t\treturn CreateEmphasisNode({\n\t\t\t\tstyle: 'italic',\n\t\t\t\tchildren: parseInlineContent(token.value),\n\t\t\t});\n\t\tcase 'strikethrough':\n\t\t\treturn CreateEmphasisNode({\n\t\t\t\tstyle: 'strikethrough',\n\t\t\t\tchildren: parseInlineContent(token.value),\n\t\t\t});\n\t\tcase 'inlineCode':\n\t\t\treturn CreateInlineCodeNode({ value: token.value });\n\t\tcase 'link':\n\t\t\treturn CreateLinkNode({\n\t\t\t\turl: (token.meta?.url as string | undefined) ?? '',\n\t\t\t\tchildren: parseInlineContent(token.value),\n\t\t\t});\n\t\tcase 'image':\n\t\t\treturn CreateImageNode({\n\t\t\t\turl: (token.meta?.url as string | undefined) ?? '',\n\t\t\t\talt: (token.meta?.alt as string | undefined) ?? token.value,\n\t\t\t});\n\t\tcase 'lineBreak':\n\t\t\treturn { _tag: 'LineBreak' } as InlineNode;\n\t\tcase 'componentInline': {\n\t\t\tconst name = (token.meta?.name as string | undefined) ?? token.value;\n\t\t\tconst propsStr = (token.meta?.propsString as string | undefined) ?? '';\n\t\t\tconst props = parseAttributeProps(propsStr);\n\t\t\treturn CreateInlineComponentNode({\n\t\t\t\tname,\n\t\t\t\tprops,\n\t\t\t\tchildren: [],\n\t\t\t\tslots: {},\n\t\t\t\tselfClosing: true,\n\t\t\t});\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nconst parseParagraph = (state: ParserState): ParagraphNode | null => {\n\tconst firstToken = peek(state);\n\tif (!firstToken) return null;\n\n\tconst children: InlineNode[] = [];\n\n\twhile (!isAtEnd(state)) {\n\t\tif (isBlockBreak(peekType(state))) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst token = advance(state);\n\t\tif (token) {\n\t\t\tconst node = tokenToInlineNode(token);\n\t\t\tif (node) {\n\t\t\t\tchildren.push(node);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (children.length === 0) return null;\n\n\treturn CreateParagraphNode({\n\t\tchildren,\n\t\tposition: {\n\t\t\tstart: firstToken.position,\n\t\t\tend: peek(state)?.position ?? firstToken.position,\n\t\t},\n\t});\n};\n\nconst parseInlineContent = (text: string): InlineNode[] => {\n\tconst nodes: InlineNode[] = [];\n\tlet pos = 0;\n\n\tconst pushText = (value: string) => {\n\t\tif (value) {\n\t\t\tconst last = nodes[nodes.length - 1];\n\t\t\tif (last?._tag === 'Text') {\n\t\t\t\tnodes[nodes.length - 1] = CreateTextNode({\n\t\t\t\t\tvalue: (last as { value: string }).value + value,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tnodes.push(CreateTextNode({ value }));\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (pos < text.length) {\n\t\tconst remaining = text.slice(pos);\n\n\t\tif (remaining.startsWith('`')) {\n\t\t\tconst endIdx = remaining.indexOf('`', 1);\n\t\t\tif (endIdx !== -1) {\n\t\t\t\tnodes.push(\n\t\t\t\t\tCreateInlineCodeNode({\n\t\t\t\t\t\tvalue: remaining.slice(1, endIdx),\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tpos += endIdx + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst boldMatch = remaining.match(/^(\\*\\*|__)(.+?)\\1/);\n\t\tif (boldMatch) {\n\t\t\tnodes.push(\n\t\t\t\tCreateEmphasisNode({\n\t\t\t\t\tstyle: 'bold',\n\t\t\t\t\tchildren: parseInlineContent(boldMatch[2] ?? ''),\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += boldMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst italicMatch = remaining.match(/^(\\*|_)([^*_]+?)\\1/);\n\t\tif (italicMatch) {\n\t\t\tnodes.push(\n\t\t\t\tCreateEmphasisNode({\n\t\t\t\t\tstyle: 'italic',\n\t\t\t\t\tchildren: parseInlineContent(italicMatch[2] ?? ''),\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += italicMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst strikeMatch = remaining.match(/^~~(.+?)~~/);\n\t\tif (strikeMatch) {\n\t\t\tnodes.push(\n\t\t\t\tCreateEmphasisNode({\n\t\t\t\t\tstyle: 'strikethrough',\n\t\t\t\t\tchildren: parseInlineContent(strikeMatch[1] ?? ''),\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += strikeMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst imageMatch = remaining.match(/^!\\[([^\\]]*)\\]\\(([^)]+)\\)/);\n\t\tif (imageMatch) {\n\t\t\tnodes.push(\n\t\t\t\tCreateImageNode({\n\t\t\t\t\talt: imageMatch[1] ?? '',\n\t\t\t\t\turl: imageMatch[2] ?? '',\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += imageMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst linkMatch = remaining.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\t\tif (linkMatch) {\n\t\t\tnodes.push(\n\t\t\t\tCreateLinkNode({\n\t\t\t\t\turl: linkMatch[2] ?? '',\n\t\t\t\t\tchildren: parseInlineContent(linkMatch[1] ?? ''),\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += linkMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst componentMatch = remaining.match(/^<([A-Z][a-zA-Z0-9_]*)([^>]*)\\/>/);\n\t\tif (componentMatch) {\n\t\t\tconst name = componentMatch[1] ?? '';\n\t\t\tconst propsStr = (componentMatch[2] ?? '').trim();\n\t\t\tconst props = parseAttributeProps(propsStr);\n\n\t\t\tnodes.push(\n\t\t\t\tCreateInlineComponentNode({\n\t\t\t\t\tname,\n\t\t\t\t\tprops,\n\t\t\t\t\tchildren: [],\n\t\t\t\t\tslots: {},\n\t\t\t\t\tselfClosing: true,\n\t\t\t\t})\n\t\t\t);\n\t\t\tpos += componentMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst textMatch = remaining.match(/^[^*_`~[!<]+/);\n\t\tif (textMatch) {\n\t\t\tpushText(textMatch[0]);\n\t\t\tpos += textMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tpushText(text[pos] ?? '');\n\t\tpos++;\n\t}\n\n\treturn nodes;\n};\n\nconst parseTable = (state: ParserState): TableNode | null => {\n\tconst firstToken = peek(state);\n\tif (!firstToken || firstToken.type !== 'tableRow') return null;\n\n\tconst headerToken = advance(state);\n\tif (!headerToken) return null;\n\n\tconst headerCells = (headerToken.meta?.cells as string[] | undefined) ?? [];\n\n\tif (!check(state, 'tableSeparator')) {\n\t\tstate.current--;\n\t\treturn null;\n\t}\n\n\tconst separatorToken = advance(state);\n\tconst alignments =\n\t\t(separatorToken?.meta?.alignments as\n\t\t\t| ('left' | 'center' | 'right' | null)[]\n\t\t\t| undefined) ?? [];\n\n\tconst rows: TableRowNode[] = [];\n\twhile (check(state, 'tableRow')) {\n\t\tconst rowToken = advance(state);\n\t\tif (!rowToken) break;\n\n\t\tconst cells = (rowToken.meta?.cells as string[] | undefined) ?? [];\n\t\trows.push(\n\t\t\tCreateTableRowNode({\n\t\t\t\tcells: cells.map((cellContent) =>\n\t\t\t\t\tCreateTableCellNode({\n\t\t\t\t\t\tchildren: parseInlineContent(cellContent),\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t})\n\t\t);\n\t}\n\n\tconst header = CreateTableRowNode({\n\t\tcells: headerCells.map((cellContent) =>\n\t\t\tCreateTableCellNode({\n\t\t\t\tchildren: parseInlineContent(cellContent),\n\t\t\t})\n\t\t),\n\t});\n\n\treturn CreateTableNode({\n\t\theader,\n\t\trows,\n\t\talignments,\n\t\tposition: {\n\t\t\tstart: firstToken.position,\n\t\t\tend: peek(state)?.position ?? firstToken.position,\n\t\t},\n\t});\n};\n\nconst parseBlock = (state: ParserState): BlockNode | null => {\n\twhile (match(state, 'blankLine')) {\n\t\tcontinue;\n\t}\n\n\tif (isAtEnd(state)) return null;\n\n\tconst parsers = [\n\t\tparseHeading,\n\t\tparseCodeBlock,\n\t\tparseHorizontalRule,\n\t\tparseBlockquote,\n\t\tparseList,\n\t\tparseTable,\n\t\tparseComponent,\n\t\tparseParagraph,\n\t];\n\n\tfor (const parser of parsers) {\n\t\tconst node = parser(state);\n\t\tif (node) return node;\n\t}\n\n\tadvance(state);\n\treturn null;\n};\n\nexport const parseTokens = (\n\ttokens: Token[]\n): Effect.Effect<DocumentNode, ParseError> =>\n\tEffect.sync(() => {\n\t\tconst state = createParserState(tokens);\n\t\tconst children: BlockNode[] = [];\n\n\t\twhile (!isAtEnd(state)) {\n\t\t\tconst block = parseBlock(state);\n\t\t\tif (block) {\n\t\t\t\tchildren.push(block);\n\t\t\t}\n\t\t}\n\n\t\treturn CreateDocumentNode({ children });\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Context, Layer, pipe } from 'effect';\nimport { loadInkConfig } from '../config/InkConfig.js';\nimport { tokenize, type Token } from '../parser/tokenizer.js';\nimport { parseTokens } from '../parser/parser.js';\nimport type { ParseError } from '../types/errors.js';\nimport type { DocumentNode, BlockNode, InlineNode } from '../types/ast.js';\n\nexport interface ParserServiceInterface {\n\treadonly tokenize: (input: string) => Effect.Effect<Token[], ParseError>;\n\treadonly parse: (tokens: Token[]) => Effect.Effect<DocumentNode, ParseError>;\n\treadonly parseMarkdown: (\n\t\tinput: string\n\t) => Effect.Effect<DocumentNode, ParseError>;\n}\n\nexport class ParserService extends Context.Tag('ink/ParserService')<\n\tParserService,\n\tParserServiceInterface\n>() {}\n\nconst make: ParserServiceInterface = {\n\ttokenize: (input: string) => tokenize(input),\n\n\tparse: (tokens: Token[]) => parseTokens(tokens),\n\n\tparseMarkdown: (input: string) =>\n\t\tpipe(tokenize(input), Effect.flatMap(parseTokens)),\n};\n\nexport const ParserServiceLive = Layer.succeed(ParserService, make);\n\nconst getMaxDepth = (node: DocumentNode | BlockNode | InlineNode): number => {\n\tif (!('children' in node) || !Array.isArray(node.children)) {\n\t\treturn 1;\n\t}\n\tlet max = 0;\n\tfor (const child of node.children as (BlockNode | InlineNode)[]) {\n\t\tmax = Math.max(max, getMaxDepth(child));\n\t}\n\treturn 1 + max;\n};\n\nexport const parseMarkdown = (\n\tinput: string\n): Effect.Effect<DocumentNode, ParseError, ParserService> =>\n\tEffect.gen(function* () {\n\t\tconst parser = yield* ParserService;\n\t\tconst config = yield* Effect.orDie(loadInkConfig);\n\t\tconst doc = yield* parser.parseMarkdown(input);\n\n\t\tif (config.maxNestingDepth > 0) {\n\t\t\tconst depth = getMaxDepth(doc);\n\t\t\tif (depth > config.maxNestingDepth) {\n\t\t\t\treturn yield* Effect.fail({\n\t\t\t\t\t_tag: 'ParseError',\n\t\t\t\t\tmessage: `Maximum nesting depth of ${String(config.maxNestingDepth)} exceeded (actual: ${String(depth)})`,\n\t\t\t\t\tline: 0,\n\t\t\t\t\tcolumn: 0,\n\t\t\t\t} as ParseError);\n\t\t\t}\n\t\t}\n\n\t\treturn doc;\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/** Value substituted for a URL that fails validation. */\nconst SAFE_FALLBACK = '#';\n\n/** Protocols permitted in a rendered href/src. */\nconst SAFE_PROTOCOLS = new Set([\n\t'http:',\n\t'https:',\n\t'mailto:',\n\t'tel:',\n\t'ftp:',\n]);\n\nexport interface SanitizeUrlOptions {\n\t/** Permit `data:image/*` URLs (except SVG). Enable only for image `src`. */\n\treadonly allowDataImages?: boolean;\n}\n\nconst SAFE_DATA_IMAGE = /^data:image\\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon|vnd\\.microsoft\\.icon)[;,]/i;\n\n/**\n * Decode HTML entities that could hide a dangerous scheme, then strip control\n * characters and whitespace that browsers ignore inside a protocol. This\n * defeats the entity/obfuscation bypasses (`javascript&#58;`, `java\\tscript:`)\n * that break naive `javascript:` string checks (CVE-2025-24981 class).\n */\nconst normalizeForProtocolCheck = (value: string): string => {\n\tconst decoded = value.replace(\n\t\t/&#(x?)([0-9a-f]+);?/gi,\n\t\t(_match, hex: string, digits: string) => {\n\t\t\tconst codePoint = Number.parseInt(digits, hex ? 16 : 10);\n\t\t\tif (!Number.isFinite(codePoint) || codePoint < 0 || codePoint > 0x10ffff) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn String.fromCodePoint(codePoint);\n\t\t\t} catch {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t);\n\n\t// Remove all control characters (incl. NUL and tab/newline) and every\n\t// Unicode whitespace character before comparing the protocol.\n\t// eslint-disable-next-line no-control-regex\n\treturn decoded.replace(/[\\u0000-\\u0020\\s]/g, '').toLowerCase();\n};\n\n/**\n * Returns a URL safe to place in a rendered `href`/`src`, or `#` when the\n * input carries a dangerous or unknown scheme.\n *\n * Relative URLs, anchors, and protocol-relative URLs are allowed. Absolute\n * URLs must use an explicitly safe protocol. Data URLs are rejected unless\n * `allowDataImages` is set and the media type is a raster image.\n */\nexport const sanitizeUrl = (\n\turl: string,\n\toptions: SanitizeUrlOptions = {}\n): string => {\n\tif (typeof url !== 'string') {\n\t\treturn SAFE_FALLBACK;\n\t}\n\n\tconst trimmed = url.trim();\n\tif (trimmed === '') {\n\t\treturn SAFE_FALLBACK;\n\t}\n\n\tconst normalized = normalizeForProtocolCheck(trimmed);\n\n\t// Explicitly reject known-dangerous data URLs regardless of options.\n\tif (normalized.startsWith('data:')) {\n\t\tif (options.allowDataImages && SAFE_DATA_IMAGE.test(trimmed)) {\n\t\t\treturn trimmed;\n\t\t}\n\t\treturn SAFE_FALLBACK;\n\t}\n\n\t// No scheme separator before the first path/query/fragment boundary means\n\t// the URL is relative, an anchor, or protocol-relative — all safe.\n\tconst schemeMatch = /^([a-z][a-z0-9+.-]*):/.exec(normalized);\n\tif (schemeMatch === null || schemeMatch[1] === undefined) {\n\t\treturn trimmed;\n\t}\n\n\tconst protocol = `${schemeMatch[1]}:`;\n\tif (SAFE_PROTOCOLS.has(protocol)) {\n\t\treturn trimmed;\n\t}\n\n\treturn SAFE_FALLBACK;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { EFFUSE_NODE, CreateElementNode, type EffuseChild } from '@effuse/core';\n\nexport type TokenType =\n\t| 'keyword'\n\t| 'string'\n\t| 'number'\n\t| 'comment'\n\t| 'function'\n\t| 'operator'\n\t| 'punctuation'\n\t| 'property'\n\t| 'class'\n\t| 'type'\n\t| 'variable'\n\t| 'tag'\n\t| 'attr-name'\n\t| 'attr-value'\n\t| 'selector'\n\t| 'text';\n\ninterface HighlightToken {\n\ttype: TokenType;\n\tvalue: string;\n}\n\nconst JS_KEYWORDS = new Set([\n\t'const',\n\t'let',\n\t'var',\n\t'function',\n\t'return',\n\t'if',\n\t'else',\n\t'for',\n\t'while',\n\t'do',\n\t'switch',\n\t'case',\n\t'break',\n\t'continue',\n\t'try',\n\t'catch',\n\t'finally',\n\t'throw',\n\t'new',\n\t'class',\n\t'extends',\n\t'import',\n\t'export',\n\t'from',\n\t'default',\n\t'async',\n\t'await',\n\t'yield',\n\t'typeof',\n\t'instanceof',\n\t'in',\n\t'of',\n\t'true',\n\t'false',\n\t'null',\n\t'undefined',\n\t'this',\n\t'super',\n\t'static',\n\t'public',\n\t'private',\n\t'protected',\n\t'readonly',\n\t'abstract',\n\t'interface',\n\t'type',\n\t'enum',\n\t'implements',\n\t'as',\n\t'is',\n\t'keyof',\n\t'infer',\n\t'never',\n\t'unknown',\n\t'any',\n\t'void',\n\t'string',\n\t'number',\n\t'boolean',\n\t'object',\n\t'symbol',\n\t'bigint',\n]);\n\nconst CSS_KEYWORDS = new Set([\n\t'important',\n\t'inherit',\n\t'initial',\n\t'unset',\n\t'none',\n\t'auto',\n\t'block',\n\t'inline',\n\t'flex',\n\t'grid',\n\t'absolute',\n\t'relative',\n\t'fixed',\n\t'sticky',\n\t'static',\n]);\n\nconst tokenizeJS = (code: string): HighlightToken[] => {\n\tconst tokens: HighlightToken[] = [];\n\tlet pos = 0;\n\n\twhile (pos < code.length) {\n\t\tconst remaining = code.slice(pos);\n\n\t\tif (remaining.startsWith('//')) {\n\t\t\tconst end = remaining.indexOf('\\n');\n\t\t\tconst value = end === -1 ? remaining : remaining.slice(0, end);\n\t\t\ttokens.push({ type: 'comment', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (remaining.startsWith('/*')) {\n\t\t\tconst end = remaining.indexOf('*/');\n\t\t\tconst value = end === -1 ? remaining : remaining.slice(0, end + 2);\n\t\t\ttokens.push({ type: 'comment', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst stringMatch = remaining.match(/^(['\"`])(?:[^\\\\]|\\\\.)*?\\1/);\n\t\tif (stringMatch) {\n\t\t\ttokens.push({ type: 'string', value: stringMatch[0] });\n\t\t\tpos += stringMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (remaining.startsWith('`')) {\n\t\t\tlet value = '`';\n\t\t\tlet i = 1;\n\t\t\twhile (i < remaining.length) {\n\t\t\t\tif (remaining[i] === '`' && remaining[i - 1] !== '\\\\') {\n\t\t\t\t\tvalue += '`';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvalue += remaining[i] ?? '';\n\t\t\t\ti++;\n\t\t\t}\n\t\t\ttokens.push({ type: 'string', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst numMatch = remaining.match(/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?/);\n\t\tif (numMatch) {\n\t\t\ttokens.push({ type: 'number', value: numMatch[0] });\n\t\t\tpos += numMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst identMatch = remaining.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*/);\n\t\tif (identMatch) {\n\t\t\tconst word = identMatch[0];\n\t\t\tif (JS_KEYWORDS.has(word)) {\n\t\t\t\ttokens.push({ type: 'keyword', value: word });\n\t\t\t} else if (/^[A-Z]/.test(word)) {\n\t\t\t\ttokens.push({ type: 'class', value: word });\n\t\t\t} else if (remaining.slice(word.length).trimStart().startsWith('(')) {\n\t\t\t\ttokens.push({ type: 'function', value: word });\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'variable', value: word });\n\t\t\t}\n\t\t\tpos += word.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst opMatch = remaining.match(\n\t\t\t/^(===|!==|==|!=|<=|>=|=>|&&|\\|\\||[+\\-*/%<>=!&|^~?:])/\n\t\t);\n\t\tif (opMatch) {\n\t\t\ttokens.push({ type: 'operator', value: opMatch[0] });\n\t\t\tpos += opMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst punctMatch = remaining.match(/^[{}[\\]();,.]/);\n\t\tif (punctMatch) {\n\t\t\ttokens.push({ type: 'punctuation', value: punctMatch[0] });\n\t\t\tpos += punctMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\ttokens.push({ type: 'text', value: remaining[0] ?? '' });\n\t\tpos++;\n\t}\n\n\treturn tokens;\n};\n\nconst tokenizeCSS = (code: string): HighlightToken[] => {\n\tconst tokens: HighlightToken[] = [];\n\tlet pos = 0;\n\n\twhile (pos < code.length) {\n\t\tconst remaining = code.slice(pos);\n\n\t\tif (remaining.startsWith('/*')) {\n\t\t\tconst end = remaining.indexOf('*/');\n\t\t\tconst value = end === -1 ? remaining : remaining.slice(0, end + 2);\n\t\t\ttokens.push({ type: 'comment', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst selectorMatch = remaining.match(/^[.#]?[a-zA-Z_-][a-zA-Z0-9_-]*/);\n\t\tif (selectorMatch && !remaining.startsWith(':')) {\n\t\t\tconst word = selectorMatch[0];\n\t\t\tif (CSS_KEYWORDS.has(word)) {\n\t\t\t\ttokens.push({ type: 'keyword', value: word });\n\t\t\t} else if (word.startsWith('.') || word.startsWith('#')) {\n\t\t\t\ttokens.push({ type: 'selector', value: word });\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'property', value: word });\n\t\t\t}\n\t\t\tpos += word.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst valueMatch = remaining.match(\n\t\t\t/^#[0-9a-fA-F]{3,8}|-?\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|deg|s|ms)?/\n\t\t);\n\t\tif (valueMatch) {\n\t\t\ttokens.push({ type: 'number', value: valueMatch[0] });\n\t\t\tpos += valueMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst stringMatch = remaining.match(/^(['\"])(?:[^\\\\]|\\\\.)*?\\1/);\n\t\tif (stringMatch) {\n\t\t\ttokens.push({ type: 'string', value: stringMatch[0] });\n\t\t\tpos += stringMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst punctMatch = remaining.match(/^[{}();:,]/);\n\t\tif (punctMatch) {\n\t\t\ttokens.push({ type: 'punctuation', value: punctMatch[0] });\n\t\t\tpos += punctMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\ttokens.push({ type: 'text', value: remaining[0] ?? '' });\n\t\tpos++;\n\t}\n\n\treturn tokens;\n};\n\nconst tokenizeHTML = (code: string): HighlightToken[] => {\n\tconst tokens: HighlightToken[] = [];\n\tlet pos = 0;\n\n\twhile (pos < code.length) {\n\t\tconst remaining = code.slice(pos);\n\n\t\tif (remaining.startsWith('<!--')) {\n\t\t\tconst end = remaining.indexOf('-->');\n\t\t\tconst value = end === -1 ? remaining : remaining.slice(0, end + 3);\n\t\t\ttokens.push({ type: 'comment', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tagMatch = remaining.match(/^<\\/?[a-zA-Z][a-zA-Z0-9]*/);\n\t\tif (tagMatch) {\n\t\t\ttokens.push({ type: 'tag', value: tagMatch[0] });\n\t\t\tpos += tagMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst attrMatch = remaining.match(/^[a-zA-Z_-][a-zA-Z0-9_-]*(?==)/);\n\t\tif (attrMatch) {\n\t\t\ttokens.push({ type: 'attr-name', value: attrMatch[0] });\n\t\t\tpos += attrMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst valueMatch = remaining.match(/^=[\"'][^\"']*[\"']/);\n\t\tif (valueMatch) {\n\t\t\ttokens.push({ type: 'attr-value', value: valueMatch[0] });\n\t\t\tpos += valueMatch[0].length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (remaining.startsWith('>') || remaining.startsWith('/>')) {\n\t\t\tconst value = remaining.startsWith('/>') ? '/>' : '>';\n\t\t\ttokens.push({ type: 'punctuation', value });\n\t\t\tpos += value.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\ttokens.push({ type: 'text', value: remaining[0] ?? '' });\n\t\tpos++;\n\t}\n\n\treturn tokens;\n};\n\nconst getTokenizer = (\n\tlanguage: string | undefined\n): ((code: string) => HighlightToken[]) => {\n\tswitch (language?.toLowerCase()) {\n\t\tcase 'javascript':\n\t\tcase 'js':\n\t\tcase 'typescript':\n\t\tcase 'ts':\n\t\tcase 'tsx':\n\t\tcase 'jsx':\n\t\t\treturn tokenizeJS;\n\t\tcase 'css':\n\t\tcase 'scss':\n\t\tcase 'less':\n\t\t\treturn tokenizeCSS;\n\t\tcase 'html':\n\t\tcase 'xml':\n\t\tcase 'svg':\n\t\t\treturn tokenizeHTML;\n\t\tdefault:\n\t\t\treturn tokenizeJS;\n\t}\n};\n\nconst tokenToClass = (type: TokenType): string => `ink-hl-${type}`;\n\nexport const highlight = (code: string, language?: string): EffuseChild[] => {\n\tconst tokenizer = getTokenizer(language);\n\tconst tokens = tokenizer(code);\n\n\treturn tokens.map((token) => {\n\t\tif (token.type === 'text') {\n\t\t\treturn token.value;\n\t\t}\n\n\t\treturn CreateElementNode({\n\t\t\t[EFFUSE_NODE]: true,\n\t\t\ttag: 'span',\n\t\t\tprops: { class: tokenToClass(token.type) },\n\t\t\tchildren: [token.value],\n\t\t});\n\t});\n};\n\nexport const highlightToString = (code: string, language?: string): string => {\n\tconst tokenizer = getTokenizer(language);\n\tconst tokens = tokenizer(code);\n\n\treturn tokens\n\t\t.map((token) => {\n\t\t\tif (token.type === 'text') {\n\t\t\t\treturn escapeHtml(token.value);\n\t\t\t}\n\t\t\treturn `<span class=\"${tokenToClass(token.type)}\">${escapeHtml(token.value)}</span>`;\n\t\t})\n\t\t.join('');\n};\n\nconst escapeHtml = (str: string): string =>\n\tstr\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {\n\tjsx,\n\tEFFUSE_NODE,\n\tCreateElementNode,\n\ttype EffuseChild,\n} from '@effuse/core';\nimport { sanitizeUrl } from './sanitize-url.js';\nimport type {\n\tBlockNode,\n\tInlineNode,\n\tHeadingNode,\n\tParagraphNode,\n\tCodeBlockNode,\n\tBlockquoteNode,\n\tListNode,\n\tListItemNode,\n\tHorizontalRuleNode,\n\tComponentNode,\n\tTextNode,\n\tInlineCodeNode,\n\tEmphasisNode,\n\tLinkNode,\n\tImageNode,\n\tDocumentNode,\n\tTableNode,\n} from '../types/ast.js';\nimport { highlight } from '../highlighter/index.js';\n\nexport type InkComponents = {\n\treadonly h1?: unknown;\n\treadonly h2?: unknown;\n\treadonly h3?: unknown;\n\treadonly h4?: unknown;\n\treadonly h5?: unknown;\n\treadonly h6?: unknown;\n\treadonly p?: unknown;\n\treadonly a?: unknown;\n\treadonly img?: unknown;\n\treadonly pre?: unknown;\n\treadonly code?: unknown;\n\treadonly blockquote?: unknown;\n\treadonly ul?: unknown;\n\treadonly ol?: unknown;\n\treadonly li?: unknown;\n\treadonly hr?: unknown;\n\treadonly table?: unknown;\n\treadonly thead?: unknown;\n\treadonly tbody?: unknown;\n\treadonly tr?: unknown;\n\treadonly th?: unknown;\n\treadonly td?: unknown;\n\treadonly strong?: unknown;\n\treadonly em?: unknown;\n\treadonly del?: unknown;\n\treadonly br?: unknown;\n\treadonly [key: string]: unknown;\n};\n\n/** Backward-compatible alias. Prefer `InkComponents` in new code. */\nexport type ComponentMap = InkComponents;\n\ninterface TransformContext {\n\treadonly headingIds: Map<string, number>;\n}\n\nconst resolveElement = (\n\ttag: string,\n\tprops: Record<string, unknown>,\n\tchildren: EffuseChild[],\n\tcomponents: InkComponents\n): EffuseChild => {\n\tconst override = components[tag];\n\tif (override) {\n\t\treturn jsx(override as string, { ...props, children });\n\t}\n\treturn CreateElementNode({\n\t\t[EFFUSE_NODE]: true,\n\t\ttag,\n\t\tprops,\n\t\tchildren,\n\t});\n};\n\nconst transformText = (node: TextNode): string => node.value;\n\nconst transformInlineCode = (\n\tnode: InlineCodeNode,\n\tcomponents: InkComponents\n): EffuseChild =>\n\tresolveElement(\n\t\t'code',\n\t\t{ class: 'ink-inline-code' },\n\t\t[node.value],\n\t\tcomponents\n\t);\n\nconst transformEmphasis = (\n\tnode: EmphasisNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tconst tag =\n\t\tnode.style === 'bold'\n\t\t\t? 'strong'\n\t\t\t: node.style === 'strikethrough'\n\t\t\t\t? 'del'\n\t\t\t\t: 'em';\n\n\treturn resolveElement(\n\t\ttag,\n\t\t{},\n\t\tnode.children.map((child) => transformInline(child, components, context)),\n\t\tcomponents\n\t);\n};\n\nconst transformLink = (\n\tnode: LinkNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild =>\n\tresolveElement(\n\t\t'a',\n\t\t{\n\t\t\thref: sanitizeUrl(node.url),\n\t\t\ttitle: node.title,\n\t\t\tclass: 'ink-link',\n\t\t},\n\t\tnode.children.map((child) => transformInline(child, components, context)),\n\t\tcomponents\n\t);\n\nconst transformImage = (\n\tnode: ImageNode,\n\tcomponents: InkComponents\n): EffuseChild =>\n\tresolveElement(\n\t\t'img',\n\t\t{\n\t\t\tsrc: sanitizeUrl(node.url, { allowDataImages: true }),\n\t\t\talt: node.alt,\n\t\t\ttitle: node.title,\n\t\t\tclass: 'ink-image',\n\t\t},\n\t\t[],\n\t\tcomponents\n\t);\n\nconst transformInline = (\n\tnode: InlineNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tswitch (node._tag) {\n\t\tcase 'Text':\n\t\t\treturn transformText(node);\n\t\tcase 'InlineCode':\n\t\t\treturn transformInlineCode(node, components);\n\t\tcase 'Emphasis':\n\t\t\treturn transformEmphasis(node, components, context);\n\t\tcase 'Link':\n\t\t\treturn transformLink(node, components, context);\n\t\tcase 'Image':\n\t\t\treturn transformImage(node, components);\n\t\tcase 'LineBreak':\n\t\t\treturn resolveElement('br', {}, [], components);\n\t\tcase 'InlineComponent':\n\t\t\treturn transformComponent(\n\t\t\t\tnode as unknown as ComponentNode,\n\t\t\t\tcomponents,\n\t\t\t\tcontext\n\t\t\t);\n\t\tdefault:\n\t\t\treturn '';\n\t}\n};\n\nconst generateHeadingId = (text: string, context: TransformContext): string => {\n\tlet id = text\n\t\t.toLowerCase()\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/[^\\p{L}\\p{N}-]/gu, '')\n\t\t.replace(/-+/g, '-')\n\t\t.replace(/^-|-$/g, '');\n\n\tif (!id) {\n\t\tid = 'section';\n\t}\n\n\tconst count = context.headingIds.get(id) ?? 0;\n\tcontext.headingIds.set(id, count + 1);\n\n\treturn count === 0 ? id : `${id}-${String(count)}`;\n};\n\nconst getHeadingText = (children: InlineNode[]): string => {\n\treturn children\n\t\t.map((child) => {\n\t\t\tif (child._tag === 'Text') return child.value;\n\t\t\tif (child._tag === 'InlineCode') return child.value;\n\t\t\tif ('children' in child)\n\t\t\t\treturn getHeadingText(child.children as InlineNode[]);\n\t\t\treturn '';\n\t\t})\n\t\t.join('');\n};\n\nconst transformHeading = (\n\tnode: HeadingNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tconst text = getHeadingText(node.children);\n\tconst id = generateHeadingId(text, context);\n\tconst tag = `h${String(node.level)}` as\n\t\t| 'h1'\n\t\t| 'h2'\n\t\t| 'h3'\n\t\t| 'h4'\n\t\t| 'h5'\n\t\t| 'h6';\n\n\treturn resolveElement(\n\t\ttag,\n\t\t{ class: `ink-${tag}`, id },\n\t\tnode.children.map((child) => transformInline(child, components, context)),\n\t\tcomponents\n\t);\n};\n\nconst transformParagraph = (\n\tnode: ParagraphNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild =>\n\tresolveElement(\n\t\t'p',\n\t\t{ class: 'ink-p' },\n\t\tnode.children.map((child) => transformInline(child, components, context)),\n\t\tcomponents\n\t);\n\nconst transformCodeBlock = (\n\tnode: CodeBlockNode,\n\tcomponents: InkComponents\n): EffuseChild => {\n\tconst codeChild = resolveElement(\n\t\t'code',\n\t\tnode.language ? { 'data-language': node.language } : {},\n\t\thighlight(node.code, node.language),\n\t\tcomponents\n\t);\n\n\treturn resolveElement(\n\t\t'pre',\n\t\t{\n\t\t\tclass: `ink-code-block${node.language ? ` language-${node.language}` : ''}`,\n\t\t},\n\t\t[codeChild],\n\t\tcomponents\n\t);\n};\n\nconst transformBlockquote = (\n\tnode: BlockquoteNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild =>\n\tresolveElement(\n\t\t'blockquote',\n\t\t{ class: 'ink-blockquote' },\n\t\tnode.children.map((child) => transformBlock(child, components, context)),\n\t\tcomponents\n\t);\n\nconst transformListItem = (\n\tnode: ListItemNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tconst isTaskItem = node.checked !== undefined;\n\n\tlet children: EffuseChild[];\n\tif (isTaskItem && node.children.length > 0) {\n\t\tchildren = node.children.flatMap((child) => {\n\t\t\tif (child._tag === 'Paragraph') {\n\t\t\t\treturn child.children.map((inline) =>\n\t\t\t\t\ttransformInline(inline, components, context)\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn [transformBlock(child, components, context)];\n\t\t});\n\t} else {\n\t\tchildren = node.children.map((child) =>\n\t\t\ttransformBlock(child, components, context)\n\t\t);\n\t}\n\n\tif (isTaskItem) {\n\t\tconst checkbox = resolveElement(\n\t\t\t'input',\n\t\t\t{\n\t\t\t\ttype: 'checkbox',\n\t\t\t\tchecked: node.checked,\n\t\t\t\tdisabled: true,\n\t\t\t\tclass: 'ink-task-checkbox',\n\t\t\t},\n\t\t\t[],\n\t\t\tcomponents\n\t\t);\n\n\t\tconst textSpan = resolveElement(\n\t\t\t'span',\n\t\t\t{ class: 'ink-task-text' },\n\t\t\tchildren,\n\t\t\tcomponents\n\t\t);\n\t\tchildren = [checkbox, textSpan];\n\t}\n\n\treturn resolveElement(\n\t\t'li',\n\t\t{ class: isTaskItem ? 'ink-task-item' : 'ink-list-item' },\n\t\tchildren,\n\t\tcomponents\n\t);\n};\n\nconst transformList = (\n\tnode: ListNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild =>\n\tresolveElement(\n\t\tnode.ordered ? 'ol' : 'ul',\n\t\t{\n\t\t\tclass: node.ordered ? 'ink-ol' : 'ink-ul',\n\t\t\tstart: node.ordered && node.start !== 1 ? node.start : undefined,\n\t\t},\n\t\tnode.children.map((item) =>\n\t\t\ttransformListItem(item, components, context)\n\t\t),\n\t\tcomponents\n\t);\n\nconst transformHorizontalRule = (\n\t_node: HorizontalRuleNode,\n\tcomponents: InkComponents\n): EffuseChild => resolveElement('hr', { class: 'ink-hr' }, [], components);\n\nconst transformComponent = (\n\tnode: ComponentNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tconst Component = components[node.name];\n\n\tif (!Component) {\n\t\treturn CreateElementNode({\n\t\t\t[EFFUSE_NODE]: true,\n\t\t\ttag: 'div',\n\t\t\tprops: {\n\t\t\t\tclass: 'ink-unknown-component',\n\t\t\t\t'data-component': node.name,\n\t\t\t},\n\t\t\tchildren: [`Unknown component: ${node.name}`],\n\t\t});\n\t}\n\n\tconst defaultSlotChildren = node.children.map((child) =>\n\t\ttransformBlock(child as BlockNode, components, context)\n\t);\n\n\tconst slots: Record<string, EffuseChild[]> = {};\n\tfor (const [slotName, slotNodes] of Object.entries(node.slots)) {\n\t\tslots[slotName] = slotNodes.map((child) =>\n\t\t\ttransformBlock(child as BlockNode, components, context)\n\t\t);\n\t}\n\n\tconst props = {\n\t\t...node.props,\n\t\tchildren: defaultSlotChildren.length > 0 ? defaultSlotChildren : undefined,\n\t\tslots: Object.keys(slots).length > 0 ? slots : undefined,\n\t};\n\n\treturn jsx(Component as unknown as string, props);\n};\n\nconst transformTable = (\n\tnode: TableNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tconst headerCells = node.header.cells.map((cell, i) => {\n\t\tconst align = node.alignments[i];\n\t\treturn resolveElement(\n\t\t\t'th',\n\t\t\t{\n\t\t\t\tclass: 'ink-th',\n\t\t\t\tstyle: align ? { textAlign: align } : undefined,\n\t\t\t},\n\t\t\tcell.children.map((child) =>\n\t\t\t\ttransformInline(child, components, context)\n\t\t\t),\n\t\t\tcomponents\n\t\t);\n\t});\n\n\tconst headerRow = resolveElement(\n\t\t'tr',\n\t\t{ class: 'ink-tr' },\n\t\theaderCells,\n\t\tcomponents\n\t);\n\n\tconst bodyRows = node.rows.map((row) => {\n\t\tconst cells = row.cells.map((cell, i) => {\n\t\t\tconst align = node.alignments[i];\n\t\t\treturn resolveElement(\n\t\t\t\t'td',\n\t\t\t\t{\n\t\t\t\t\tclass: 'ink-td',\n\t\t\t\t\tstyle: align ? { textAlign: align } : undefined,\n\t\t\t\t},\n\t\t\t\tcell.children.map((child) =>\n\t\t\t\t\ttransformInline(child, components, context)\n\t\t\t\t),\n\t\t\t\tcomponents\n\t\t\t);\n\t\t});\n\t\treturn resolveElement('tr', { class: 'ink-tr' }, cells, components);\n\t});\n\n\treturn resolveElement(\n\t\t'table',\n\t\t{ class: 'ink-table' },\n\t\t[\n\t\t\tresolveElement('thead', { class: 'ink-thead' }, [headerRow], components),\n\t\t\tresolveElement('tbody', { class: 'ink-tbody' }, bodyRows, components),\n\t\t],\n\t\tcomponents\n\t);\n};\n\nconst transformBlock = (\n\tnode: BlockNode,\n\tcomponents: InkComponents,\n\tcontext: TransformContext\n): EffuseChild => {\n\tswitch (node._tag) {\n\t\tcase 'Heading':\n\t\t\treturn transformHeading(node, components, context);\n\t\tcase 'Paragraph':\n\t\t\treturn transformParagraph(node, components, context);\n\t\tcase 'CodeBlock':\n\t\t\treturn transformCodeBlock(node, components);\n\t\tcase 'Blockquote':\n\t\t\treturn transformBlockquote(node, components, context);\n\t\tcase 'List':\n\t\t\treturn transformList(node, components, context);\n\t\tcase 'HorizontalRule':\n\t\t\treturn transformHorizontalRule(node, components);\n\t\tcase 'Table':\n\t\t\treturn transformTable(node, components, context);\n\t\tcase 'Component':\n\t\t\treturn transformComponent(node, components, context);\n\t\tdefault:\n\t\t\treturn '';\n\t}\n};\n\nexport const transformDocument = (\n\tdoc: DocumentNode,\n\tcomponents: InkComponents = {}\n): EffuseChild[] => {\n\tconst context: TransformContext = { headingIds: new Map() };\n\treturn doc.children.map((node) => transformBlock(node, components, context));\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport class ParseError extends Data.TaggedError('ParseError')<{\n\treadonly message: string;\n\treadonly line: number;\n\treadonly column: number;\n\treadonly source?: string;\n}> {}\n\nexport class ComponentNotFoundError extends Data.TaggedError(\n\t'ComponentNotFoundError'\n)<{\n\treadonly message: string;\n\treadonly componentName: string;\n\treadonly line?: number;\n}> {}\n\nexport class InvalidPropsError extends Data.TaggedError('InvalidPropsError')<{\n\treadonly message: string;\n\treadonly componentName: string;\n\treadonly invalidProps: readonly string[];\n}> {}\n\nexport class SanitizationError extends Data.TaggedError('SanitizationError')<{\n\treadonly message: string;\n\treadonly unsafeContent: string;\n}> {}\n\nexport class TransformError extends Data.TaggedError('TransformError')<{\n\treadonly message: string;\n\treadonly nodeType: string;\n\treadonly cause?: unknown;\n}> {}\n\nexport type InkError =\n\t| ParseError\n\t| ComponentNotFoundError\n\t| InvalidPropsError\n\t| SanitizationError\n\t| TransformError;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Context, Layer } from 'effect';\nimport type { EffuseChild } from '@effuse/core';\nimport {\n\ttransformDocument,\n\ttype InkComponents,\n} from '../renderer/transformer.js';\nimport { TransformError } from '../types/errors.js';\nimport type { DocumentNode } from '../types/ast.js';\n\nexport interface TransformerServiceInterface {\n\treadonly transform: (\n\t\tdoc: DocumentNode,\n\t\tcomponents: InkComponents\n\t) => Effect.Effect<EffuseChild[], TransformError>;\n}\n\nexport class TransformerService extends Context.Tag('ink/TransformerService')<\n\tTransformerService,\n\tTransformerServiceInterface\n>() {}\n\nconst make: TransformerServiceInterface = {\n\ttransform: (doc: DocumentNode, components: InkComponents) =>\n\t\tEffect.try({\n\t\t\ttry: () => transformDocument(doc, components),\n\t\t\tcatch: (error) =>\n\t\t\t\tnew TransformError({\n\t\t\t\t\tmessage: `Transformation failed: ${String(error)}`,\n\t\t\t\t\tnodeType: 'document',\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t}),\n};\n\nexport const TransformerServiceLive = Layer.succeed(TransformerService, make);\n\nexport const transformMarkdown = (\n\tdoc: DocumentNode,\n\tcomponents: InkComponents = {}\n): Effect.Effect<EffuseChild[], TransformError, TransformerService> =>\n\tEffect.gen(function* () {\n\t\tconst transformer = yield* TransformerService;\n\t\treturn yield* transformer.transform(doc, components);\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Context, Layer } from 'effect';\nimport { loadInkConfig } from '../config/InkConfig.js';\nimport type { SanitizationError } from '../types/errors.js';\n\nconst DANGEROUS_PATTERNS = [\n\t/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi,\n\t/<iframe\\b[^>]*>[\\s\\S]*?<\\/iframe>/gi,\n\t/<object\\b[^>]*>[\\s\\S]*?<\\/object>/gi,\n\t/<embed\\b[^>]*>/gi,\n\t/<link\\b[^>]*>/gi,\n\t/javascript:/gi,\n\t/data:text\\/html/gi,\n\t/on\\w+\\s*=/gi,\n];\n\nexport interface SanitizerServiceInterface {\n\treadonly sanitize: (\n\t\tcontent: string\n\t) => Effect.Effect<string, SanitizationError>;\n\treadonly isContentSafe: (content: string) => Effect.Effect<boolean>;\n}\n\nexport class SanitizerService extends Context.Tag('ink/SanitizerService')<\n\tSanitizerService,\n\tSanitizerServiceInterface\n>() {}\n\nconst containsDangerousContent = (content: string): string | null => {\n\tfor (const pattern of DANGEROUS_PATTERNS) {\n\t\tpattern.lastIndex = 0;\n\t\tconst match = pattern.exec(content);\n\t\tif (match) {\n\t\t\treturn match[0];\n\t\t}\n\t}\n\treturn null;\n};\n\nconst stripDangerousContent = (content: string): string => {\n\tlet result = content;\n\tfor (const pattern of DANGEROUS_PATTERNS) {\n\t\tresult = result.replace(pattern, '');\n\t}\n\treturn result;\n};\n\nconst make: SanitizerServiceInterface = {\n\tsanitize: (content: string) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst config = yield* Effect.orDie(loadInkConfig);\n\n\t\t\tif (!config.sanitize) {\n\t\t\t\treturn content;\n\t\t\t}\n\n\t\t\tconst dangerous = containsDangerousContent(content);\n\t\t\tif (dangerous) {\n\t\t\t\tconst sanitized = stripDangerousContent(content);\n\t\t\t\treturn sanitized;\n\t\t\t}\n\t\t\treturn content;\n\t\t}),\n\n\tisContentSafe: (content: string) =>\n\t\tEffect.succeed(containsDangerousContent(content) === null),\n};\n\nexport const SanitizerServiceLive = Layer.succeed(SanitizerService, make);\n\nexport const sanitizeContent = (\n\tcontent: string\n): Effect.Effect<string, SanitizationError, SanitizerService> =>\n\tEffect.gen(function* () {\n\t\tconst sanitizer = yield* SanitizerService;\n\t\treturn yield* sanitizer.sanitize(content);\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Context, Layer, pipe } from 'effect';\nimport type { EffuseChild } from '@effuse/core';\nimport type { InkComponents } from '../renderer/transformer.js';\nimport type { DocumentNode } from '../types/ast.js';\nimport type {\n\tParseError,\n\tTransformError,\n\tSanitizationError,\n} from '../types/errors.js';\nimport { type InkError } from '../types/errors.js';\nimport { ParserService, ParserServiceLive } from './ParserService.js';\nimport {\n\tTransformerService,\n\tTransformerServiceLive,\n} from './TransformerService.js';\nimport { SanitizerService, SanitizerServiceLive } from './SanitizerService.js';\n\nexport interface InkServiceInterface {\n\treadonly parse: (\n\t\tinput: string\n\t) => Effect.Effect<DocumentNode, ParseError | SanitizationError>;\n\treadonly transform: (\n\t\tdoc: DocumentNode,\n\t\tcomponents: InkComponents\n\t) => Effect.Effect<EffuseChild[], TransformError>;\n\treadonly render: (\n\t\tinput: string,\n\t\tcomponents: InkComponents\n\t) => Effect.Effect<EffuseChild[], InkError>;\n}\n\nexport class InkService extends Context.Tag('ink/InkService')<\n\tInkService,\n\tInkServiceInterface\n>() {}\n\nconst make = Effect.gen(function* () {\n\tconst parser = yield* ParserService;\n\tconst transformer = yield* TransformerService;\n\tconst sanitizer = yield* SanitizerService;\n\n\tconst service: InkServiceInterface = {\n\t\tparse: (input: string) =>\n\t\t\tpipe(\n\t\t\t\tsanitizer.sanitize(input),\n\t\t\t\tEffect.flatMap((clean) => parser.parseMarkdown(clean))\n\t\t\t),\n\n\t\ttransform: (doc: DocumentNode, components: InkComponents) =>\n\t\t\ttransformer.transform(doc, components),\n\n\t\trender: (input: string, components: InkComponents) =>\n\t\t\tpipe(\n\t\t\t\tsanitizer.sanitize(input),\n\t\t\t\tEffect.flatMap((clean) => parser.parseMarkdown(clean)),\n\t\t\t\tEffect.flatMap((doc) => transformer.transform(doc, components))\n\t\t\t),\n\t};\n\n\treturn service;\n});\n\nexport const InkServiceLive = Layer.effect(InkService, make).pipe(\n\tLayer.provide(ParserServiceLive),\n\tLayer.provide(TransformerServiceLive),\n\tLayer.provide(SanitizerServiceLive)\n);\n\nexport const renderMarkdown = (\n\tinput: string,\n\tcomponents: InkComponents = {}\n): Effect.Effect<EffuseChild[], InkError, InkService> =>\n\tEffect.gen(function* () {\n\t\tconst ink = yield* InkService;\n\t\treturn yield* ink.render(input, components);\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Layer } from 'effect';\nimport { ParserServiceLive } from './ParserService.js';\nimport { TransformerServiceLive } from './TransformerService.js';\nimport { SanitizerServiceLive } from './SanitizerService.js';\nimport { InkServiceLive } from './InkService.js';\n\nexport const InkLive = Layer.mergeAll(\n\tParserServiceLive,\n\tTransformerServiceLive,\n\tSanitizerServiceLive\n).pipe(Layer.provideMerge(InkServiceLive));\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport { tokenize, type Token, type TokenType } from './tokenizer.js';\nexport { parseTokens } from './parser.js';\n\nimport { Effect, pipe } from 'effect';\nimport { tokenize } from './tokenizer.js';\nimport { parseTokens } from './parser.js';\nimport type { DocumentNode } from '../types/ast.js';\nimport type { ParseError } from '../types/errors.js';\n\n// Tokenize and parse markdown input\nexport const parse = (input: string): Effect.Effect<DocumentNode, ParseError> =>\n\tpipe(tokenize(input), Effect.flatMap(parseTokens));\n\n// Tokenize and parse markdown input synchronously\nexport const parseSync = (input: string): DocumentNode => {\n\treturn Effect.runSync(\n\t\tEffect.catchAll(parse(input), () =>\n\t\t\tEffect.succeed({\n\t\t\t\t_tag: 'Document' as const,\n\t\t\t\tchildren: [],\n\t\t\t})\n\t\t)\n\t);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { define, computed, type ReadonlySignal } from '@effuse/core';\nimport { parseSync } from '../parser/index.js';\nimport { transformDocument, type InkComponents } from './transformer.js';\nimport type { InkProps, DocumentNode } from '../types/ast.js';\n\ninterface InkExposed {\n\tast: ReadonlySignal<DocumentNode>;\n\tcomponentMap: InkComponents;\n\tclassName: string;\n\trenderedContent: ReadonlySignal<ReturnType<typeof transformDocument>>;\n}\n\n// Build markdown renderer component\nexport const Ink = define<InkProps, InkExposed>({\n\tscript: ({ props }) => {\n\t\tconst ast = computed<DocumentNode>(() => {\n\t\t\tconst content =\n\t\t\t\ttypeof props.content === 'string'\n\t\t\t\t\t? props.content\n\t\t\t\t\t: ((props.content as { value?: string }).value ?? '');\n\n\t\t\treturn parseSync(content);\n\t\t});\n\n\t\tconst componentMap = props.components ?? {};\n\t\tconst className = props.class ?? '';\n\n\t\tconst renderedContent = computed(() => {\n\t\t\treturn transformDocument(ast.value, componentMap);\n\t\t});\n\n\t\treturn {\n\t\t\tast,\n\t\t\tcomponentMap,\n\t\t\tclassName,\n\t\t\trenderedContent,\n\t\t};\n\t},\n\n\ttemplate: (exposed: InkExposed) => (\n\t\t<div class={() => `prose ${exposed.className}`.trim()}>\n\t\t\t{exposed.renderedContent}\n\t\t</div>\n\t),\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport const inkProseStyles = `\n.prose {\n\tmax-width: 65ch;\n\tline-height: 1.75;\n\tcolor: inherit;\n}\n\n.prose h1, .prose .ink-h1 {\n\tfont-size: 2.25rem;\n\tfont-weight: 700;\n\tmargin: 2rem 0 1rem;\n\tline-height: 1.2;\n}\n\n.prose h2, .prose .ink-h2 {\n\tfont-size: 1.5rem;\n\tfont-weight: 600;\n\tmargin: 1.75rem 0 0.75rem;\n\tline-height: 1.3;\n}\n\n.prose h3, .prose .ink-h3 {\n\tfont-size: 1.25rem;\n\tfont-weight: 600;\n\tmargin: 1.5rem 0 0.5rem;\n}\n\n.prose h4, .prose .ink-h4 {\n\tfont-size: 1rem;\n\tfont-weight: 600;\n\tmargin: 1.25rem 0 0.5rem;\n}\n\n.prose h5, .prose .ink-h5,\n.prose h6, .prose .ink-h6 {\n\tfont-size: 0.875rem;\n\tfont-weight: 600;\n\tmargin: 1rem 0 0.5rem;\n}\n\n.prose p, .prose .ink-p {\n\tmargin: 1rem 0;\n}\n\n.prose a, .prose .ink-link {\n\tcolor: #667eea;\n\ttext-decoration: underline;\n\ttext-underline-offset: 2px;\n\ttransition: color 0.2s;\n}\n\n.prose a:hover, .prose .ink-link:hover {\n\tcolor: #764ba2;\n}\n\n.prose code, .prose .ink-inline-code {\n\tbackground: rgba(102, 126, 234, 0.1);\n\tpadding: 0.2em 0.4em;\n\tborder-radius: 4px;\n\tfont-size: 0.875em;\n\tfont-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, monospace;\n}\n\n.prose pre, .prose .ink-code-block {\n\tbackground: #09090b;\n\tpadding: 1.5rem;\n\tborder-radius: 12px;\n\toverflow-x: auto;\n\tmargin: 1.5rem 0;\n\tborder: 1px solid rgba(255, 255, 255, 0.08);\n\tbox-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.prose pre code {\n\tbackground: transparent;\n\tpadding: 0;\n\tfont-size: 0.875rem;\n\tline-height: 1.6;\n}\n\n.prose blockquote, .prose .ink-blockquote {\n\tborder-left: 4px solid #667eea;\n\tpadding-left: 1rem;\n\tmargin: 1.5rem 0;\n\tcolor: rgba(255, 255, 255, 0.7);\n\tfont-style: italic;\n}\n\n.prose blockquote p {\n\tmargin: 0.5rem 0;\n}\n\n.prose ul, .prose .ink-ul {\n\tlist-style-type: disc;\n\tpadding-left: 1.5rem;\n\tmargin: 1rem 0;\n}\n\n.prose ol, .prose .ink-ol {\n\tlist-style-type: decimal;\n\tpadding-left: 1.5rem;\n\tmargin: 1rem 0;\n}\n\n.prose li, .prose .ink-list-item {\n\tmargin: 0.25rem 0;\n\tpadding-left: 0.25rem;\n}\n\n.prose ul ul, .prose ol ol, .prose ul ol, .prose ol ul {\n\tmargin: 0.25rem 0;\n}\n\n.prose .ink-task-item {\n\tlist-style: none;\n\tmargin-left: -1.5rem;\n\tpadding-left: 0;\n\tdisplay: flex;\n\talign-items: baseline;\n\tgap: 0.5rem;\n}\n\n.prose .ink-task-text {\n\tdisplay: inline;\n}\n\n.prose .ink-task-checkbox {\n\tflex-shrink: 0;\n\taccent-color: #667eea;\n}\n\n.prose hr, .prose .ink-hr {\n\tborder: none;\n\tborder-top: 1px solid rgba(255, 255, 255, 0.1);\n\tmargin: 2rem 0;\n}\n\n.prose img, .prose .ink-image {\n\tmax-width: 100%;\n\theight: auto;\n\tborder-radius: 8px;\n\tmargin: 1.5rem 0;\n}\n\n.prose table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tmargin: 1.5rem 0;\n}\n\n.prose th, .prose td {\n\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\tpadding: 0.75rem 1rem;\n\ttext-align: left;\n}\n\n.prose th {\n\tbackground: rgba(102, 126, 234, 0.1);\n\tfont-weight: 600;\n}\n\n.prose tbody tr:hover {\n\tbackground: rgba(255, 255, 255, 0.02);\n}\n\n.prose strong, .prose b {\n\tfont-weight: 600;\n}\n\n.prose em, .prose i {\n\tfont-style: italic;\n}\n\n.prose del, .prose s {\n\ttext-decoration: line-through;\n\topacity: 0.7;\n}\n\n.prose .ink-unknown-component {\n\tbackground: rgba(233, 69, 96, 0.1);\n\tborder: 1px dashed #e94560;\n\tborder-radius: 4px;\n\tpadding: 0.5rem 1rem;\n\tcolor: #e94560;\n\tfont-size: 0.875rem;\n\tmargin: 0.5rem 0;\n}\n\n\n.prose .ink-hl-keyword {\n\tcolor: #c678dd;\n\tfont-weight: 500;\n}\n\n.prose .ink-hl-string {\n\tcolor: #98c379;\n}\n\n.prose .ink-hl-number {\n\tcolor: #d19a66;\n}\n\n.prose .ink-hl-comment {\n\tcolor: #5c6370;\n\tfont-style: italic;\n}\n\n.prose .ink-hl-function {\n\tcolor: #61afef;\n}\n\n.prose .ink-hl-class {\n\tcolor: #e5c07b;\n}\n\n.prose .ink-hl-type {\n\tcolor: #e5c07b;\n}\n\n.prose .ink-hl-variable {\n\tcolor: #e06c75;\n}\n\n.prose .ink-hl-operator {\n\tcolor: #56b6c2;\n}\n\n.prose .ink-hl-punctuation {\n\tcolor: #abb2bf;\n}\n\n.prose .ink-hl-property {\n\tcolor: #e06c75;\n}\n\n.prose .ink-hl-selector {\n\tcolor: #e06c75;\n}\n\n.prose .ink-hl-tag {\n\tcolor: #e06c75;\n}\n\n.prose .ink-hl-attr-name {\n\tcolor: #d19a66;\n}\n\n.prose .ink-hl-attr-value {\n\tcolor: #98c379;\n}\n\n\n.prose .ink-table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tmargin: 1.5rem 0;\n}\n\n.prose .ink-th,\n.prose .ink-td {\n\tborder: 1px solid rgba(255, 255, 255, 0.1);\n\tpadding: 0.75rem 1rem;\n}\n\n.prose .ink-th {\n\tbackground: rgba(102, 126, 234, 0.1);\n\tfont-weight: 600;\n}\n\n.prose .ink-tbody .ink-tr:hover {\n\tbackground: rgba(255, 255, 255, 0.02);\n}\n`;\n\nconst noop = (): void => {\n\t/* SSR: nothing to clean up */\n};\n\nexport function injectInkStyles(): () => void {\n\tif (typeof document === 'undefined') {\n\t\treturn noop;\n\t}\n\n\tconst existing = document.querySelector('style[data-ink-prose]');\n\tif (existing !== null) {\n\t\treturn () => {\n\t\t\texisting.remove();\n\t\t};\n\t}\n\n\tconst style = document.createElement('style');\n\tstyle.setAttribute('data-ink-prose', 'true');\n\tstyle.textContent = inkProseStyles;\n\tdocument.head.appendChild(style);\n\n\treturn () => {\n\t\tstyle.remove();\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { defineLayer } from '@effuse/core';\nimport { injectInkStyles } from './prose.js';\n\nexport { injectInkStyles, inkProseStyles } from './prose.js';\n\nexport const InkLayer = defineLayer({\n\tname: 'ink',\n\tsetup: injectInkStyles,\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Schema } from 'effect';\n\nexport const SourcePositionSchema = Schema.Struct({\n\tline: Schema.Number,\n\tcolumn: Schema.Number,\n\toffset: Schema.Number,\n});\n\nexport const SourceRangeSchema = Schema.Struct({\n\tstart: SourcePositionSchema,\n\tend: SourcePositionSchema,\n});\n\nexport const TextNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('text'),\n\tvalue: Schema.String,\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const InlineCodeNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('inlineCode'),\n\tvalue: Schema.String,\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const LineBreakNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('lineBreak'),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const ImageNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('image'),\n\turl: Schema.String,\n\talt: Schema.String,\n\ttitle: Schema.optional(Schema.String),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const EmphasisNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('emphasis'),\n\tstyle: Schema.Union(\n\t\tSchema.Literal('italic'),\n\t\tSchema.Literal('bold'),\n\t\tSchema.Literal('strikethrough')\n\t),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const LinkNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('link'),\n\turl: Schema.String,\n\ttitle: Schema.optional(Schema.String),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const ComponentPropsSchema = Schema.Record({\n\tkey: Schema.String,\n\tvalue: Schema.Unknown,\n});\n\nexport const ComponentNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('component'),\n\tname: Schema.String,\n\tprops: ComponentPropsSchema,\n\tchildren: Schema.Array(Schema.Unknown),\n\tslots: Schema.Record({\n\t\tkey: Schema.String,\n\t\tvalue: Schema.Array(Schema.Unknown),\n\t}),\n\tselfClosing: Schema.Boolean,\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const HeadingNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('heading'),\n\tlevel: Schema.Union(\n\t\tSchema.Literal(1),\n\t\tSchema.Literal(2),\n\t\tSchema.Literal(3),\n\t\tSchema.Literal(4),\n\t\tSchema.Literal(5),\n\t\tSchema.Literal(6)\n\t),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const ParagraphNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('paragraph'),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const CodeBlockNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('codeBlock'),\n\tlanguage: Schema.optional(Schema.String),\n\tcode: Schema.String,\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const BlockquoteNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('blockquote'),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const ListItemNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('listItem'),\n\tchecked: Schema.optional(Schema.Boolean),\n\tchildren: Schema.Array(Schema.Unknown),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const ListNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('list'),\n\tordered: Schema.Boolean,\n\tstart: Schema.optional(Schema.Number),\n\tchildren: Schema.Array(ListItemNodeSchema),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const HorizontalRuleNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('horizontalRule'),\n\tposition: Schema.optional(SourceRangeSchema),\n});\n\nexport const BlockNodeSchema = Schema.Union(\n\tHeadingNodeSchema,\n\tParagraphNodeSchema,\n\tCodeBlockNodeSchema,\n\tBlockquoteNodeSchema,\n\tListNodeSchema,\n\tHorizontalRuleNodeSchema,\n\tComponentNodeSchema\n);\n\nexport const DocumentNodeSchema = Schema.Struct({\n\ttype: Schema.Literal('document'),\n\tchildren: Schema.Array(BlockNodeSchema),\n});\n\nexport const InlineNodeSchema = Schema.Union(\n\tTextNodeSchema,\n\tInlineCodeNodeSchema,\n\tEmphasisNodeSchema,\n\tLinkNodeSchema,\n\tImageNodeSchema,\n\tLineBreakNodeSchema,\n\tComponentNodeSchema\n);\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { EffuseChild } from '@effuse/core';\nimport { InkLive, renderMarkdown } from './services/index.js';\nimport type { InkComponents } from './renderer/transformer.js';\nimport { parseSync as parseSyncInternal } from './parser/index.js';\n\nexport { Ink } from './renderer/index.js';\nexport {\n\ttransformDocument,\n\ttype InkComponents,\n\ttype ComponentMap,\n\tsanitizeUrl,\n\ttype SanitizeUrlOptions,\n} from './renderer/index.js';\nexport { InkLayer, injectInkStyles, inkProseStyles } from './styles/index.js';\n\nexport type {\n\tMarkdownNode,\n\tBlockNode,\n\tInlineNode,\n\tDocumentNode,\n\tHeadingNode,\n\tParagraphNode,\n\tCodeBlockNode,\n\tBlockquoteNode,\n\tListNode,\n\tListItemNode,\n\tHorizontalRuleNode,\n\tComponentNode,\n\tTextNode,\n\tInlineCodeNode,\n\tEmphasisNode,\n\tLinkNode,\n\tImageNode,\n\tInkProps,\n} from './types/index.js';\n\nexport {\n\tParseError,\n\tComponentNotFoundError,\n\tInvalidPropsError,\n\tSanitizationError,\n\tTransformError,\n\ttype InkError,\n} from './types/index.js';\n\nexport {\n\tSourcePositionSchema,\n\tSourceRangeSchema,\n\tDocumentNodeSchema,\n\tBlockNodeSchema,\n\tInlineNodeSchema,\n} from './schemas/ast.js';\n\nexport {\n\tInkConfig,\n\ttype InkConfigType,\n\tdefaultInkConfig,\n} from './config/index.js';\n\nexport const parseSync = parseSyncInternal;\n\nexport const render = (\n\tinput: string,\n\tcomponents: InkComponents = {}\n): EffuseChild[] => {\n\tconst program = renderMarkdown(input, components).pipe(\n\t\tEffect.provide(InkLive),\n\t\tEffect.catchAll(() => Effect.succeed([] as EffuseChild[]))\n\t);\n\treturn Effect.runSync(program);\n};\n"]}