/** * RevealUI Rich Text Editor - React Server Components * * Provides server-side rendering components for Lexical content. * Converts Lexical JSON state to React elements without requiring a browser. */ import { isSafeUrl, sanitizeUrl } from '@revealui/security/sanitize'; import type { SerializedEditorState, SerializedLexicalNode } from 'lexical'; import { type JSX } from 'react'; export type { SerializedEditorState }; export { isSafeUrl, sanitizeUrl }; interface SerializedElementNode extends SerializedLexicalNode { type: string; children?: SerializedLexicalNode[]; direction?: 'ltr' | 'rtl' | null; format?: string | number; indent?: number; tag?: string; listType?: 'bullet' | 'number' | 'check'; checked?: boolean; value?: number; } interface SerializedLinkNode extends SerializedElementNode { type: 'link'; fields?: { url?: string; linkType?: 'custom' | 'internal'; newTab?: boolean; doc?: { value: string; relationTo: string; }; }; } interface SerializedBlockNode extends SerializedLexicalNode { type: 'block'; fields?: Record; } export interface DefaultNodeTypes { type: string; children?: DefaultNodeTypes[]; format?: number; text?: string; tag?: string; listType?: string; checked?: boolean; value?: number; fields?: Record; } export interface SerializedBlockNodeGeneric> extends SerializedLexicalNode { type: 'block'; fields: T & { blockType: string; }; } export interface RscEntryLexicalCellProps { data?: SerializedEditorState | null; className?: string; } export interface RscEntryLexicalFieldProps { data?: SerializedEditorState | null; className?: string; } interface SerializeOptions { /** Custom block renderer */ renderBlock?: (node: SerializedBlockNode, index: number) => JSX.Element | null; /** Custom link renderer */ renderLink?: (node: SerializedLinkNode, children: JSX.Element | null, index: number) => JSX.Element; /** Custom image renderer */ renderImage?: (data: { src?: string; alt?: string; width?: number; height?: number; caption?: string; }, index: number) => JSX.Element | null; } /** * Serialize a Lexical editor state to React elements */ export declare function serializeLexicalState(data: SerializedEditorState | null | undefined, options?: SerializeOptions): JSX.Element | null; /** * Generate HTML string from Lexical nodes (server-side) * * @async * Uses ReactDOMServer.renderToString to convert React elements to HTML string. * Falls back to text extraction if ReactDOMServer is not available (e.g., edge runtime). * * @param data - Serialized Lexical editor state * @returns Promise resolving to HTML string */ export declare function $generateHtmlFromNodes(data: SerializedEditorState | null | undefined): Promise; /** * Server component for rendering Lexical content in table cells */ export declare function RscEntryLexicalCell({ data, className }: RscEntryLexicalCellProps): JSX.Element | null; /** * Server component for rendering Lexical content in form fields */ export declare function RscEntryLexicalField({ data, className }: RscEntryLexicalFieldProps): JSX.Element | null; /** * Generic RSC component for rendering Lexical content */ export interface RichTextContentProps { data: SerializedEditorState | null | undefined; className?: string; renderBlock?: (node: SerializedBlockNode, index: number) => JSX.Element | null; renderLink?: (node: SerializedLinkNode, children: JSX.Element | null, index: number) => JSX.Element; renderImage?: (data: { src?: string; alt?: string; width?: number; height?: number; caption?: string; }, index: number) => JSX.Element | null; } export declare function RichTextContent({ data, className, renderBlock, renderLink, renderImage, }: RichTextContentProps): JSX.Element | null; export default RichTextContent; //# sourceMappingURL=rsc.d.ts.map