An open API service indexing awesome lists of open source software.

https://github.com/adambirds/tablewind

Tablewind is a React/Next.js/Tailwind CSS library for data tables. It provides a set of reusable components that support inline editing, filtering, sorting, pagination, and more – all styled with Tailwind CSS.
https://github.com/adambirds/tablewind

nextjs nextjs15 react tables tailwindcss ui

Last synced: about 1 month ago
JSON representation

Tablewind is a React/Next.js/Tailwind CSS library for data tables. It provides a set of reusable components that support inline editing, filtering, sorting, pagination, and more – all styled with Tailwind CSS.

Awesome Lists containing this project

README

        

# Tablewind

Tablewind is a React/Next.js/Tailwind CSS library for data tables. It provides a set of reusable components that support inline editing, filtering, sorting, pagination, and more – all styled with Tailwind CSS.

## Features

- **Inline Editing:** Edit data directly in the table.
- **Sorting & Filtering:** Easily sort and filter your data.
- **Pagination:** Built-in pagination controls.
- **Bulk Actions:** Support for selecting and acting on multiple rows.
- **Customizable:** Leverage Tailwind CSS to customize styling.
- **Dual Navigation Support:** Use the default React Router version or the Next.js version via separate entry points.

## Installation

Install via npm:

```bash
npm install tablewind
```

Or using Yarn:

```bash
yarn add tablewind
```

## Peer Dependencies

Ensure you have the following installed in your project:

- **react** (>= 18.0.0)
- **react-dom** (>= 18.0.0)
- **swr** (^2.3.2)
- **tailwindcss** (^4.0.0)

### Optional (Based on Your Environment)

- **Next.js**: `next` (>= 15.0.0) – for using the Next.js version.
- **React Router**: `react-router-dom` (>= 7.0.0) – for using the React Router version.

## Usage

### Default (React Router Version)

```tsx
import { DataTable } from 'tablewind';

function MyComponent() {
return (

);
}
```

### Next.js Version

```tsx
import { DataTable } from 'tablewind/next';

function MyPage() {
return (

);
}
```

## API: `DataTable` Props

| Prop Name | Type | Description | Optional |
|------------------------|----------------------------------------------|-----------------------------------------------------------------------------|----------|
| `pageTitle` | `string` | The main heading for the table page. | Yes |
| `pageSubtitle` | `string` | Subtitle displayed beneath the main title. | Yes |
| `addNewUrl` | `string` | URL to navigate to when the "Add New" button is clicked. | Yes |
| `endpoint` | `string` | API endpoint used to fetch table data. | No |
| `columns` | `ColumnConfig[]` | Column definitions for the table. | No |
| `initialQuery` | `Record` | Initial query params to pre-load filters or pagination. | Yes |
| `fetcher` | `(url: string) => Promise>` | Custom function for fetching data. | Yes |
| `onRowSelect` | `(selectedIds: string[]) => void` | Callback when row selection changes. | Yes |
| `filterFields` | `FilterField[]` | Array of field definitions for building the filter UI. | Yes |
| `bulkActions` | `BulkAction[]` | List of bulk actions to display when multiple rows are selected. | Yes |
| `className` | `string` | Custom CSS class for the table container. | Yes |
| `handleDelete` | `(id: string) => void` | Callback invoked when a row is deleted. | Yes |
| `dateRangeFilter` | `{ queryParamBase: string }` | Enables a plug-and-play date range filter using the provided param base. | Yes |
| `loadingComponent` | `React.ReactNode` | Custom component to render during loading. | Yes |
| `errorComponent` | `React.ReactNode` | Custom component to render on error. | Yes |
| `redirectOnError` | `() => void` | Called when there's an error; useful for redirecting. | Yes |
| `navigate` | `(url: string) => void` | Function used to navigate (Next.js or React Router). | Yes |
| `showMobileFilters` | `boolean` | Controls visibility of the filter panel on mobile. | No |
| `setShowMobileFilters` | `(open: boolean) => void` | Sets the visibility state of mobile filters. | No |
| `onEditSave` | `(id: string, newValues: EditValues) => void` | Called when an inline edit is saved. | Yes |
| `onEditCancel` | `() => void` | Called when inline edit mode is cancelled. | Yes |

## Importing CSS & Overriding Theme Colors

Before using Tablewind, be sure to import its CSS file into your project (for example, in your global stylesheet or in Next.js’s `src/app/globals.css`):

```css
@import 'tailwindcss';
@import 'tablewind/tablewind.css';
```

To customize Tablewind’s colors, override the following CSS variables in your own stylesheet. For example:

```css
:root {
--dark-tablewind-accent: #yourCustomColor;
}
```

The available override variables are:

```css
--dark-tablewind-accent
--dark-tablewind-accent-hover
--light-tablewind-accent
--light-tablewind-accent-hover

--dark-tablewind-text-primary
--dark-tablewind-text-secondary
--light-tablewind-text-primary
--light-tablewind-text-secondary

--dark-tablewind-border-primary
--light-tablewind-border-primary

--dark-tablewind-bg-primary
--dark-tablewind-bg-primary-hover
--light-tablewind-bg-primary
--light-tablewind-bg-primary-hover

--dark-success-alert-bg
--dark-success-alert-text
--light-success-alert-bg
--light-success-alert-text

--dark-reset-filters-bg
--dark-reset-filters-bg-hover
--dark-reset-filters-text
--light-reset-filters-bg
--light-reset-filters-bg-hover
--light-reset-filters-text

--dark-button-delete-bg
--dark-button-delete-bg-hover
--dark-button-delete-text
--light-button-delete-bg
--light-button-delete-bg-hover
--light-button-delete-text

--dark-button-edit-bg
--dark-button-edit-bg-hover
--dark-button-edit-text
--light-button-edit-bg
--light-button-edit-bg-hover
--light-button-edit-text

--dark-button-cancel-bg
--dark-button-cancel-bg-hover
--dark-button-cancel-text
--light-button-cancel-bg
--light-button-cancel-bg-hover
--light-button-cancel-text

--dark-button-save-bg
--dark-button-save-bg-hover
--dark-button-save-text
--light-button-save-bg
--light-button-save-bg-hover
--light-button-save-text

--dark-button-pagination-bg
--dark-button-pagination-bg-hover
--dark-button-pagination-text
--light-button-pagination-bg
--light-button-pagination-bg-hover
--light-button-pagination-text

--dark-button-pagination-disabled-bg
--dark-button-pagination-disabled-text
--light-button-pagination-disabled-bg
--light-button-pagination-disabled-text

--dark-pagination-text
--light-pagination-text

--dark-switch-bg
--light-switch-bg

--dark-show-filters-bg
--dark-show-filters-bg-hover
--dark-show-filters-text
--light-show-filters-bg
--light-show-filters-bg-hover
--light-show-filters-text

--dark-header-bg
--light-header-bg

--dark-table-divider
--light-table-divider

--dark-table-header-bg
--light-table-header-bg

--dark-header-ring
--light-header-ring

--dark-bulk-dropdown-bg
--dark-bulk-dropdown-bg-hover
--dark-bulk-dropdown-text
--dark-bulk-dropdown-ring
--dark-bulk-dropdown-divider
--light-bulk-dropdown-bg
--light-bulk-dropdown-bg-hover
--light-bulk-dropdown-text
--light-bulk-dropdown-ring
--light-bulk-dropdown-divider

--dark-multi-select-item-bg
--dark-multi-select-item-text
--light-multi-select-item-bg
--light-multi-select-item-text
```

## Contributing

Contributions are welcome! However, whilst this has been open sourced, it was built to solve a specific set of use cases I have with my projects. If you have ideas for new features or improvements, please open an issue or submit a pull request, however it will only get merged if it will work with my projects.

## License

This project is licensed under the [MIT License](/LICENSE).

## Changelog

For a complete list of changes, see the [CHANGELOG.md](./CHANGELOG.md) file.

## Funding

If you find this project useful and would like to support its development, please consider donating via one of the platforms below:

[GitHub Sponsors](https://github.com/sponsors/adambirds)

Thank you for your support!