Align Toolbar Button
plate/align-toolbar-buttonFreeComponent
A dropdown menu for text alignment controls.
Live preview
live · rendered by the registry
Rendered by plate on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://platejs.org/r/align-toolbar-button.jsonSource
1'use client';23import * as React from 'react';45import type { Alignment } from '@platejs/basic-styles';6import type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';78import { TextAlignPlugin } from '@platejs/basic-styles/react';9import {10 AlignCenterIcon,11 AlignJustifyIcon,12 AlignLeftIcon,13 AlignRightIcon,14} from 'lucide-react';15import { useEditorPlugin, useSelectionFragmentProp } from 'platejs/react';1617import {18 DropdownMenu,19 DropdownMenuContent,20 DropdownMenuRadioGroup,21 DropdownMenuRadioItem,22 DropdownMenuTrigger,23} from '@/components/ui/dropdown-menu';2425import { ToolbarButton } from './toolbar';2627const items = [28 {29 icon: AlignLeftIcon,30 value: 'left',31 },32 {33 icon: AlignCenterIcon,34 value: 'center',35 },36 {37 icon: AlignRightIcon,38 value: 'right',39 },40 {41 icon: AlignJustifyIcon,42 value: 'justify',43 },44];4546export function AlignToolbarButton(props: DropdownMenuProps) {47 const { editor, tf } = useEditorPlugin(TextAlignPlugin);48 const value =49 useSelectionFragmentProp({50 defaultValue: 'start',51 getProp: (node) => node.align,52 }) ?? 'left';5354 const [open, setOpen] = React.useState(false);55 const IconValue =56 items.find((item) => item.value === value)?.icon ?? AlignLeftIcon;5758 return (59 <DropdownMenu open={open} onOpenChange={setOpen} modal={false} {...props}>60 <DropdownMenuTrigger asChild>61 <ToolbarButton pressed={open} tooltip="Align" isDropdown>62 <IconValue />63 </ToolbarButton>64 </DropdownMenuTrigger>6566 <DropdownMenuContent className="min-w-0" align="start">67 <DropdownMenuRadioGroup68 value={value}69 onValueChange={(value) => {70 tf.textAlign.setNodes(value as Alignment);71 editor.tf.focus();72 }}73 >74 {items.map(({ icon: Icon, value: itemValue }) => (75 <DropdownMenuRadioItem76 key={itemValue}77 className="pl-2 data-[state=checked]:bg-accent *:first:[span]:hidden"78 value={itemValue}79 >80 <Icon />81 </DropdownMenuRadioItem>82 ))}83 </DropdownMenuRadioGroup>84 </DropdownMenuContent>85 </DropdownMenu>86 );87}
What it pulls in
npm packages
Other registry items
Files it writes
More from plate
All 324 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-kitai-kit | plate | Components | Free | 1 dep | |
| AI Menuai-menu | plate | Components | Free | 5 deps · 2 files | |
| AI Leafai-node | plate | Components | Free | no deps | |
| AI Toolbar Buttonai-toolbar-button | plate | Components | Free | 1 dep | |
| align-base-kitalign-base-kit | plate | Components | Free | 1 dep | |
| align-kitalign-kit | plate | Components | Free | 1 dep | |
| autoformat-classic-kitautoformat-classic-kit | plate | Components | Free | 2 deps | |
| autoformat-kitautoformat-kit | plate | Components | Free | 2 deps |
