
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.
jinx-table
Advanced tools
A modern, customizable React table component library with sorting, filtering, pagination, and selection
A modern, customizable React table component library built with Vite, Tailwind CSS, and Radix UI. Jinx Table provides flexible table rendering, sorting, filtering, pagination, and selection, along with a set of reusable UI components.

Get it on npm: jinx-table
checkboxColumn() utility.cn() - Smart class name merging with Tailwind CSS conflict resolutioncreateColumn() - Easy column creation with sorting and custom cell renderingcheckboxColumn() - Pre-built checkbox selection columnsrc/
components/
react-table/
JinxTable.jsx # Main table component with advanced features
ui/
button.jsx # Button component (variants, sizes)
checkbox.jsx # Checkbox (Radix UI)
dialog.jsx # Dialog/modal (Radix UI)
input.jsx # Styled input field
table.jsx # Table primitives (Table, TableRow, etc.)
lib/
utils.js # Utility for merging class names
utils/
columnsUtils.jsx # Helpers for column/checkbox column creation
npm install jinx-table
# or
yarn add jinx-table
git clone <your-repo-url>
cd jinx-table
npm install
# or
yarn install
npm run dev
# or
yarn dev
import { JinxTable } from "jinx-table";
const data = [
{ id: 1, name: "Alice", age: 25, status: "active" },
{ id: 2, name: "Bob", age: 30, status: "inactive" },
];
export default function App() {
return (
<JinxTable
data={data}
keys={["name", "age", "status"]}
filterFields={["name"]}
isCheckbox={true}
isPagination={true}
total={data.length}
limit={10}
skip={0}
loading={false}
/>
);
}
#### When using from source:
```jsx
import JinxTable from "./src/components/react-table/JinxTable";
const data = [
{ id: 1, name: "Alice", age: 25, status: "active" },
{ id: 2, name: "Bob", age: 30, status: "inactive" },
];
export default function App() {
return (
<JinxTable
data={data}
keys={["name", "age", "status"]}
filterFields={["name"]}
isCheckbox={true}
isPagination={true}
total={data.length}
limit={10}
skip={0}
loading={false}
/>
);
}
import { JinxTable } from "jinx-table";
const data = [
{
id: 1,
name: "Alice",
email: "alice@example.com",
age: 25,
status: "active",
},
{ id: 2, name: "Bob", email: "bob@example.com", age: 30, status: "inactive" },
];
export default function App() {
const keys = [
"name", // Simple string key
{
header: "Email Address",
cell: (data) => (
<a
href={`mailto:${data.email}`}
className="text-blue-600 hover:underline"
>
{data.email}
</a>
),
},
{
header: "Age",
cell: (data) => (
<span className="font-semibold">{data.age} years old</span>
),
},
{
header: "Status",
cell: (data) => (
<span
className={`px-2 py-1 rounded-full text-xs font-medium ${
data.status === "active"
? "bg-green-100 text-green-800"
: "bg-red-100 text-red-800"
}`}
>
{data.status}
</span>
),
},
];
return (
<JinxTable
data={data}
keys={keys}
filterFields={["name", "email"]}
isCheckbox={true}
isPagination={false}
loading={false}
/>
);
}
JinxTable supports two ways to define table columns:
// Pass an array of field names
const keys = ["name", "email", "age", "status"];
<JinxTable
data={data}
keys={keys}
// ... other props
/>;
// Pass objects with header and optional cell rendering
const keys = [
"name", // Simple string key
{
header: "Email Address",
cell: (data) => <a href={`mailto:${data.email}`}>{data.email}</a>,
},
{
header: "Age",
cell: (data) => <span className="font-bold">{data.age} years</span>,
},
{
header: "Status",
cell: (data) => (
<span
className={`px-2 py-1 rounded text-xs ${
data.status === "active"
? "bg-green-100 text-green-800"
: "bg-red-100 text-red-800"
}`}
>
{data.status}
</span>
),
},
];
<JinxTable
data={data}
keys={keys}
// ... other props
/>;
import { createColumn, checkboxColumn } from "jinx-table";
// Define your columns
const columns = [
checkboxColumn(), // Add row selection
createColumn({
accessorKey: "name",
header: "Name",
cell: (data) => <span className="font-semibold">{data.name}</span>,
}),
createColumn({
accessorKey: "email",
header: "Email",
}),
createColumn({
accessorKey: "status",
header: "Status",
cell: (data) => (
<span
className={`px-2 py-1 rounded text-xs ${
data.status === "active"
? "bg-green-100 text-green-800"
: "bg-gray-100 text-gray-800"
}`}
>
{data.status}
</span>
),
}),
];
className and other props for flexibilitycn(...inputs): Merges class names and resolves Tailwind conflictscreateColumn({ accessorKey, header, cell }): Helper for defining table columns with sorting and custom cell renderingcheckboxColumn(): Adds a selection checkbox column for row selectionimport { cn, createColumn, checkboxColumn } from "jinx-table";
// Using cn utility for class merging
const buttonClass = cn("px-4 py-2", "bg-blue-500", "hover:bg-blue-600");
// Creating a custom column
const nameColumn = createColumn({
accessorKey: "name",
header: "Full Name",
cell: (data) => <span className="font-bold">{data.name}</span>,
});
// Adding checkbox selection
const columns = [
checkboxColumn(),
nameColumn,
// ... other columns
];
// Column with custom header and cell rendering
const statusColumn = createColumn({
accessorKey: "status",
header: "Status",
cell: (data) => (
<span
className={`px-2 py-1 rounded ${
data.status === "active"
? "bg-green-100 text-green-800"
: "bg-red-100 text-red-800"
}`}
>
{data.status}
</span>
),
});
// Column with sorting enabled (default)
const ageColumn = createColumn({
accessorKey: "age",
header: "Age",
});
To publish this package to npm:
Build the package:
npm run build
Login to npm:
npm login
Publish:
npm publish
The prepublishOnly script will automatically build the package before publishing.
MIT
FAQs
A modern, customizable React table component library with sorting, filtering, pagination, and selection
The npm package jinx-table receives a total of 1 weekly downloads. As such, jinx-table popularity was classified as not popular.
We found that jinx-table demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer 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.