57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
import './styles.scss'
|
|
|
|
import { BubbleMenu, EditorContent, useEditor } from '@tiptap/react'
|
|
import StarterKit from '@tiptap/starter-kit'
|
|
import React, { useEffect } from 'react'
|
|
|
|
export default () => {
|
|
const editor = useEditor({
|
|
extensions: [
|
|
StarterKit,
|
|
],
|
|
content: `
|
|
<p>
|
|
Hey, try to select some text here. There will popup a menu for selecting some inline styles. Remember: you have full control about content and styling of this menu.
|
|
</p>
|
|
`,
|
|
})
|
|
|
|
const [isEditable, setIsEditable] = React.useState(true)
|
|
|
|
useEffect(() => {
|
|
if (editor) {
|
|
editor.setEditable(isEditable)
|
|
}
|
|
}, [isEditable, editor])
|
|
|
|
return (
|
|
<>
|
|
<div>
|
|
<input type="checkbox" checked={isEditable} onChange={() => setIsEditable(!isEditable)} />
|
|
Editable
|
|
</div>
|
|
{editor && <BubbleMenu editor={editor} tippyOptions={{ duration: 100 }}>
|
|
<button
|
|
onClick={() => editor.chain().focus().toggleBold().run()}
|
|
className={editor.isActive('bold') ? 'is-active' : ''}
|
|
>
|
|
bold
|
|
</button>
|
|
<button
|
|
onClick={() => editor.chain().focus().toggleItalic().run()}
|
|
className={editor.isActive('italic') ? 'is-active' : ''}
|
|
>
|
|
italic
|
|
</button>
|
|
<button
|
|
onClick={() => editor.chain().focus().toggleStrike().run()}
|
|
className={editor.isActive('strike') ? 'is-active' : ''}
|
|
>
|
|
strike
|
|
</button>
|
|
</BubbleMenu>}
|
|
<EditorContent editor={editor} />
|
|
</>
|
|
)
|
|
}
|