import type { CitationDefinition, MagicTextAstNode, MagicTextNodeType, MagicTextParserOptions } from '@hashbrownai/core'; import { type MouseEvent, type ReactNode } from 'react'; /** * Metadata available when a citation node is rendered. * * @public */ export interface MagicTextCitationRenderData { id: string; number: number | string; definition?: CitationDefinition; } /** * Props for the `MagicTextRenderer` component. * * @public */ export interface MagicTextRendererProps { /** * Full markdown source that grows over time. */ children: string; /** * Optional parser option overrides. */ options?: Partial; /** * When `true`, finalizes the parser state after applying the latest text. */ isComplete?: boolean; /** * Caret rendering behavior for streaming output. * * - `false`/`undefined`: no caret * - `true`: render the default caret * - `ReactNode`: render a custom caret node * - function: render a custom caret node from parser state */ caret?: MagicTextCaret; /** * Optional class applied to the root element. */ className?: string; /** * Called when a link or autolink is clicked. */ onLinkClick?: (event: MouseEvent, url: string, node: MagicTextAstNode) => void; /** * Called when a citation reference is clicked. */ onCitationClick?: (event: MouseEvent, citation: MagicTextCitationRenderData, node: MagicTextAstNode) => void; /** * Optional custom renderers keyed by Magic Text node type. */ nodeRenderers?: MagicTextNodeRenderers; } /** * Props supplied to a custom node renderer. * * @public */ export interface MagicTextNodeRendererProps { /** * The immutable AST node being rendered. */ node: TNode; /** * Already-rendered child content for container nodes. */ children: ReactNode; /** * Default element tree produced by `MagicTextRenderer` for this node. */ defaultNode: ReactNode; /** * Citation metadata when rendering a citation node. */ citation?: MagicTextCitationRenderData; } /** * Custom renderer callback for a specific Magic Text node. * * @public */ export type MagicTextNodeRenderer = (props: MagicTextNodeRendererProps) => ReactNode; /** * Render context supplied to caret renderer callbacks. * * @public */ export interface MagicTextCaretRenderProps { /** * Whether the parser state is complete for the current source text. */ isComplete: boolean; /** * The deepest currently open AST node, if any. */ openNode: MagicTextAstNode | null; } /** * Callback type for custom caret renderers. * * @public */ export type MagicTextCaretRenderer = (props: MagicTextCaretRenderProps) => ReactNode; /** * Supported caret prop values. * * @public */ export type MagicTextCaret = boolean | ReactNode | MagicTextCaretRenderer; type MagicTextNodeOfType = Extract; /** * Supported key names for `nodeRenderers`. * * @public */ export type MagicTextNodeRendererKey = 'node' | 'document' | 'paragraph' | 'heading' | 'blockquote' | 'list' | 'listItem' | 'codeBlock' | 'table' | 'tableRow' | 'tableCell' | 'thematicBreak' | 'text' | 'em' | 'strong' | 'strikethrough' | 'inlineCode' | 'softBreak' | 'hardBreak' | 'image' | 'link' | 'autolink' | 'citation'; type MagicTextNodeByRendererKey = { node: MagicTextAstNode; document: MagicTextNodeOfType<'document'>; paragraph: MagicTextNodeOfType<'paragraph'>; heading: MagicTextNodeOfType<'heading'>; blockquote: MagicTextNodeOfType<'blockquote'>; list: MagicTextNodeOfType<'list'>; listItem: MagicTextNodeOfType<'list-item'>; codeBlock: MagicTextNodeOfType<'code-block'>; table: MagicTextNodeOfType<'table'>; tableRow: MagicTextNodeOfType<'table-row'>; tableCell: MagicTextNodeOfType<'table-cell'>; thematicBreak: MagicTextNodeOfType<'thematic-break'>; text: MagicTextNodeOfType<'text'>; em: MagicTextNodeOfType<'em'>; strong: MagicTextNodeOfType<'strong'>; strikethrough: MagicTextNodeOfType<'strikethrough'>; inlineCode: MagicTextNodeOfType<'inline-code'>; softBreak: MagicTextNodeOfType<'soft-break'>; hardBreak: MagicTextNodeOfType<'hard-break'>; image: MagicTextNodeOfType<'image'>; link: MagicTextNodeOfType<'link'>; autolink: MagicTextNodeOfType<'autolink'>; citation: MagicTextNodeOfType<'citation'>; }; /** * Custom renderers keyed by camelCase node names. * * @public */ export type MagicTextNodeRenderers = Partial<{ [TKey in MagicTextNodeRendererKey]: MagicTextNodeRenderer; }>; /** * Helper for creating typed Magic Text node renderer maps. * * @public */ export declare function createMagicTextNodeRenderers(renderers: T): T; /** * React renderer for streaming Magic Text parser output. * * @public */ export declare function MagicTextRenderer({ children, options, isComplete, caret, className, onLinkClick, onCitationClick, nodeRenderers, }: MagicTextRendererProps): import("react/jsx-runtime").JSX.Element; export {}; //# sourceMappingURL=magic-text-renderer.d.ts.map