UNPKG

@blocknote/react

Version:

A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.

340 lines (339 loc) 10 kB
import { ChangeEvent, ComponentType, CSSProperties, HTMLInputAutoCompleteAttribute, KeyboardEvent, MouseEvent, ReactNode } from "react"; import { BlockNoteEditor } from "@blocknote/core"; import { User } from "@blocknote/core/comments"; import { DefaultReactGridSuggestionItem } from "../components/SuggestionMenu/GridSuggestionMenu/types.js"; import { DefaultReactSuggestionItem } from "../components/SuggestionMenu/types.js"; type ToolbarRootType = { className?: string; children?: ReactNode; onMouseEnter?: () => void; onMouseLeave?: () => void; variant?: "default" | "action-toolbar"; }; type ToolbarButtonType = { className?: string; mainTooltip?: string; secondaryTooltip?: string; icon?: ReactNode; onClick?: (e: MouseEvent) => void; isSelected?: boolean; isDisabled?: boolean; variant?: "default" | "compact"; } & ({ children: ReactNode; label?: string; } | { children?: undefined; label: string; }); type ToolbarSelectType = { className?: string; items: { text: string; icon: ReactNode; onClick: () => void; isSelected: boolean; isDisabled?: boolean; }[]; isDisabled?: boolean; }; type MenuButtonType = { className?: string; onClick?: (e: MouseEvent) => void; icon?: ReactNode; onDragStart?: (e: React.DragEvent) => void; onDragEnd?: (e: React.DragEvent) => void; draggable?: boolean; } & ({ children: ReactNode; label?: string; } | { children?: undefined; label: string; }); export type ComponentProps = { FormattingToolbar: { Root: ToolbarRootType; Button: ToolbarButtonType; Select: ToolbarSelectType; }; FilePanel: { Root: { className?: string; tabs: { name: string; tabPanel: ReactNode; }[]; openTab: string; setOpenTab: (name: string) => void; defaultOpenTab: string; loading: boolean; }; Button: { className?: string; onClick: () => void; } & ({ children: ReactNode; label?: string; } | { children?: undefined; label: string; }); FileInput: { className?: string; accept: string; value: File | null; placeholder: string; onChange: (payload: File | null) => void; }; TabPanel: { className?: string; children?: ReactNode; }; TextInput: { className?: string; value: string; placeholder: string; onChange: (event: ChangeEvent<HTMLInputElement>) => void; onKeyDown: (event: KeyboardEvent) => void; }; }; LinkToolbar: { Root: ToolbarRootType; Button: ToolbarButtonType; Select: ToolbarSelectType; }; SideMenu: { Root: { className?: string; children?: ReactNode; }; Button: { className?: string; onClick?: (e: MouseEvent) => void; icon?: ReactNode; onDragStart?: (e: React.DragEvent) => void; onDragEnd?: (e: React.DragEvent) => void; draggable?: boolean; } & ({ children: ReactNode; label?: string; } | { children?: undefined; label: string; }); }; SuggestionMenu: { Root: { id: string; className?: string; children?: ReactNode; }; EmptyItem: { className?: string; children?: ReactNode; }; Item: { className?: string; id: string; isSelected: boolean; onClick: () => void; item: Omit<DefaultReactSuggestionItem, "onItemClick">; }; Label: { className?: string; children?: ReactNode; }; Loader: { className?: string; }; }; GridSuggestionMenu: { Root: { id: string; columns: number; className?: string; children?: ReactNode; }; EmptyItem: { columns: number; className?: string; children?: ReactNode; }; Item: { className?: string; id: string; isSelected: boolean; onClick: () => void; item: DefaultReactGridSuggestionItem; }; Loader: { columns: number; className?: string; children?: ReactNode; }; }; TableHandle: { Root: { className?: string; draggable: boolean; onDragStart: (e: React.DragEvent) => void; onDragEnd: () => void; style?: CSSProperties; } & ({ children: ReactNode; label?: string; } | { children?: undefined; label: string; }); ExtendButton: { className?: string; onClick: (e: React.MouseEvent) => void; onMouseDown: (e: React.MouseEvent) => void; children: ReactNode; }; }; Comments: { Card: { className?: string; headerText?: string; selected?: boolean; onFocus?: (event: React.FocusEvent) => void; onBlur?: (event: React.FocusEvent) => void; tabIndex?: number; children?: ReactNode; }; CardSection: { className?: string; children?: ReactNode; }; ExpandSectionsPrompt: { className?: string; children?: ReactNode; }; Editor: { className?: string; autoFocus?: boolean; editable: boolean; editor: BlockNoteEditor<any, any, any>; onFocus?: () => void; onBlur?: () => void; }; Comment: { className?: string; children?: ReactNode; authorInfo: "loading" | User; timeString: string; edited: boolean; actions?: ReactNode; showActions?: boolean | "hover"; }; }; Generic: { Badge: { Root: { className?: string; text: string; icon?: ReactNode; isSelected?: boolean; mainTooltip?: string; secondaryTooltip?: string; onClick?: (event: React.MouseEvent) => void; onMouseEnter?: () => void; }; Group: { className?: string; children: ReactNode; }; }; Form: { Root: { children?: ReactNode; }; TextInput: { className?: string; name: string; label?: string; variant?: "default" | "large"; icon: ReactNode; rightSection?: ReactNode; autoFocus?: boolean; placeholder?: string; disabled?: boolean; value: string; onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void; onChange: (event: ChangeEvent<HTMLInputElement>) => void; onSubmit?: () => void; autoComplete?: HTMLInputAutoCompleteAttribute; }; }; Menu: { Root: { sub?: boolean; onOpenChange?: (open: boolean) => void; position?: "top" | "right" | "bottom" | "left" | `${"top" | "right" | "bottom" | "left"}-${"start" | "end"}`; children?: ReactNode; }; Divider: { className?: string; }; Dropdown: { className?: string; children?: ReactNode; sub?: boolean; }; Item: { className?: string; children?: ReactNode; subTrigger?: boolean; icon?: ReactNode; checked?: boolean; onClick?: () => void; }; Label: { className?: string; children?: ReactNode; }; Trigger: { children?: ReactNode; sub?: boolean; }; Button: MenuButtonType; }; Popover: { Root: { opened?: boolean; position?: "top" | "right" | "bottom" | "left" | `${"top" | "right" | "bottom" | "left"}-${"start" | "end"}`; children?: ReactNode; }; Content: { className?: string; variant: "form-popover" | "panel-popover"; children?: ReactNode; }; Trigger: { children?: ReactNode; }; }; Toolbar: { Root: ToolbarRootType; Button: ToolbarButtonType; Select: ToolbarSelectType; }; }; }; export type Components = { [Components in keyof Omit<ComponentProps, "Generic">]: { [Component in keyof ComponentProps[Components]]: ComponentType<ComponentProps[Components][Component]>; }; } & { Generic: { [GenericComponents in keyof ComponentProps["Generic"]]: { [Component in keyof ComponentProps["Generic"][GenericComponents]]: ComponentType<ComponentProps["Generic"][GenericComponents][Component]>; }; }; }; export declare const ComponentsContext: import("react").Context<Components | undefined>; export declare function useComponentsContext(): Components | undefined; export {};