UNPKG

@blocknote/core

Version:

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

56 lines (50 loc) 1.56 kB
import { Extension } from "@tiptap/core"; import { Plugin } from "prosemirror-state"; import type { BlockNoteEditor } from "../../../editor/BlockNoteEditor.js"; import { BlockSchema, InlineContentSchema, StyleSchema, } from "../../../schema/index.js"; import { acceptedMIMETypes } from "./acceptedMIMETypes.js"; import { handleFileInsertion } from "./handleFileInsertion.js"; export const createDropFileExtension = < BSchema extends BlockSchema, I extends InlineContentSchema, S extends StyleSchema, >( editor: BlockNoteEditor<BSchema, I, S>, ) => Extension.create<{ editor: BlockNoteEditor<BSchema, I, S> }, undefined>({ name: "dropFile", addProseMirrorPlugins() { return [ new Plugin({ props: { handleDOMEvents: { drop(_view, event) { if (!editor.isEditable) { return; } let format: (typeof acceptedMIMETypes)[number] | null = null; for (const mimeType of acceptedMIMETypes) { if (event.dataTransfer!.types.includes(mimeType)) { format = mimeType; break; } } if (format === null) { return true; } if (format === "Files") { handleFileInsertion(event, editor); return true; } return false; }, }, }, }), ]; }, });