Package Exports
- @gridnexa/react
- @gridnexa/react/dist/index.css
Readme
GridNexa React Data Grid | React Table
Enterprise React data grid with Excel-like features, AI command support, theme-ready styling, and copy-ready TypeScript APIs.
GridNexa gives React teams a polished grid foundation for data-heavy products: sorting, filtering, editing, formulas, grouping, pivoting, tree data, selection, export, styling hooks, and safe AI-generated grid actions.
Quick Links
- Website: https://www.gridnexa.in/
- Docs and playground: https://www.gridnexa.in/docs/basic-grid
- Help: https://www.gridnexa.in/help
- Repository: https://github.com/mhalungekar9/SmartGrid
Install
npm install @gridnexa/reactpnpm add @gridnexa/reactBasic Usage
import { GridNexa, type Column } from "@gridnexa/react";
interface Employee {
id: number;
name: string;
department: string;
city: string;
score: number;
adjustedScore: string;
}
const columns: Column<Employee>[] = [
{ id: "name", field: "name", headerName: "Name", width: 220, sortable: true, filter: "text", editable: true },
{ id: "department", field: "department", headerName: "Department", width: 180, filter: "set" },
{ id: "city", field: "city", headerName: "City", width: 160, filter: "set" },
{ id: "score", field: "score", headerName: "Score", width: 120, filter: "number", editable: true },
{ id: "adjustedScore", field: "adjustedScore", headerName: "Adjusted", width: 150 },
];
const rows: Employee[] = [
{ id: 1, name: "John Carter", department: "Operations", city: "London", score: 92, adjustedScore: "=score * 1.05" },
{ id: 2, name: "Alice Moreau", department: "Product", city: "Paris", score: 87, adjustedScore: "=score * 1.05" },
];
export function App() {
return (
<GridNexa
columns={columns}
rows={rows}
rowNumbers
checkboxSelection
enableRangeSelection
enableFillHandle
enableUndoRedo
pageSize={20}
theme="light"
density="standard"
getRowId={(row) => row.id}
/>
);
}GridNexa ships with runtime styles, so the grid looks usable immediately. You can still import @gridnexa/react/dist/index.css for extracted CSS workflows or pass unstyled when your design system owns every rule.
Toolbar, Header Tools, Footer, And Icons
<GridNexa
columns={[
{
id: "name",
field: "name",
headerName: "Name",
tools: { filter: false, filterPanel: false },
icons: { menu: "..." },
},
]}
rows={rows}
toolbar={{
quickFilter: true,
find: true,
filters: true,
advancedFilter: true,
columns: true,
addRow: true,
deleteRow: true,
deleteSelectedRows: true,
exportCsv: true,
exportExcel: true,
}}
columnTools={{
sort: true,
filter: true,
filterPanel: true,
menu: true,
resize: true,
pin: true,
hide: true,
autosize: true,
}}
footer={{
rowCount: true,
selectedRows: true,
selectedCell: true,
selectedRange: true,
filterCount: true,
sortStatus: true,
pagination: true,
}}
icons={{
sortAsc: "A+",
sortDesc: "Z+",
filter: "F",
menu: "...",
pagePrevious: "<",
pageNext: ">",
addRow: "+",
deleteRow: "-",
}}
/>Use columnTools for global header-button defaults and column.tools for per-column overrides. Supported header tools include sort, filter, filterPanel, menu, resize, pin, hide, and autosize.
Use footer={false} to hide the footer or pass a footer object to choose row count, selected rows, selected cell, selected range, filter count, sort status, and pagination. For full control, pass footer={{ renderer: (state) => <YourFooter {...state} /> }}.
Custom icons can be supplied globally through icons or per column through column.icons. Missing icons fall back to GridNexa defaults.
AI Command Support
<GridNexa
columns={columns}
rows={rows}
ai={{
enabled: true,
endpoint: "/api/gridnexa-ai",
placeholder: "Ask AI to filter, sort, group, pivot, pin, hide, or export",
}}
/>AI support is provider-neutral. Keep OpenAI, Azure OpenAI, Anthropic, Gemini, local model, or gateway keys on your server. The browser sends grid state and receives a safe GridNexa action plan.
Supported AI actions include quick filter, column filter, advanced filter, sort, group, pivot, pin/hide column, and CSV/Excel export.
Styling And Design Systems
<GridNexa
columns={columns}
rows={rows}
className="shadow-lg rounded-3"
theme="dark"
density="compact"
classNames={{
toolbar: "border bg-white",
button: "btn btn-sm",
input: "form-control form-control-sm",
row: "custom-row",
cell: "custom-cell",
}}
getRowClassName={({ row, selected }) =>
selected ? "table-primary" : row.active ? "row-active" : "row-muted"
}
getCellClassName={({ column, value }) =>
column.id === "score" && Number(value) >= 90 ? "text-success fw-bold" : undefined
}
/>Use Bootstrap, Tailwind, CSS Modules, SCSS, Less, or plain CSS through className, classNames, getRowClassName, getCellClassName, getHeaderClassName, column.className, column.cellClassName, and column.headerClassName.
Feature Highlights
- Sorting, pagination, quick filter, column filters, external filters, and visual advanced filters
- Row selection, checkbox selection, row numbers, range selection, fill handle, find, undo, and redo
- Inline editors for text, number, date, checkbox, select, large text, and advanced select
- Formulas, clipboard operations, CSV export, and Excel export
- Column resize, drag reorder, hide/show, pin/freeze, column menu, and merged headers
- Row grouping, aggregation, pivoting, tree data, master/detail, and transactions
- Server-side operation callbacks for sorting, filtering, selection, pagination, grouping, pivoting, tree data, and transactions
Related Packages
@gridnexa/angular@gridnexa/vue@gridnexa/javascript@gridnexa/core
License
MIT