Drawer
Create freehand drawings and insert them into the document.
Setup
Start with the packages in Getting Started. The complete example below registers the feature and renders its UI — pick the React or the Vue tab. In an existing editor, merge the imports and extension entries into your setup, and place the controls inside your existing RichTextProvider.
'use client';
import { EditorContent, useEditor } from '@tiptap/react';
import { Document } from '@tiptap/extension-document';
import { Paragraph } from '@tiptap/extension-paragraph';
import { Text } from '@tiptap/extension-text';
import {
RichTextProvider,
Drawer,
RichTextDrawer,
RichTextBubbleDrawer,
} from 'ai-sparkwrite-editor';
import 'ai-sparkwrite-editor/style.css';
import 'easydrawer/styles.css';
const extensions = [Document, Paragraph, Text, Drawer];
export default function DrawerExample() {
const editor = useEditor({
extensions,
content: '<p>Try this feature here.</p>',
immediatelyRender: false,
});
if (!editor) return null;
return (
<RichTextProvider editor={editor}>
<RichTextDrawer />
<RichTextBubbleDrawer />
<EditorContent editor={editor} />
</RichTextProvider>
);
}React only
This feature's interactive UI depends on React libraries; the Vue layer does not include it yet. See Frameworks for what the Vue entry covers.
How to use
Load easydrawer/styles.css alongside the editor stylesheet. Open the drawing dialog, draw, and apply the result. You can provide an upload callback resolving to a durable URL to store the generated SVG remotely. Install easydrawer directly if needed to resolve its CSS import.
Loading behavior
The drawing canvas loads when a create or edit dialog opens. The first open may show a loading placeholder, and a failed module load offers a retry action. Keep the stylesheet import above so the canvas is styled when it becomes available.