Skip to content
WingoUI
ComponentsTemplatesDocsPricingAI agentsBlogChangelogContact
Components
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCountry SelectCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerEmail InputEmoji PickerFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime PickerTimezone SelectTree Select
Forms
Address InputBooking WidgetCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text EditorSchema Builder
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverShare DialogSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSetup ChecklistSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadar chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselCSV ViewerDOCX EditorDOCX ViewerExcel ViewerFile SystemImage compareImage CropperImage GalleryImage LightboxLocation MapPDF ViewerPowerPoint ViewerQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadChat WidgetConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Background PatternGravity LettersMarqueeTerminalText AnimateText Rotate
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Marketing Sections
App Download SectionBlog Cards SectionCTA SectionFAQ SectionFeature GridFeature ShowcaseHero SectionIntegrations SectionLogo CloudMarketing FooterMarketing HeaderMarketing SectionNewsletter SectionPricing SectionStats SectionSteps SectionTeam SectionTestimonials SectionTimeline SectionVideo Section
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAPI Keys PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowOrder History PagePost Listing WizardPricing PageProfile PageRegister PageSettings PageUsers Admin Page
Templates
About PageAcademy PageAccessibility PageAffiliate PageAgency PageAI Product PageAppointment Booking PageBlog PageBlog Post PageBug Bounty PageCareers PageChangelog PageCommunity PageCompare PageContact PageCustomer Story PageCustomers PageDemo Booking PageDevelopers PageDocs Home PageDownload PageEnterprise PageEvents PageExperts PageFAQ PageFeature PageGlossary PageHelp Article PageHelp Center PageHome Services PageImpact PageIntegration Detail PageIntegrations PageJob Detail PageLanding PageLaunch PageLegal PageManifesto PagePortfolio PagePress PageProduct Tour PagePromo PageReal Estate PageReferral PageResearch Report PageRestaurant PageRoadmap PageROI Calculator PageSecurity PageSolutions PageStartups PageStatus PageStorefront PageSwitch PageTemplate Gallery PageTravel PageWaitlist PageYear in Review Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryTheme

Tables & Lists

Data Table

Tables & Lists

Data Table React component for Tailwind CSS v4

Audit LogDeal Pipeline
Live props
Content
caption
searchPlaceholder
locale
Behavior
mode
pagination
selectionMode
selectAllScope
expandable
viewOptions
columnMenu
columnReorder
columnResizing
virtualize
persistKey
State
defaultPage
loadingMore
defaultGlobalFilter
loading
skeletonCount8
refreshing
error
Layout
defaultPageSize
toolbar
stickyHeader
stickyFirstColumn
maxHeightPage scroll
showHeaderWhenEmpty
mobileLayout
mobilePagination
Appearance
defaultDensity
variant
striped
Code
import { DataTable } from "@/components/ui/data-table"

<DataTable />
  1. Home
  2. Components
  3. Tables & Lists
  4. Data Table
Pro

Data Table React component for Tailwind CSS v4

v1.1.0·Updated in 1.2.0

A React data table on TanStack Table: search, filters, sorting, bulk actions, pinning, resizing, virtualization and cards on phones.

Type in the search to filter every searchable column at once (accents do not matter, so "cafe" finds Café and "12480" finds $12,480.00). Press a quick filter chip to toggle it; applied column filters show as removable chips with Clear filters. Click a header to sort (text A to Z first, numbers and dates biggest or newest first, a third click clears it) and Shift-click to add a second sort. The chevron on a header opens its menu: sort, filter (checkboxes for statuses and cities, a text box, a number range or a date range), pin left or right, move left or right, hide. Drag a header sideways to reorder columns; with columnResizing drag its edge (double-click resets, or focus the edge and use the arrows). The Columns panel shows and hides columns, reorders them by dragging the handle or with the arrow buttons, switches density and resets the layout. With selection on, click the checkbox (Shift-click selects a range) or the row; the toolbar turns into the bulk bar with its actions, and when the whole page is selected a banner offers every matching row. Rows can expand into a detail panel with the chevron (or a click anywhere on the row when it has no onRowClick and no selection). The ⋯ button and a right-click open the row's actions. Keyboard: the header's sort buttons and menus come first in the Tab order, then the rows are one tab stop (whenever they can be selected, opened, expanded or have actions): Up / Down, Home / End and PageUp / PageDown move between them, Space selects (Shift + Space or Shift + arrows extend), Ctrl/Cmd + A selects all, Escape clears the selection, Enter opens the row (or expands it when that is all it does), Right / Left expand and collapse, Shift+F10 or the context menu key opens the row menu. On a phone every row is a card: long press a card to start selecting, then tap to add more while the bulk bar floats at the bottom; sort, filters and row menus open as bottom sheets, and Load more appends the next rows. 10,000 rows scroll at 60fps because only the visible ones are in the DOM.

Data Table is a Pro React component in the React table and list components category, written in TypeScript for React 19 and Tailwind CSS v4. It installs as source with npx wingo-ui@latest add data-table, together with Table, Progress, Empty State, Toolbar, Pagination and 27 more and the npm packages @tanstack/react-table, @tanstack/react-virtual, @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities, motion and lucide-react.

Add to a project

Requirements: React 19 and Tailwind CSS v4, in Next.js (App Router or Pages), Vite or React Router. Installation guide · Next.js setup · Vite setup

npx wingo-ui@latest add data-table

Data Table is part of Pro, with 298 more Pro items: $8 a month or $150 once. 14-day refund before you download any Pro item. See plans

Usage

Import DataTable from @/components/ui/data-table.

import { Download, Mail, Pencil, Plus, Trash2 } from "lucide-react"
import { DataTable, createColumns } from "@/components/ui/data-table"

type Client = { id: string; name: string; city: string; status: string; balance: number; lastInvoice: string | null }

const col = createColumns<Client>()
const columns = col([
  col.accessor("name", { header: "Client", filter: "text" }),
  col.accessor("city", { header: "City", filter: "multi-select" }),
  col.accessor("status", {
    header: "Status",
    type: "badge",
    badge: { Active: { tone: "success" }, Overdue: { tone: "danger" }, Prospect: { tone: "info" } },
    filter: "multi-select",
  }),
  col.accessor("balance", { header: "Balance", type: "currency", footer: "sum", filter: "number-range" }),
  col.accessor("lastInvoice", { header: "Last invoice", type: "relative" }),
])

export function Clients({ clients }: { clients: Client[] }) {
  return (
    <DataTable
      data={clients}
      columns={columns}
      caption="Clients"
      locale="en-US"
      selectionMode="multiple"
      searchPlaceholder="Search clients"
      quickFilters={[{ id: "overdue", label: "Overdue", columnFilter: { id: "status", value: ["Overdue"] } }]}
      toolbarActions={[{ label: "New client", icon: <Plus />, primary: true }]}
      bulkActions={(rows) => [
        { label: "Send email", icon: <Mail /> },
        { label: "Export", icon: <Download />, onSelect: () => console.log(rows) },
        { label: "Delete", icon: <Trash2 />, tone: "danger" },
      ]}
      rowActions={(row) => [{ label: "Edit", icon: <Pencil />, onSelect: () => console.log(row.id) }]}
      persistKey="clients"
    />
  )
}

Props

  • data*
    T[]

    The rows. In server mode only the current page.

  • columns*
    DataTableColumn<T>[]

    Each column: id, header, accessor, cell, type (text, number, currency, percent, date, datetime, relative, badge, boolean, avatar), badge map, align, width / minWidth / maxWidth, sortable, sortingFn, filter (text, select, multi-select, number-range, date-range), filterOptions, searchable, hideable, pinned, resizable, footer (sum, avg, count, min, max, a node or a function), mobile role, headerTooltip, truncate. Build them typed with createColumns<T>().

  • getRowId
    (row: T) => string

    The row's key for selection and expansion (default row.id). Ids must be unique; duplicates print a dev warning.

  • captiondefault ""
    string

    The table's name for screen readers; it also names the card list on phones. Always pass one.

  • searchPlaceholderdefault "Search"
    string

    The toolbar search's placeholder and accessible name. The playground shows its own hint while it holds the default.

  • localedefault ""
    string

    Numbers, money, dates and relative times ("$12,480.00", "6 days ago"). Empty uses the UIProvider's, then the browser's; the playground falls back to en-US.

  • labels
    Partial<DataTableLabels>

    Every string, English by default (DEFAULT_DATA_TABLE_LABELS): search, columns, densities, rows per page, select all / page / row, the select-all banner, sort / filter / pin / move / hide, clear filters, empty and no results, error and retry, expand / collapse, drag announcements, plus toolbar and pagination strings passed through.

  • modedefault "client"
    "client" | "server"

    client sorts, filters and pages in the browser. server does none of it locally: data is the current page, rowCount the total, and every change reaches onQueryChange (the page goes back to 1 when the search, a filter or the sort changes).

  • rowCount
    number

    Server mode: the total number of matching rows (default data.length). The last page clamps to it.

  • onQueryChange
    (query: DataTableQuery) => void

    Server mode: { page, pageSize, sorting, globalFilter, columnFilters } whenever one of them changes (the search arrives debounced, 300ms). Set refreshing while you fetch.

  • paginationdefault "pages"
    "pages" | "load-more" | "infinite" | "none"

    pages: numbered pages with a rows-per-page picker (compact on phones). load-more: a button. infinite: loads when the end comes into view (with onLoadMore and hasMore for your own fetching). none: every row, best with virtualize.

  • page
    number

    The current page, 1-based, controlled. Pair it with onPageChange.

  • defaultPagedefault 1
    number

    The starting page while uncontrolled (clamped to the last page).

  • onPageChange
    (page: number) => void

    Called with the new page.

  • pageSize
    number

    Rows per page, controlled. Also the step of load-more.

  • defaultPageSizedefault "25"
    number

    Rows per page while uncontrolled (remembered with persistKey).

  • onPageSizeChange
    (pageSize: number) => void

    Called when the rows-per-page picker changes.

  • pageSizeOptionsdefault "[10, 25, 50, 100]"
    number[]

    The choices in the rows-per-page picker.

  • hasMore
    boolean

    load-more / infinite with your own fetching: whether more rows exist.

  • onLoadMore
    () => (void | Promise<unknown>)

    load-more / infinite with your own fetching: append the next rows to data. Without it the table reveals its own data a page at a time.

  • loadingMoredefault false
    boolean

    load-more / infinite: the next rows are on their way (the button shows a spinner).

  • sorting
    { id: string; desc: boolean }[]

    The sort, controlled (TanStack's SortingState). Shift-click a header to add a column.

  • defaultSortingdefault "[]"
    { id: string; desc: boolean }[]

    The starting sort while uncontrolled.

  • onSortingChange
    (sorting: DataTableSort[]) => void

    Called with the new sort.

  • globalFilter
    string

    The search, controlled. Client mode matches every word over the searchable columns' text, formatted values included, ignoring case and diacritics.

  • defaultGlobalFilterdefault ""
    string

    The starting search while uncontrolled.

  • onGlobalFilterChange
    (value: string) => void

    Called with the debounced search.

  • columnFilters
    { id: string; value: unknown }[]

    Column filters, controlled. Values: text a string, select a string, multi-select a string[], number-range [min, max] (either may be null), date-range { from, to }.

  • defaultColumnFiltersdefault "[]"
    { id: string; value: unknown }[]

    The starting filters while uncontrolled.

  • onColumnFiltersChange
    (filters: DataTableColumnFilter[]) => void

    Called with the new filters.

  • quickFilters
    DataTableQuickFilter<T>[]

    Toggle chips in the toolbar: { id, label, icon?, count?, filter: (row) => boolean } (client) or { id, label, columnFilter: { id, value } } (both modes; chips on the same column act like a radio).

  • columnVisibility
    Record<string, boolean>

    Which columns show, controlled (false hides).

  • defaultColumnVisibilitydefault "{}"
    Record<string, boolean>

    The starting visibility, e.g. { createdAt: false }. Reset in the Columns panel returns here.

  • onColumnVisibilityChange
    (visibility: Record<string, boolean>) => void

    Called when a column is shown or hidden.

  • columnOrder
    string[]

    Column ids in display order, controlled. Unknown ids are dropped and new columns appended, so a saved order survives column changes.

  • defaultColumnOrderdefault "[]"
    string[]

    The starting order while uncontrolled; empty follows columns.

  • onColumnOrderChange
    (order: string[]) => void

    Called after a drag, a Move left / right or a Move up / down.

  • selectionModedefault "none"
    "none" | "single" | "multiple"

    Row selection with checkboxes (and long press on phone cards). multiple adds the header box, ranges, Ctrl/Cmd + A and the bulk bar.

  • selectedKeys
    string[]

    Selected row ids, controlled. They survive paging and filtering: rows filtered out stay selected and the banner says how many are hidden.

  • defaultSelectedKeysdefault "[]"
    string[]

    The starting selection while uncontrolled.

  • onSelectedKeysChange
    (keys: string[]) => void

    Called with the selected ids in display order.

  • selectAllScopedefault "page"
    "page" | "all"

    page: the header box selects the page and a banner offers every matching row (Gmail). all: it selects every row that passes the filters at once (client mode).

  • bulkActions
    (rows: T[], keys: string[]) => ToolbarAction[]

    The toolbar's bulk mode while rows are selected: an inline band on desktop, a floating bar on phones. A danger tone stays red; a returned promise shows the button loading.

  • rowActions
    (row: T) => MenuEntry[]

    A ⋯ column pinned to the end (revealed on hover and focus, always on touch; a sheet on phones), the same menu on right-click, and Shift+F10 on a focused row.

  • onRowClick
    (row: T) => void

    Makes the row the target (Enter on a focused row too). With selection, Shift / Ctrl / Cmd + click selects instead.

  • expandabledefault false
    boolean | ((row: T) => boolean)

    A chevron column that opens renderSubRow under the row (Right / Left arrows too); a function decides per row.

  • renderSubRow
    (row: T) => ReactNode

    The expanded panel, full width, sliding open with the collapse preset.

  • expandedKeys
    string[]

    Expanded row ids, controlled.

  • defaultExpandedKeysdefault "[]"
    string[]

    The rows expanded at first.

  • onExpandedKeysChange
    (keys: string[]) => void

    Called when a row expands or collapses.

  • toolbardefault true
    boolean

    The toolbar above the table: search, quick filters, the Filters and Columns panels, page actions and the bulk bar.

  • toolbarActions
    ToolbarAction[]

    Page actions; the primary one stays visible, the rest fold into ⋯ as space runs out.

  • viewOptionsdefault true
    boolean

    The Columns panel: show and hide columns, drag or Move up / down to reorder, density, Reset.

  • columnMenudefault true
    boolean

    The menu on each header: Sort ascending / descending, Clear sort, Filter, Pin left / right / Unpin, Move left / right, Hide.

  • columnReorderdefault true
    boolean

    Drag headers sideways to reorder them (desktop). The header lifts into a floating chip while it moves.

  • columnResizingdefault false
    boolean

    Drag handles on the header edges (fixed layout); double-click resets, arrows resize a focused handle. Widths are remembered with persistKey.

  • density
    "compact" | "default" | "comfortable"

    Row height, controlled: 36 / 48 / 56px.

  • defaultDensitydefault "default"
    "compact" | "default" | "comfortable"

    The starting row height while uncontrolled; the Columns panel switches it and persistKey remembers it.

  • onDensityChange
    (density: DataTableDensity) => void

    Called when the density changes.

  • variantdefault "surface"
    "plain" | "surface"

    surface: a raised panel. plain: no panel, a header band, for tables inside cards.

  • stripeddefault false
    boolean

    A faint tint on every other row.

  • stickyHeaderdefault true
    boolean

    The header sticks under --table-sticky-top (default var(--topbar-offset, 0px)) while the page scrolls, or at the top of maxHeight.

  • stickyFirstColumndefault false
    boolean

    Pins the selection column and the first data column while the table scrolls sideways; a hairline shadow shows once rows slide under.

  • maxHeightdefault 0
    number | string

    The table scrolls inside this height in px (and virtualizes against it); 0 or empty lets the page scroll.

  • virtualizedefault "auto"
    boolean | "auto"

    Renders only the rows in view (overscan 10) with spacer rows, so the <table> stays semantic. auto turns on past 200 rendered rows. Phone cards use the page's scroll.

  • persistKeydefault ""
    string

    Remembers column visibility, order, widths, density and page size in local storage under this key.

  • loadingdefault false
    boolean

    The first load: skeleton rows in the real column layout (skeleton cards on phones).

  • skeletonCountdefault 8
    number

    How many skeleton rows the first load shows.

  • refreshingdefault false
    boolean

    Keeps the rows and slides a thin indeterminate bar along the top edge; sets aria-busy.

  • errordefault ""
    ReactNode

    Replaces the rows with the error state and this text; pair it with onRetry.

  • onRetry
    () => (void | Promise<unknown>)

    The error state's Try again; a returned promise shows it loading.

  • emptyState
    ReactNode

    Shown when there is no data at all (default an EmptyState with labels.empty).

  • showHeaderWhenEmptydefault false
    boolean

    With no rows to show (no data, or a search that matches nothing) the table renders the empty state alone, compact, without column headers spread over nothing. Turn it on to keep the headers above the empty state.

  • noResultsState
    ReactNode

    Shown when the search or filters hide every row (default the no-results EmptyState with Clear filters).

  • mobileLayoutdefault "cards"
    "cards" | "scroll"

    Below 768px: a card per row (title, subtitle, a badge or amount, up to four fields), or the table scrolling sideways.

  • renderCard
    (row: T) => ReactNode

    Your own phone card instead of the column mapping.

  • mobilePaginationdefault "load-more"
    "pages" | "load-more"

    How phones page through pages mode: Load more appends (the default, it feels native), pages keeps the compact pager. Server mode always pages.

  • classNames
    Partial<Record<"toolbar" | "banner" | "table" | "scroll" | "header" | "head" | "body" | "row" | "cell" | "selectCell" | "actionsCell" | "subRow" | "footer" | "empty" | "cards" | "card" | "pagination", string>>

    Extra classes for the inner parts.

Parts

  • createColumns

    function

    A typed column builder: accessor(key) checks the key against T, computed(id, fn) derives a value, display(id) only renders. Signature: <T>() => ((columns) => DataTableColumn<T>[]) & { accessor(key, column), computed(id, fn, column), display(id, column) }.

  • useDataTable

    hook

    The headless part: builds the TanStack v9 table from the same props (features registered once at module scope) and returns the rows to render, the useSelection result, the state and the actions, for custom renderings. Signature: (options: DataTableOptions<T>) => { table, rows, phoneRows, filteredRows, selection, state, columns, actions, loaded }.

  • DEFAULT_DATA_TABLE_LABELS

    constant

    The English strings; spread it to translate a few. Type: DataTableLabels.

Examples

Server mode

The same 1,240 clients behind a fake API with a 600ms delay: sorting, search and filters go out through onQueryChange while the bar shows refreshing.

10,000 rows, virtualized

pagination="none", virtualize, maxHeight 520 and density="compact": the DOM holds only the rows on screen plus overscan.

Expandable invoices

Each invoice expands to its lines, a nested Table; Right and Left arrows expand and collapse the focused row.

Wide table

Twelve columns with the first one pinned, drag-to-resize edges and persistKey: reload the page and your columns stay.

Empty, no results, error

No data at all, a search for zzz that matches nothing (with Clear filters), and a failed load with Try again.

On a phone

Cards instead of rows: long press a card to start selecting, tap to add more, the bulk bar floats at the bottom and Load more appends.

Minimal

toolbar={false}, five rows, no pagination and variant="plain" inside a Card.

Dependencies

@tanstack/react-table@tanstack/react-virtual@dnd-kit/core@dnd-kit/sortable@dnd-kit/utilitiesmotionlucide-reacttableprogressempty-statetoolbarpaginationcheckboxdropdown-menucontext-menupopoverbuttonbadgeavatarinputnumber-inputdate-range-pickersegmented-controlskeletontooltiptext-matchuse-selectionuse-persisted-stateuse-debounceuse-long-pressuse-media-queryuse-controllable-stateuse-localenumber-formatdate-utilsrelative-timemotiontonesui-config

Files

  • components/ui/data-table.tsx

FAQ

Is the React Data Table component free?

The preview, props and docs are free; copying the source needs a Pro plan. See plans.

How do I install Data Table?

Run npx wingo-ui@latest add data-table. It also adds the Wingo UI items it builds on (Table, Progress, Empty State, Toolbar, Pagination and 27 more) and the npm packages @tanstack/react-table, @tanstack/react-virtual, @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities, motion and lucide-react. With shadcn, add the @wingo-ui registry with your API key, then run npx shadcn@latest add @wingo-ui/data-table.

How does Data Table behave on phones?

On a phone every row is a card: long press a card to start selecting, then tap to add more while the bulk bar floats at the bottom; sort, filters and row menus open as bottom sheets, and Load more appends the next rows. 10,000 rows scroll at 60fps because only the visible ones are in the DOM.

See also

TableToolbarPaginationListVirtual List

Used in

Admin Dashboard Page

More React table and list components

Deal PipelineAudit LogEditable GridMembers tablePermissions MatrixTask List
All 11 React table and list components

Articles using this component

  • Antigravity MCP Setup: The Right Config Path and Prompts

    Building UI with AI agents · Nov 6, 2026 · 10 min read

  • API Key Management UI: Create, Show Once, Roll, Revoke

    Build it: screens and apps · Nov 6, 2026 · 10 min read

  • Audit Log UI in React: Filters, Diffs and CSV Export

    Component guides · Nov 6, 2026 · 10 min read

  • Is shadcn Free for Commercial Use? MIT vs Paid Kits

    Comparisons and alternatives · Nov 6, 2026 · 10 min read

PreviousAudit LogNext Deal Pipeline
1,240 results
Acme CRM clients
Owner
Invoiced and not yet collected, tax included
Row actions
TITech Solutions Inc.12-3456789ChicagoActiveEmma Carter$12,480.0009/18/2026, 12:00 AM
SLSummit Logistics23-4567812DenverActiveLiam Walker$48,920.5009/22/2026, 12:00 AM
CLCarter Consulting LLC34-5678123AustinProspectNoah Hayes$0.00–
GPGreenleaf Pharmacy45-6781234PortlandOverdueOlivia Bennett$7,315.2008/02/2026, 12:00 AM
CIConstruct Group Inc.56-7812345DallasActiveLiam Walker$103,400.0009/20/2026, 12:00 AM
OLOld Mill Bakery LLC67-8123456NashvilleInactiveNoah Hayes$1,250.0003/14/2026, 12:00 AM
DCDental Art Clinic78-1234567MiamiActiveEmma Carter$5,600.0009/12/2026, 12:00 AM
WBWestside Books81-2345678PortlandOverdueOlivia Bennett$2,980.7507/29/2026, 12:00 AM
BBistro 2191-2345680New YorkProspectMia Turner$0.00–
NSNorthwind Studio19-2837460ChicagoActiveRyan Brooks$9,870.0009/23/2026, 12:00 AM
GRGreen House Realty28-3746510SeattleNegotiatingNoah Hayes$0.00–
PSPixel Studio37-4651920San FranciscoActiveMia Turner$3,450.0009/21/2026, 12:00 AM
DCDelta Trans Co.13-840130AustinActiveEmma Carter$100,602.9608/31/2026, 12:00 AM
SISummit Trans Inc.94-798330San AntonioActiveJames Miller$208,531.9309/02/2026, 12:00 AM
HLHarbor Construct LLC45-541654PortlandInactiveOlivia Bennett$1,505.9307/26/2025, 12:00 AM
CICedar Tech Inc.88-273966DetroitActiveSophia Reed$232,010.3308/22/2026, 12:00 AM
BLBluebird Service LLC17-192606AtlantaProspectLiam Walker$0.00–
SLSummit Service LLC63-835878DenverActiveMia Turner$222,323.6208/20/2026, 12:00 AM
RIRiver Tech Inc.92-386891AtlantaActiveJames Miller$225,004.3808/18/2026, 12:00 AM
PLPrairie Trans LLC59-665296NashvilleActiveLiam Walker$20,626.1508/27/2026, 12:00 AM
SLSummit Food LLC67-589725San AntonioActiveJames Miller$198,697.1009/10/2026, 12:00 AM
PIPrairie Service Inc.38-357348ChicagoActiveEmma Carter$227,759.7009/19/2026, 12:00 AM
MLMaple Design LLC55-686267DenverNegotiatingLiam Walker$0.00–
MLMaple Logistic LLC29-668991DallasActiveOlivia Bennett$2,518.4309/18/2026, 12:00 AM
RIRedwood Trans Inc.60-479706PhoenixInactiveJames Miller$4,678.5208/05/2025, 12:00 AM
Totals$59,994,825.61
  • TITech Solutions Inc.12-3456789
    Active
    City
    Chicago
    Owner
    Emma Carter
    Balance
    $12,480.00
    Last invoice
    09/18/2026, 12:00 AM
  • SLSummit Logistics23-4567812
    Active
    City
    Denver
    Owner
    Liam Walker
    Balance
    $48,920.50
    Last invoice
    09/22/2026, 12:00 AM
  • CLCarter Consulting LLC34-5678123
    Prospect
    City
    Austin
    Owner
    Noah Hayes
    Balance
    $0.00
    Last invoice
    –
  • GPGreenleaf Pharmacy45-6781234
    Overdue
    City
    Portland
    Owner
    Olivia Bennett
    Balance
    $7,315.20
    Last invoice
    08/02/2026, 12:00 AM
  • CIConstruct Group Inc.56-7812345
    Active
    City
    Dallas
    Owner
    Liam Walker
    Balance
    $103,400.00
    Last invoice
    09/20/2026, 12:00 AM
  • OLOld Mill Bakery LLC67-8123456
    Inactive
    City
    Nashville
    Owner
    Noah Hayes
    Balance
    $1,250.00
    Last invoice
    03/14/2026, 12:00 AM
  • DCDental Art Clinic78-1234567
    Active
    City
    Miami
    Owner
    Emma Carter
    Balance
    $5,600.00
    Last invoice
    09/12/2026, 12:00 AM
  • WBWestside Books81-2345678
    Overdue
    City
    Portland
    Owner
    Olivia Bennett
    Balance
    $2,980.75
    Last invoice
    07/29/2026, 12:00 AM
  • BBistro 2191-2345680
    Prospect
    City
    New York
    Owner
    Mia Turner
    Balance
    $0.00
    Last invoice
    –
  • NSNorthwind Studio19-2837460
    Active
    City
    Chicago
    Owner
    Ryan Brooks
    Balance
    $9,870.00
    Last invoice
    09/23/2026, 12:00 AM
  • GRGreen House Realty28-3746510
    Negotiating
    City
    Seattle
    Owner
    Noah Hayes
    Balance
    $0.00
    Last invoice
    –
  • PSPixel Studio37-4651920
    Active
    City
    San Francisco
    Owner
    Mia Turner
    Balance
    $3,450.00
    Last invoice
    09/21/2026, 12:00 AM
  • DCDelta Trans Co.13-840130
    Active
    City
    Austin
    Owner
    Emma Carter
    Balance
    $100,602.96
    Last invoice
    08/31/2026, 12:00 AM
  • SISummit Trans Inc.94-798330
    Active
    City
    San Antonio
    Owner
    James Miller
    Balance
    $208,531.93
    Last invoice
    09/02/2026, 12:00 AM
  • HLHarbor Construct LLC45-541654
    Inactive
    City
    Portland
    Owner
    Olivia Bennett
    Balance
    $1,505.93
    Last invoice
    07/26/2025, 12:00 AM
  • CICedar Tech Inc.88-273966
    Active
    City
    Detroit
    Owner
    Sophia Reed
    Balance
    $232,010.33
    Last invoice
    08/22/2026, 12:00 AM
  • BLBluebird Service LLC17-192606
    Prospect
    City
    Atlanta
    Owner
    Liam Walker
    Balance
    $0.00
    Last invoice
    –
  • SLSummit Service LLC63-835878
    Active
    City
    Denver
    Owner
    Mia Turner
    Balance
    $222,323.62
    Last invoice
    08/20/2026, 12:00 AM
  • RIRiver Tech Inc.92-386891
    Active
    City
    Atlanta
    Owner
    James Miller
    Balance
    $225,004.38
    Last invoice
    08/18/2026, 12:00 AM
  • PLPrairie Trans LLC59-665296
    Active
    City
    Nashville
    Owner
    Liam Walker
    Balance
    $20,626.15
    Last invoice
    08/27/2026, 12:00 AM
  • SLSummit Food LLC67-589725
    Active
    City
    San Antonio
    Owner
    James Miller
    Balance
    $198,697.10
    Last invoice
    09/10/2026, 12:00 AM
  • PIPrairie Service Inc.38-357348
    Active
    City
    Chicago
    Owner
    Emma Carter
    Balance
    $227,759.70
    Last invoice
    09/19/2026, 12:00 AM
  • MLMaple Design LLC55-686267
    Negotiating
    City
    Denver
    Owner
    Liam Walker
    Balance
    $0.00
    Last invoice
    –
  • MLMaple Logistic LLC29-668991
    Active
    City
    Dallas
    Owner
    Olivia Bennett
    Balance
    $2,518.43
    Last invoice
    09/18/2026, 12:00 AM
  • RIRedwood Trans Inc.60-479706
    Inactive
    City
    Phoenix
    Owner
    James Miller
    Balance
    $4,678.52
    Last invoice
    08/05/2025, 12:00 AM
Balance$59,994,825.61

1–25 of 1,240

  • …

Showing 25 of 1,240

last action: none