Lewati ke konten utama
TKTemplateKu

Galeri Komponen

Semua 25 primitif UI + chart: lihat demonya, salin import-nya, langsung pakai.

import {
    Accordion,
    AccordionContent,
    AccordionItem,
    AccordionTrigger,
} from '@/components/ui/accordion';

import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
import {
    AlertDialog,
    AlertDialogAction,
    AlertDialogCancel,
    AlertDialogContent,
    AlertDialogDescription,
    AlertDialogFooter,
    AlertDialogHeader,
    AlertDialogTitle,
    AlertDialogTrigger,
} from '@/components/ui/alert-dialog';
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
CNBSAU
import { Badge } from '@/components/ui/badge';
Default
Secondary
Destructive
Outline
Lunas
import { Button } from '@/components/ui/button';

<Button variant="default" size="default">Simpan</Button>
import {
    Card,
    CardContent,
    CardDescription,
    CardFooter,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
Pesanan baru
#ORD-0042 · Budi Santoso

Rp107.500

import { AreaChartCard, BarChartCard, DonutChartCard } from '@/components/charts';

<AreaChartCard data={{ labels: [...], datasets: [{ label: 'Penjualan', data: [...] }] }} />
import { Checkbox } from '@/components/ui/checkbox';
import {
    Collapsible,
    CollapsibleContent,
    CollapsibleTrigger,
} from '@/components/ui/collapsible';
Detail pengiriman
import {
    Dialog,
    DialogContent,
    DialogDescription,
    DialogFooter,
    DialogHeader,
    DialogTitle,
    DialogTrigger,
} from '@/components/ui/dialog';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';

<Label htmlFor="email">Email</Label>
<Input id="email" />
import {
    Pagination,
    PaginationContent,
    PaginationEllipsis,
    PaginationItem,
    PaginationLink,
    PaginationNext,
    PaginationPrevious,
} from '@/components/ui/pagination';

Halaman aktif: 1, klik nomornya, demo ini hidup.

import {
    Popover,
    PopoverContent,
    PopoverTrigger,
} from '@/components/ui/popover';
import {
    Select,
    SelectContent,
    SelectItem,
    SelectTrigger,
    SelectValue,
} from '@/components/ui/select';
import { Separator } from '@/components/ui/separator';

Ringkasan pesanan

Total: Rp107.500

import {
    Sheet,
    SheetContent,
    SheetDescription,
    SheetHeader,
    SheetTitle,
    SheetTrigger,
} from '@/components/ui/sheet';
import { Skeleton } from '@/components/ui/skeleton';
Memuat…
Memuat…
Memuat…
Memuat…
import { toast } from 'sonner';

// Toaster sudah terpasang di layout.
toast.success('Berhasil disimpan');
import { Switch } from '@/components/ui/switch';
import {
    Table,
    TableBody,
    TableCaption,
    TableCell,
    TableHead,
    TableHeader,
    TableRow,
} from '@/components/ui/table';
Daftar pesanan terbaru.
IDPelangganTotal
#ORD-0041Siti AminahRp38.750
#ORD-0042Budi SantosoRp107.500
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
8 pesanan · Rp612.750 total hari ini.
import { Textarea } from '@/components/ui/textarea';
// Contoh badge notifikasi dengan ikon lonceng (pakai Badge + lucide-react).
import { Badge } from '@/components/ui/badge';
import { Bell } from 'lucide-react';
import { ErrorBoundary } from '@/components/error-boundary';

// Bungkus bagian yang rawan error; fallback tampil otomatis.
<ErrorBoundary onReset={() => setRusak(false)}>
    {rusak ? <KomponenRawan /> : <KontenAman />}
</ErrorBoundary>

Tekan tombol untuk mensimulasikan error render, boundary akan menampilkan UI fallback.

import { CountdownTimer } from '@/components/countdown-timer';

// target: Date | string | number, tampil "Berakhir" bila lewat.
<CountdownTimer target={new Date(Date.now() + 14 * 3600_000)} />

Flash Sale 11.11 berakhir dalam:

00Hari
00Jam
00Mnt
00Dtk
import { DateRangePicker } from '@/components/date-range-picker';

// Controlled:
const [rentang, setRentang] = useState<DateRange>();
<DateRangePicker value={rentang} onChange={setRentang} />

// Uncontrolled (default "7 hari terakhir"):
<DateRangePicker />

Laporan penjualan Bandung: 3, 9 Okt 2026

import { StatCounter } from '@/components/stat-counter';

// Count-up saat masuk viewport, format id-ID.
<StatCounter value={125750000} prefix="Rp" />

Omzet bulan ini

Rp 0

Pelanggan aktif

0

Tingkat kepuasan

0%
import { StickyMobileCta } from '@/components/sticky-mobile-cta';

// variant: 'whatsapp' | 'cart' | 'call', hanya tampil di mobile.
<StickyMobileCta
    variant="whatsapp"
    title="Butuh bantuan?"
    actionLabel="Chat WhatsApp"
    onAction={() => window.open('https://wa.me/6281234567890')}
/>

Kopi Robusta Gayo 250g

Toko Kopi Nusantara · Bandung

Rp 68.000

Pratinjau bilah bawah (hanya tampil di layar < md)

import { Timeline } from '@/components/timeline';
import { PackageCheck } from 'lucide-react';

<Timeline
    items={[
        {
            id: 1,
            title: 'Paket diterima gudang',
            description: 'Jakarta, 12 koli',
            time: '08.20',
            icon: PackageCheck,
            tone: 'success',
        },
    ]}
/>
  1. Pesanan #INV-2026-1042 dibuat

    Budi Santoso memesan 3 item via kasir Surabaya

  2. Pembayaran diterima

    QRIS Rp 187.500, Midtrans

  3. Stok menipis: Kopi Robusta 250g

    Sisa 8 bungkus di gudang Bandung

  4. Pesanan #INV-2026-1039 dibatalkan

    Pelanggan membatalkan sebelum pembayaran