/** * Inline node conversion for DOCX export */ import { TextRun, ImageRun, type IRunOptions, type ParagraphChild } from 'docx'; import type { DOCXThemeStyles, LinkDefinition, ImageBufferResult, EmojiStyle } from '../types/docx'; /** * Renderer interface for SVG conversion */ interface Renderer { render(type: string, content: string, options?: object): Promise<{ base64: string; width: number; height: number; format: string; }>; } /** * Options for creating inline converter */ interface InlineConverterOptions { themeStyles: DOCXThemeStyles; fetchImageAsBuffer: (url: string) => Promise; reportResourceProgress: () => void; linkDefinitions?: Map; renderer?: Renderer | null; emojiStyle?: EmojiStyle; linkColor?: string; } /** * Parent style for inline elements */ interface ParentStyle extends Partial { size?: number; bold?: boolean; italics?: boolean; strike?: boolean; } /** * AST Node types */ interface BaseNode { type: string; } interface TextNode extends BaseNode { type: 'text'; value: string; } interface StrongNode extends BaseNode { type: 'strong'; children: InlineNode[]; } interface EmphasisNode extends BaseNode { type: 'emphasis'; children: InlineNode[]; } interface DeleteNode extends BaseNode { type: 'delete'; children: InlineNode[]; } interface InlineCodeNode extends BaseNode { type: 'inlineCode'; value: string; } interface LinkNode extends BaseNode { type: 'link'; url: string; title?: string; children: InlineNode[]; } interface LinkReferenceNode extends BaseNode { type: 'linkReference'; identifier: string; children: InlineNode[]; } interface ImageNode extends BaseNode { type: 'image'; url: string; alt?: string; title?: string; } interface InlineMathNode extends BaseNode { type: 'inlineMath'; value: string; } interface BreakNode extends BaseNode { type: 'break'; } interface HtmlNode extends BaseNode { type: 'html'; value?: string; } interface SuperscriptNode extends BaseNode { type: 'superscript'; children: InlineNode[]; } interface SubscriptNode extends BaseNode { type: 'subscript'; children: InlineNode[]; } export type InlineNode = TextNode | StrongNode | EmphasisNode | DeleteNode | InlineCodeNode | LinkNode | LinkReferenceNode | ImageNode | InlineMathNode | BreakNode | HtmlNode | SuperscriptNode | SubscriptNode; /** * Inline converter result type */ export type InlineResult = ParagraphChild; /** * Inline converter interface */ export interface InlineConverter { convertInlineNodes(nodes: InlineNode[], parentStyle?: ParentStyle): Promise; convertInlineNode(node: InlineNode, parentStyle?: ParentStyle): Promise; convertImage(node: ImageNode): Promise; extractText(node: InlineNode | { type: string; children?: InlineNode[]; value?: string; }): string; } /** * Create an inline node converter * @param options - Configuration options * @returns Inline node converter */ export declare function createInlineConverter({ themeStyles, fetchImageAsBuffer, reportResourceProgress, linkDefinitions, renderer, emojiStyle, linkColor }: InlineConverterOptions): InlineConverter; export {};