preskok/ui

Button

Customizable buttons with multiple variants, sizes, and interactive states.

Installation

pnpm dlx @preskok-org/ui@latest add button

Usage

import { Button } from "@/registry/preskok/ui/preskok-ui/button"
 
export function ButtonDemo() {
  return (
    <Button intent="primary" size="md">
      Click me
    </Button>
  )
}

Props

PropTypeDefaultDescription
intent"primary" | "secondary" | "outline" | "ghost" | "link" | "plain""primary"Visual style variant
size"xs" | "sm" | "md" | "lg" | "sq-xs" | "sq-sm" | "sq-md" | "sq-lg""md"Button size
isCirclebooleanfalseCircular button shape
classNamestring-Additional CSS classes
refReact.Ref<HTMLButtonElement>-Button element ref

All standard HTML button props are also supported.

Examples

Intent Variants

<div className="flex gap-2">
  <Button intent="primary">Primary</Button>
  <Button intent="secondary">Secondary</Button>
  <Button intent="outline">Outline</Button>
  <Button intent="ghost">Ghost</Button>
  <Button intent="link">Link</Button>
  <Button intent="plain">Plain</Button>
</div>

Sizes

<div className="flex items-center gap-2">
  <Button size="xs">Extra Small</Button>
  <Button size="sm">Small</Button>
  <Button size="md">Medium</Button>
  <Button size="lg">Large</Button>
</div>

Square Buttons

<div className="flex items-center gap-2">
  <Button size="sq-xs" intent="outline">
    <IconPlus />
  </Button>
  <Button size="sq-sm" intent="outline">
    <IconPlus />
  </Button>
  <Button size="sq-md" intent="outline">
    <IconPlus />
  </Button>
  <Button size="sq-lg" intent="outline">
    <IconPlus />
  </Button>
</div>

Circular Buttons

<div className="flex items-center gap-2">
  <Button isCircle size="sm">
    <IconHeart />
  </Button>
  <Button isCircle size="md" intent="secondary">
    <IconStar />
  </Button>
  <Button isCircle size="lg" intent="outline">
    <IconShare />
  </Button>
</div>

With Icons

<div className="flex gap-2">
  <Button intent="primary">
    <IconDownload />
    Download
  </Button>
  <Button intent="outline">
    Save
    <IconSave />
  </Button>
  <Button intent="ghost">
    <IconRefresh />
  </Button>
</div>

Loading State

<Button disabled>
  <IconSpinner className="animate-spin" />
  Loading...
</Button>

As Child

<Button asChild>
  <a href="/download">Download</a>
</Button>

Features

  • Multiple variants - Six different visual styles
  • Flexible sizing - Regular and square size options
  • Icon support - Easy integration with icons
  • Loading states - Built-in disabled and loading styles
  • Accessibility - Proper focus management and ARIA support
  • Polymorphic - Can render as different elements with asChild
  • Responsive - Adapts to different screen sizes