Horizontal Toolbar
Vertical Toolbar
"use client"
import {
AlignCenterIcon,
AlignLeftIcon,
AlignRightIcon,
BoldIcon,
ItalicIcon,
UnderlineIcon,
} from "lucide-react"
import {
Toolbar,
ToolbarGroup,
ToolbarItem,
ToolbarSeparator,
} from "@/components/ui/preskok-ui/toolbar"
export function ToolbarPreskokDemo() {
return (
<div className="space-y-6">
<div>
<h3 className="mb-3 text-sm font-medium">Horizontal Toolbar</h3>
<Toolbar aria-label="Text formatting">
<ToolbarGroup aria-label="Text style">
<ToolbarItem aria-label="Bold">
<BoldIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Italic">
<ItalicIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Underline">
<UnderlineIcon className="size-4" />
</ToolbarItem>
</ToolbarGroup>
<ToolbarSeparator />
<ToolbarGroup aria-label="Text alignment">
<ToolbarItem aria-label="Align left">
<AlignLeftIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Align center">
<AlignCenterIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Align right">
<AlignRightIcon className="size-4" />
</ToolbarItem>
</ToolbarGroup>
</Toolbar>
</div>
<div>
<h3 className="mb-3 text-sm font-medium">Vertical Toolbar</h3>
<Toolbar orientation="vertical" aria-label="Text formatting">
<ToolbarGroup aria-label="Text style">
<ToolbarItem aria-label="Bold">
<BoldIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Italic">
<ItalicIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Underline">
<UnderlineIcon className="size-4" />
</ToolbarItem>
</ToolbarGroup>
<ToolbarSeparator />
<ToolbarGroup aria-label="Text alignment">
<ToolbarItem aria-label="Align left">
<AlignLeftIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Align center">
<AlignCenterIcon className="size-4" />
</ToolbarItem>
<ToolbarItem aria-label="Align right">
<AlignRightIcon className="size-4" />
</ToolbarItem>
</ToolbarGroup>
</Toolbar>
</div>
</div>
)
}
Installation
CLI
pnpmnpmyarnbunpnpm dlx @preskok-org/ui@latest add toolbar
Usage
import { Toolbar } from "@/registry/preskok/ui/preskok-ui/toolbar"
export function ToolbarDemo() {
return (
<Toolbar aria-label="Toolbars">
<ToolbarGroup aria-label="Text Formatting Options">
<ToolbarItem defaultSelected aria-label="Bold" size="sq-sm">
{({ isSelected }) => (
<>{isSelected ? <BoltSolid /> : <BoltOutline />}</>
)}
</ToolbarItem>
<ToolbarItem aria-label="Italic" size="sq-sm">
{({ isSelected }) => (
<>{isSelected ? <PencilSolid /> : <PencilOutline />}</>
)}
</ToolbarItem>
<ToolbarItem aria-label="Underline" size="sq-sm">
{({ isSelected }) => (
<>
{isSelected ? (
<CursorArrowRaysSolid />
) : (
<CursorArrowRaysOutline />
)}
</>
)}
</ToolbarItem>
<ToolbarItem aria-label="Strikethrough" size="sq-sm">
{({ isSelected }) => (
<>{isSelected ? <NoSymbolSolid /> : <NoSymbolOutline />}</>
)}
</ToolbarItem>
</ToolbarGroup>
<ToolbarSeparator />
<ToolbarGroup aria-label="Alignment">
<ToolbarItem aria-label="Align Left" size="sq-sm">
{({ isSelected }) => (
<>
{isSelected ? <Bars3BottomLeftSolid /> : <Bars3BottomLeftIcon />}
</>
)}
</ToolbarItem>
<ToolbarItem size="sq-sm" aria-label="Align Center">
{({ isSelected }) => (
<>
{isSelected ? (
<AdjustmentsHorizontalSolid />
) : (
<AdjustmentsHorizontalOutline />
)}
</>
)}
</ToolbarItem>
<ToolbarItem size="sq-sm" aria-label="Align Right">
{({ isSelected }) => (
<>
{isSelected ? (
<Bars3BottomRightSolid />
) : (
<Bars3BottomRightIcon />
)}
</>
)}
</ToolbarItem>
<ToolbarItem size="sq-sm" aria-label="Align Justify">
{({ isSelected }) => (
<>{isSelected ? <Bars3Solid /> : <Bars3Icon />}</>
)}
</ToolbarItem>
</ToolbarGroup>
<ToolbarSeparator />
<Checkbox>Spell Check</Checkbox>
<ToolbarGroup className="ml-auto">
<Menu>
<Button aria-label="Other options" size="sm" intent="outline">
Options...
<ChevronDownIcon />
</Button>
<MenuContent placement="bottom right">
<MenuItem>
<ArrowUturnLeftIcon />
Undo
</MenuItem>
<MenuItem>
<ArrowUturnRightIcon />
Redo
</MenuItem>
<MenuItem>
<LinkIcon />
Insert Link
</MenuItem>
<MenuItem>
<PhotoIcon />
Insert Image
</MenuItem>
<MenuItem>
<Squares2X2Icon />
Insert Grid
</MenuItem>
</MenuContent>
</Menu>
</ToolbarGroup>
</Toolbar>
)
}