import type { Editor } from "@tiptap/react" import { AlignmentControls } from "./components/AlignmentControls" import { ColorControl } from "./components/ColorControl" import { FontFamilyControl } from "./components/FontFamilyControl" import { FontSizeControl } from "./components/FontSizeControl" import { IndentControls } from "./components/IndentControls" import { LineHeightControl } from "./components/LineHeightControl" import { ListControls } from "./components/ListControls" import { ToolbarButton } from "./components/ToolbarButton" interface ToolbarProps { editor: Editor | null } export function Toolbar({ editor }: React.PropsWithChildren) { if (!editor) { return null } return (
{/* Undo/Redo */}
editor.chain().focus().undo().run()} disabled={!editor.can().undo()} icon="material-symbols:undo" title="Undo" /> editor.chain().focus().redo().run()} disabled={!editor.can().redo()} icon="material-symbols:redo" title="Redo" />
{/* Font Settings */}
{/* Text Style */}
editor.chain().focus().toggleBold().run()} isActive={editor.isActive("bold")} icon="mdi:format-bold" title="Bold" /> editor.chain().focus().toggleItalic().run()} isActive={editor.isActive("italic")} icon="mdi:format-italic" title="Italic" /> editor.chain().focus().toggleUnderline().run()} isActive={editor.isActive("underline")} icon="mdi:format-underline" title="Underline" /> editor.chain().focus().toggleStrike().run()} isActive={editor.isActive("strike")} icon="mdi:format-strikethrough" title="Strikethrough" />
{/* Lists */} {/* Alignment */} {/* Spacing and Indent */}
{/* Links and Media */}
{ const url = window.prompt("Enter link URL:") if (url?.trim()) { editor.chain().focus().extendMarkRange("link").setLink({ href: url.trim() }).run() } }} isActive={editor.isActive("link")} icon="mdi:link" title="Add Link" /> { editor.chain().focus().setImageUploadNode().run() }} icon="mdi:image" title="Upload Image" />
{/* Clear Format */} editor.chain().focus().clearNodes().unsetAllMarks().run()} icon="mdi:format-clear" title="Clear Format" />
) }