{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "list-toolbar-button",
  "title": "List Toolbar Button",
  "description": "A toolbar control for adjusting list indentation.",
  "dependencies": [
    "@platejs/list"
  ],
  "registryDependencies": [
    "https://platejs.org/r/toolbar.json"
  ],
  "files": [
    {
      "path": "src/registry/ui/list-toolbar-button.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport { ListStyleType, someList, toggleList } from '@platejs/list';\nimport {\n  useIndentTodoToolBarButton,\n  useIndentTodoToolBarButtonState,\n} from '@platejs/list/react';\nimport { List, ListOrdered, ListTodoIcon } from 'lucide-react';\nimport { useEditorRef, useEditorSelector } from 'platejs/react';\n\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport {\n  ToolbarButton,\n  ToolbarSplitButton,\n  ToolbarSplitButtonPrimary,\n  ToolbarSplitButtonSecondary,\n} from './toolbar';\n\nexport function BulletedListToolbarButton() {\n  const editor = useEditorRef();\n  const [open, setOpen] = React.useState(false);\n\n  const pressed = useEditorSelector(\n    (editor) =>\n      someList(editor, [\n        ListStyleType.Disc,\n        ListStyleType.Circle,\n        ListStyleType.Square,\n      ]),\n    []\n  );\n\n  return (\n    <ToolbarSplitButton pressed={open}>\n      <ToolbarSplitButtonPrimary\n        className=\"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\"\n        onClick={() => {\n          toggleList(editor, {\n            listStyleType: ListStyleType.Disc,\n          });\n        }}\n        data-state={pressed ? 'on' : 'off'}\n      >\n        <List className=\"size-4\" />\n      </ToolbarSplitButtonPrimary>\n\n      <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>\n        <DropdownMenuTrigger asChild>\n          <ToolbarSplitButtonSecondary />\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent align=\"start\" alignOffset={-32}>\n          <DropdownMenuGroup>\n            <DropdownMenuItem\n              onClick={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.Disc,\n                })\n              }\n            >\n              <div className=\"flex items-center gap-2\">\n                <div className=\"size-2 rounded-full border border-current bg-current\" />\n                Default\n              </div>\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onClick={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.Circle,\n                })\n              }\n            >\n              <div className=\"flex items-center gap-2\">\n                <div className=\"size-2 rounded-full border border-current\" />\n                Circle\n              </div>\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onClick={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.Square,\n                })\n              }\n            >\n              <div className=\"flex items-center gap-2\">\n                <div className=\"size-2 border border-current bg-current\" />\n                Square\n              </div>\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </ToolbarSplitButton>\n  );\n}\n\nexport function NumberedListToolbarButton() {\n  const editor = useEditorRef();\n  const [open, setOpen] = React.useState(false);\n\n  const pressed = useEditorSelector(\n    (editor) =>\n      someList(editor, [\n        ListStyleType.Decimal,\n        ListStyleType.LowerAlpha,\n        ListStyleType.UpperAlpha,\n        ListStyleType.LowerRoman,\n        ListStyleType.UpperRoman,\n      ]),\n    []\n  );\n\n  return (\n    <ToolbarSplitButton pressed={open}>\n      <ToolbarSplitButtonPrimary\n        className=\"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\"\n        onClick={() =>\n          toggleList(editor, {\n            listStyleType: ListStyleType.Decimal,\n          })\n        }\n        data-state={pressed ? 'on' : 'off'}\n      >\n        <ListOrdered className=\"size-4\" />\n      </ToolbarSplitButtonPrimary>\n\n      <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>\n        <DropdownMenuTrigger asChild>\n          <ToolbarSplitButtonSecondary />\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent align=\"start\" alignOffset={-32}>\n          <DropdownMenuGroup>\n            <DropdownMenuItem\n              onSelect={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.Decimal,\n                })\n              }\n            >\n              Decimal (1, 2, 3)\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onSelect={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.LowerAlpha,\n                })\n              }\n            >\n              Lower Alpha (a, b, c)\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onSelect={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.UpperAlpha,\n                })\n              }\n            >\n              Upper Alpha (A, B, C)\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onSelect={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.LowerRoman,\n                })\n              }\n            >\n              Lower Roman (i, ii, iii)\n            </DropdownMenuItem>\n            <DropdownMenuItem\n              onSelect={() =>\n                toggleList(editor, {\n                  listStyleType: ListStyleType.UpperRoman,\n                })\n              }\n            >\n              Upper Roman (I, II, III)\n            </DropdownMenuItem>\n          </DropdownMenuGroup>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </ToolbarSplitButton>\n  );\n}\n\nexport function TodoListToolbarButton(\n  props: React.ComponentProps<typeof ToolbarButton>\n) {\n  const state = useIndentTodoToolBarButtonState({ nodeType: 'todo' });\n  const { props: buttonProps } = useIndentTodoToolBarButton(state);\n\n  return (\n    <ToolbarButton {...props} {...buttonProps} tooltip=\"Todo\">\n      <ListTodoIcon />\n    </ToolbarButton>\n  );\n}\n",
      "type": "registry:ui"
    }
  ],
  "meta": {
    "docs": [
      {
        "route": "/docs/list"
      }
    ],
    "examples": [
      "list-demo"
    ]
  },
  "type": "registry:ui"
}