Button Demo

PreviousNext

Example showing a simple button.

Docs
aliimamexample

Preview

Loading preview…
registry/default/example/button/button-03.tsx
/* eslint-disable @next/next/no-img-element */
"use client";

import { useState } from "react";

import { Button } from "@/registry/default/ui/button";
import {
  Archive,
  ArrowLeft,
  ArrowRight,
  Download,
  LoaderCircle,
  Mail,
  Scan,
  Sparkles,
  Star,
  ThumbsUp,
  Trash,
  X,
} from "lucide-react";

export default function ButtonDemo() {
  const [isLoading, setIsLoading] = useState<boolean>(false);

  const handleClick = () => {
    setIsLoading(true);
    // Simulate an async operation
    setTimeout(() => {
      setIsLoading(false);
    }, 1000); // Reset after 1 second
  };
  return (
    <div className="flex max-w-lg flex-wrap gap-3">
      <Button>
        <Archive className="opacity-60" size={16} aria-hidden="true" />
        Archive
      </Button>
      <Button variant="destructive">
        <Trash className="opacity-60" size={16} aria-hidden="true" />
        Trash
      </Button>
      <Button variant="secondary">
        <X className="opacity-60" size={16} aria-hidden="true" />
        Close
      </Button>
      <Button variant="outline">
        Magic
        <Sparkles className="opacity-60" size={16} aria-hidden="true" />
      </Button>
      <Button className="group" variant="ghost">
        <ArrowLeft
          className="opacity-60 transition-transform group-hover:-translate-x-0.5"
          size={16}
          aria-hidden="true"
        />
        Back
      </Button>
      <Button className="group">
        Next
        <ArrowRight
          className="opacity-60 transition-transform group-hover:translate-x-0.5"
          size={16}
          aria-hidden="true"
        />
      </Button>
      <Button className="group" variant="secondary">
        <Mail className="opacity-60" size={16} aria-hidden="true" />
        Send
        <ArrowRight
          className="opacity-60 transition-transform group-hover:translate-x-0.5"
          size={16}
          aria-hidden="true"
        />
      </Button>
      <Button>
        Download
        <Download className="opacity-60" size={16} aria-hidden="true" />
      </Button>
      <Button disabled>
        <LoaderCircle className="animate-spin" size={16} aria-hidden="true" />
        Loading...
      </Button>
      <Button
        onClick={handleClick}
        disabled={isLoading}
        data-loading={isLoading || undefined}
        className="group relative disabled:opacity-100"
      >
        <span className="group-data-loading:text-transparent">
          Click to load
        </span>
        {isLoading && (
          <div className="absolute inset-0 flex items-center justify-center">
            <LoaderCircle
              className="animate-spin"
              size={16}
              aria-hidden="true"
            />
          </div>
        )}
      </Button>
      <Button variant="outline">
        Inbox
        <span className="text-muted-foreground inline-flex h-5 max-h-full items-center rounded border px-1 font-[inherit] text-[0.625rem] font-medium">
          22
        </span>
      </Button>
      <Button variant="outline">
        <Scan className="opacity-60" size={16} aria-hidden="true" />
        Scan
        <kbd className="bg-background text-muted-foreground/70 inline-flex h-5 max-h-full items-center rounded border px-1 font-[inherit] text-[0.625rem] font-medium">
          ⌘S
        </kbd>
      </Button>
      <Button className="rounded-md py-0 ps-0">
        <div className="flex aspect-square h-full">
          <img
            className="h-auto border border-primary w-full object-cover rounded-md"
            src="/ai.jpg"
            alt="Profile image"
            width={24}
            height={24}
            aria-hidden="true"
          />
        </div>
        @aliimam
      </Button>
      <Button className="py-0 pe-0" variant="outline">
        <ThumbsUp className="opacity-60" size={16} aria-hidden="true" />
        Like
        <span className="text-muted-foreground before:bg-input relative  inline-flex h-full items-center justify-center rounded-full px-3 text-xs font-medium before:absolute before:inset-0 before:left-0 before:w-px">
          96
        </span>
      </Button>
      <Button>
        <Star className=" opacity-60" size={16} aria-hidden="true" />
        <span className="flex items-baseline gap-2">
          Review
          <span className="text-primary-foreground/60 text-xs">786</span>
        </span>
      </Button>
    </div>
  );
}

Installation

npx shadcn@latest add @aliimam/button-03

Usage

import { Button03 } from "@/components/button-03"
<Button03 />