base-toolbar-default

PreviousNext
Docs
reuicomponent

Preview

Loading preview…
registry/default/components/base-toolbar/default.tsx
'use client';

import { Popover, PopoverContent, PopoverTrigger } from '@/registry/default/ui/base-popover';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/registry/default/ui/base-select';
import { Toggle } from '@/registry/default/ui/base-toggle';
import { ToggleGroup, ToggleGroupItem } from '@/registry/default/ui/base-toggle-group';
import { Toolbar, ToolbarButton, ToolbarSeparator } from '@/registry/default/ui/base-toolbar';
import {
  AlignCenter,
  AlignLeft,
  AlignRight,
  Bold,
  Download,
  Italic,
  Redo,
  Settings,
  Share,
  Underline,
  Undo,
} from 'lucide-react';

const fontSizes = [
  { label: 'Small', value: '12px' },
  { label: 'Medium', value: '14px' },
  { label: 'Large', value: '16px' },
  { label: 'Extra Large', value: '18px' },
];

export default function ToolbarDemo() {
  return (
    <div className="w-full max-w-4xl mx-auto p-6 space-y-6">
      {/* Main Toolbar */}
      <Toolbar>
        {/* Text Formatting */}
        <ToggleGroup toggleMultiple={true}>
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="bold" aria-label="Bold">
                <Bold className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="italic" aria-label="Italic">
                <Italic className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="underline" aria-label="Underline">
                <Underline className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
        </ToggleGroup>

        <ToolbarSeparator />

        {/* Text Alignment */}
        <ToggleGroup toggleMultiple={false}>
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="left" aria-label="Align left">
                <AlignLeft className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="center" aria-label="Align center">
                <AlignCenter className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
          <ToolbarButton
            size="icon"
            render={
              <ToggleGroupItem value="right" aria-label="Align right">
                <AlignRight className="h-4 w-4" />
              </ToggleGroupItem>
            }
          />
        </ToggleGroup>

        <ToolbarSeparator />

        {/* Font Size */}
        <Select indicatorPosition="right">
          <SelectTrigger className="w-24">
            <SelectValue placeholder="Size" />
          </SelectTrigger>
          <SelectContent>
            {fontSizes.map((size) => (
              <SelectItem key={size.value} value={size.value}>
                {size.label}
              </SelectItem>
            ))}
          </SelectContent>
        </Select>

        <ToolbarSeparator />

        {/* Undo/Redo */}
        <ToolbarButton size="icon" aria-label="Undo">
          <Undo className="h-4 w-4" />
        </ToolbarButton>
        <ToolbarButton size="icon" aria-label="Redo">
          <Redo className="h-4 w-4" />
        </ToolbarButton>

        <ToolbarSeparator />

        {/* Actions */}
        <ToolbarButton size="icon" variant="outline" aria-label="Download">
          <Download className="h-4 w-4" />
        </ToolbarButton>
        <ToolbarButton size="icon" variant="outline" aria-label="Share">
          <Share className="h-4 w-4" />
        </ToolbarButton>

        {/* Settings */}
        <Popover>
          <ToolbarButton size="icon" variant="outline" render={<PopoverTrigger />} aria-label="Settings">
            <Settings className="h-4 w-4" />
          </ToolbarButton>
          <PopoverContent className="w-64">
            <h3>Editor Settings</h3>
            <div className="space-y-3 mt-3">
              <div className="flex items-center justify-between">
                <label className="text-sm font-medium">Auto-save</label>
                <Toggle aria-label="Toggle auto-save" />
              </div>
              <div className="flex items-center justify-between">
                <label className="text-sm font-medium">Spell check</label>
                <Toggle aria-label="Toggle spell check" />
              </div>
              <div className="flex items-center justify-between">
                <label className="text-sm font-medium">Dark mode</label>
                <Toggle aria-label="Toggle dark mode" />
              </div>
            </div>
          </PopoverContent>
        </Popover>
      </Toolbar>
    </div>
  );
}

Installation

npx shadcn@latest add @reui/base-toolbar-default

Usage

import { BaseToolbarDefault } from "@/components/base-toolbar-default"
<BaseToolbarDefault />