UNPKG

@atelier-disko/payload-lexical-react-renderer

Version:
160 lines (159 loc) 5.09 kB
import React from "react"; export type AbstractNode<Type extends string> = { format?: "" | "start" | "center" | "right" | "justify" | number; type: Type; version: number; }; export type AbstractElementNode<Type extends string> = { direction: "ltr" | "rtl" | null; indent: number; } & AbstractNode<Type>; export type AbstractTextNode<Type extends string> = { detail: number; format: "" | number; mode: "normal"; style: string; text: string; } & AbstractNode<Type>; export type BlockNode<BlockData extends Record<string, unknown>, BlockType extends string> = { fields: { id: string; blockName: string; blockType: BlockType; } & BlockData; } & AbstractElementNode<"block">; type UnknownBlockNode = { fields: { id: string; blockName: string; blockType: string; [key: string]: unknown; }; } & AbstractNode<"block">; export type Root = { children: Node[]; } & AbstractElementNode<"root">; export type Mark = { text: string; bold?: boolean; italic?: boolean; underline?: boolean; strikethrough?: boolean; code?: boolean; subscript?: boolean; superscript?: boolean; highlight?: boolean; }; export type TextNode = AbstractTextNode<"text">; export type Linebreak = AbstractNode<"linebreak">; export type Tab = AbstractTextNode<"tab">; export type HorizontalRule = AbstractNode<"horizontalrule">; export type LinkNode = { children: TextNode[]; fields: { linkType: "custom"; newTab: boolean; url: string; } | { doc: { relationTo: string; value: unknown; }; linkType: "internal"; newTab: boolean; url: string; }; } & AbstractElementNode<"link">; export type AutoLinkNode = { children: TextNode[]; fields: { linkType: "custom"; newTab?: boolean; url: string; }; } & AbstractElementNode<"autolink">; export type HeadingNode = { tag: string; children: TextNode[]; } & AbstractElementNode<"heading">; export type ParagraphNode = { children: (TextNode | Linebreak | Tab | LinkNode | AutoLinkNode | HorizontalRule)[]; } & AbstractElementNode<"paragraph">; export type ListItemNode = { children: (TextNode | ListNode)[]; value: number; } & AbstractElementNode<"listitem">; export type ListNode = { tag: string; listType: "number" | "bullet" | "check"; start: number; children: ListItemNode[]; } & AbstractElementNode<"list">; export type QuoteNode = { children: TextNode[]; } & AbstractElementNode<"quote">; export type UploadNode<MediaType = { id: string; alt: string; updatedAt: string; createdAt: string; url?: string; filename?: string; mimeType?: string; filesize?: number; width?: number; height?: number; }> = { fields: null; relationTo: "media"; value: MediaType; } & AbstractElementNode<"upload">; export type Node = HeadingNode | ParagraphNode | UploadNode | TextNode | ListNode | ListItemNode | QuoteNode | Linebreak | Tab | LinkNode | UnknownBlockNode | AutoLinkNode | HorizontalRule; export type ElementRenderers = { heading: (props: { children: React.ReactNode; } & Omit<HeadingNode, "children">) => React.ReactNode; list: (props: { children: React.ReactNode; } & Omit<ListNode, "children">) => React.ReactNode; listItem: (props: { children: React.ReactNode; } & Omit<ListItemNode, "children">) => React.ReactNode; paragraph: (props: { children: React.ReactNode; } & Omit<ParagraphNode, "children">) => React.ReactNode; quote: (props: { children: React.ReactNode; } & Omit<QuoteNode, "children">) => React.ReactNode; link: (props: { children: React.ReactNode; } & Omit<LinkNode, "children">) => React.ReactNode; autolink: (props: { children: React.ReactNode; } & Omit<AutoLinkNode, "children">) => React.ReactNode; linebreak: () => React.ReactNode; tab: () => React.ReactNode; upload: (props: UploadNode) => React.ReactNode; horizontalRule: () => React.ReactNode; [key: string]: (props: any) => React.ReactNode; }; export type RenderMark = (mark: Mark) => React.ReactNode; export type PayloadLexicalReactRendererContent = { root: Root; }; export type PayloadLexicalReactRendererProps<Blocks extends { [key: string]: any; }> = { content: PayloadLexicalReactRendererContent; elementRenderers?: ElementRenderers; renderMark?: RenderMark; blockRenderers?: { [BlockName in Extract<keyof Blocks, string>]?: (props: BlockNode<Blocks[BlockName], BlockName>) => React.ReactNode; }; }; export declare const defaultElementRenderers: ElementRenderers; export declare const defaultRenderMark: RenderMark; export declare function PayloadLexicalReactRenderer<Blocks extends { [key: string]: any; }>({ content, elementRenderers, renderMark, blockRenderers, }: PayloadLexicalReactRendererProps<Blocks>): import("react/jsx-runtime").JSX.Element; export {};