import { RTETypeEnum } from "./enums" import type { EmbedByUid } from "../components/jsontohtml" import type { Attributes, RTEAnchorAttrs, RTEAssetAttrs, RTEImageVaultAttrs, RTELinkAttrs, } from "./attrs" import type { RenderOptions } from "./option" export interface RTEDefaultNode { attrs: Attributes children: RTENode[] type: RTETypeEnum uid: string } export interface RTELinkNode { attrs: Attributes children: RTENode[] type: RTETypeEnum uid: string } export interface RTEReferenceAssetNode extends RTEDefaultNode { attrs: RTEAssetAttrs } export interface RTEAnchorNode extends RTEDefaultNode { attrs: RTEAnchorAttrs type: RTETypeEnum.a } export interface RTEReferenceLinkNode extends RTEDefaultNode { attrs: RTELinkAttrs } export interface RTEImageVaultNode extends RTEDefaultNode { attrs: RTEImageVaultAttrs type: RTETypeEnum.ImageVault } export enum RTEMarkType { bold = "bold", break = "break", classnameOrId = "classnameOrId", inlineCode = "inlineCode", italic = "italic", strikethrough = "strikethrough", subscript = "subscript", superscript = "superscript", underline = "underline", } type RTETextNodeOptionalKeys = { [key in RTEMarkType]?: boolean } export type RTETextNode = RTETextNodeOptionalKeys & { classname?: string id?: string text: string } export type RTERegularNode = RTEDefaultNode | RTEAnchorNode | RTEImageVaultNode export type RTEImageNode = RTEDefaultNode | RTEImageVaultNode export type RTEReferenceNode = RTEAnchorNode export type RTENode = RTERegularNode | RTEReferenceNode | RTETextNode export type RTERenderMark = ( children: React.ReactNode, classname?: string, id?: string ) => JSX.Element export interface RTEDocument extends RTEDefaultNode { type: RTETypeEnum.doc _version: number } export type RTERenderOptionComponent = ( node: RTERegularNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions ) => React.ReactNode export type RTENext = ( nodes: RTENode[], embeds: EmbedByUid, fullRenderOptions: RenderOptions ) => string