{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "align-toolbar-button",
  "title": "Align Toolbar Button",
  "description": "A dropdown menu for text alignment controls.",
  "dependencies": [
    "@platejs/basic-styles"
  ],
  "registryDependencies": [
    "dropdown-menu",
    "https://platejs.org/r/toolbar.json"
  ],
  "files": [
    {
      "path": "src/registry/ui/align-toolbar-button.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { Alignment } from '@platejs/basic-styles';\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { TextAlignPlugin } from '@platejs/basic-styles/react';\nimport {\n  AlignCenterIcon,\n  AlignJustifyIcon,\n  AlignLeftIcon,\n  AlignRightIcon,\n} from 'lucide-react';\nimport { useEditorPlugin, useSelectionFragmentProp } from 'platejs/react';\n\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { ToolbarButton } from './toolbar';\n\nconst items = [\n  {\n    icon: AlignLeftIcon,\n    value: 'left',\n  },\n  {\n    icon: AlignCenterIcon,\n    value: 'center',\n  },\n  {\n    icon: AlignRightIcon,\n    value: 'right',\n  },\n  {\n    icon: AlignJustifyIcon,\n    value: 'justify',\n  },\n];\n\nexport function AlignToolbarButton(props: DropdownMenuProps) {\n  const { editor, tf } = useEditorPlugin(TextAlignPlugin);\n  const value =\n    useSelectionFragmentProp({\n      defaultValue: 'start',\n      getProp: (node) => node.align,\n    }) ?? 'left';\n\n  const [open, setOpen] = React.useState(false);\n  const IconValue =\n    items.find((item) => item.value === value)?.icon ?? AlignLeftIcon;\n\n  return (\n    <DropdownMenu open={open} onOpenChange={setOpen} modal={false} {...props}>\n      <DropdownMenuTrigger asChild>\n        <ToolbarButton pressed={open} tooltip=\"Align\" isDropdown>\n          <IconValue />\n        </ToolbarButton>\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent className=\"min-w-0\" align=\"start\">\n        <DropdownMenuRadioGroup\n          value={value}\n          onValueChange={(value) => {\n            tf.textAlign.setNodes(value as Alignment);\n            editor.tf.focus();\n          }}\n        >\n          {items.map(({ icon: Icon, value: itemValue }) => (\n            <DropdownMenuRadioItem\n              key={itemValue}\n              className=\"pl-2 data-[state=checked]:bg-accent *:first:[span]:hidden\"\n              value={itemValue}\n            >\n              <Icon />\n            </DropdownMenuRadioItem>\n          ))}\n        </DropdownMenuRadioGroup>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n}\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "docs": [
      {
        "route": "/docs/text-align"
      }
    ],
    "examples": [
      "align-demo"
    ]
  },
  "type": "registry:ui"
}