Skip to content

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.

Core search filter implementation.

import { TableSearchFilter } from "@/components/niko-table/filters"
<TableSearchFilter table={table} placeholder="Search..." />
NameTypeDefaultDescription
tableTable<TData>-TanStack Table instance (required).
placeholderstring"Search..."Input placeholder text.
valuestring-Controlled value.
onChange(value: string) => void-Change handler for controlled mode.
showClearButtonbooleantrueShow clear button when input has value.
classNamestring-Additional CSS classes.

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.

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 mode
const [filters, setFilters] = useState<ExtendedColumnFilter<Product>[]>([])
<TableFilterMenu
table={table}
filters={filters}
onFiltersChange={setFilters}
/>
NameTypeDescription
tableTable<TData>TanStack Table instance (required).
filtersExtendedColumnFilter<TData>[]Controlled filters array.
onFiltersChange(filters: ExtendedColumnFilter<TData>[] | null) => voidCallback when filters change.
classNamestringAdditional CSS classes.

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)}
/>
NameTypeDescription
columnColumn<TData, TValue>Table column instance (required).
titlestringFilter title.
optionsOption[]Static options array.
multiplebooleanAllow multiple selection.
onValueChange(value: string[] | undefined) => voidCallback when value changes.

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)}
/>
NameTypeDescription
columnColumn<TData>Table column instance (required).
titlestringFilter title.
range[number, number]Manual range [min, max].
minnumberManual minimum value.
maxnumberManual maximum value.
stepnumberStep increment.
unitstringUnit label (e.g., ”$”, “kg”).
onValueChange(value: [number, number] | undefined) => voidCallback when value changes.

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
/>
NameTypeDescription
columnColumn<TData>Table column instance (required).
titlestringFilter title.
multiplebooleanEnable date range selection.

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
/>
NameTypeDescription
tableTable<TData>TanStack Table instance (required).
debounceMsnumberDebounce delay for sort updates.
throttleMsnumberThrottle delay for sort updates.
shallowbooleanUse shallow comparison for sort state.
classNamestringAdditional CSS classes.
onSortingChange(sorting: ColumnSort[]) => voidCallback when sorting changes.

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"}`)
}}
/>
NameTypeDescription
tableTable<TData>TanStack Table instance (required).
classNamestringAdditional CSS classes.
onColumnVisibilityChange(columnId: string, isVisible: boolean) => voidCallback when visibility changes.

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 filters
const [filters, setFilters] = useState<ExtendedColumnFilter<Product>[]>([])
<TableInlineFilter
table={table}
filters={filters}
onFiltersChange={setFilters}
/>
NameTypeDescription
tableTable<TData>TanStack Table instance (required).
filtersExtendedColumnFilter<TData>[]Controlled filters array.
onFiltersChange(filters: ExtendedColumnFilter<TData>[]) => voidCallback when filters change.
classNamestringAdditional CSS classes.

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}
/>
NameTypeDefaultDescription
tableTable<TData>-TanStack Table instance (required).
variant"default" | "outline" | "ghost""outline"Button variant.
size"default" | "sm" | "lg""sm"Button size.
showIconbooleantrueShow clear icon.
childrenReact.ReactNode-Button content.
enableResetColumnFiltersbooleantrueEnable resetting column filters.
enableResetGlobalFilterbooleantrueEnable resetting global filter (search).
enableResetSortingbooleantrueEnable resetting sorting.
classNamestring-Additional CSS classes.

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
/>
NameTypeDefaultDescription
tableTable<TData>-TanStack Table instance (required).
filenamestring"table"Filename for exported CSV (without extension).
excludeColumns(keyof TData)[]-Columns to exclude from export.
onlySelectedbooleanfalseExport only selected rows.
useHeaderLabelsbooleanfalseUse column.columnDef.meta.label as CSV headers instead of column IDs.
variantButtonVariant"outline"Button variant.
sizeButtonSize"sm"Button size.
labelstring"Export CSV"Button label.
showIconbooleantrueShow download icon.
classNamestring-Additional CSS classes.

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 export
exportTableToCSV(table, { filename: "users" })
// Export with human-readable headers from column.meta.label
exportTableToCSV(table, { filename: "users", useHeaderLabels: true })
// Export only selected rows, excluding certain columns
exportTableToCSV(table, {
filename: "selected-users",
onlySelected: true,
excludeColumns: ["id", "internalNotes"],
})
NameTypeDefaultDescription
filenamestring"table"Filename for exported CSV (without extension).
excludeColumns(keyof TData)[][]Columns to exclude from export.
onlySelectedbooleanfalseExport only selected rows.
useHeaderLabelsbooleanfalseUse column.columnDef.meta.label as CSV headers instead of column IDs.

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 configuration
const 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)
}}
/>
NameTypeDescription
filterExtendedColumnFilter<TData>Filter configuration (required).
columnColumn<TData>Table column instance (required).
inputIdstringUnique input ID (required).
onFilterUpdate(filterId: string, updates: Partial<Omit<ExtendedColumnFilter<TData>, "filterId">>) => voidCallback when filter updates.
classNamestringAdditional CSS classes.

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.

Core column title implementation. Renders a clickable title that toggles sorting.

import { TableColumnTitle } from "@/components/niko-table/filters"
<TableColumnTitle column={column} title="Custom Title" />
NameTypeDescription
columnColumn<TData, TValue>Table column instance (required).
titlestringCustom title (uses column.meta.label if not provided).
classNamestringAdditional CSS classes.

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>
NameTypeDefaultDescription
childrenReact.ReactNode-Action option components.
isActivebooleanfalseWhether to show active indicator (dot on trigger).
classNamestring-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} />
NameTypeDescription
columnColumn<TData>Table column instance (required).
tableTable<TData>TanStack Table instance (required).
classNamestringAdditional 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} />
NameTypeDescription
columnColumn<TData, TValue>Table column instance (required).
classNamestringAdditional 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} />
NameTypeDescription
columnColumn<TData, TValue>Table column instance (required).
classNamestringAdditional 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} />
NameTypeDescription
columnColumn<TData>Table column instance (required).
tableTable<TData>TanStack Table instance (Menu only).
optionsOption[]Static options array.
multiplebooleanAllow multiple selection.
classNamestringAdditional CSS classes.

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} />
NameTypeDescription
columnColumn<TData>Table column instance (required).
minnumberMinimum value.
maxnumberMaximum value.
stepnumberStep increment.
classNamestringAdditional CSS classes.

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 />
NameTypeDescription
columnColumn<TData>Table column instance (required).
multiplebooleanEnable date range selection.
classNamestringAdditional CSS classes.