
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@sineways/react-tablefront
Advanced tools
React Data Table and Data Grid for TypeScript. Zero config with fast search and filters, pagination and infinite scroll, table grid and masonry layouts. Built on TanStack Table.
A premium, feature-rich DataTable component that works out of the box with zero configuration.
For more information and licensing, visit our website. For a live demo, see demo page.
npm install @sineways/react-tablefront
Tablefront works without a key, but shows a small watermark. To remove it, provide a key and run activation at build time.
Add your key to .env:
TABLEFRONT_LICENSE=your-license-key
Ensure activation runs during your build (example for Next.js):
{
"scripts": {
"build": "tablefront activate && next build"
}
}
Notes:
Import the package stylesheet once in your app entry:
import '@sineways/react-tablefront/styles.css'
import { DataTable } from '@sineways/react-tablefront'
function UsersPage () {
const [users, setUsers] = React.useState([])
const [isLoading, setIsLoading] = React.useState(true)
return (
<DataTable
data={users}
isLoading={isLoading}
storeId='userTable'
/>
)
}
Required props:
{
data: TData[]
}
Key optional props (selected):
{
// Columns & fields
columns?: ColumnDef<TData, any>[]
columnOverrides?: ColumnOverrides<TData>
// First-use default column visibility (persisted via storeId)
initialColumnVisibility?: { hideAll?: boolean, byId?: Record<string, boolean> }
fieldOverrides?: FieldOverrides<TData>
// Styling & UI
customStyles?: PartialTableStyles
uiComponents?: DataTableUIComponents
icons?: DataTableIcons
storeId?: string
// Row interaction
onRowClick?: (row: TData) => void
selectedRow?: TData | null
autoSelect?: boolean
// Expandable rows
expandable?: boolean
expandedRows?: Record<string, boolean>
onToggleExpand?: (row: TData) => void
onExpansionChange?: (expandedRows: Record<string, boolean>) => void
renderExpandedContent?: (row: TData) => React.ReactNode
// Width clamping (table mode)
clampExpandedContentToContainer?: boolean // default: true
clampStaticRowsToContainer?: boolean // default: true
// Custom rendering
headerRightElement?: React.ReactNode
customRenderGridItem?: (row: TData, index: number, isSelected: boolean) => React.ReactNode
customStaticRows?: React.ReactNode[]
customStaticRowsSticky?: boolean
// Text & states
searchPlaceholder?: string
emptyStateText?: string
loadingText?: string
isLoading?: boolean
// Layout
layout?: {
showSearchBar?: boolean
showHeader?: boolean
showTableHeaders?: boolean
showColumnVisibility?: boolean
showFilterButton?: boolean
displayMode?: 'table' | 'grid' | 'masonry'
gridColumns?: number
gridItemMinWidth?: number
masonryColumns?: number
masonryItemMinWidth?: number
masonryGap?: number
}
// Pagination & infinite scroll
paginationConfig?: {
autoFit?: boolean
pageSize?: number
}
infiniteScrollConfig?: {
enabled?: boolean
adaptive?: boolean
loadThreshold?: number
pageSize?: number
increment?: number
maxItems?: number
}
// Feature toggles
enableColumnDrag?: boolean
enableColumnResize?: boolean
resizeTimingConfig?: ResizeTimingConfig
}
You can control which columns are shown on first use. The initial state is persisted per storeId.
<DataTable
data={products}
storeId='products'
initialColumnVisibility={{
hideAll: true,
byId: { name: true, price: true }
}}
/>
Notes:
hideAll is true, all columns are hidden by default and only the byId entries marked true are shown.FilterProcessor powers structured filters and free-text search.
number, string, date> < >= <= = != * !*path, aliases, preferredValues, defaultOperator, defaultNumericValue, isPercentage, etc.Examples:
- impressions:>100
- createdAt:>=2024-01-01
- status:active (string contains)
- -status:active (negated)
You can replace internal UI with your components via uiComponents:
export type DataTableUIComponents = {
Button?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
FilterButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
ColumnButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
ClearButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
ClearSearchButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
PaginationButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
FilterItemButton?: ComponentType<ButtonHTMLAttributes<HTMLButtonElement>>
ScrollArea?: ComponentType<{ className?: string; children?: ReactNode }>
Popover?: ComponentType<{ children: ReactNode; open?: boolean; onOpenChange?: (open: boolean) => void }>
PopoverTrigger?: ComponentType<{ children: ReactNode; asChild?: boolean }>
PopoverContent?: ComponentType<{ children: ReactNode; className?: string; align?: 'center' | 'start' | 'end'; sideOffset?: number }>
Tooltip?: ComponentType<{ children: ReactNode }>
TooltipTrigger?: ComponentType<{ children: ReactNode; asChild?: boolean }>
TooltipContent?: ComponentType<{ children: ReactNode; className?: string }>
Switch?: ComponentType<{ checked?: boolean; onCheckedChange?: (v: boolean) => void; className?: string; id?: string }>
Label?: ComponentType<{ children?: ReactNode; htmlFor?: string; className?: string }>
Separator?: ComponentType<{ className?: string }>
Settings02Icon?: ComponentType<{ className?: string }>
}
Override any default icon:
export type DataTableIcons = {
Loader?: ComponentType<IconProps>
PaginationPrevious?: ComponentType<IconProps>
PaginationNext?: ComponentType<IconProps>
SortAscending?: ComponentType<IconProps>
SortDescending?: ComponentType<IconProps>
SortUnsorted?: ComponentType<IconProps>
ExpandIcon?: ComponentType<IconProps>
CollapseIcon?: ComponentType<IconProps>
ClearFilters?: ComponentType<IconProps>
Search?: ComponentType<IconProps>
X?: ComponentType<IconProps>
Filter?: ComponentType<IconProps>
ColumnSettings?: ComponentType<IconProps>
}
Also available: DefaultIcons, useDataTableIcons() hook.
customStyles to override any style slot. See PartialTableStyles in variants for structure.defaultTableStyles, modernTableStyles, compactTableStylesuseTableStyles(customStyles), tableStylePresets, getTableStylePreset('modern')import '@sineways/react-tablefront/tailwind.css'Example preset usage:
import { DataTable, modernTableStyles } from '@sineways/react-tablefront'
<DataTable data={rows} customStyles={modernTableStyles} />
customRenderGridItemGrid example:
<DataTable
data={products}
layout={{ displayMode: 'grid', gridColumns: 3 }}
customRenderGridItem={(p) => (
<div className='product-card'>
<img src={p.image} alt={p.name} />
<h3>{p.name}</h3>
<p>${p.price}</p>
</div>
)}
/>
Expandable rows:
<DataTable
data={users}
expandable
renderExpandedContent={(u) => (
<div className='p-4 bg-gray-50'>
<h3>User Details</h3>
<p>Email: {u.email}</p>
</div>
)}
// Expanded content and custom static rows are clamped to the scroll container
// width by default. Disable if you want them to span the full table content width.
clampExpandedContentToContainer
clampStaticRowsToContainer
/>
Content width clamping (table mode):
clampExpandedContentToContainer={false} and/or clampStaticRowsToContainer={false}.// Core
export { DataTable }
// Subcomponents
export { SmartHeader }
export { DataTableStates, LoadingState, EmptyState }
export { DataTablePagination, PaginationInfo, PaginationControls }
export { DataTableHeader, ClearFiltersButton, SearchInput }
export { DataTableBody, TableRow, TableCell, ExpandButton }
export { DataGrid, GridItem, GridField }
export { DataMasonry, MasonryItem, MasonryField }
// Icons
export { DefaultIcons, useDataTableIcons }
// Column & field tools
export { applyColumnOverrides, applyColumnVisibilityOverrides }
export { quickColumns, applySmartSizing }
export { autoGenerateFields, applyFieldOverrides, buildFields }
// Stores
export { createDataTable, createAutoDataTable, createSimpleDataTable }
// Styles
export { useTableStyles }
export { defaultTableStyles, modernTableStyles, compactTableStyles, tableStylePresets, getTableStylePreset }
// Utils
export { cn }
export { generateStableStoreId, getFirstField, isValidId, safeStringId, safeEquals }
export { DEFAULT_RESIZE_DOUBLE_CLICK_DELAY, DEFAULT_RESIZE_RESET_DEBOUNCE }
Key types are exported from types/DataTableTypes (e.g., DataTableProps, DataTableLayout, DataTableUIComponents, DataTableIcons, PartialTableStyles, ResizeTimingConfig, etc.).
This is a commercial product.
Simplified activation:
TABLEFRONT_LICENSE to your .envtablefront activate as part of your build (e.g., "build": "tablefront activate && next build")Behavior:
Commercial license required. See LICENSE.md for details.
FAQs
React Data Table and Data Grid for TypeScript. Zero config with fast search and filters, pagination and infinite scroll, table grid and masonry layouts. Built on TanStack Table.
We found that @sineways/react-tablefront demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.