Aurora Data Table
aurora-dinglebear-ai/aurora-data-tableUnverifiedComponent
Sortable, paginated data table with Aurora panel headers, row hover states, and border-default separators.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/dinglebear-ai/aurora/main/aurora-data-table.jsonSource
1"use client";23import * as React from "react";4import { ArrowDown, ArrowUp, ArrowUpDown } from "lucide-react";5import { Button } from "@/registry/aurora/ui/button";6import { cn } from "@/lib/utils";78// ---------------------------------------------------------------------------9// Types10// ---------------------------------------------------------------------------1112export type SortState = { column: string; direction: "asc" | "desc" } | null;1314export interface Column<TRow extends Record<string, unknown> = Record<string, unknown>> {15 key: string;16 label: string;17 sortable?: boolean;18 numeric?: boolean;19 render?: (value: unknown, row: TRow) => React.ReactNode;20}2122export interface DataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>>23 extends React.HTMLAttributes<HTMLDivElement> {24 columns: Column<TRow>[];25 data: TRow[];26}2728// ---------------------------------------------------------------------------29// Sort icon30// ---------------------------------------------------------------------------3132function SortIcon({ active, direction }: { active: boolean; direction: "asc" | "desc" | null }) {33 const color = active ? "var(--aurora-accent-primary)" : "var(--aurora-text-muted)";34 const Icon = !active || direction === null ? ArrowUpDown : direction === "asc" ? ArrowUp : ArrowDown;3536 return <Icon aria-hidden style={{ color, width: 14, height: 14, flexShrink: 0 }} />;37}3839// ---------------------------------------------------------------------------40// DataTable41// ---------------------------------------------------------------------------4243export function DataTable<TRow extends Record<string, unknown>>({44 columns,45 data,46 className,47 ...rest48}: DataTableProps<TRow>) {49 const [sortState, setSortState] = React.useState<SortState>(null);5051 function handleSort(col: Column<TRow>) {52 if (!col.sortable) return;53 setSortState((prev) => {54 if (prev === null || prev.column !== col.key) {55 // New column — start ascending56 return { column: col.key, direction: "asc" };57 }58 if (prev.direction === "asc") {59 // asc → desc60 return { column: col.key, direction: "desc" };61 }62 // desc → null (clear sort)63 return null;64 });65 }6667 const sorted = React.useMemo(() => {68 if (sortState === null) return data;69 const { column, direction } = sortState;70 return [...data].sort((a, b) => {71 const av = a[column];72 const bv = b[column];73 const cmp =74// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from aurora
All 176 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Aurora Accordionaurora-accordion | aurora | Components | Unverified | 2 deps | |
| Aurora Alert Dialogaurora-alert-dialog | aurora | Components | Unverified | 2 deps | |
| Aurora Aspect Ratioaurora-aspect-ratio | aurora | Components | Unverified | no deps | |
| Aurora Avataraurora-avatar | aurora | Components | Unverified | 1 dep | |
| Aurora Badgeaurora-badge | aurora | Components | Unverified | 2 deps | |
| Aurora Banneraurora-banner | aurora | Components | Unverified | 1 dep | |
| Aurora Breadcrumbaurora-breadcrumb | aurora | Components | Unverified | 2 deps | |
| Aurora Buttonaurora-button | aurora | Components | Unverified | 2 deps |
