Data Table
adn-ui/data-tableFreeComponent
Rich interactive data table supporting sorting, filtering, selection, and pagination.
Live preview
live · rendered by the registry
Rendered by adn-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.awaiden.com/r/data-table.jsonSource
1"use client";23import "./data-table.css";4import React, { useMemo, useState } from "react";5import { cn } from "tailwind-variants";67import { Checkbox } from "../checkbox";8import { TableBody, TableCell, TableHead, TableHeader, TableRoot, TableRow } from "../table";9import { DataTableContext, useDataTableContext } from "./data-table.context";10import { dataTableVariants, type DataTableVariants } from "./data-table.variants";1112export type ColumnDef<T> = {13 id: string;14 header: React.ReactNode | ((props: { column: ColumnDef<T> }) => React.ReactNode);15 cell: (props: { row: T; index: number }) => React.ReactNode;16 sortable?: boolean;17 accessorKey?: keyof T;18};1920export type DataTableRootProps = DataTableVariants & React.HTMLAttributes<HTMLDivElement>;2122export const DataTableRoot = ({ children, className, size, ...props }: DataTableRootProps) => {23 const slots = dataTableVariants({ size });2425 return (26 <DataTableContext.Provider value={{ slots }}>27 <div className={cn(slots.root(), className)} {...props}>28 {children}29 </div>30 </DataTableContext.Provider>31 );32};3334export type DataTableToolbarProps = React.HTMLAttributes<HTMLDivElement>;3536export const DataTableToolbar = ({ className, ...props }: DataTableToolbarProps) => {37 const { slots } = useDataTableContext();38 return <div className={cn(slots.toolbar(), className)} {...props} />;39};4041export type DataTableSearchProps = React.InputHTMLAttributes<HTMLInputElement> & {42 onSearchChange?: (query: string) => void;43};4445export const DataTableSearch = ({46 className,47 placeholder = "Filter...",48 onSearchChange,49 onChange,50 ...props51}: DataTableSearchProps) => {52 const { slots } = useDataTableContext();5354 const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {55 onChange?.(e);56 onSearchChange?.(e.target.value);57 };5859 return (60 <div className={cn(slots.search(), className)}>61 <svg62 className="text-muted-foreground h-4 w-4 shrink-0"63 fill="none"64 stroke="currentColor"65 strokeWidth="2"66 viewBox="0 0 24 24"67 >68 <circle cx="11" cy="11" r="8" />69 <path d="m21 21-4.35-4.35" />70 </svg>71 <input placeholder={placeholder} onChange={handleChange} {...props} />72 </div>73 );74};7576export type DataTableColumnHeaderProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {77 sortDirection?: "asc" | "desc" | null;78 onToggleSort?: () => void;79};8081export const DataTableColumnHeader = ({82 children,83 className,84// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from adn-ui
All 46 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | adn-ui | Components | Free | 2 deps · 5 files | |
| Alert Dialogalert-dialog | adn-ui | Components | Free | 2 deps · 5 files | |
| Aspect Ratioaspect-ratio | adn-ui | Components | Free | 1 dep · 5 files | |
| Autocompleteautocomplete | adn-ui | Components | Free | 2 deps · 5 files | |
| Avataravatar | adn-ui | Components | Free | 2 deps · 5 files | |
| Badgebadge | adn-ui | Components | Free | 1 dep · 5 files | |
| Breadcrumbbreadcrumb | adn-ui | Components | Free | 1 dep · 5 files | |
| Buttonbutton | adn-ui | Components | Free | 1 dep · 4 files |
