{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "toolbar-docs",
  "title": "Toolbar",
  "description": "Fixed and floating toolbars for your editor.",
  "files": [
    {
      "path": "../../content/docs/(plugins)/(functionality)/toolbar.mdx",
      "content": "---\ntitle: Toolbar\ndescription: Fixed and floating toolbars for your editor.\ndocs:\n  - route: https://pro.platejs.org/docs/examples/floating-toolbar\n    title: Plus\n  - route: /docs/components/fixed-toolbar\n    title: Fixed Toolbar\n  - route: /docs/components/floating-toolbar\n    title: Floating Toolbar\n---\n\n<ComponentPreview name=\"basic-nodes-demo\" />\n\n<PackageInfo>\n\n## Features\n\n- **Fixed Toolbar**: Persistent toolbar that sticks to the top of the editor\n- **Floating Toolbar**: Contextual toolbar that appears on text selection\n- **Customizable Buttons**: Easily add, remove, and reorder toolbar buttons\n- **Responsive Design**: Adapts to different screen sizes and content\n- **Plugin Integration**: Seamless integration with Plate plugins and UI components\n\n</PackageInfo>\n\n## Kit Usage\n\n<Steps>\n\n### Installation\n\nThe fastest way to add toolbar functionality is with the `FixedToolbarKit` and `FloatingToolbarKit`, which include pre-configured toolbar plugins along with their [Plate UI](/docs/installation/plate-ui) components.\n\n<ComponentSource name=\"fixed-toolbar-kit\" />\n<ComponentSource name=\"floating-toolbar-kit\" />\n\n- [`FixedToolbar`](/docs/components/fixed-toolbar): Renders a persistent toolbar above the editor\n- [`FixedToolbarButtons`](/docs/components/fixed-toolbar-buttons): Pre-configured button set for the fixed toolbar\n- [`FloatingToolbar`](/docs/components/floating-toolbar): Renders a contextual toolbar on text selection\n- [`FloatingToolbarButtons`](/docs/components/floating-toolbar-buttons): Pre-configured button set for the floating toolbar\n\n### Add Kit\n\n```tsx\nimport { createPlateEditor } from 'platejs/react';\nimport { FixedToolbarKit } from '@/components/editor/plugins/fixed-toolbar-kit';\nimport { FloatingToolbarKit } from '@/components/editor/plugins/floating-toolbar-kit';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    ...FixedToolbarKit,\n    ...FloatingToolbarKit,\n  ],\n});\n```\n\n</Steps>\n\n## Manual Usage\n\n<Steps>\n\n### Create Plugins\n\n```tsx\nimport { createPlatePlugin } from 'platejs/react';\nimport { FixedToolbar } from '@/components/ui/fixed-toolbar';\nimport { FixedToolbarButtons } from '@/components/ui/fixed-toolbar-buttons';\nimport { FloatingToolbar } from '@/components/ui/floating-toolbar';\nimport { FloatingToolbarButtons } from '@/components/ui/floating-toolbar-buttons';\n\nconst fixedToolbarPlugin = createPlatePlugin({\n  key: 'fixed-toolbar',\n  render: {\n    beforeEditable: () => (\n      <FixedToolbar>\n        <FixedToolbarButtons />\n      </FixedToolbar>\n    ),\n  },\n});\n\nconst floatingToolbarPlugin = createPlatePlugin({\n  key: 'floating-toolbar',\n  render: {\n    afterEditable: () => (\n      <FloatingToolbar>\n        <FloatingToolbarButtons />\n      </FloatingToolbar>\n    ),\n  },\n});\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    fixedToolbarPlugin,\n    floatingToolbarPlugin,\n  ],\n});\n```\n\n- `render.beforeEditable`: Renders [`FixedToolbar`](/docs/components/fixed-toolbar) above the editor content\n- `render.afterEditable`: Renders [`FloatingToolbar`](/docs/components/floating-toolbar) as an overlay after the editor\n\n### Customizing Fixed Toolbar Buttons\n\nThe `FixedToolbarButtons` component contains the default set of buttons for the fixed toolbar.\n\n<ComponentSource name=\"fixed-toolbar-buttons\" />\n\nTo customize it, you can edit `components/ui/fixed-toolbar-buttons.tsx`.\n\n### Customizing Floating Toolbar Buttons\n\nSimilarly, you can customize the floating toolbar by editing `components/ui/floating-toolbar-buttons.tsx`.\n\n<ComponentSource name=\"floating-toolbar-buttons\" />\n\n\n### Creating Custom Button\n\nThis example shows a button that inserts custom text into the editor.\n\n```tsx\nimport { useEditorRef } from 'platejs/react';\nimport { CustomIcon } from 'lucide-react';\nimport { ToolbarButton } from '@/components/ui/toolbar';\n\nexport function CustomToolbarButton() {\n  const editor = useEditorRef();\n\n  return (\n    <ToolbarButton\n      onClick={() => {\n        // Custom action\n        editor.tf.insertText('Custom text');\n      }}\n      tooltip=\"Custom Action\"\n    >\n      <CustomIcon />\n    </ToolbarButton>\n  );\n}\n```\n\n### Creating Mark Button\n\nFor toggling marks like bold or italic, you can use the [`MarkToolbarButton`](/docs/components/mark-toolbar-button) component. It simplifies the process by handling the toggle state and action automatically.\n\nThis example creates a \"Bold\" button.\n\n```tsx\nimport { BoldIcon } from 'lucide-react';\n\nimport { MarkToolbarButton } from '@/components/ui/mark-toolbar-button';\n\nexport function BoldToolbarButton() {\n  return (\n    <MarkToolbarButton nodeType=\"bold\" tooltip=\"Bold (⌘+B)\">\n      <BoldIcon />\n    </MarkToolbarButton>\n  );\n}\n```\n\n- `nodeType`: Specifies the mark to toggle (e.g., `bold`, `italic`).\n- `tooltip`: Provides a helpful tooltip for the button.\n- The `MarkToolbarButton` uses `useMarkToolbarButtonState` to get the toggle state and `useMarkToolbarButton` to get the `onClick` handler and other props.\n\n### Turn Into Toolbar Button\n\nThe [`TurnIntoToolbarButton`](/docs/components/turn-into-toolbar-button) provides a dropdown menu to convert the current block into different types (headings, lists, quotes, etc.).\n\n<ComponentSource name=\"turn-into-toolbar-button\" />\n\nTo add a new block type to the turn-into options, edit the `turnIntoItems` array:\n\n```tsx\nconst turnIntoItems = [\n  // ... existing items\n  {\n    icon: <CustomIcon />,\n    keywords: ['custom', 'special'],\n    label: 'Custom Block',\n    value: 'custom-block',\n  },\n];\n```\n\n### Insert Toolbar Button\n\nThe [`InsertToolbarButton`](/docs/components/insert-toolbar-button) provides a dropdown menu to insert various elements (blocks, lists, media, inline elements).\n\n<ComponentSource name=\"insert-toolbar-button\" />\n\nTo add a new insertable item, add it to the appropriate group in the `groups` array:\n\n```tsx\n{\n  group: 'Basic blocks',\n  items: [\n    // ... existing items\n    {\n      icon: <CustomIcon />,\n      label: 'Custom Block',\n      value: 'custom-block',\n    },\n  ].map((item) => ({\n    ...item,\n    onSelect: (editor, value) => {\n      insertBlock(editor, value);\n    },\n  })),\n}\n```\n\n</Steps>\n\n## Plate Plus\n\n<ComponentPreviewPro name=\"floating-toolbar-pro\" />\n\n## Plugins\n\n### `FixedToolbarKit`\n\nPlugin that renders a fixed toolbar above the editor content.\n\n<API name=\"FixedToolbarKit\">\n<APIOptions>\n  <APIItem name=\"render.beforeEditable\" type=\"() => ReactNode\">\n    Renders the fixed toolbar before the editor content. Contains FixedToolbarButtons by default.\n  </APIItem>\n</APIOptions>\n</API>\n\n### `FloatingToolbarKit`\n\nPlugin that renders a floating toolbar that appears on text selection.\n\n<API name=\"FloatingToolbarKit\">\n<APIOptions>\n  <APIItem name=\"render.afterEditable\" type=\"() => ReactNode\">\n    Renders the floating toolbar as an overlay after the editor. Contains FloatingToolbarButtons by default.\n  </APIItem>\n</APIOptions>\n</API> ",
      "type": "registry:file",
      "target": "content/docs/plate/(plugins)/(functionality)/toolbar.mdx"
    }
  ],
  "type": "registry:file"
}