Filter Components
Core filter implementation components that accept a table prop directly.
Filter components are the core implementation that accept a table prop directly. They are used internally by the context-aware components in components/ but can also be used standalone when building custom components.
TableSearchFilter
Section titled “TableSearchFilter”Core search filter implementation.
import { TableSearchFilter } from "@/components/niko-table/filters"
<TableSearchFilter table={table} placeholder="Search..." />| Name | Type | Default | Description |
|---|---|---|---|
table | Table<TData> | - | TanStack Table instance (required). |
placeholder | string | "Search..." | Input placeholder text. |
value | string | - | Controlled value. |
onChange | (value: string) => void | - | Change handler for controlled mode. |
showClearButton | boolean | true | Show clear button when input has value. |
className | string | - | Additional CSS classes. |
TablePagination
Section titled “TablePagination”Core pagination implementation.
import { TablePagination } from "@/components/niko-table/filters"
// Basic usage<TablePagination table={table} />
// With custom page size options<TablePagination table={table} pageSizeOptions={[10, 25, 50, 100]}/>
// With total count for server-side pagination<TablePagination table={table} totalCount={500} onPageChange={(pageIndex) => console.log("Page:", pageIndex)}/>Same as DataTablePagination but requires table prop. See DataTablePagination section above.
TableFilterMenu
Section titled “TableFilterMenu”Core filter menu implementation with command palette interface.
import { TableFilterMenu } from "@/components/niko-table/filters"import { useState } from "react"import type { ExtendedColumnFilter } from "@/components/niko-table/types"
// Controlled modeconst [filters, setFilters] = useState<ExtendedColumnFilter<Product>[]>([])
<TableFilterMenu table={table} filters={filters} onFiltersChange={setFilters}/>| Name | Type | Description |
|---|---|---|
table | Table<TData> | TanStack Table instance (required). |
filters | ExtendedColumnFilter<TData>[] | Controlled filters array. |
onFiltersChange | (filters: ExtendedColumnFilter<TData>[] | null) => void | Callback when filters change. |
className | string | Additional CSS classes. |
TableFacetedFilter
Section titled “TableFacetedFilter”Core faceted filter implementation.
import { TableFacetedFilter } from "@/components/niko-table/filters"
// Basic usage with static options<TableFacetedFilter column={table.getColumn("category")} title="Category" options={[ { label: "Electronics", value: "electronics" }, { label: "Clothing", value: "clothing" }, ]}/>
// With multiple selection<TableFacetedFilter column={table.getColumn("brand")} title="Brand" options={brandOptions} multiple onValueChange={(value) => console.log("Selected:", value)}/>| Name | Type | Description |
|---|---|---|
column | Column<TData, TValue> | Table column instance (required). |
title | string | Filter title. |
options | Option[] | Static options array. |
multiple | boolean | Allow multiple selection. |
onValueChange | (value: string[] | undefined) => void | Callback when value changes. |
TableSliderFilter
Section titled “TableSliderFilter”Core slider filter implementation for numeric ranges.
import { TableSliderFilter } from "@/components/niko-table/filters"
// Basic usage (auto-detects range from data)<TableSliderFilter column={table.getColumn("price")} title="Price"/>
// With custom range<TableSliderFilter column={table.getColumn("rating")} title="Rating" min={1} max={5} step={0.5}/>
// With unit and range array<TableSliderFilter column={table.getColumn("price")} title="Price Range" range={[0, 1000]} unit="$" onValueChange={(value) => console.log("Range:", value)}/>| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
title | string | Filter title. |
range | [number, number] | Manual range [min, max]. |
min | number | Manual minimum value. |
max | number | Manual maximum value. |
step | number | Step increment. |
unit | string | Unit label (e.g., ”$”, “kg”). |
onValueChange | (value: [number, number] | undefined) => void | Callback when value changes. |
TableDateFilter
Section titled “TableDateFilter”Core date filter implementation.
import { TableDateFilter } from "@/components/niko-table/filters"
// Single date selection<TableDateFilter column={table.getColumn("releaseDate")} title="Release Date"/>
// Date range selection<TableDateFilter column={table.getColumn("createdAt")} title="Created Date" multiple/>| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
title | string | Filter title. |
multiple | boolean | Enable date range selection. |
TableSortMenu
Section titled “TableSortMenu”Core sort menu implementation.
import { TableSortMenu } from "@/components/niko-table/filters"
// Basic usage<TableSortMenu table={table} />
// With debounce for performance<TableSortMenu table={table} debounceMs={300} onSortingChange={(sorting) => console.log("Sorting:", sorting)}/>
// With throttle instead of debounce<TableSortMenu table={table} throttleMs={200} shallow/>| Name | Type | Description |
|---|---|---|
table | Table<TData> | TanStack Table instance (required). |
debounceMs | number | Debounce delay for sort updates. |
throttleMs | number | Throttle delay for sort updates. |
shallow | boolean | Use shallow comparison for sort state. |
className | string | Additional CSS classes. |
onSortingChange | (sorting: ColumnSort[]) => void | Callback when sorting changes. |
TableViewMenu
Section titled “TableViewMenu”Core view menu implementation for column visibility.
import { TableViewMenu } from "@/components/niko-table/filters"
// Basic usage<TableViewMenu table={table} />
// With visibility change callback<TableViewMenu table={table} onColumnVisibilityChange={(columnId, isVisible) => { console.log(`Column ${columnId} is now ${isVisible ? "visible" : "hidden"}`) }}/>| Name | Type | Description |
|---|---|---|
table | Table<TData> | TanStack Table instance (required). |
className | string | Additional CSS classes. |
onColumnVisibilityChange | (columnId: string, isVisible: boolean) => void | Callback when visibility changes. |
TableInlineFilter
Section titled “TableInlineFilter”Core inline filter implementation with advanced operators.
import { TableInlineFilter } from "@/components/niko-table/filters"import { useState } from "react"import type { ExtendedColumnFilter } from "@/components/niko-table/types"
// Controlled mode with filtersconst [filters, setFilters] = useState<ExtendedColumnFilter<Product>[]>([])
<TableInlineFilter table={table} filters={filters} onFiltersChange={setFilters}/>| Name | Type | Description |
|---|---|---|
table | Table<TData> | TanStack Table instance (required). |
filters | ExtendedColumnFilter<TData>[] | Controlled filters array. |
onFiltersChange | (filters: ExtendedColumnFilter<TData>[]) => void | Callback when filters change. |
className | string | Additional CSS classes. |
TableClearFilter
Section titled “TableClearFilter”Core clear filter button implementation.
import { TableClearFilter } from "@/components/niko-table/filters"
// Basic usage<TableClearFilter table={table} />
// With custom styling<TableClearFilter table={table} variant="ghost" size="sm"/>
// Custom content<TableClearFilter table={table}> Reset All</TableClearFilter>
// Selective reset (only filters, not sorting)<TableClearFilter table={table} enableResetSorting={false}/>| Name | Type | Default | Description |
|---|---|---|---|
table | Table<TData> | - | TanStack Table instance (required). |
variant | "default" | "outline" | "ghost" | "outline" | Button variant. |
size | "default" | "sm" | "lg" | "sm" | Button size. |
showIcon | boolean | true | Show clear icon. |
children | React.ReactNode | - | Button content. |
enableResetColumnFilters | boolean | true | Enable resetting column filters. |
enableResetGlobalFilter | boolean | true | Enable resetting global filter (search). |
enableResetSorting | boolean | true | Enable resetting sorting. |
className | string | - | Additional CSS classes. |
TableExportButton
Section titled “TableExportButton”Core export button implementation.
import { TableExportButton, exportTableToCSV } from "@/components/niko-table/filters"
// Basic usage<TableExportButton table={table} />
// With custom filename<TableExportButton table={table} filename="products-export"/>
// Exclude specific columns<TableExportButton table={table} filename="products" excludeColumns={["id", "internalNotes"]}/>
// Export only selected rows<TableExportButton table={table} onlySelected label="Export Selected"/>
// With human-readable headers from column.meta.label<TableExportButton table={table} filename="products" useHeaderLabels/>| Name | Type | Default | Description |
|---|---|---|---|
table | Table<TData> | - | TanStack Table instance (required). |
filename | string | "table" | Filename for exported CSV (without extension). |
excludeColumns | (keyof TData)[] | - | Columns to exclude from export. |
onlySelected | boolean | false | Export only selected rows. |
useHeaderLabels | boolean | false | Use column.columnDef.meta.label as CSV headers instead of column IDs. |
variant | ButtonVariant | "outline" | Button variant. |
size | ButtonSize | "sm" | Button size. |
label | string | "Export CSV" | Button label. |
showIcon | boolean | true | Show download icon. |
className | string | - | Additional CSS classes. |
exportTableToCSV
Section titled “exportTableToCSV”Standalone utility function to export a TanStack Table to CSV. Use this when you want full control over when and how the export happens.
import { exportTableToCSV } from "@/components/niko-table/filters"
// Basic exportexportTableToCSV(table, { filename: "users" })
// Export with human-readable headers from column.meta.labelexportTableToCSV(table, { filename: "users", useHeaderLabels: true })
// Export only selected rows, excluding certain columnsexportTableToCSV(table, { filename: "selected-users", onlySelected: true, excludeColumns: ["id", "internalNotes"],})Options (ExportTableToCSVOptions<TData>)
Section titled “Options (ExportTableToCSVOptions<TData>)”| Name | Type | Default | Description |
|---|---|---|---|
filename | string | "table" | Filename for exported CSV (without extension). |
excludeColumns | (keyof TData)[] | [] | Columns to exclude from export. |
onlySelected | boolean | false | Export only selected rows. |
useHeaderLabels | boolean | false | Use column.columnDef.meta.label as CSV headers instead of column IDs. |
TableRangeFilter
Section titled “TableRangeFilter”Core range filter implementation for numeric inputs.
import { TableRangeFilter } from "@/components/niko-table/filters"import type { ExtendedColumnFilter } from "@/components/niko-table/types"
// Basic usage with filter configurationconst filter: ExtendedColumnFilter<Product> = { filterId: "price-range", columnId: "price", operator: "between", value: [0, 100],}
<TableRangeFilter filter={filter} column={table.getColumn("price")} inputId="price-min" onFilterUpdate={(filterId, updates) => { console.log("Filter updated:", filterId, updates) }}/>| Name | Type | Description |
|---|---|---|
filter | ExtendedColumnFilter<TData> | Filter configuration (required). |
column | Column<TData> | Table column instance (required). |
inputId | string | Unique input ID (required). |
onFilterUpdate | (filterId: string, updates: Partial<Omit<ExtendedColumnFilter<TData>, "filterId">>) => void | Callback when filter updates. |
className | string | Additional CSS classes. |
Column-Level Filter Components
Section titled “Column-Level Filter Components”These components are the core implementations used by the composable DataTableColumnHeader sub-components. They accept column and/or table props directly and can be used standalone when building custom column headers.
TableColumnTitle
Section titled “TableColumnTitle”Core column title implementation. Renders a clickable title that toggles sorting.
import { TableColumnTitle } from "@/components/niko-table/filters"
<TableColumnTitle column={column} title="Custom Title" />| Name | Type | Description |
|---|---|---|
column | Column<TData, TValue> | Table column instance (required). |
title | string | Custom title (uses column.meta.label if not provided). |
className | string | Additional CSS classes. |
TableColumnActions
Section titled “TableColumnActions”Core column actions container. Renders a dropdown menu trigger with active state indicator.
import { TableColumnActions } from "@/components/niko-table/filters"
<TableColumnActions isActive={column.getIsSorted() !== false}> {/* Sort, pin, hide options */}</TableColumnActions>| Name | Type | Default | Description |
|---|---|---|---|
children | React.ReactNode | - | Action option components. |
isActive | boolean | false | Whether to show active indicator (dot on trigger). |
className | string | - | Additional CSS classes. |
TableColumnSortOptions / TableColumnSortMenu
Section titled “TableColumnSortOptions / TableColumnSortMenu”Core sorting implementations. TableColumnSortOptions renders sort items inside a dropdown menu. TableColumnSortMenu renders a standalone sort button.
import { TableColumnSortOptions, TableColumnSortMenu,} from "@/components/niko-table/filters"
// Inside a dropdown menu<TableColumnSortOptions column={column} table={table} />
// Standalone button<TableColumnSortMenu column={column} table={table} />| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
table | Table<TData> | TanStack Table instance (required). |
className | string | Additional CSS classes. |
TableColumnHideOptions / TableColumnHideMenu
Section titled “TableColumnHideOptions / TableColumnHideMenu”Core hide column implementations. TableColumnHideOptions renders a hide item inside a dropdown menu. TableColumnHideMenu renders a standalone button.
import { TableColumnHideOptions, TableColumnHideMenu,} from "@/components/niko-table/filters"
// Inside a dropdown menu<TableColumnHideOptions column={column} />
// Standalone button<TableColumnHideMenu column={column} />| Name | Type | Description |
|---|---|---|
column | Column<TData, TValue> | Table column instance (required). |
className | string | Additional CSS classes. |
TableColumnPinOptions / TableColumnPinMenu
Section titled “TableColumnPinOptions / TableColumnPinMenu”Core column pinning implementations. TableColumnPinOptions renders pin left/right/unpin items inside a dropdown menu. TableColumnPinMenu renders a standalone button.
import { TableColumnPinOptions, TableColumnPinMenu,} from "@/components/niko-table/filters"
// Inside a dropdown menu<TableColumnPinOptions column={column} />
// Standalone button<TableColumnPinMenu column={column} />| Name | Type | Description |
|---|---|---|
column | Column<TData, TValue> | Table column instance (required). |
className | string | Additional CSS classes. |
TableColumnFacetedFilterOptions / TableColumnFacetedFilterMenu
Section titled “TableColumnFacetedFilterOptions / TableColumnFacetedFilterMenu”Core faceted filter implementations for column headers. TableColumnFacetedFilterOptions renders inside a dropdown. TableColumnFacetedFilterMenu renders a standalone popover.
import { TableColumnFacetedFilterOptions, TableColumnFacetedFilterMenu,} from "@/components/niko-table/filters"
// Inside a dropdown menu<TableColumnFacetedFilterOptions column={column} options={options} />
// Standalone popover<TableColumnFacetedFilterMenu column={column} table={table} options={options} />| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
table | Table<TData> | TanStack Table instance (Menu only). |
options | Option[] | Static options array. |
multiple | boolean | Allow multiple selection. |
className | string | Additional CSS classes. |
TableColumnSliderFilterOptions
Section titled “TableColumnSliderFilterOptions”Core slider filter implementation for column headers. Renders a range slider inside a dropdown menu.
import { TableColumnSliderFilterOptions } from "@/components/niko-table/filters"
<TableColumnSliderFilterOptions column={column} min={0} max={1000} step={10} />| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
min | number | Minimum value. |
max | number | Maximum value. |
step | number | Step increment. |
className | string | Additional CSS classes. |
TableColumnDateFilterOptions
Section titled “TableColumnDateFilterOptions”Core date filter implementation for column headers. Renders a date picker inside a dropdown menu.
import { TableColumnDateFilterOptions } from "@/components/niko-table/filters"
<TableColumnDateFilterOptions column={column} multiple />| Name | Type | Description |
|---|---|---|
column | Column<TData> | Table column instance (required). |
multiple | boolean | Enable date range selection. |
className | string | Additional CSS classes. |