Components
Turn Into Dropdown Menu
Turn Into Dropdown Menu
Convert selected content or elements into different formats or types using a dropdown menu.
Installation
npx shadcx@latest add turn-into-dropdown-menu -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 { Icons, iconVariants } from '@/components/icons';
import { AlignDropdownMenu } from '@/components/plate-ui/align-dropdown-menu';
import { CommentToolbarButton } from '@/components/plate-ui/comment-toolbar-button';
import { EmojiDropdownMenu } from '@/components/plate-ui/emoji-dropdown-menu';
import { IndentListToolbarButton } from '@/components/plate-ui/indent-list-toolbar-button';
import { IndentToolbarButton } from '@/components/plate-ui/indent-toolbar-button';
import { LineHeightDropdownMenu } from '@/components/plate-ui/line-height-dropdown-menu';
import { LinkToolbarButton } from '@/components/plate-ui/link-toolbar-button';
import { MediaToolbarButton } from '@/components/plate-ui/media-toolbar-button';
import { MoreDropdownMenu } from '@/components/plate-ui/more-dropdown-menu';
import { OutdentToolbarButton } from '@/components/plate-ui/outdent-toolbar-button';
import { TableDropdownMenu } from '@/components/plate-ui/table-dropdown-menu';
import { ColorDropdownMenu } from './color-dropdown-menu';
import { IndentTodoToolbarButton } from './indent-todo-toolbar-button';
import { InsertDropdownMenu } from './insert-dropdown-menu';
import { MarkToolbarButton } from './mark-toolbar-button';
import { ModeDropdownMenu } from './mode-dropdown-menu';
import { ToolbarGroup } from './toolbar';
import { TurnIntoDropdownMenu } from './turn-into-dropdown-menu';
export function FixedToolbarButtons() {
const readOnly = useEditorReadOnly();
return (
<div className="w-full overflow-hidden">
<div
className="flex flex-wrap"
style={{
transform: 'translateX(calc(-1px))',
}}
>
{!readOnly && (
<>
<ToolbarGroup noSeparator>
<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>
</ToolbarGroup>
<ToolbarGroup>
<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 />
<MediaToolbarButton nodeType={ImagePlugin.key} />
<TableDropdownMenu />
<EmojiDropdownMenu />
<MoreDropdownMenu />
</ToolbarGroup>
</>
)}
<div className="grow" />
<ToolbarGroup noSeparator>
<CommentToolbarButton />
<ModeDropdownMenu />
</ToolbarGroup>
</div>
</div>
);
}
import React from 'react';
import {
BoldPlugin,
CodePlugin,
ItalicPlugin,
StrikethroughPlugin,
UnderlinePlugin,
} from '@udecode/plate-basic-marks/react';
import { useEditorReadOnly } from '@udecode/plate-common/react';
import { Icons } from '@/components/icons';
import { CommentToolbarButton } from '@/components/plate-ui/comment-toolbar-button';
import { LinkToolbarButton } from '@/components/plate-ui/link-toolbar-button';
import { MarkToolbarButton } from './mark-toolbar-button';
import { MoreDropdownMenu } from './more-dropdown-menu';
import { TurnIntoDropdownMenu } from './turn-into-dropdown-menu';
export function FloatingToolbarButtons() {
const readOnly = useEditorReadOnly();
return (
<>
{!readOnly && (
<>
<TurnIntoDropdownMenu />
<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>
<LinkToolbarButton />
</>
)}
<CommentToolbarButton />
{!readOnly && <MoreDropdownMenu />}
</>
);
}
Plus
In Plate Plus, we have optimized the styles and added beautiful animations.
Try it out by selecting some text in the below editor.
Build your editor even faster
Complete, deployable AI-powered template with backend.
All components included.
Customizable and extensible.
Get all-accessCustomizable and extensible.