{"version":3,"sources":["../../../src/renderers/html/common/build-attr-string.ts","../../../src/renderers/html/quill/functions/build-quill-config.ts","../../../src/renderers/html/quill/quill-html-renderer.ts","../../../src/renderers/html/semantic/consts/default-inline-styles.ts","../../../src/renderers/html/semantic/functions/get-block-classes.ts","../../../src/renderers/html/semantic/functions/resolve-inline-style.ts","../../../src/renderers/html/semantic/functions/get-block-styles.ts","../../../src/renderers/html/semantic/functions/build-block-attrs.ts","../../../src/renderers/html/semantic/functions/encode-text.ts","../../../src/renderers/html/semantic/functions/get-group-type.ts","../../../src/renderers/html/semantic/functions/sanitize-url.ts","../../../src/renderers/html/semantic/functions/build-renderer-config.ts","../../../src/renderers/html/semantic/functions/resolve-config.ts","../../../src/renderers/html/semantic/semantic-html-renderer.ts"],"names":["escapeHtml","getLayoutClasses","getHeaderLevel","getListType","getTableRow","resolveImageData","resolveVideoSrc","getWidth","getHeight","resolveFormulaText","boldMark","italicMark","underlineMark","strikeMark","scriptMark","codeMark","serializeResolvedAttrs","BaseHtmlRenderer","parseQuillDelta","DEFAULT_MARK_PRIORITIES","resolveCodeBlockLines","buildCodeBlockClassName","resolveCodeBlockMeta","resolveCheckedState","resolveMentionData","resolveLinkMeta"],"mappings":"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","file":"index.cjs","sourcesContent":["import { escapeHtml } from '../base-html-renderer';\n\n/**\n * Build an HTML attribute string from a key-value record.\n * Empty values are skipped. Keys and values are HTML-escaped to prevent XSS.\n * Returns a leading space if non-empty.\n */\nexport function buildAttrString(attrs: Record<string, string>): string {\n  const parts: string[] = [];\n  for (const [key, value] of Object.entries(attrs)) {\n    if (value !== '') {\n      parts.push(`${escapeHtml(key)}=\"${escapeHtml(value)}\"`);\n    }\n  }\n  return parts.length > 0 ? ` ${parts.join(' ')}` : '';\n}\n","import type { RendererConfig } from '../../../../core/ast-types';\nimport {\n  getHeaderLevel,\n  getHeight,\n  getListType,\n  getTableRow,\n  getWidth,\n} from '../../../common/node-attributes';\nimport {\n  resolveFormulaText,\n  resolveImageData,\n  resolveVideoSrc,\n} from '../../../common/resolve-embed-data';\nimport {\n  boldMark,\n  codeMark,\n  italicMark,\n  scriptMark,\n  strikeMark,\n  underlineMark,\n} from '../../../common/simple-marks';\nimport { escapeHtml, serializeResolvedAttrs } from '../../base-html-renderer';\nimport { buildAttrString } from '../../common/build-attr-string';\nimport { getLayoutClasses } from '../../common/get-layout-classes';\nimport type { ResolvedAttrs } from '../../common/resolved-attrs';\n\nconst PREFIX = 'ql';\n\n/**\n * Mark nesting priorities matching Quill's actual DOM nesting order.\n *\n * Only element marks (bold, strike, etc.) need priorities here.\n * Color, background, font, and size are attributors — they contribute\n * styles/classes to the nearest element mark instead of creating wrappers.\n */\nconst QUILL_MARK_PRIORITIES: Record<string, number> = {\n  bold: 50,\n  strike: 40,\n  underline: 30,\n  italic: 20,\n  link: 15,\n  code: 10,\n  script: 5,\n};\n\n/**\n * Build the full `RendererConfig` for the Quill-native HTML renderer.\n *\n * Produces markup that exactly matches Quill editor's output, including:\n * - `ql-*` CSS classes for indentation, alignment, direction, fonts, sizes\n * - `<br>` for empty blocks (matching Quill's behavior)\n * - `spellcheck=\"false\"` on code blocks\n * - `rel=\"noopener noreferrer\"` on links\n * - `data-row` on table cells\n * - `data-list` for all list items\n * - `.ql-ui` marker span for list items\n * - `data-language` on code blocks with a specified language\n *\n * Layout classes (indent, align, direction) are computed centrally\n * via `blockAttributeResolvers` — no need to repeat in each handler.\n *\n * Color, background, font, and size are `attributors` — they contribute\n * styles/classes to the nearest element mark rather than wrapping.\n */\nexport function buildQuillConfig(): RendererConfig<string, ResolvedAttrs> {\n  return {\n    markPriorities: QUILL_MARK_PRIORITIES,\n    attributorTarget: 'outermost',\n\n    nodeOverrides: {\n      'line-break': () => '<br/>',\n    },\n\n    // ─── Block Attribute Resolvers ────────────────────────────────────\n    // Computed once per block, merged, and passed to every block handler.\n    blockAttributeResolvers: [(node) => ({ classes: getLayoutClasses(node, PREFIX) })],\n\n    // ─── Blocks ──────────────────────────────────────────────────────\n    blocks: {\n      // Declarative: renderer auto-handles attrs + empty content\n      paragraph: { tag: 'p' },\n      header: { tag: (node) => `h${getHeaderLevel(node)}` },\n      blockquote: { tag: 'blockquote' },\n\n      // Complex blocks — receive pre-computed resolvedAttrs\n      'code-block-container': (_node, children) => {\n        return `<div class=\"${PREFIX}-code-block-container\" spellcheck=\"false\">${children}</div>`;\n      },\n\n      'code-block': (node, children) => {\n        const lang = node.attributes['code-block'];\n        const attrs: Record<string, string> = {\n          class: `${PREFIX}-code-block`,\n        };\n\n        if (typeof lang === 'string' && lang !== 'true') {\n          attrs['data-language'] = lang;\n        }\n\n        const content = children || '<br/>';\n        return `<div${buildAttrString(attrs)}>${content}</div>`;\n      },\n\n      'list-item': (node, children, resolvedAttrs) => {\n        const listType = getListType(node);\n        const content = children || '<br/>';\n        const uiMarker = `<span class=\"${PREFIX}-ui\" contenteditable=\"false\"></span>`;\n\n        const classes = [...(resolvedAttrs.classes ?? [])];\n        const attrs: Record<string, string> = {};\n        if (classes.length > 0) {\n          attrs.class = classes.join(' ');\n        }\n        attrs['data-list'] = listType;\n\n        return `<li${buildAttrString(attrs)}>${uiMarker}${content}</li>`;\n      },\n\n      list: (_node, children) => {\n        return `<ol>${children}</ol>`;\n      },\n\n      table: (_node, children) => {\n        return `<table><tbody>${children}</tbody></table>`;\n      },\n\n      'table-row': (_node, children) => {\n        return `<tr>${children}</tr>`;\n      },\n\n      'table-cell': (node, children) => {\n        const row = getTableRow(node);\n        const attrs: Record<string, string> = {};\n        if (row) {\n          attrs['data-row'] = row;\n        }\n        return `<td${buildAttrString(attrs)}>${children}</td>`;\n      },\n\n      image: (node) => {\n        const img = resolveImageData(node);\n        if (!img) return '';\n\n        const attrs: Record<string, string> = { src: img.src };\n        if (img.alt) attrs.alt = img.alt;\n        if (img.width) attrs.width = img.width;\n        if (img.height) attrs.height = img.height;\n\n        return `<img${buildAttrString(attrs)}>`;\n      },\n\n      video: (node) => {\n        const src = resolveVideoSrc(node);\n        if (!src) return '';\n\n        const width = getWidth(node);\n        const height = getHeight(node);\n\n        const attrs: Record<string, string> = {\n          class: `${PREFIX}-video`,\n          src,\n          frameborder: '0',\n          allowfullscreen: 'true',\n        };\n        if (width) attrs.width = width;\n        if (height) attrs.height = height;\n\n        return `<iframe${buildAttrString(attrs)}></iframe>`;\n      },\n\n      formula: (node) => {\n        const text = resolveFormulaText(node);\n        return `<span class=\"${PREFIX}-formula\" data-value=\"${escapeHtml(text)}\">${escapeHtml(text)}</span>`;\n      },\n    },\n\n    // ─── Element Marks (create wrapper elements) ─────────────────────\n    marks: {\n      bold: boldMark,\n      italic: italicMark,\n      underline: underlineMark,\n      strike: strikeMark,\n      script: scriptMark,\n      code: codeMark,\n\n      link: (content, value, _node, collectedAttrs) => {\n        const href = escapeHtml(String(value));\n        const attrStr = serializeResolvedAttrs(collectedAttrs);\n        return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\"${attrStr}>${content}</a>`;\n      },\n    },\n\n    // ─── Attributor Marks (contribute attrs to parent element) ───────\n    attributors: {\n      color: (value) => ({\n        style: { color: String(value) },\n      }),\n      background: (value) => ({\n        style: { 'background-color': String(value) },\n      }),\n      font: (value) => ({\n        classes: [`${PREFIX}-font-${value}`],\n      }),\n      size: (value) => ({\n        classes: [`${PREFIX}-size-${value}`],\n      }),\n    },\n  };\n}\n","import type { Delta } from '../../../core/ast-types';\nimport type { ParseQuillDeltaOptions } from '../../../parse-quill-delta';\nimport { parseQuillDelta } from '../../../parse-quill-delta';\nimport { BaseHtmlRenderer } from '../base-html-renderer';\nimport { buildQuillConfig } from './functions/build-quill-config';\n\n/**\n * Renders an AST into Quill's native HTML format.\n *\n * Produces markup that exactly matches Quill editor's output, including:\n * - `ql-*` CSS classes for indentation, alignment, direction, fonts, and sizes\n * - `<br>` for empty blocks\n * - `spellcheck=\"false\"` on code blocks\n * - `rel=\"noopener noreferrer\"` on links\n * - `data-row` on table cells\n * - `data-list` and `.ql-ui` markers on list items\n * - Formula and video embed support\n *\n * For a configurable HTML renderer (with custom class prefix, inline styles,\n * hooks, etc.), use `SemanticHtmlRenderer` instead.\n *\n * Use `withBlock()` and `withMark()` to override specific handlers\n * without subclassing.\n *\n * @example\n * ```ts\n * const renderer = new QuillHtmlRenderer();\n * const html = renderer.renderDelta(delta);\n * ```\n */\nexport class QuillHtmlRenderer extends BaseHtmlRenderer {\n  constructor() {\n    super(buildQuillConfig());\n  }\n\n  /**\n   * Convenience method: parses a Quill Delta and renders it to HTML\n   * that exactly matches Quill editor output.\n   *\n   * Unlike `parseQuillDelta()` + `render()`, this disables paragraph\n   * merging (`multiLineParagraph: false`) so each `\\n` produces a\n   * separate `<p>` — matching Quill's native behavior.\n   *\n   * @example\n   * ```ts\n   * const renderer = new QuillHtmlRenderer();\n   * const html = renderer.renderDelta(delta);\n   * ```\n   */\n  renderDelta(delta: Delta, options?: ParseQuillDeltaOptions): string {\n    const ast = parseQuillDelta(delta, {\n      ...options,\n      blockMerger: { multiLineParagraph: false, ...options?.blockMerger },\n    });\n    return this.render(ast);\n  }\n}\n","import type { TNode } from '../../../../core/ast-types';\nimport type { InlineStyleConverter } from '../types/semantic-html-config';\n\n/** Default inline style converters used when `inlineStyles: true`. */\nexport const DEFAULT_INLINE_STYLES: Record<string, InlineStyleConverter> = {\n  font: {\n    serif: 'font-family: Georgia, Times New Roman, serif',\n    monospace: 'font-family: Monaco, Courier New, monospace',\n  },\n  size: {\n    small: 'font-size: 0.75em',\n    large: 'font-size: 1.5em',\n    huge: 'font-size: 2.5em',\n  },\n  indent: (value: string, node: TNode) => {\n    const indentSize = parseInt(value, 10) * 3;\n    const side = node.attributes.direction === 'rtl' ? 'right' : 'left';\n    return `padding-${side}: ${indentSize}em`;\n  },\n  align: (value: string) => `text-align: ${value}`,\n  direction: (value: string, node: TNode) => {\n    if (value === 'rtl') {\n      return `direction: rtl${node.attributes.align ? '' : '; text-align: inherit'}`;\n    }\n    return undefined;\n  },\n};\n","import type { TNode } from '../../../../core/ast-types';\nimport { getLayoutClasses } from '../../common/get-layout-classes';\nimport type { ResolvedConfig } from '../types/resolved-config';\n\n/**\n * Get CSS classes for block-level layout attributes (indent, align, direction).\n * Returns empty when inlineStyles mode is active.\n *\n * Delegates to the shared `getLayoutClasses` for the actual class generation.\n */\nexport function getBlockClasses(node: TNode, cfg: ResolvedConfig): string[] {\n  if (cfg.inlineStyles !== false) return [];\n  return getLayoutClasses(node, cfg.classPrefix);\n}\n","import type { TNode } from '../../../../core/ast-types';\nimport type { InlineStyleConverter } from '../types/semantic-html-config';\n\n/**\n * Resolve an InlineStyleConverter to a CSS style string.\n */\nexport function resolveInlineStyle(\n  converter: InlineStyleConverter,\n  value: string,\n  node: TNode,\n): string | undefined {\n  if (typeof converter === 'function') {\n    return converter(value, node);\n  }\n  return converter[value];\n}\n","import type { TNode } from '../../../../core/ast-types';\nimport { DEFAULT_INLINE_STYLES } from '../consts/default-inline-styles';\nimport type { ResolvedConfig } from '../types/resolved-config';\nimport type { InlineStyleConverter } from '../types/semantic-html-config';\nimport { resolveInlineStyle } from './resolve-inline-style';\n\n/**\n * Get inline styles for block-level layout attributes (indent, align, direction).\n * Returns empty when inlineStyles mode is off.\n */\nexport function getBlockStyles(node: TNode, cfg: ResolvedConfig): string[] {\n  if (cfg.inlineStyles === false) return [];\n\n  const styles: string[] = [];\n  const overrides = cfg.inlineStyles;\n  const props = ['indent', 'align', 'direction'] as const;\n\n  for (const prop of props) {\n    const value = node.attributes[prop];\n    if (value == null) continue;\n\n    const converter: InlineStyleConverter | undefined =\n      overrides[prop] ?? DEFAULT_INLINE_STYLES[prop];\n\n    if (!converter) continue;\n\n    const resolved = resolveInlineStyle(converter, String(value), node);\n    if (resolved) {\n      styles.push(resolved);\n    }\n  }\n\n  return styles;\n}\n","import type { TNode } from '../../../../core/ast-types';\nimport { buildAttrString } from '../../common/build-attr-string';\nimport type { ResolvedConfig } from '../types/resolved-config';\nimport { getBlockClasses } from './get-block-classes';\nimport { getBlockStyles } from './get-block-styles';\n\nfunction getCustomClasses(node: TNode, cfg: ResolvedConfig): string[] {\n  if (!cfg.customCssClasses) return [];\n  const result = cfg.customCssClasses(node);\n  if (!result) return [];\n  return Array.isArray(result) ? result : [result];\n}\n\nfunction getCustomStyles(node: TNode, cfg: ResolvedConfig): string[] {\n  if (!cfg.customCssStyles) return [];\n  const result = cfg.customCssStyles(node);\n  if (!result) return [];\n  return Array.isArray(result) ? result : [result];\n}\n\nfunction getCustomTagAttributes(node: TNode, cfg: ResolvedConfig): Record<string, string> {\n  if (!cfg.customTagAttributes) return {};\n  return cfg.customTagAttributes(node) ?? {};\n}\n\n/**\n * Build the full HTML attribute string for a block node, combining\n * custom classes/styles/attrs, extra classes/styles/attrs, and\n * config-driven block classes/styles.\n *\n * @param skipIndent - When true, omit the `ql-indent-N` class from layout\n *   classes. Used for list items where DOM nesting already conveys the level.\n */\nexport function buildBlockAttrs(\n  node: TNode,\n  cfg: ResolvedConfig,\n  extraClasses?: string[],\n  extraStyles?: string[],\n  extraAttrs?: Record<string, string>,\n  skipIndent?: boolean,\n): string {\n  let blockClasses = getBlockClasses(node, cfg);\n  if (skipIndent) {\n    const indentPrefix = `${cfg.classPrefix}-indent-`;\n    blockClasses = blockClasses.filter((c) => !c.startsWith(indentPrefix));\n  }\n\n  const classes = [...getCustomClasses(node, cfg), ...(extraClasses ?? []), ...blockClasses].filter(\n    Boolean,\n  );\n\n  const styles = [\n    ...getCustomStyles(node, cfg),\n    ...(extraStyles ?? []),\n    ...getBlockStyles(node, cfg),\n  ].filter(Boolean);\n\n  const attrs: Record<string, string> = {\n    ...getCustomTagAttributes(node, cfg),\n    ...(extraAttrs ?? {}),\n  };\n\n  if (classes.length > 0) {\n    attrs.class = classes.join(' ');\n  }\n  if (styles.length > 0) {\n    attrs.style = styles.join(';');\n  }\n\n  return buildAttrString(attrs);\n}\n","import { escapeHtml } from '../../base-html-renderer';\nimport type { ResolvedConfig } from '../types/resolved-config';\n\n/**\n * Conditionally HTML-encode text based on config.\n */\nexport function encodeText(text: string, cfg: ResolvedConfig): string {\n  return cfg.encodeHtml ? escapeHtml(text) : text;\n}\n","import type { TNode } from '../../../../core/ast-types';\nimport type { RenderGroupType } from '../types/semantic-html-config';\n\nexport function getGroupType(node: TNode): RenderGroupType | null {\n  switch (node.type) {\n    case 'list':\n      return 'list';\n    case 'table':\n      return 'table';\n    case 'video':\n      return 'video';\n    case 'text':\n      return null;\n    default:\n      if (node.isInline) return null;\n      return 'block';\n  }\n}\n","import type { ResolvedConfig } from '../types/resolved-config';\n\n/**\n * Run the configured URL sanitizer, returning empty string for rejected URLs.\n */\nexport function sanitizeUrl(url: string, cfg: ResolvedConfig): string {\n  if (cfg.urlSanitizer) {\n    const result = cfg.urlSanitizer(url);\n    return result ?? '';\n  }\n  return url;\n}\n","import { DEFAULT_MARK_PRIORITIES } from '../../../../common/default-mark-priorities';\nimport type { BlockHandler, MarkHandler, RendererConfig, TNode } from '../../../../core/ast-types';\nimport { getHeaderLevel, getListType, getTableRow } from '../../../common/node-attributes';\nimport {\n  buildCodeBlockClassName,\n  resolveCheckedState,\n  resolveCodeBlockMeta,\n  resolveLinkMeta,\n} from '../../../common/resolve-block-meta';\nimport { resolveCodeBlockLines } from '../../../common/resolve-code-block-lines';\nimport {\n  resolveFormulaText,\n  resolveImageData,\n  resolveVideoSrc,\n} from '../../../common/resolve-embed-data';\nimport { resolveMentionData } from '../../../common/resolve-mention-data';\nimport {\n  boldMark,\n  codeMark,\n  italicMark,\n  scriptMark,\n  strikeMark,\n  underlineMark,\n} from '../../../common/simple-marks';\nimport { escapeHtml, serializeResolvedAttrs } from '../../base-html-renderer';\nimport { buildAttrString } from '../../common/build-attr-string';\nimport type { ResolvedAttrs } from '../../common/resolved-attrs';\nimport { DEFAULT_INLINE_STYLES } from '../consts/default-inline-styles';\nimport type { ResolvedConfig } from '../types/resolved-config';\nimport type { InlineStyleConverter, RenderGroupType } from '../types/semantic-html-config';\nimport { buildBlockAttrs } from './build-block-attrs';\nimport { encodeText } from './encode-text';\nimport { getGroupType } from './get-group-type';\nimport { resolveInlineStyle } from './resolve-inline-style';\nimport { sanitizeUrl } from './sanitize-url';\n\n/**\n * Creates a mark handler for attributes like `font` and `size` that render\n * as either an inline style (when `inlineStyles` is enabled and a converter\n * exists) or a CSS class (default).\n *\n * Eliminates duplication between the `font` and `size` mark handler code paths.\n */\nfunction createClassOrStyleMark(\n  attrName: string,\n  cfg: ResolvedConfig,\n): MarkHandler<string, ResolvedAttrs> {\n  return (content: string, value: unknown, node: TNode) => {\n    const strValue = String(value);\n    if (cfg.inlineStyles !== false) {\n      const overrides = cfg.inlineStyles;\n      const converter: InlineStyleConverter | undefined =\n        overrides[attrName] ?? DEFAULT_INLINE_STYLES[attrName];\n      if (converter) {\n        const style = resolveInlineStyle(converter, strValue, node);\n        if (style) {\n          return `<span style=\"${style}\">${content}</span>`;\n        }\n      }\n    }\n    return `<span class=\"${cfg.classPrefix}-${attrName}-${encodeText(strValue, cfg)}\">${content}</span>`;\n  };\n}\n\n/**\n * Wrap a block handler with beforeRender/afterRender hook logic.\n * The hooks only fire when the node has a non-null groupType.\n */\nfunction wrapWithHooks(\n  handler: BlockHandler<string, ResolvedAttrs>,\n  cfg: ResolvedConfig,\n): BlockHandler<string, ResolvedAttrs> {\n  if (!cfg.beforeRender && !cfg.afterRender) return handler;\n\n  return (node: TNode, children: string, resolvedAttrs: ResolvedAttrs): string => {\n    const groupType: RenderGroupType | null = getGroupType(node);\n\n    // Before-render hook — can replace output entirely\n    if (cfg.beforeRender && groupType) {\n      const replaced = cfg.beforeRender(groupType, node);\n      if (replaced) {\n        return cfg.afterRender ? cfg.afterRender(groupType, replaced) : replaced;\n      }\n    }\n\n    let html = handler(node, children, resolvedAttrs);\n\n    // After-render hook\n    if (cfg.afterRender && groupType) {\n      html = cfg.afterRender(groupType, html);\n    }\n\n    return html;\n  };\n}\n\n/**\n * Build a full `RendererConfig` from the resolved semantic config.\n * Defines all block handlers (paragraph, header, blockquote, code-block,\n * list, table, image, video, formula, mention) and mark handlers\n * (bold, italic, underline, strike, link, script, code, font, size).\n *\n * Color and background are defined as `attributors` — they contribute\n * styles/classes to the nearest element mark rather than wrapping.\n *\n * If `beforeRender` or `afterRender` hooks are configured, each block\n * handler is automatically wrapped with hook invocation logic.\n */\nexport function buildRendererConfig(cfg: ResolvedConfig): RendererConfig<string, ResolvedAttrs> {\n  /** Optionally wrap a block handler with hooks. */\n  const h = (handler: BlockHandler<string, ResolvedAttrs>) => wrapWithHooks(handler, cfg);\n\n  return {\n    markPriorities: DEFAULT_MARK_PRIORITIES,\n\n    // Handle code-block-container produced by codeBlockGrouper.\n    // Renders all child lines into a single <pre> with newline-separated,\n    // HTML-escaped content — matching quill-delta-to-html output.\n    nodeOverrides: {\n      'line-break': () => '<br/>',\n\n      'code-block-container': (node) => {\n        const { language, lines } = resolveCodeBlockLines(node);\n\n        const escapedLines = cfg.encodeHtml ? lines.map((line) => escapeHtml(line)) : lines;\n        const content = escapedLines.join('\\n');\n\n        const tag = cfg.customTag?.('code-block', node) ?? 'pre';\n        const attrs: Record<string, string> = {};\n        if (cfg.codeSyntaxClass) {\n          attrs.class = buildCodeBlockClassName(language, cfg.classPrefix);\n        } else if (language) {\n          attrs.class = `language-${language}`;\n        }\n        if (language) attrs['data-language'] = language;\n\n        return `<${tag}${buildAttrString(attrs)}>${content}</${tag}>`;\n      },\n    },\n\n    // Wire customBlotRenderer as the generic onUnknownNode hook\n    onUnknownNode: cfg.customBlotRenderer\n      ? (node) => cfg.customBlotRenderer!(node, null)\n      : undefined,\n\n    blocks: {\n      paragraph: h((node, children) => {\n        const tag = cfg.customTag?.('paragraph', node) ?? cfg.paragraphTag;\n        if (!tag) {\n          return children || '<br/>';\n        }\n        const content = children || '<br/>';\n        const attrStr = buildBlockAttrs(node, cfg);\n        return `<${tag}${attrStr}>${content}</${tag}>`;\n      }),\n\n      header: h((node, children) => {\n        const level = getHeaderLevel(node);\n        const defaultTag = `h${level}`;\n        const tag = cfg.customTag?.('header', node) ?? defaultTag;\n        const content = children || '<br/>';\n        const attrStr = buildBlockAttrs(node, cfg);\n        return `<${tag}${attrStr}>${content}</${tag}>`;\n      }),\n\n      blockquote: h((node, children) => {\n        const tag = cfg.customTag?.('blockquote', node) ?? 'blockquote';\n        const content = children || '<br/>';\n        const attrStr = buildBlockAttrs(node, cfg);\n        return `<${tag}${attrStr}>${content}</${tag}>`;\n      }),\n\n      'code-block': h((node, children) => {\n        const tag = cfg.customTag?.('code-block', node) ?? 'pre';\n        const meta = resolveCodeBlockMeta(node, cfg.classPrefix);\n\n        const extraClasses: string[] = [];\n        if (cfg.codeSyntaxClass) {\n          extraClasses.push(meta.className);\n        } else if (meta.language) {\n          extraClasses.push(`language-${meta.language}`);\n        }\n\n        const extraAttrs: Record<string, string> = {};\n        if (meta.language) {\n          extraAttrs['data-language'] = meta.language;\n        }\n\n        const content = children || '<br/>';\n        const attrStr = buildBlockAttrs(node, cfg, extraClasses, undefined, extraAttrs);\n        return `<${tag}${attrStr}>${content}</${tag}>`;\n      }),\n\n      'list-item': h((node, children) => {\n        const tag = cfg.customTag?.('list-item', node) ?? cfg.listItemTag;\n        const content = children || '<br/>';\n\n        const extraAttrs: Record<string, string> = {};\n        const checked = resolveCheckedState(node);\n        if (checked !== undefined) {\n          extraAttrs['data-checked'] = checked;\n        }\n\n        // Skip indent class — nested <ul>/<ol> structure already conveys the level\n        const attrStr = buildBlockAttrs(node, cfg, undefined, undefined, extraAttrs, true);\n        return `<${tag}${attrStr}>${content}</${tag}>`;\n      }),\n\n      list: h((node, children) => {\n        const listType = getListType(node);\n        let tag: string;\n        if (listType === 'ordered') {\n          tag = cfg.orderedListTag;\n        } else {\n          tag = cfg.bulletListTag;\n        }\n        return `<${tag}>${children}</${tag}>`;\n      }),\n\n      table: h((_node, children) => {\n        return `<table><tbody>${children}</tbody></table>`;\n      }),\n\n      'table-row': h((_node, children) => {\n        return `<tr>${children}</tr>`;\n      }),\n\n      'table-cell': h((node, children) => {\n        const row = getTableRow(node);\n        const extraAttrs: Record<string, string> = {};\n        if (row) {\n          extraAttrs['data-row'] = row;\n        }\n        const attrStr = buildBlockAttrs(node, cfg, undefined, undefined, extraAttrs);\n        return `<td${attrStr}>${children}</td>`;\n      }),\n\n      image: h((node) => {\n        const img = resolveImageData(node);\n        if (!img) return '';\n\n        const src = sanitizeUrl(img.src, cfg);\n        if (!src) return '';\n\n        const imgAttrMap: Record<string, string> = {};\n        if (cfg.imageClass) {\n          imgAttrMap.class = `${cfg.classPrefix}-image`;\n        }\n        imgAttrMap.src = encodeText(src, cfg);\n        if (cfg.preserveImageAlt && img.alt) {\n          imgAttrMap.alt = encodeText(img.alt, cfg);\n        }\n        if (img.width) imgAttrMap.width = encodeText(img.width, cfg);\n        if (img.height) imgAttrMap.height = encodeText(img.height, cfg);\n\n        const imgTag = `<img${buildAttrString(imgAttrMap)} />`;\n\n        if (img.linkHref) {\n          const sanitizedLink = sanitizeUrl(img.linkHref, cfg);\n          if (!sanitizedLink) return imgTag;\n          const linkAttrMap: Record<string, string> = {\n            href: encodeText(sanitizedLink, cfg),\n          };\n          if (cfg.linkTarget) linkAttrMap.target = cfg.linkTarget;\n          if (cfg.linkRel) linkAttrMap.rel = cfg.linkRel;\n          return `<a${buildAttrString(linkAttrMap)}>${imgTag}</a>`;\n        }\n\n        return imgTag;\n      }),\n\n      video: h((node) => {\n        const rawSrc = resolveVideoSrc(node);\n        if (!rawSrc) return '';\n        const src = sanitizeUrl(rawSrc, cfg);\n        if (!src) return '';\n        const videoClass = `${cfg.classPrefix}-video`;\n        return `<iframe class=\"${videoClass}\" src=\"${encodeText(src, cfg)}\" frameborder=\"0\" allowfullscreen=\"true\"></iframe>`;\n      }),\n\n      formula: h((node) => {\n        const formulaClass = `${cfg.classPrefix}-formula`;\n        const text = resolveFormulaText(node);\n        return `<span class=\"${formulaClass}\">${encodeText(text, cfg)}</span>`;\n      }),\n\n      mention: h((node) => {\n        const mention = resolveMentionData(node);\n\n        const attrs: Record<string, string> = {};\n        if (mention.className) {\n          attrs.class = mention.className;\n        }\n        attrs.href = mention.href;\n        if (mention.target) {\n          attrs.target = mention.target;\n        }\n\n        return `<a${buildAttrString(attrs)}>${encodeText(mention.name, cfg)}</a>`;\n      }),\n    },\n\n    // ─── Element Marks (create wrapper elements) ─────────────────────\n    marks: {\n      bold: boldMark,\n      italic: italicMark,\n      underline: underlineMark,\n      strike: strikeMark,\n\n      link: (content, value, node, collectedAttrs) => {\n        const rawHref = String(value);\n        const href = sanitizeUrl(rawHref, cfg);\n        if (!href) return content;\n\n        const meta = resolveLinkMeta(node, cfg.linkTarget, cfg.linkRel);\n        let attrs = `href=\"${encodeText(href, cfg)}\"`;\n        if (meta.target) {\n          attrs += ` target=\"${meta.target}\"`;\n        }\n        if (meta.rel) {\n          attrs += ` rel=\"${meta.rel}\"`;\n        }\n\n        const collected = serializeResolvedAttrs(collectedAttrs);\n        return `<a ${attrs}${collected}>${content}</a>`;\n      },\n\n      script: scriptMark,\n\n      code: codeMark,\n\n      font: createClassOrStyleMark('font', cfg),\n\n      size: createClassOrStyleMark('size', cfg),\n    },\n\n    // ─── Attributor Marks (contribute attrs to parent element) ───────\n    attributors: {\n      color: (value) => ({\n        style: { color: encodeText(String(value), cfg) },\n      }),\n\n      background: (value) => {\n        if (cfg.allowBackgroundClasses) {\n          return { classes: [`${cfg.classPrefix}-background-${value}`] };\n        }\n        return {\n          style: { 'background-color': encodeText(String(value), cfg) },\n        };\n      },\n    },\n  };\n}\n","import type { ResolvedConfig } from '../types/resolved-config';\nimport type { InlineStyleOverrides, SemanticHtmlConfig } from '../types/semantic-html-config';\n\n/**\n * Resolves a partial `SemanticHtmlConfig` into a fully-populated `ResolvedConfig`\n * by applying defaults for all missing values.\n */\nexport function resolveConfig(config?: SemanticHtmlConfig): ResolvedConfig {\n  const c = config ?? {};\n  let inlineStyles: false | InlineStyleOverrides = false;\n  if (c.inlineStyles === true) {\n    inlineStyles = {};\n  } else if (typeof c.inlineStyles === 'object') {\n    inlineStyles = c.inlineStyles;\n  }\n\n  return {\n    paragraphTag: c.paragraphTag ?? 'p',\n    orderedListTag: c.orderedListTag ?? 'ol',\n    bulletListTag: c.bulletListTag ?? 'ul',\n    listItemTag: c.listItemTag ?? 'li',\n    classPrefix: c.classPrefix ?? 'ql',\n    inlineStyles,\n    allowBackgroundClasses: c.allowBackgroundClasses ?? false,\n    linkTarget: c.linkTarget ?? '_blank',\n    linkRel: c.linkRel,\n    encodeHtml: c.encodeHtml ?? true,\n    codeSyntaxClass: c.codeSyntaxClass ?? false,\n    imageClass: c.imageClass ?? true,\n    preserveImageAlt: c.preserveImageAlt ?? false,\n    urlSanitizer: c.urlSanitizer,\n    customTag: c.customTag,\n    customTagAttributes: c.customTagAttributes,\n    customCssClasses: c.customCssClasses,\n    customCssStyles: c.customCssStyles,\n    beforeRender: c.beforeRender,\n    afterRender: c.afterRender,\n    customBlotRenderer: c.customBlotRenderer,\n  };\n}\n","import { BaseHtmlRenderer, escapeHtml } from '../base-html-renderer';\nimport { buildRendererConfig } from './functions/build-renderer-config';\nimport { resolveConfig } from './functions/resolve-config';\nimport type { ResolvedConfig } from './types/resolved-config';\nimport type { SemanticHtmlConfig } from './types/semantic-html-config';\n\n/**\n * Renders an AST into clean, configurable HTML.\n *\n * Produces markup compatible with quill-delta-to-html output by default,\n * using `ql-*` CSS classes for formatting. All aspects are configurable:\n * class prefix, tag names, inline styles mode, link behavior, and more.\n *\n * Suitable for CMS output, email, read-only display, or any context\n * where clean, configurable HTML matters.\n *\n * @example\n * ```ts\n * // Default: quill-delta-to-html compatible output\n * const renderer = new SemanticHtmlRenderer();\n * const html = renderer.render(ast);\n * ```\n *\n * @example\n * ```ts\n * // Customized output\n * const renderer = new SemanticHtmlRenderer({\n *   classPrefix: 'article',\n *   paragraphTag: 'div',\n *   linkTarget: '',\n *   inlineStyles: true,\n * });\n * ```\n */\nexport class SemanticHtmlRenderer extends BaseHtmlRenderer {\n  private readonly cfg: ResolvedConfig;\n\n  constructor(config?: SemanticHtmlConfig) {\n    const cfg = resolveConfig(config);\n    super(buildRendererConfig(cfg));\n    this.cfg = cfg;\n  }\n\n  // ─── Override renderText for encodeHtml=false ───────────────────────────\n\n  protected override renderText(text: string): string {\n    return this.cfg.encodeHtml ? escapeHtml(text) : text;\n  }\n}\n"]}