tiptap-editor-react
Version:
A modern WYSIWYG rich text editor based on tiptap and shadcn ui for React
460 lines (408 loc) • 11.2 kB
text/typescript
import { AnyExtension } from '@tiptap/core';
import { BubbleMenu } from '@tiptap/react';
import { Editor } from '@tiptap/react';
import { Editor as Editor_2 } from '@tiptap/core';
import { ForwardRefExoticComponent } from 'react';
import { RefAttributes } from 'react';
import { UseEditorOptions } from '@tiptap/react';
export { BubbleMenu }
/**
* Represents the BubbleMenuProps.
*/
declare interface BubbleMenuProps {
columnConfig?: {
/**
* @description Column menu hidden
* @default false
*/
hidden?: boolean;
};
tableConfig?: {
/**
* @description Table menu hidden
* @default false
*/
hidden?: boolean;
};
floatingMenuConfig?: {
/**
* @description Floating menu hidden
* @default false
*/
hidden?: boolean;
};
linkConfig?: {
/**
* @description Link menu hidden
* @default false
*/
hidden?: boolean;
};
textConfig?: {
/**
* @description Text menu hidden
* @default false
*/
hidden?: boolean;
};
imageConfig?: {
/**
* @description Image menu hidden
* @default false
*/
hidden?: boolean;
};
imageGifConfig?: {
/**
* @description Image menu hidden
* @default false
*/
hidden?: boolean;
};
videoConfig?: {
/**
* @description Video menu hidden
* @default false
*/
hidden?: boolean;
};
katexConfig?: {
/**
* @description katex menu hidden
* @default false
*/
hidden?: boolean;
};
excalidrawConfig?: {
/**
* @description excalidraw menu hidden
* @default false
*/
hidden?: boolean;
};
iframeConfig?: {
/**
* @description iframe menu hidden
* @default false
*/
hidden?: boolean;
};
mermaidConfig?: {
/**
* @description mermaid menu hidden
* @default false
*/
hidden?: boolean;
};
twitterConfig?: {
/**
* @description twitter menu hidden
* @default false
*/
hidden?: boolean;
};
render?: (props: BubbleMenuRenderProps, dom: React.ReactNode) => React.ReactNode;
}
/**
* Represents the BubbleMenuRenderProps.
*/
declare interface BubbleMenuRenderProps {
editor: Editor;
disabled: boolean;
bubbleMenu: BubbleMenuProps;
}
declare const _default: ForwardRefExoticComponent<RichTextEditorProps & RefAttributes< {
editor: Editor_2 | null;
}>>;
export default _default;
export { Editor }
/**
* Interface for RichTextEditor component props
*/
declare interface RichTextEditorProps {
/** Content of the editor */
content: string;
/** Extensions for the editor */
extensions: AnyExtension[];
/** Output format */
output: 'html' | 'json' | 'text';
/** Model value */
modelValue?: string | object;
/** Dark mode flag */
dark?: boolean;
/** Dense mode flag */
dense?: boolean;
/** Disabled flag */
disabled?: boolean;
/** Label for the editor */
label?: string;
/** Hide toolbar flag */
hideToolbar?: boolean;
/** Disable bubble menu flag */
disableBubble?: boolean;
/** Hide bubble menu flag */
hideBubble?: boolean;
/** Remove default wrapper flag */
removeDefaultWrapper?: boolean;
/** Maximum width */
maxWidth?: string | number;
/** Minimum height */
minHeight?: string | number;
/** Maximum height */
maxHeight?: string | number;
/** Content class */
contentClass?: string | string[] | Record<string, any>;
/** Content change callback */
onChangeContent?: (val: any) => void;
/** Bubble menu props */
bubbleMenu?: BubbleMenuProps;
/** Toolbar props */
toolbar?: ToolbarProps;
/** Use editor options */
useEditorOptions?: UseEditorOptions;
/** Use editor options */
resetCSS?: boolean;
/** Use editor options */
hideBorder?: boolean;
/** Hide add button */
hideAdd?: boolean;
}
/**
* Represents the ToolbarItemProps.
*/
declare interface ToolbarItemProps {
button: {
component: React.ComponentType<any>;
componentProps: Record<string, any>;
};
divider: boolean;
spacer: boolean;
type: string;
name: string;
}
declare interface ToolbarProps {
hideToolbar?: boolean;
render?: (props: ToolbarRenderProps, toolbarItems: ToolbarItemProps[], dom: any[], containerDom: (innerContent: React.ReactNode) => React.ReactNode) => React.ReactNode;
}
declare interface ToolbarRenderProps {
editor: Editor;
disabled: boolean;
}
export { UseEditorOptions }
export declare function useEditorState(): UseEditorStateReturn;
export declare interface UseEditorStateReturn {
isReady: boolean;
editor: Editor_2 | null;
editorRef: React.MutableRefObject<{
editor: Editor_2 | null;
}>;
}
export { }
declare module '@tiptap/core' {
interface Commands<ReturnType> {
video: {
/**
* Add an video
*/
setVideo: (options: Partial<SetVideoOptions>) => ReturnType;
/**
* Update an video
*/
updateVideo: (options: Partial<SetVideoOptions>) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
fontSize: {
/**
* Set the text font size. ex: "12px", "2em", or "small". Must be a valid
* CSS font-size
* (https://developer.mozilla.org/en-US/docs/Web/CSS/font-size).
*/
setFontSize: (fontSize: string) => ReturnType;
/**
* Unset the font size
*/
unsetFontSize: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
lineHeight: {
setLineHeight: (lineHeight: string) => ReturnType;
unsetLineHeight: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
tableCellBackground: {
setTableCellBackground: (color: string) => ReturnType;
unsetTableCellBackground: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
imageUpload: {
/**
* Add an image
*/
setImageInline: (options: Partial<SetImageAttrsOptions>) => ReturnType;
/**
* Update an image
*/
updateImage: (options: Partial<SetImageAttrsOptions>) => ReturnType;
/**
* Set image alignment
*/
setAlignImage: (align: 'left' | 'center' | 'right') => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
indent: {
/**
* Set the indent attribute
*/
indent: () => ReturnType;
/**
* Set the outdent attribute
*/
outdent: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
katex: {
setKatex: (arg?: IKatexAttrs) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
painter: {
setPainter: (marks: Mark[]) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
columns: {
insertColumns: (attrs?: {
cols: number;
}) => ReturnType;
addColBefore: () => ReturnType;
addColAfter: () => ReturnType;
deleteCol: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
emoji: {
setEmoji: (emoji: {
name: string;
emoji: string;
}) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
iframe: {
/**
* Add an iframe
*/
setIframe: (options: {
src: string;
service: string;
}) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
search: {
setSearchTerm: (searchTerm: string) => ReturnType;
setReplaceTerm: (replaceTerm: string) => ReturnType;
replace: () => ReturnType;
replaceAll: () => ReturnType;
goToPrevSearchResult: () => void;
goToNextSearchResult: () => void;
setCaseSensitive: (caseSensitive: boolean) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
exportWord: {
exportToWord: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
excalidraw: {
setExcalidraw: (attrs?: IExcalidrawAttrs) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
twitter: {
/**
* Insert a tweet
* @param options The tweet attributes
* @example editor.commands.setTweet({ src: 'https://x.com/seanpk/status/1800145949580517852' })
*/
setTweet: (options: SetTweetOptions) => ReturnType;
updateTweet: (options: SetTweetOptions) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
attachment: {
setAttachment: (attrs?: unknown) => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
imageGifUpload: {
/**
* Add an image gif
*/
setImageGif: (options: Partial<SetImageAttrsOptions>) => ReturnType;
/**
* Update an image gif
*/
updateImageGif: (options: Partial<SetImageAttrsOptions>) => ReturnType;
/**
* Set image alignment
*/
setAlignImageGif: (align: 'left' | 'center' | 'right') => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
tableOfContents: {
setTableOfContents: () => ReturnType;
removeTableOfContents: () => ReturnType;
};
}
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
mermaid: {
setMermaid: (options: any, replace?: any) => ReturnType;
setAlignImageMermaid: (align: 'left' | 'center' | 'right') => ReturnType;
};
}
}