@zvndev/yable-react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -0
- package/dist/index.cjs +4947 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +957 -0
- package/dist/index.d.ts +957 -0
- package/dist/index.js +4835 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# @zvndev/yable-react
|
|
2
|
+
|
|
3
|
+
React bindings for the Yable data table engine.
|
|
4
|
+
|
|
5
|
+
`@zvndev/yable-react` provides the `useTable` hook, a component tree for rendering tables, form controls for in-cell editing, and convenience components for pagination and filtering. It re-exports `@zvndev/yable-core` utilities so you only need one import for most use cases.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @zvndev/yable-core @zvndev/yable-react
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Peer dependencies:** React 18+ (also works with React 19).
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { createColumnHelper, useTable, Table, Pagination } from '@zvndev/yable-react'
|
|
19
|
+
import '@zvndev/yable-themes'
|
|
20
|
+
|
|
21
|
+
interface Task {
|
|
22
|
+
title: string
|
|
23
|
+
status: 'todo' | 'in-progress' | 'done'
|
|
24
|
+
priority: number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const columnHelper = createColumnHelper<Task>()
|
|
28
|
+
|
|
29
|
+
const columns = [
|
|
30
|
+
columnHelper.accessor('title', { header: 'Title' }),
|
|
31
|
+
columnHelper.accessor('status', { header: 'Status' }),
|
|
32
|
+
columnHelper.accessor('priority', { header: 'Priority', enableSorting: true }),
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
const data: Task[] = [
|
|
36
|
+
{ title: 'Build table', status: 'done', priority: 1 },
|
|
37
|
+
{ title: 'Write docs', status: 'in-progress', priority: 2 },
|
|
38
|
+
{ title: 'Ship it', status: 'todo', priority: 3 },
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
function TaskTable() {
|
|
42
|
+
const table = useTable({ data, columns })
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<Table table={table} striped>
|
|
46
|
+
<Pagination table={table} />
|
|
47
|
+
</Table>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Hook
|
|
53
|
+
|
|
54
|
+
### `useTable<TData>(options: TableOptions<TData>): Table<TData>`
|
|
55
|
+
|
|
56
|
+
The primary hook. Accepts the same options as `@zvndev/yable-core`'s `createTable()` but manages React state internally. Supports both uncontrolled (default) and controlled state patterns.
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
// Uncontrolled -- useTable manages all state
|
|
60
|
+
const table = useTable({ data, columns })
|
|
61
|
+
|
|
62
|
+
// Controlled -- you manage specific state slices
|
|
63
|
+
const [sorting, setSorting] = useState<SortingState>([])
|
|
64
|
+
const table = useTable({
|
|
65
|
+
data,
|
|
66
|
+
columns,
|
|
67
|
+
state: { sorting },
|
|
68
|
+
onSortingChange: setSorting,
|
|
69
|
+
})
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Components
|
|
73
|
+
|
|
74
|
+
### Layout Components
|
|
75
|
+
|
|
76
|
+
| Component | Description |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `Table` | Root container -- wraps everything in a `<div>` with a `<table>` inside. Accepts `table`, `striped`, `bordered`, `compact`, `stickyHeader`, `theme`, `loading`, `emptyMessage`, `footer`, and `children` props. |
|
|
79
|
+
| `TableHeader` | Renders `<thead>` with header groups and sort indicators. |
|
|
80
|
+
| `TableBody` | Renders `<tbody>` with rows and cells. |
|
|
81
|
+
| `TableCell` | Renders a single `<td>` with editing support. |
|
|
82
|
+
| `TableFooter` | Renders `<tfoot>` with footer content. |
|
|
83
|
+
|
|
84
|
+
### Interactive Components
|
|
85
|
+
|
|
86
|
+
| Component | Description |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `Pagination` | Page navigation with first/last/prev/next buttons, page numbers, and page size selector. Props: `table`, `showPageSize`, `pageSizes`, `showInfo`, `showFirstLast`. |
|
|
89
|
+
| `GlobalFilter` | Debounced search input for the global filter. Props: `table`, `placeholder`, `debounce`, `className`. |
|
|
90
|
+
| `SortIndicator` | Sort direction arrow icon. Props: `direction`, `index` (for multi-sort badge). |
|
|
91
|
+
|
|
92
|
+
### Form Components (In-Cell Editing)
|
|
93
|
+
|
|
94
|
+
| Component | Description |
|
|
95
|
+
|---|---|
|
|
96
|
+
| `CellInput` | Text/number input for cell editing. Props: `context`, `type`, `placeholder`, `inline`, `autoFocus`. |
|
|
97
|
+
| `CellSelect` | Dropdown select for cell editing. |
|
|
98
|
+
| `CellCheckbox` | Checkbox for boolean cell values. |
|
|
99
|
+
| `CellToggle` | Toggle switch for boolean cell values. |
|
|
100
|
+
| `CellDatePicker` | Date input for cell editing. |
|
|
101
|
+
|
|
102
|
+
### Context
|
|
103
|
+
|
|
104
|
+
| Export | Description |
|
|
105
|
+
|---|---|
|
|
106
|
+
| `TableProvider` | React context provider for the table instance. |
|
|
107
|
+
| `useTableContext()` | Hook to access the table instance from any child component. |
|
|
108
|
+
|
|
109
|
+
## Re-exports from @zvndev/yable-core
|
|
110
|
+
|
|
111
|
+
For convenience, `@zvndev/yable-react` re-exports commonly used utilities so you don't need to import from `@zvndev/yable-core` directly:
|
|
112
|
+
|
|
113
|
+
- `createColumnHelper`
|
|
114
|
+
- `sortingFns`
|
|
115
|
+
- `filterFns`
|
|
116
|
+
- `aggregationFns`
|
|
117
|
+
- `functionalUpdate`
|
|
118
|
+
- All core types (`TableOptions`, `SortingState`, `ColumnDef`, etc.)
|
|
119
|
+
|
|
120
|
+
## Table Props
|
|
121
|
+
|
|
122
|
+
The `<Table>` component accepts these props:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
interface TableProps<TData> {
|
|
126
|
+
table: Table<TData> // Required -- the table instance from useTable
|
|
127
|
+
stickyHeader?: boolean // Pin header to top on scroll
|
|
128
|
+
striped?: boolean // Alternate row backgrounds
|
|
129
|
+
bordered?: boolean // Add cell borders
|
|
130
|
+
compact?: boolean // Reduce padding
|
|
131
|
+
theme?: string // Theme variant name
|
|
132
|
+
clickableRows?: boolean // Add pointer cursor + hover to rows
|
|
133
|
+
footer?: boolean // Show table footer
|
|
134
|
+
loading?: boolean // Show loading overlay
|
|
135
|
+
emptyMessage?: string // Text when no rows (default: "No data")
|
|
136
|
+
renderEmpty?: () => ReactNode // Custom empty state
|
|
137
|
+
renderLoading?: () => ReactNode // Custom loading state
|
|
138
|
+
children?: ReactNode // Extra content (e.g. Pagination)
|
|
139
|
+
className?: string // Additional CSS class
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
MIT
|