Components
Media Toolbar Button
Media Toolbar Button
Insert or manage media elements using a toolbar button.
Installation
npx shadcx@latest add media-toolbar-button -r plate-ui
Examples
import React from 'react';
import {
BoldPlugin,
CodePlugin,
ItalicPlugin,
StrikethroughPlugin,
UnderlinePlugin,
} from '@udecode/plate-basic-marks/react';
import { useEditorReadOnly } from '@udecode/plate-common/react';
import {
FontBackgroundColorPlugin,
FontColorPlugin,
} from '@udecode/plate-font/react';
import { ListStyleType } from '@udecode/plate-indent-list';
import { ImagePlugin } from '@udecode/plate-media/react';
import { SparklesIcon } from 'lucide-react';
import { Icons, iconVariants } from '@/components/icons';
import { AIToolbarButton } from './ai-toolbar-button';
import { AlignDropdownMenu } from './align-dropdown-menu';
import { ColorDropdownMenu } from './color-dropdown-menu';
import { CommentToolbarButton } from './comment-toolbar-button';
import { EmojiDropdownMenu } from './emoji-dropdown-menu';
import { IndentListToolbarButton } from './indent-list-toolbar-button';
import { IndentTodoToolbarButton } from './indent-todo-toolbar-button';
import { IndentToolbarButton } from './indent-toolbar-button';
import { InsertDropdownMenu } from './insert-dropdown-menu';
import { LineHeightDropdownMenu } from './line-height-dropdown-menu';
import { LinkToolbarButton } from './link-toolbar-button';
import { MarkToolbarButton } from './mark-toolbar-button';
import { MediaToolbarButton } from './media-toolbar-button';
import { ModeDropdownMenu } from './mode-dropdown-menu';
import { MoreDropdownMenu } from './more-dropdown-menu';
import { OutdentToolbarButton } from './outdent-toolbar-button';
import { TableDropdownMenu } from './table-dropdown-menu';
import { ToggleToolbarButton } from './toggle-toolbar-button';
import { ToolbarGroup } from './toolbar';
import { TurnIntoDropdownMenu } from './turn-into-dropdown-menu';
export function FixedToolbarButtons() {
const readOnly = useEditorReadOnly();
return (
<div className="w-full">
<div
className="flex"
style={{
// Conceal the first separator on each line using overflow
transform: 'translateX(calc(-1px))',
}}
>
{!readOnly && (
<>
<ToolbarGroup>
<ToolbarGroup>
<AIToolbarButton
className="text-purple-500 hover:text-purple-600"
tooltip="Edit, generate, and more"
>
<SparklesIcon className="mr-1.5 !size-3.5" />
Ask AI
</AIToolbarButton>
</ToolbarGroup>
<InsertDropdownMenu />
<TurnIntoDropdownMenu />
</ToolbarGroup>
<ToolbarGroup>
<MarkToolbarButton nodeType={BoldPlugin.key} tooltip="Bold (⌘+B)">
<Icons.bold />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={ItalicPlugin.key}
tooltip="Italic (⌘+I)"
>
<Icons.italic />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={UnderlinePlugin.key}
tooltip="Underline (⌘+U)"
>
<Icons.underline />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={StrikethroughPlugin.key}
tooltip="Strikethrough (⌘+⇧+M)"
>
<Icons.strikethrough />
</MarkToolbarButton>
<MarkToolbarButton nodeType={CodePlugin.key} tooltip="Code (⌘+E)">
<Icons.code />
</MarkToolbarButton>
<ColorDropdownMenu
nodeType={FontColorPlugin.key}
tooltip="Text Color"
>
<Icons.color className={iconVariants({ variant: 'toolbar' })} />
</ColorDropdownMenu>
<ColorDropdownMenu
nodeType={FontBackgroundColorPlugin.key}
tooltip="Highlight Color"
>
<Icons.bg className={iconVariants({ variant: 'toolbar' })} />
</ColorDropdownMenu>
</ToolbarGroup>
<ToolbarGroup>
<AlignDropdownMenu />
<LineHeightDropdownMenu />
<IndentListToolbarButton nodeType={ListStyleType.Disc} />
<IndentListToolbarButton nodeType={ListStyleType.Decimal} />
<IndentTodoToolbarButton />
<OutdentToolbarButton />
<IndentToolbarButton />
</ToolbarGroup>
<ToolbarGroup>
<LinkToolbarButton />
<ToggleToolbarButton />
<MediaToolbarButton nodeType={ImagePlugin.key} />
<TableDropdownMenu />
<EmojiDropdownMenu />
<MoreDropdownMenu />
</ToolbarGroup>
</>
)}
<div className="grow" />
<ToolbarGroup>
<CommentToolbarButton />
<ModeDropdownMenu />
</ToolbarGroup>
</div>
</div>
);
}
Build your editor even faster
Complete, deployable AI-powered template with backend.
All components included.
Customizable and extensible.
Get all-accessCustomizable and extensible.