@blocknote/core
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
48 lines (43 loc) • 1.3 kB
text/typescript
import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js";
import { DefaultSuggestionItem } from "../../extensions/SuggestionMenu/DefaultSuggestionItem.js";
import { insertOrUpdateBlockForSlashMenu } from "../../extensions/SuggestionMenu/getDefaultSlashMenuItems.js";
import {
BlockSchema,
InlineContentSchema,
StyleSchema,
} from "../../schema/index.js";
import { createPageBreakBlockConfig } from "./block.js";
export function checkPageBreakBlocksInSchema<
I extends InlineContentSchema,
S extends StyleSchema,
>(
editor: BlockNoteEditor<any, I, S>,
): editor is BlockNoteEditor<
{
pageBreak: ReturnType<typeof createPageBreakBlockConfig>;
},
I,
S
> {
return "pageBreak" in editor.schema.blockSchema;
}
export function getPageBreakSlashMenuItems<
BSchema extends BlockSchema,
I extends InlineContentSchema,
S extends StyleSchema,
>(editor: BlockNoteEditor<BSchema, I, S>) {
const items: (Omit<DefaultSuggestionItem, "key"> & { key: "page_break" })[] =
[];
if (checkPageBreakBlocksInSchema(editor)) {
items.push({
...editor.dictionary.slash_menu.page_break,
onItemClick: () => {
insertOrUpdateBlockForSlashMenu(editor, {
type: "pageBreak",
});
},
key: "page_break",
});
}
return items;
}