@kedman1234/react-light-table 2.0.3
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/LICENSE +21 -0
- package/README.md +239 -0
- package/dist/Table/Table.d.ts +8 -0
- package/dist/Table/Table.types.d.ts +62 -0
- package/dist/Table/index.d.ts +2 -0
- package/dist/hooks/usePagination.d.ts +14 -0
- package/dist/hooks/useSearch.d.ts +8 -0
- package/dist/hooks/useSelection.d.ts +11 -0
- package/dist/hooks/useSort.d.ts +9 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/setupTests.d.ts +1 -0
- package/dist/table.css +1 -0
- package/dist/utils/helpers.d.ts +18 -0
- package/package.json +82 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kedar Vijay Kulkarni
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# react-light-table
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/react-light-table)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
|
|
7
|
+
A lightweight, accessible, sortable, searchable, and selectable React table component for any dataset. Built with TypeScript, zero dependencies beyond React.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- 🔍 **Real-time search** — filter rows instantly across all visible columns
|
|
12
|
+
- ↕️ **Column sorting** — click to sort ascending/descending on any column
|
|
13
|
+
- ✅ **Row selection** — individual and select-all with callback support
|
|
14
|
+
- 📄 **Pagination** — built-in page navigation with customizable page size
|
|
15
|
+
- 👁️ **Column visibility** — toggle columns on/off via dropdown menu
|
|
16
|
+
- 🎨 **Theming** — full CSS custom properties for easy customization
|
|
17
|
+
- ♿ **Accessible** — ARIA roles, labels, and keyboard navigation
|
|
18
|
+
- 📦 **Lightweight** — small bundle, zero runtime dependencies
|
|
19
|
+
- 🔒 **TypeScript** — full type safety with generics support
|
|
20
|
+
- 🔄 **Dual data source** — works with local arrays or remote URLs
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install react-light-table
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Note:** `react` (≥18.0.0) and `react-dom` (≥18.0.0) are required as peer dependencies.
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### With Local Data
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Table } from 'react-light-table';
|
|
36
|
+
import 'react-light-table/dist/table.css';
|
|
37
|
+
|
|
38
|
+
interface User {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
email: string;
|
|
42
|
+
age: number;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const columns = [
|
|
46
|
+
{ key: 'name', path: 'name', label: 'Name', sortable: true },
|
|
47
|
+
{ key: 'email', path: 'email', label: 'Email', sortable: true },
|
|
48
|
+
{ key: 'age', path: 'age', label: 'Age', sortable: true },
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const data: User[] = [
|
|
52
|
+
{ id: 1, name: 'Alice', email: 'alice@example.com', age: 30 },
|
|
53
|
+
{ id: 2, name: 'Bob', email: 'bob@example.com', age: 25 },
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
function App() {
|
|
57
|
+
return (
|
|
58
|
+
<Table<User>
|
|
59
|
+
columns={columns}
|
|
60
|
+
data={data}
|
|
61
|
+
rowKey="id"
|
|
62
|
+
isSearchable
|
|
63
|
+
isSelectable
|
|
64
|
+
pageSize={10}
|
|
65
|
+
bordered
|
|
66
|
+
striped
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### With Remote URL
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
<Table<User>
|
|
76
|
+
columns={columns}
|
|
77
|
+
url="https://jsonplaceholder.typicode.com/users"
|
|
78
|
+
rowKey="id"
|
|
79
|
+
isSearchable
|
|
80
|
+
emptyMessage="No users found"
|
|
81
|
+
errorMessage="Failed to load users"
|
|
82
|
+
/>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## API Reference
|
|
86
|
+
|
|
87
|
+
### `<Table>` Props
|
|
88
|
+
|
|
89
|
+
| Prop | Type | Default | Description |
|
|
90
|
+
|------|------|---------|-------------|
|
|
91
|
+
| `columns` | `ColumnDef<T>[]` | *required* | Column definitions array |
|
|
92
|
+
| `data` | `T[]` | — | Local data array (takes priority over `url`) |
|
|
93
|
+
| `url` | `string` | — | Remote data URL (triggers fetch) |
|
|
94
|
+
| `rowKey` | `keyof T & string` | `'id'` | Field to use as unique row identifier |
|
|
95
|
+
| `className` | `string` | `''` | Additional CSS class(es) for the table |
|
|
96
|
+
| `isSearchable` | `boolean` | `false` | Show search input |
|
|
97
|
+
| `isSelectable` | `boolean` | `false` | Show selection checkboxes |
|
|
98
|
+
| `searchableFields` | `string[]` | all visible columns | Which column paths to search |
|
|
99
|
+
| `pageSize` | `number` | — | Rows per page (omit to show all) |
|
|
100
|
+
| `onSelectionChange` | `(rows: T[]) => void` | — | Callback when selection changes |
|
|
101
|
+
| `onSort` | `(column, direction) => void` | — | Callback when sort changes |
|
|
102
|
+
| `onPageChange` | `(page: number) => void` | — | Callback when page changes |
|
|
103
|
+
| `loading` | `boolean` | `false` | External loading state control |
|
|
104
|
+
| `emptyMessage` | `string \| ReactNode` | `'No data available'` | Empty state message |
|
|
105
|
+
| `errorMessage` | `string \| ReactNode` | `'Failed to load data'` | Error state message |
|
|
106
|
+
| `stickyHeader` | `boolean` | `false` | Sticky table header |
|
|
107
|
+
| `striped` | `boolean` | `false` | Striped row styling |
|
|
108
|
+
| `bordered` | `boolean` | `false` | Bordered table styling |
|
|
109
|
+
|
|
110
|
+
### Column Definition (`ColumnDef<T>`)
|
|
111
|
+
|
|
112
|
+
| Property | Type | Required | Description |
|
|
113
|
+
|----------|------|----------|-------------|
|
|
114
|
+
| `key` | `string` | ✅ | Unique column identifier |
|
|
115
|
+
| `path` | `keyof T & string` | ✅ | Data object property to display |
|
|
116
|
+
| `label` | `string` | ✅ | Column header text |
|
|
117
|
+
| `sortable` | `boolean` | ❌ | Enable sorting for this column |
|
|
118
|
+
| `isVisible` | `boolean` | ❌ | Initial visibility (default: `true`) |
|
|
119
|
+
| `className` | `string` | ❌ | CSS class for column cells |
|
|
120
|
+
| `formatter` | `(value, row) => ReactNode` | ❌ | Custom cell renderer |
|
|
121
|
+
|
|
122
|
+
## Theming with CSS Variables
|
|
123
|
+
|
|
124
|
+
Customize the entire look using CSS custom properties:
|
|
125
|
+
|
|
126
|
+
```css
|
|
127
|
+
:root {
|
|
128
|
+
--rlt-font-family: 'Inter', sans-serif;
|
|
129
|
+
--rlt-header-bg: #1a1a2e;
|
|
130
|
+
--rlt-header-color: #eee;
|
|
131
|
+
--rlt-row-hover-bg: #f0f4ff;
|
|
132
|
+
--rlt-row-selected-bg: #d4edff;
|
|
133
|
+
--rlt-border-color: #e0e0e0;
|
|
134
|
+
--rlt-sort-icon-color: #999;
|
|
135
|
+
--rlt-sort-active-color: #1a73e8;
|
|
136
|
+
--rlt-search-border-color: #ccc;
|
|
137
|
+
--rlt-search-focus-border: #1a73e8;
|
|
138
|
+
--rlt-pagination-active-bg: #1a73e8;
|
|
139
|
+
--rlt-pagination-active-color: #fff;
|
|
140
|
+
--rlt-cell-padding: 10px 14px;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Available CSS Variables
|
|
145
|
+
|
|
146
|
+
| Variable | Default | Description |
|
|
147
|
+
|----------|---------|-------------|
|
|
148
|
+
| `--rlt-font-family` | `inherit` | Font family |
|
|
149
|
+
| `--rlt-font-size` | `14px` | Base font size |
|
|
150
|
+
| `--rlt-header-bg` | `#f8f9fa` | Header background |
|
|
151
|
+
| `--rlt-header-color` | `#333` | Header text color |
|
|
152
|
+
| `--rlt-header-font-weight` | `600` | Header font weight |
|
|
153
|
+
| `--rlt-row-hover-bg` | `#f5f5f5` | Row hover background |
|
|
154
|
+
| `--rlt-row-selected-bg` | `#e3f2fd` | Selected row background |
|
|
155
|
+
| `--rlt-row-striped-bg` | `#fafafa` | Striped row background |
|
|
156
|
+
| `--rlt-border-color` | `#dee2e6` | Border color |
|
|
157
|
+
| `--rlt-sort-icon-color` | `#666` | Sort icon color |
|
|
158
|
+
| `--rlt-sort-active-color` | `#333` | Active sort icon color |
|
|
159
|
+
| `--rlt-search-border-color` | `#ccc` | Search input border |
|
|
160
|
+
| `--rlt-search-focus-border` | `#4a90d9` | Search input focus border |
|
|
161
|
+
| `--rlt-cell-padding` | `12px 15px` | Cell padding |
|
|
162
|
+
| `--rlt-pagination-active-bg` | `#4a90d9` | Active page button bg |
|
|
163
|
+
| `--rlt-pagination-active-color` | `#fff` | Active page button color |
|
|
164
|
+
|
|
165
|
+
## Examples
|
|
166
|
+
|
|
167
|
+
### Custom Formatter
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
const columns = [
|
|
171
|
+
{
|
|
172
|
+
key: 'status',
|
|
173
|
+
path: 'status',
|
|
174
|
+
label: 'Status',
|
|
175
|
+
formatter: (value) => (
|
|
176
|
+
<span style={{ color: value === 'active' ? 'green' : 'red' }}>
|
|
177
|
+
{String(value).toUpperCase()}
|
|
178
|
+
</span>
|
|
179
|
+
),
|
|
180
|
+
},
|
|
181
|
+
];
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Selection Callback
|
|
185
|
+
|
|
186
|
+
```tsx
|
|
187
|
+
<Table
|
|
188
|
+
columns={columns}
|
|
189
|
+
data={data}
|
|
190
|
+
isSelectable
|
|
191
|
+
onSelectionChange={(selected) => {
|
|
192
|
+
console.log('Selected rows:', selected);
|
|
193
|
+
}}
|
|
194
|
+
/>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Pagination
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<Table
|
|
201
|
+
columns={columns}
|
|
202
|
+
data={data}
|
|
203
|
+
pageSize={25}
|
|
204
|
+
onPageChange={(page) => {
|
|
205
|
+
console.log('Current page:', page);
|
|
206
|
+
}}
|
|
207
|
+
/>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Exported Hooks
|
|
211
|
+
|
|
212
|
+
The library also exports the internal hooks for advanced use cases:
|
|
213
|
+
|
|
214
|
+
- `useSort<T>(data, onSort?)` — Sort state management
|
|
215
|
+
- `useSearch<T>(data, searchableFields?)` — Search/filter logic
|
|
216
|
+
- `useSelection<T>(data, rowKey, onSelectionChange?)` — Selection management
|
|
217
|
+
- `usePagination<T>(data, pageSize?, onPageChange?)` — Pagination logic
|
|
218
|
+
|
|
219
|
+
## Browser Support
|
|
220
|
+
|
|
221
|
+
- Chrome (last 2 versions)
|
|
222
|
+
- Firefox (last 2 versions)
|
|
223
|
+
- Safari (last 2 versions)
|
|
224
|
+
- Edge (last 2 versions)
|
|
225
|
+
|
|
226
|
+
## Contributing
|
|
227
|
+
|
|
228
|
+
1. Fork the repository
|
|
229
|
+
2. Create your feature branch: `git checkout -b feature/my-feature`
|
|
230
|
+
3. Install dependencies: `npm install`
|
|
231
|
+
4. Run the demo: `npm run dev`
|
|
232
|
+
5. Run tests: `npm test`
|
|
233
|
+
6. Commit your changes: `git commit -m 'Add my feature'`
|
|
234
|
+
7. Push to the branch: `git push origin feature/my-feature`
|
|
235
|
+
8. Open a Pull Request
|
|
236
|
+
|
|
237
|
+
## License
|
|
238
|
+
|
|
239
|
+
[MIT](LICENSE) © Kedar Vijay Kulkarni
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { TableProps } from './Table.types';
|
|
3
|
+
import './table.css';
|
|
4
|
+
/**
|
|
5
|
+
* Table — A lightweight, accessible, sortable, searchable, and selectable React table component.
|
|
6
|
+
*/
|
|
7
|
+
declare function Table<T extends Record<string, unknown>>(props: TableProps<T>): React.JSX.Element;
|
|
8
|
+
export default Table;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
export interface ColumnDef<T = Record<string, unknown>> {
|
|
3
|
+
/** Unique key for the column */
|
|
4
|
+
key: string;
|
|
5
|
+
/** Property path in the data object */
|
|
6
|
+
path: keyof T & string;
|
|
7
|
+
/** Display label for the column header */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Optional CSS class name(s) for the column */
|
|
10
|
+
className?: string;
|
|
11
|
+
/** Whether this column is sortable */
|
|
12
|
+
sortable?: boolean;
|
|
13
|
+
/** Whether this column is visible (default: true) */
|
|
14
|
+
isVisible?: boolean;
|
|
15
|
+
/** Custom cell formatter */
|
|
16
|
+
formatter?: (value: unknown, row: T) => React.ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export interface TableProps<T = Record<string, unknown>> {
|
|
19
|
+
/** Column definitions */
|
|
20
|
+
columns: ColumnDef<T>[];
|
|
21
|
+
/** Local data array (takes priority over url) */
|
|
22
|
+
data?: T[];
|
|
23
|
+
/** Remote data URL */
|
|
24
|
+
url?: string;
|
|
25
|
+
/** Field to use as unique row key (default: 'id') */
|
|
26
|
+
rowKey?: keyof T & string;
|
|
27
|
+
/** Additional CSS class name(s) */
|
|
28
|
+
className?: string;
|
|
29
|
+
/** Whether the search bar is shown */
|
|
30
|
+
isSearchable?: boolean;
|
|
31
|
+
/** Whether row selection checkboxes are shown */
|
|
32
|
+
isSelectable?: boolean;
|
|
33
|
+
/** Which column paths to include in search (default: all string/number columns) */
|
|
34
|
+
searchableFields?: string[];
|
|
35
|
+
/** Number of rows per page (default: show all) */
|
|
36
|
+
pageSize?: number;
|
|
37
|
+
/** Callback when selection changes */
|
|
38
|
+
onSelectionChange?: (selectedRows: T[]) => void;
|
|
39
|
+
/** Callback when sort changes */
|
|
40
|
+
onSort?: (column: string, direction: 'asc' | 'desc') => void;
|
|
41
|
+
/** Callback when page changes */
|
|
42
|
+
onPageChange?: (page: number) => void;
|
|
43
|
+
/** External loading control */
|
|
44
|
+
loading?: boolean;
|
|
45
|
+
/** Message shown when data is empty */
|
|
46
|
+
emptyMessage?: string | React.ReactNode;
|
|
47
|
+
/** Message shown on fetch error */
|
|
48
|
+
errorMessage?: string | React.ReactNode;
|
|
49
|
+
/** Whether to use sticky header */
|
|
50
|
+
stickyHeader?: boolean;
|
|
51
|
+
/** Whether to use striped rows */
|
|
52
|
+
striped?: boolean;
|
|
53
|
+
/** Whether to show borders */
|
|
54
|
+
bordered?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface SortState {
|
|
57
|
+
key: string;
|
|
58
|
+
direction: 'asc' | 'desc' | 'none';
|
|
59
|
+
}
|
|
60
|
+
export interface InternalColumn<T = Record<string, unknown>> extends ColumnDef<T> {
|
|
61
|
+
isVisible: boolean;
|
|
62
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface UsePaginationResult<T> {
|
|
2
|
+
currentPage: number;
|
|
3
|
+
totalPages: number;
|
|
4
|
+
paginatedData: T[];
|
|
5
|
+
startIndex: number;
|
|
6
|
+
endIndex: number;
|
|
7
|
+
totalItems: number;
|
|
8
|
+
goToPage: (page: number) => void;
|
|
9
|
+
goToNextPage: () => void;
|
|
10
|
+
goToPrevPage: () => void;
|
|
11
|
+
pageNumbers: number[];
|
|
12
|
+
}
|
|
13
|
+
export declare function usePagination<T>(data: T[], pageSize?: number, onPageChange?: (page: number) => void): UsePaginationResult<T>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface UseSearchResult<T> {
|
|
2
|
+
searchText: string;
|
|
3
|
+
filteredData: T[];
|
|
4
|
+
handleSearch: (text: string) => void;
|
|
5
|
+
clearSearch: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function useSearch<T extends Record<string, unknown>>(data: T[], searchableFields?: string[]): UseSearchResult<T>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface UseSelectionResult<T> {
|
|
2
|
+
selectedKeys: Set<string>;
|
|
3
|
+
isAllSelected: boolean;
|
|
4
|
+
isRowSelected: (key: string) => boolean;
|
|
5
|
+
handleSelect: (key: string) => void;
|
|
6
|
+
handleSelectAll: (allKeys: string[]) => void;
|
|
7
|
+
clearSelection: () => void;
|
|
8
|
+
selectedRows: T[];
|
|
9
|
+
}
|
|
10
|
+
export declare function useSelection<T extends Record<string, unknown>>(data: T[], rowKey: string, onSelectionChange?: (selectedRows: T[]) => void): UseSelectionResult<T>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SortState } from '../Table/Table.types';
|
|
2
|
+
interface UseSortResult<T> {
|
|
3
|
+
sortState: SortState;
|
|
4
|
+
sortedData: T[];
|
|
5
|
+
handleSort: (key: string) => void;
|
|
6
|
+
resetSort: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function useSort<T extends Record<string, unknown>>(data: T[], onSort?: (column: string, direction: 'asc' | 'desc') => void): UseSortResult<T>;
|
|
9
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Table } from './Table';
|
|
2
|
+
export type { TableProps, ColumnDef } from './Table/Table.types';
|
|
3
|
+
export { useSort } from './hooks/useSort';
|
|
4
|
+
export { useSearch } from './hooks/useSearch';
|
|
5
|
+
export { useSelection } from './hooks/useSelection';
|
|
6
|
+
export { usePagination } from './hooks/usePagination';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{useState as a,useCallback as n,useMemo as l,useEffect as i}from"react";function o(e){return e?e.includes(" ")?e.split(" ")[0]:e:""}function s(e){return null==e||"object"==typeof e?"":String(e).toUpperCase()}function c(e){return null!=e&&""!==e&&!isNaN(Number(e))}const d={key:"",direction:"none"};function h(e,t){const[r,i]=a(d),o=n(e=>{i(r=>{let a;return a=r.key===e&&"asc"===r.direction?"desc":"asc",t&&t(e,a),{key:e,direction:a}})},[t]),h=n(()=>{i(d)},[]),u=l(()=>{if("none"===r.direction||!r.key)return e;const t=r.key,a=r.direction;return[...e].sort((e,r)=>{const n=e[t],l=r[t];if(null==n)return 1;if(null==l)return-1;if(c(n)&&c(l)){const e=Number(n)-Number(l);return"asc"===a?e:-e}const i=s(n),o=s(l),d=i.localeCompare(o);return"asc"===a?d:-d})},[e,r]);return{sortState:r,sortedData:u,handleSort:o,resetSort:h}}function u(e,t){const[r,i]=a(""),o=n(e=>{i(e)},[]),c=n(()=>{i("")},[]),d=l(()=>{if(!r.trim())return e;const a=r.toUpperCase();return e.filter(e=>(null!=t?t:Object.keys(e)).some(t=>{const r=e[t];return("string"==typeof r||"number"==typeof r)&&s(r).includes(a)}))},[e,r,t]);return{searchText:r,filteredData:d,handleSearch:o,clearSearch:c}}function p(e,t,r){const[i,o]=a(new Set),s=n(a=>{o(n=>{const l=new Set(n);if(l.has(a)?l.delete(a):l.add(a),r){const a=e.filter(e=>l.has(String(e[t])));r(a)}return l})},[e,t,r]),c=n(a=>{o(n=>{const l=a.length>0&&a.every(e=>n.has(e)),i=l?new Set:new Set(a);if(r){const a=l?[]:e.filter(e=>i.has(String(e[t])));r(a)}return i})},[e,t,r]),d=n(()=>{o(new Set),r&&r([])},[r]),h=n(e=>i.has(e),[i]),u=l(()=>0!==e.length&&e.every(e=>i.has(String(e[t]))),[e,i,t]),p=l(()=>e.filter(e=>i.has(String(e[t]))),[e,i,t]);return{selectedKeys:i,isAllSelected:u,isRowSelected:h,handleSelect:s,handleSelectAll:c,clearSelection:d,selectedRows:p}}function m(e,t,r){const[i,o]=a(1),s=e.length,c=l(()=>!t||t<=0?1:Math.max(1,Math.ceil(s/t)),[s,t]),d=l(()=>Math.min(i,c),[i,c]),h=l(()=>{if(!t||t<=0)return e;const r=(d-1)*t,a=r+t;return e.slice(r,a)},[e,d,t]),u=l(()=>!t||t<=0||0===s?0:(d-1)*t+1,[d,t,s]),p=l(()=>!t||t<=0?s:Math.min(d*t,s),[d,t,s]),m=n(e=>{const t=Math.max(1,Math.min(e,c));o(t),r&&r(t)},[c,r]),g=n(()=>{m(d+1)},[d,m]),b=n(()=>{m(d-1)},[d,m]),f=l(()=>{const e=[];let t=Math.max(1,d-Math.floor(2.5));const r=Math.min(c,t+5-1);t=Math.max(1,r-5+1);for(let a=t;a<=r;a++)e.push(a);return e},[d,c]);return{currentPage:d,totalPages:c,paginatedData:h,startIndex:u,endIndex:p,totalItems:s,goToPage:m,goToNextPage:g,goToPrevPage:b,pageNumbers:f}}function g({direction:r}){return t("span","asc"===r?{className:"rlt-sort-icon","aria-hidden":"true",children:t("svg",{viewBox:"0 0 10 10",children:t("polygon",{points:"5,2 9,8 1,8"})})}:"desc"===r?{className:"rlt-sort-icon","aria-hidden":"true",children:t("svg",{viewBox:"0 0 10 10",children:t("polygon",{points:"5,8 1,2 9,2"})})}:{className:"rlt-sort-icon","aria-hidden":"true",children:e("svg",{viewBox:"0 0 10 14",children:[t("polygon",{points:"5,1 9,6 1,6",opacity:"0.4"}),t("polygon",{points:"5,13 1,8 9,8",opacity:"0.4"})]})})}function b(){return t("span",{className:"rlt-column-icon","aria-hidden":"true",children:e("svg",{viewBox:"0 0 16 16",children:[t("rect",{x:"1",y:"1",width:"6",height:"6",rx:"1"}),t("rect",{x:"9",y:"1",width:"6",height:"6",rx:"1"}),t("rect",{x:"1",y:"9",width:"6",height:"6",rx:"1"}),t("rect",{x:"9",y:"9",width:"6",height:"6",rx:"1"})]})})}function f(s){const{columns:c,data:d,url:f,rowKey:y="id",className:N="",isSearchable:S=!1,isSelectable:x=!1,searchableFields:v,pageSize:k,onSelectionChange:w,onSort:P,onPageChange:C,loading:T,emptyMessage:V="No data available",errorMessage:M="Failed to load data",stickyHeader:$=!1,striped:I=!1,bordered:D=!1}=s,[j,B]=a(()=>c.map(e=>({...e,isVisible:void 0===e.isVisible||e.isVisible})));i(()=>{B(c.map(e=>({...e,isVisible:void 0===e.isVisible||e.isVisible})))},[c]);const[A,F]=a([]),[R,U]=a(!1),[z,E]=a(null);i(()=>{if(void 0!==d)return;if(!f)return;let e=!1;return async function(){U(!0),E(null);try{const t=await fetch(f);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);const r=await t.json();e||F(r.map(e=>({...e})))}catch(t){if(!e){const e=t instanceof Error?t.message:"Unknown error";E(e)}}finally{e||U(!1)}}(),()=>{e=!0}},[f,d]);const H=void 0!==d?d:A,K=T||R,[L,O]=a(!1),q=n(e=>{B(t=>t.map((t,r)=>r===e?{...t,isVisible:!t.isVisible}:t))},[]),G=n(()=>{O(e=>!e)},[]),J=l(()=>j.filter(e=>e.isVisible).map(e=>e.path),[j]),{searchText:Q,filteredData:W,handleSearch:X}=u(H,null!=v?v:J),{sortState:Y,sortedData:Z,handleSort:_}=h(W,P),ee=l(()=>Z.map(e=>String(e[y])),[Z,y]),{isAllSelected:te,isRowSelected:re,handleSelect:ae,handleSelectAll:ne}=p(Z,y,w),{currentPage:le,totalPages:ie,paginatedData:oe,startIndex:se,endIndex:ce,totalItems:de,goToPage:he,goToNextPage:ue,goToPrevPage:pe,pageNumbers:me}=m(Z,k,C),ge=n(()=>e("div",{className:"rlt-column-controller",children:[t("button",{onClick:G,className:"rlt-btn-column-controller","aria-haspopup":"true","aria-expanded":L,"aria-label":"Toggle column visibility",type:"button",children:t(b,{})}),t("ul",{className:"rlt-controller-list"+(L?"":" rlt-hide"),role:"menu",children:j.map((r,a)=>e("li",{role:"menuitemcheckbox","aria-checked":r.isVisible,children:[t("input",{type:"checkbox",id:`rlt-col-toggle-${r.key}`,checked:r.isVisible,onChange:()=>q(a),tabIndex:L?0:-1}),t("label",{htmlFor:`rlt-col-toggle-${r.key}`,children:r.label})]},r.key))})]}),[j,L,q,G]),be=n(r=>{if(r.sortable){const a=Y.key===r.path?Y.direction:"none",n="asc"===a?"ascending":"desc"===a?"descending":"none";return e("span",{className:"rlt-header-content",children:[t("span",{children:r.label}),t("button",{onClick:()=>_(r.path),className:"rlt-sort-btn","aria-sort":n,"aria-label":`Sort by ${r.label}`,type:"button",children:t(g,{direction:a})})]})}return t("span",{children:r.label})},[Y,_]),fe=n(()=>t(r,{children:oe.map((r,a)=>{const n=r[y],l=String(null!=n?n:a),i=re(l);return e("tr",{className:i?"rlt-row--selected":"",role:"row",children:[x&&t("td",{className:"rlt-select-cell",role:"gridcell",children:t("input",{type:"checkbox",checked:i,onChange:()=>ae(l),"aria-label":`Select row ${l}`})}),j.map(e=>{if(!e.isVisible)return null;const a=r[e.path],n=o(e.className),l=e.className?`rlt-td-${n} ${e.className}`:"";return t("td",{className:l,role:"gridcell",children:e.formatter?e.formatter(a,r):null!=a?String(a):""},e.key)})]},l)})}),[oe,y,x,re,ae,j]),ye=n(()=>!k||k<=0||0===de?null:e("div",{className:"rlt-pagination",role:"navigation","aria-label":"Table pagination",children:[e("span",{className:"rlt-pagination-info",children:["Showing ",se,"–",ce," of ",de," results"]}),e("div",{className:"rlt-pagination-controls",children:[t("button",{className:"rlt-pagination-btn",onClick:pe,disabled:le<=1,"aria-label":"Previous page",type:"button",children:"‹"}),me.map(e=>t("button",{className:"rlt-pagination-btn"+(e===le?" rlt-pagination-btn--active":""),onClick:()=>he(e),"aria-label":`Page ${e}`,"aria-current":e===le?"page":void 0,type:"button",children:e},e)),t("button",{className:"rlt-pagination-btn",onClick:ue,disabled:le>=ie,"aria-label":"Next page",type:"button",children:"›"})]})]}),[k,de,se,ce,le,ie,me,he,ue,pe]);if(K)return e("div",{className:"rlt-state-container rlt-loading",role:"status","aria-live":"polite",children:[t("span",{className:"rlt-spinner"}),t("span",{children:"Loading…"})]});if(z)return e("div",{className:"rlt-state-container rlt-error",role:"alert",children:[M,"string"==typeof M&&e("span",{style:{marginLeft:8,fontSize:"0.85em",opacity:.7},children:["(",z,")"]})]});const Ne=["rlt-table",$?"rlt-table--sticky":"",I?"rlt-table--striped":"",D?"rlt-table--bordered":"",N].filter(Boolean).join(" "),Se=j.filter(e=>e.isVisible);return e("div",{className:"rlt-container",children:[S&&e("div",{className:"rlt-action-container",children:[t("input",{className:"rlt-search-input",type:"text",placeholder:"Search…","aria-label":"Search table data",value:Q,onChange:e=>X(e.target.value)}),ge()]}),0!==H.length||K||z?e(r,{children:[e("table",{className:Ne,role:"grid",children:[t("thead",{children:e("tr",{role:"row",children:[x&&t("th",{className:"rlt-select-column",role:"columnheader",children:t("input",{type:"checkbox",id:"rlt-select-all",checked:te,onChange:()=>ne(ee),"aria-label":"Select all rows"})}),Se.map(e=>{const r=o(e.className),a=e.className?`rlt-th-${r} ${e.className}`:"";return t("th",{className:a,role:"columnheader",children:be(e)},e.key)})]})}),t("tbody",{children:fe()})]}),ye()]}):t("div",{className:"rlt-state-container rlt-empty",role:"status",children:V})]})}export{f as Table,m as usePagination,u as useSearch,p as useSelection,h as useSort};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/utils/helpers.ts","../src/hooks/useSort.ts","../src/hooks/useSearch.ts","../src/hooks/useSelection.ts","../src/hooks/usePagination.ts","../src/Table/Table.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["getDefaultClassName","className","includes","split","toComparableString","value","String","toUpperCase","isNumericValue","isNaN","Number","INITIAL_SORT_STATE","key","direction","useSort","data","onSort","sortState","setSortState","useState","handleSort","useCallback","prev","newDirection","resetSort","sortedData","useMemo","sort","a","b","valA","valB","diff","strA","strB","comparison","localeCompare","useSearch","searchableFields","searchText","setSearchText","handleSearch","text","clearSearch","filteredData","trim","query","filter","item","Object","keys","some","field","useSelection","rowKey","onSelectionChange","selectedKeys","setSelectedKeys","Set","handleSelect","next","has","delete","add","selected","handleSelectAll","allKeys","allSelected","length","every","k","clearSelection","isRowSelected","isAllSelected","selectedRows","usePagination","pageSize","onPageChange","currentPage","setCurrentPage","totalItems","totalPages","Math","max","ceil","safePage","min","paginatedData","start","end","slice","startIndex","endIndex","goToPage","page","target","goToNextPage","goToPrevPage","pageNumbers","pages","floor","maxVisible","i","push","SortIcon","_jsx","viewBox","children","points","_jsxs","opacity","ColumnControllerIcon","x","y","width","height","rx","Table","props","columns","dataProp","url","isSearchable","isSelectable","loading","externalLoading","emptyMessage","errorMessage","stickyHeader","striped","bordered","localColumns","setLocalColumns","map","col","isVisible","undefined","useEffect","fetchedData","setFetchedData","isLoading","setIsLoading","error","setError","cancelled","async","response","fetch","ok","Error","status","statusText","json","err","message","fetchData","sourceData","showLoading","showMenu","setShowMenu","handleToggleColumn","index","handleToggleMenu","visibleColumnPaths","c","path","allVisibleKeys","renderColumnController","onClick","type","role","column","id","checked","onChange","tabIndex","htmlFor","label","renderSortableHeader","sortable","ariaSort","renderRows","_Fragment","keyValue","keyStr","cellValue","defaultCls","cellClass","formatter","renderPagination","disabled","style","marginLeft","fontSize","tableClasses","Boolean","join","visibleColumns","placeholder","e","thClass"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("react");function a(e){return e?e.includes(" ")?e.split(" ")[0]:e:""}function s(e){return null==e||"object"==typeof e?"":String(e).toUpperCase()}function l(e){return null!=e&&""!==e&&!isNaN(Number(e))}const r={key:"",direction:"none"};function n(e,a){const[n,i]=t.useState(r),c=t.useCallback(e=>{i(t=>{let s;return s=t.key===e&&"asc"===t.direction?"desc":"asc",a&&a(e,s),{key:e,direction:s}})},[a]),o=t.useCallback(()=>{i(r)},[]),u=t.useMemo(()=>{if("none"===n.direction||!n.key)return e;const t=n.key,a=n.direction;return[...e].sort((e,r)=>{const n=e[t],i=r[t];if(null==n)return 1;if(null==i)return-1;if(l(n)&&l(i)){const e=Number(n)-Number(i);return"asc"===a?e:-e}const c=s(n),o=s(i),u=c.localeCompare(o);return"asc"===a?u:-u})},[e,n]);return{sortState:n,sortedData:u,handleSort:c,resetSort:o}}function i(e,a){const[l,r]=t.useState(""),n=t.useCallback(e=>{r(e)},[]),i=t.useCallback(()=>{r("")},[]),c=t.useMemo(()=>{if(!l.trim())return e;const t=l.toUpperCase();return e.filter(e=>(null!=a?a:Object.keys(e)).some(a=>{const l=e[a];return("string"==typeof l||"number"==typeof l)&&s(l).includes(t)}))},[e,l,a]);return{searchText:l,filteredData:c,handleSearch:n,clearSearch:i}}function c(e,a,s){const[l,r]=t.useState(new Set),n=t.useCallback(t=>{r(l=>{const r=new Set(l);if(r.has(t)?r.delete(t):r.add(t),s){const t=e.filter(e=>r.has(String(e[a])));s(t)}return r})},[e,a,s]),i=t.useCallback(t=>{r(l=>{const r=t.length>0&&t.every(e=>l.has(e)),n=r?new Set:new Set(t);if(s){const t=r?[]:e.filter(e=>n.has(String(e[a])));s(t)}return n})},[e,a,s]),c=t.useCallback(()=>{r(new Set),s&&s([])},[s]),o=t.useCallback(e=>l.has(e),[l]),u=t.useMemo(()=>0!==e.length&&e.every(e=>l.has(String(e[a]))),[e,l,a]),d=t.useMemo(()=>e.filter(e=>l.has(String(e[a]))),[e,l,a]);return{selectedKeys:l,isAllSelected:u,isRowSelected:o,handleSelect:n,handleSelectAll:i,clearSelection:c,selectedRows:d}}function o(e,a,s){const[l,r]=t.useState(1),n=e.length,i=t.useMemo(()=>!a||a<=0?1:Math.max(1,Math.ceil(n/a)),[n,a]),c=t.useMemo(()=>Math.min(l,i),[l,i]),o=t.useMemo(()=>{if(!a||a<=0)return e;const t=(c-1)*a,s=t+a;return e.slice(t,s)},[e,c,a]),u=t.useMemo(()=>!a||a<=0||0===n?0:(c-1)*a+1,[c,a,n]),d=t.useMemo(()=>!a||a<=0?n:Math.min(c*a,n),[c,a,n]),h=t.useCallback(e=>{const t=Math.max(1,Math.min(e,i));r(t),s&&s(t)},[i,s]),m=t.useCallback(()=>{h(c+1)},[c,h]),x=t.useCallback(()=>{h(c-1)},[c,h]),p=t.useMemo(()=>{const e=[];let t=Math.max(1,c-Math.floor(2.5));const a=Math.min(i,t+5-1);t=Math.max(1,a-5+1);for(let s=t;s<=a;s++)e.push(s);return e},[c,i]);return{currentPage:c,totalPages:i,paginatedData:o,startIndex:u,endIndex:d,totalItems:n,goToPage:h,goToNextPage:m,goToPrevPage:x,pageNumbers:p}}function u({direction:t}){return"asc"===t?e.jsx("span",{className:"rlt-sort-icon","aria-hidden":"true",children:e.jsx("svg",{viewBox:"0 0 10 10",children:e.jsx("polygon",{points:"5,2 9,8 1,8"})})}):"desc"===t?e.jsx("span",{className:"rlt-sort-icon","aria-hidden":"true",children:e.jsx("svg",{viewBox:"0 0 10 10",children:e.jsx("polygon",{points:"5,8 1,2 9,2"})})}):e.jsx("span",{className:"rlt-sort-icon","aria-hidden":"true",children:e.jsxs("svg",{viewBox:"0 0 10 14",children:[e.jsx("polygon",{points:"5,1 9,6 1,6",opacity:"0.4"}),e.jsx("polygon",{points:"5,13 1,8 9,8",opacity:"0.4"})]})})}function d(){return e.jsx("span",{className:"rlt-column-icon","aria-hidden":"true",children:e.jsxs("svg",{viewBox:"0 0 16 16",children:[e.jsx("rect",{x:"1",y:"1",width:"6",height:"6",rx:"1"}),e.jsx("rect",{x:"9",y:"1",width:"6",height:"6",rx:"1"}),e.jsx("rect",{x:"1",y:"9",width:"6",height:"6",rx:"1"}),e.jsx("rect",{x:"9",y:"9",width:"6",height:"6",rx:"1"})]})})}exports.Table=function(s){const{columns:l,data:r,url:h,rowKey:m="id",className:x="",isSearchable:p=!1,isSelectable:b=!1,searchableFields:g,pageSize:j,onSelectionChange:f,onSort:S,onPageChange:y,loading:k,emptyMessage:N="No data available",errorMessage:v="Failed to load data",stickyHeader:C=!1,striped:w=!1,bordered:M=!1}=s,[P,T]=t.useState(()=>l.map(e=>({...e,isVisible:void 0===e.isVisible||e.isVisible})));t.useEffect(()=>{T(l.map(e=>({...e,isVisible:void 0===e.isVisible||e.isVisible})))},[l]);const[V,$]=t.useState([]),[I,D]=t.useState(!1),[B,F]=t.useState(null);t.useEffect(()=>{if(void 0!==r)return;if(!h)return;let e=!1;return async function(){D(!0),F(null);try{const t=await fetch(h);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);const a=await t.json();e||$(a.map(e=>({...e})))}catch(t){if(!e){const e=t instanceof Error?t.message:"Unknown error";F(e)}}finally{e||D(!1)}}(),()=>{e=!0}},[h,r]);const A=void 0!==r?r:V,E=k||I,[R,U]=t.useState(!1),q=t.useCallback(e=>{T(t=>t.map((t,a)=>a===e?{...t,isVisible:!t.isVisible}:t))},[]),z=t.useCallback(()=>{U(e=>!e)},[]),H=t.useMemo(()=>P.filter(e=>e.isVisible).map(e=>e.path),[P]),{searchText:K,filteredData:L,handleSearch:O}=i(A,null!=g?g:H),{sortState:G,sortedData:J,handleSort:Q}=n(L,S),W=t.useMemo(()=>J.map(e=>String(e[m])),[J,m]),{isAllSelected:X,isRowSelected:Y,handleSelect:Z,handleSelectAll:_}=c(J,m,f),{currentPage:ee,totalPages:te,paginatedData:ae,startIndex:se,endIndex:le,totalItems:re,goToPage:ne,goToNextPage:ie,goToPrevPage:ce,pageNumbers:oe}=o(J,j,y),ue=t.useCallback(()=>e.jsxs("div",{className:"rlt-column-controller",children:[e.jsx("button",{onClick:z,className:"rlt-btn-column-controller","aria-haspopup":"true","aria-expanded":R,"aria-label":"Toggle column visibility",type:"button",children:e.jsx(d,{})}),e.jsx("ul",{className:"rlt-controller-list"+(R?"":" rlt-hide"),role:"menu",children:P.map((t,a)=>e.jsxs("li",{role:"menuitemcheckbox","aria-checked":t.isVisible,children:[e.jsx("input",{type:"checkbox",id:`rlt-col-toggle-${t.key}`,checked:t.isVisible,onChange:()=>q(a),tabIndex:R?0:-1}),e.jsx("label",{htmlFor:`rlt-col-toggle-${t.key}`,children:t.label})]},t.key))})]}),[P,R,q,z]),de=t.useCallback(t=>{if(t.sortable){const a=G.key===t.path?G.direction:"none",s="asc"===a?"ascending":"desc"===a?"descending":"none";return e.jsxs("span",{className:"rlt-header-content",children:[e.jsx("span",{children:t.label}),e.jsx("button",{onClick:()=>Q(t.path),className:"rlt-sort-btn","aria-sort":s,"aria-label":`Sort by ${t.label}`,type:"button",children:e.jsx(u,{direction:a})})]})}return e.jsx("span",{children:t.label})},[G,Q]),he=t.useCallback(()=>e.jsx(e.Fragment,{children:ae.map((t,s)=>{const l=t[m],r=String(null!=l?l:s),n=Y(r);return e.jsxs("tr",{className:n?"rlt-row--selected":"",role:"row",children:[b&&e.jsx("td",{className:"rlt-select-cell",role:"gridcell",children:e.jsx("input",{type:"checkbox",checked:n,onChange:()=>Z(r),"aria-label":`Select row ${r}`})}),P.map(s=>{if(!s.isVisible)return null;const l=t[s.path],r=a(s.className),n=s.className?`rlt-td-${r} ${s.className}`:"";return e.jsx("td",{className:n,role:"gridcell",children:s.formatter?s.formatter(l,t):null!=l?String(l):""},s.key)})]},r)})}),[ae,m,b,Y,Z,P]),me=t.useCallback(()=>!j||j<=0||0===re?null:e.jsxs("div",{className:"rlt-pagination",role:"navigation","aria-label":"Table pagination",children:[e.jsxs("span",{className:"rlt-pagination-info",children:["Showing ",se,"–",le," of ",re," results"]}),e.jsxs("div",{className:"rlt-pagination-controls",children:[e.jsx("button",{className:"rlt-pagination-btn",onClick:ce,disabled:ee<=1,"aria-label":"Previous page",type:"button",children:"‹"}),oe.map(t=>e.jsx("button",{className:"rlt-pagination-btn"+(t===ee?" rlt-pagination-btn--active":""),onClick:()=>ne(t),"aria-label":`Page ${t}`,"aria-current":t===ee?"page":void 0,type:"button",children:t},t)),e.jsx("button",{className:"rlt-pagination-btn",onClick:ie,disabled:ee>=te,"aria-label":"Next page",type:"button",children:"›"})]})]}),[j,re,se,le,ee,te,oe,ne,ie,ce]);if(E)return e.jsxs("div",{className:"rlt-state-container rlt-loading",role:"status","aria-live":"polite",children:[e.jsx("span",{className:"rlt-spinner"}),e.jsx("span",{children:"Loading…"})]});if(B)return e.jsxs("div",{className:"rlt-state-container rlt-error",role:"alert",children:[v,"string"==typeof v&&e.jsxs("span",{style:{marginLeft:8,fontSize:"0.85em",opacity:.7},children:["(",B,")"]})]});const xe=["rlt-table",C?"rlt-table--sticky":"",w?"rlt-table--striped":"",M?"rlt-table--bordered":"",x].filter(Boolean).join(" "),pe=P.filter(e=>e.isVisible);return e.jsxs("div",{className:"rlt-container",children:[p&&e.jsxs("div",{className:"rlt-action-container",children:[e.jsx("input",{className:"rlt-search-input",type:"text",placeholder:"Search…","aria-label":"Search table data",value:K,onChange:e=>O(e.target.value)}),ue()]}),0!==A.length||E||B?e.jsxs(e.Fragment,{children:[e.jsxs("table",{className:xe,role:"grid",children:[e.jsx("thead",{children:e.jsxs("tr",{role:"row",children:[b&&e.jsx("th",{className:"rlt-select-column",role:"columnheader",children:e.jsx("input",{type:"checkbox",id:"rlt-select-all",checked:X,onChange:()=>_(W),"aria-label":"Select all rows"})}),pe.map(t=>{const s=a(t.className),l=t.className?`rlt-th-${s} ${t.className}`:"";return e.jsx("th",{className:l,role:"columnheader",children:de(t)},t.key)})]})}),e.jsx("tbody",{children:he()})]}),me()]}):e.jsx("div",{className:"rlt-state-container rlt-empty",role:"status",children:N})]})},exports.usePagination=o,exports.useSearch=i,exports.useSelection=c,exports.useSort=n;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/helpers.ts","../src/hooks/useSort.ts","../src/hooks/useSearch.ts","../src/hooks/useSelection.ts","../src/hooks/usePagination.ts","../src/Table/Table.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["getDefaultClassName","className","includes","split","toComparableString","value","String","toUpperCase","isNumericValue","isNaN","Number","INITIAL_SORT_STATE","key","direction","useSort","data","onSort","sortState","setSortState","useState","handleSort","useCallback","prev","newDirection","resetSort","sortedData","useMemo","sort","a","b","valA","valB","diff","strA","strB","comparison","localeCompare","useSearch","searchableFields","searchText","setSearchText","handleSearch","text","clearSearch","filteredData","trim","query","filter","item","Object","keys","some","field","useSelection","rowKey","onSelectionChange","selectedKeys","setSelectedKeys","Set","handleSelect","next","has","delete","add","selected","handleSelectAll","allKeys","allSelected","length","every","k","clearSelection","isRowSelected","isAllSelected","selectedRows","usePagination","pageSize","onPageChange","currentPage","setCurrentPage","totalItems","totalPages","Math","max","ceil","safePage","min","paginatedData","start","end","slice","startIndex","endIndex","goToPage","page","target","goToNextPage","goToPrevPage","pageNumbers","pages","floor","maxVisible","i","push","SortIcon","_jsx","viewBox","children","points","_jsxs","opacity","ColumnControllerIcon","x","y","width","height","rx","props","columns","dataProp","url","isSearchable","isSelectable","loading","externalLoading","emptyMessage","errorMessage","stickyHeader","striped","bordered","localColumns","setLocalColumns","map","col","isVisible","undefined","useEffect","fetchedData","setFetchedData","isLoading","setIsLoading","error","setError","cancelled","async","response","fetch","ok","Error","status","statusText","json","err","message","fetchData","sourceData","showLoading","showMenu","setShowMenu","handleToggleColumn","index","handleToggleMenu","visibleColumnPaths","c","path","allVisibleKeys","renderColumnController","onClick","type","role","column","id","checked","onChange","tabIndex","htmlFor","label","renderSortableHeader","sortable","ariaSort","renderRows","_Fragment","keyValue","keyStr","cellValue","defaultCls","cellClass","formatter","renderPagination","disabled","style","marginLeft","fontSize","tableClasses","Boolean","join","visibleColumns","placeholder","e","thClass"],"mappings":"mEAIM,SAAUA,EAAoBC,GAClC,OAAKA,EACEA,EAAUC,SAAS,KAAOD,EAAUE,MAAM,KAAK,GAAKF,EADpC,EAEzB,CAMM,SAAUG,EAAmBC,GACjC,OAAIA,SACiB,iBAAVA,EADuC,GAE3CC,OAAOD,GAAOE,aACvB,CAKM,SAAUC,EAAeH,GAC7B,OAAIA,SAAmD,KAAVA,IACrCI,MAAMC,OAAOL,GACvB,CCdA,MAAMM,EAAgC,CAAEC,IAAK,GAAIC,UAAW,QAEtD,SAAUC,EACdC,EACAC,GAEA,MAAOC,EAAWC,GAAgBC,EAAAA,SAAoBR,GAEhDS,EAAaC,cAChBT,IACCM,EAAcI,IACZ,IAAIC,EASJ,OAPEA,EADED,EAAKV,MAAQA,GAA0B,QAAnBU,EAAKT,UACZ,OAEA,MAEbG,GACFA,EAAOJ,EAAKW,GAEP,CAAEX,MAAKC,UAAWU,MAG7B,CAACP,IAGGQ,EAAYH,EAAAA,YAAY,KAC5BH,EAAaP,IACZ,IAEGc,EAAaC,EAAAA,QAAQ,KACzB,GAA4B,SAAxBT,EAAUJ,YAAyBI,EAAUL,IAC/C,OAAOG,EAGT,MAAMH,EAAMK,EAAUL,IAChBC,EAAYI,EAAUJ,UAE5B,MAAO,IAAIE,GAAMY,KAAK,CAACC,EAAGC,KACxB,MAAMC,EAAOF,EAAEhB,GACTmB,EAAOF,EAAEjB,GAGf,GAAIkB,QAAqC,OAAO,EAChD,GAAIC,QAAqC,OAAO,EAGhD,GAAIvB,EAAesB,IAAStB,EAAeuB,GAAO,CAChD,MAAMC,EAAOtB,OAAOoB,GAAQpB,OAAOqB,GACnC,MAAqB,QAAdlB,EAAsBmB,GAAQA,CACvC,CAGA,MAAMC,EAAO7B,EAAmB0B,GAC1BI,EAAO9B,EAAmB2B,GAC1BI,EAAaF,EAAKG,cAAcF,GACtC,MAAqB,QAAdrB,EAAsBsB,GAAcA,KAE5C,CAACpB,EAAME,IAEV,MAAO,CAAEA,YAAWQ,aAAYL,aAAYI,YAC9C,CC9DM,SAAUa,EACdtB,EACAuB,GAEA,MAAOC,EAAYC,GAAiBrB,EAAAA,SAAiB,IAE/CsB,EAAepB,cAAaqB,IAChCF,EAAcE,IACb,IAEGC,EAActB,EAAAA,YAAY,KAC9BmB,EAAc,KACb,IAEGI,EAAelB,EAAAA,QAAQ,KAC3B,IAAKa,EAAWM,OACd,OAAO9B,EAGT,MAAM+B,EAAQP,EAAWhC,cAEzB,OAAOQ,EAAKgC,OAAQC,IACKV,QAAAA,EAAoBW,OAAOC,KAAKF,IAEjCG,KAAMC,IAC1B,MAAM/C,EAAQ2C,EAAKI,GAEnB,OAAqB,iBAAV/C,GAAuC,iBAAVA,IAC/BD,EAAmBC,GAAOH,SAAS4C,OAK/C,CAAC/B,EAAMwB,EAAYD,IAEtB,MAAO,CAAEC,aAAYK,eAAcH,eAAcE,cACnD,UClCgBU,EACdtC,EACAuC,EACAC,GAEA,MAAOC,EAAcC,GAAmBtC,EAAAA,SAAsB,IAAIuC,KAE5DC,EAAetC,cAClBT,IACC6C,EAAiBnC,IACf,MAAMsC,EAAO,IAAIF,IAAIpC,GAMrB,GALIsC,EAAKC,IAAIjD,GACXgD,EAAKE,OAAOlD,GAEZgD,EAAKG,IAAInD,GAEP2C,EAAmB,CACrB,MAAMS,EAAWjD,EAAKgC,OAAQC,GAASY,EAAKC,IAAIvD,OAAO0C,EAAKM,MAC5DC,EAAkBS,EACpB,CACA,OAAOJ,KAGX,CAAC7C,EAAMuC,EAAQC,IAGXU,EAAkB5C,cACrB6C,IACCT,EAAiBnC,IACf,MAAM6C,EAAcD,EAAQE,OAAS,GAAKF,EAAQG,MAAOC,GAAMhD,EAAKuC,IAAIS,IAClEV,EAAOO,EAAc,IAAIT,IAAgB,IAAIA,IAAIQ,GACvD,GAAIX,EAAmB,CACrB,MAAMS,EAAWG,EAAc,GAAKpD,EAAKgC,OAAQC,GAASY,EAAKC,IAAIvD,OAAO0C,EAAKM,MAC/EC,EAAkBS,EACpB,CACA,OAAOJ,KAGX,CAAC7C,EAAMuC,EAAQC,IAGXgB,EAAiBlD,EAAAA,YAAY,KACjCoC,EAAgB,IAAIC,KAChBH,GACFA,EAAkB,KAEnB,CAACA,IAEEiB,EAAgBnD,cACnBT,GAAgB4C,EAAaK,IAAIjD,GAClC,CAAC4C,IAGGiB,EAAgB/C,EAAAA,QAAQ,IACR,IAAhBX,EAAKqD,QACFrD,EAAKsD,MAAOrB,GAASQ,EAAaK,IAAIvD,OAAO0C,EAAKM,MACxD,CAACvC,EAAMyC,EAAcF,IAElBoB,EAAehD,EAAAA,QACnB,IAAMX,EAAKgC,OAAQC,GAASQ,EAAaK,IAAIvD,OAAO0C,EAAKM,MACzD,CAACvC,EAAMyC,EAAcF,IAGvB,MAAO,CACLE,eACAiB,gBACAD,gBACAb,eACAM,kBACAM,iBACAG,eAEJ,UCrEgBC,EACd5D,EACA6D,EACAC,GAEA,MAAOC,EAAaC,GAAkB5D,EAAAA,SAAiB,GAEjD6D,EAAajE,EAAKqD,OAElBa,EAAavD,EAAAA,QAAQ,KACpBkD,GAAYA,GAAY,EAAU,EAChCM,KAAKC,IAAI,EAAGD,KAAKE,KAAKJ,EAAaJ,IACzC,CAACI,EAAYJ,IAGVS,EAAW3D,EAAAA,QAAQ,IAChBwD,KAAKI,IAAIR,EAAaG,GAC5B,CAACH,EAAaG,IAEXM,EAAgB7D,EAAAA,QAAQ,KAC5B,IAAKkD,GAAYA,GAAY,EAAG,OAAO7D,EACvC,MAAMyE,GAASH,EAAW,GAAKT,EACzBa,EAAMD,EAAQZ,EACpB,OAAO7D,EAAK2E,MAAMF,EAAOC,IACxB,CAAC1E,EAAMsE,EAAUT,IAEde,EAAajE,EAAAA,QAAQ,KACpBkD,GAAYA,GAAY,GAAoB,IAAfI,EAAyB,GACnDK,EAAW,GAAKT,EAAW,EAClC,CAACS,EAAUT,EAAUI,IAElBY,EAAWlE,EAAAA,QAAQ,KAClBkD,GAAYA,GAAY,EAAUI,EAChCE,KAAKI,IAAID,EAAWT,EAAUI,GACpC,CAACK,EAAUT,EAAUI,IAElBa,EAAWxE,cACdyE,IACC,MAAMC,EAASb,KAAKC,IAAI,EAAGD,KAAKI,IAAIQ,EAAMb,IAC1CF,EAAegB,GACXlB,GAAcA,EAAakB,IAEjC,CAACd,EAAYJ,IAGTmB,EAAe3E,EAAAA,YAAY,KAC/BwE,EAASR,EAAW,IACnB,CAACA,EAAUQ,IAERI,EAAe5E,EAAAA,YAAY,KAC/BwE,EAASR,EAAW,IACnB,CAACA,EAAUQ,IAERK,EAAcxE,EAAAA,QAAQ,KAC1B,MAAMyE,EAAkB,GAExB,IAAIX,EAAQN,KAAKC,IAAI,EAAGE,EAAWH,KAAKkB,MAAMC,MAC9C,MAAMZ,EAAMP,KAAKI,IAAIL,EAAYO,EAFd,EAEmC,GACtDA,EAAQN,KAAKC,IAAI,EAAGM,EAHD,EAGoB,GAEvC,IAAK,IAAIa,EAAId,EAAOc,GAAKb,EAAKa,IAC5BH,EAAMI,KAAKD,GAEb,OAAOH,GACN,CAACd,EAAUJ,IAEd,MAAO,CACLH,YAAaO,EACbJ,aACAM,gBACAI,aACAC,WACAZ,aACAa,WACAG,eACAC,eACAC,cAEJ,CCjFA,SAASM,GAAS3F,UAAEA,IAClB,MAAkB,QAAdA,EAEA4F,EAAAA,YAAMxG,UAAU,gBAAe,cAAa,gBAC1CwG,EAAAA,IAAA,MAAA,CAAKC,QAAQ,YAAWC,SAACF,EAAAA,eAASG,OAAO,oBAI7B,SAAd/F,EAEA4F,EAAAA,YAAMxG,UAAU,gBAAe,cAAa,gBAC1CwG,EAAAA,IAAA,MAAA,CAAKC,QAAQ,YAAWC,SAACF,EAAAA,eAASG,OAAO,oBAK7CH,EAAAA,IAAA,OAAA,CAAMxG,UAAU,gBAAe,cAAa,OAAM0G,SAChDE,EAAAA,KAAA,MAAA,CAAKH,QAAQ,YAAWC,SAAA,CACtBF,EAAAA,IAAA,UAAA,CAASG,OAAO,cAAcE,QAAQ,QACtCL,EAAAA,IAAA,UAAA,CAASG,OAAO,eAAeE,QAAQ,YAI/C,CAKA,SAASC,IACP,OACEN,EAAAA,YAAMxG,UAAU,kBAAiB,cAAa,OAAM0G,SAClDE,EAAAA,KAAA,MAAA,CAAKH,QAAQ,YAAWC,SAAA,CACtBF,EAAAA,IAAA,OAAA,CAAMO,EAAE,IAAIC,EAAE,IAAIC,MAAM,IAAIC,OAAO,IAAIC,GAAG,MAC1CX,EAAAA,IAAA,OAAA,CAAMO,EAAE,IAAIC,EAAE,IAAIC,MAAM,IAAIC,OAAO,IAAIC,GAAG,MAC1CX,EAAAA,YAAMO,EAAE,IAAIC,EAAE,IAAIC,MAAM,IAAIC,OAAO,IAAIC,GAAG,MAC1CX,EAAAA,IAAA,OAAA,CAAMO,EAAE,IAAIC,EAAE,IAAIC,MAAM,IAAIC,OAAO,IAAIC,GAAG,UAIlD,eAKA,SAAkDC,GAChD,MAAMC,QACJA,EACAvG,KAAMwG,EAAQC,IACdA,EAAGlE,OACHA,EAAS,KAAwBrD,UACjCA,EAAY,GAAEwH,aACdA,GAAe,EAAKC,aACpBA,GAAe,EAAKpF,iBACpBA,EAAgBsC,SAChBA,EAAQrB,kBACRA,EAAiBvC,OACjBA,EAAM6D,aACNA,EACA8C,QAASC,EAAeC,aACxBA,EAAe,oBAAmBC,aAClCA,EAAe,sBAAqBC,aACpCA,GAAe,EAAKC,QACpBA,GAAU,EAAKC,SACfA,GAAW,GACTZ,GAGGa,EAAcC,GAAmBhH,EAAAA,SAA8B,IACpEmG,EAAQc,IAAKC,IAAG,IACXA,EACHC,eAA6BC,IAAlBF,EAAIC,WAA0BD,EAAIC,cAKjDE,EAAAA,UAAU,KACRL,EACEb,EAAQc,IAAKC,IAAG,IACXA,EACHC,eAA6BC,IAAlBF,EAAIC,WAA0BD,EAAIC,eAGhD,CAAChB,IAGJ,MAAOmB,EAAaC,GAAkBvH,EAAAA,SAAc,KAC7CwH,EAAWC,GAAgBzH,EAAAA,UAAkB,IAC7C0H,EAAOC,GAAY3H,EAAAA,SAAwB,MAElDqH,EAAAA,UAAU,KACR,QAAiBD,IAAbhB,EAEF,OAGF,IAAKC,EAAK,OAEV,IAAIuB,GAAY,EA6BhB,OA3BAC,iBACEJ,GAAa,GACbE,EAAS,MACT,IACE,MAAMG,QAAiBC,MAAM1B,GAC7B,IAAKyB,EAASE,GACZ,MAAM,IAAIC,MAAM,QAAQH,EAASI,WAAWJ,EAASK,cAEvD,MAAMC,QAAkBN,EAASM,OAC5BR,GAEHL,EAAea,EAAKnB,IAAKpF,IAAI,IAAWA,KAE5C,CAAE,MAAOwG,GACP,IAAKT,EAAW,CACd,MAAMU,EAAUD,aAAeJ,MAAQI,EAAIC,QAAU,gBACrDX,EAASW,EACX,CACF,SACOV,GACHH,GAAa,EAEjB,CACF,CAEAc,GAEO,KACLX,GAAY,IAEb,CAACvB,EAAKD,IAGT,MAAMoC,OAA+BpB,IAAbhB,EAAyBA,EAAWkB,EACtDmB,EAAchC,GAAmBe,GAGhCkB,EAAUC,GAAe3I,EAAAA,UAAkB,GAE5C4I,EAAqB1I,cAAa2I,IACtC7B,EAAiB7G,GACfA,EAAK8G,IAAI,CAACC,EAAK/B,IACbA,IAAM0D,EAAQ,IAAK3B,EAAKC,WAAYD,EAAIC,WAAcD,KAGzD,IAEG4B,EAAmB5I,EAAAA,YAAY,KACnCyI,EAAaxI,IAAUA,IACtB,IAGG4I,EAAqBxI,EAAAA,QACzB,IAAMwG,EAAanF,OAAQoH,GAAMA,EAAE7B,WAAWF,IAAK+B,GAAMA,EAAEC,MAC3D,CAAClC,KAGG3F,WAAEA,EAAUK,aAAEA,EAAYH,aAAEA,GAAiBJ,EACjDsH,EACArH,QAAAA,EAAoB4H,IAGhBjJ,UAAEA,EAASQ,WAAEA,EAAUL,WAAEA,GAAeN,EAAW8B,EAAc5B,GAEjEqJ,EAAiB3I,EAAAA,QACrB,IAAMD,EAAW2G,IAAKpF,GAAS1C,OAAO0C,EAAKM,KAC3C,CAAC7B,EAAY6B,KAGTmB,cACJA,EAAaD,cACbA,EAAab,aACbA,EAAYM,gBACZA,GACEZ,EAAgB5B,EAAY6B,EAAkBC,IAE5CuB,YACJA,GAAWG,WACXA,GAAUM,cACVA,GAAaI,WACbA,GAAUC,SACVA,GAAQZ,WACRA,GAAUa,SACVA,GAAQG,aACRA,GAAYC,aACZA,GAAYC,YACZA,IACEvB,EAAiBlD,EAAYmD,EAAUC,GAGrCyF,GAAyBjJ,EAAAA,YAAY,IAEvCwF,EAAAA,KAAA,MAAA,CAAK5G,UAAU,wBAAuB0G,SAAA,CACpCF,EAAAA,IAAA,SAAA,CACE8D,QAASN,EACThK,UAAU,4BAA2B,gBACvB,OAAM,gBACL4J,EAAQ,aACZ,2BACXW,KAAK,SAAQ7D,SAEbF,EAAAA,IAACM,EAAoB,CAAA,KAEvBN,YACExG,UAAW,uBAAsB4J,EAAW,GAAK,aACjDY,KAAK,OAAM9D,SAEVuB,EAAaE,IAAI,CAACsC,EAAQV,IACzBnD,OAAA,KAAA,CAAqB4D,KAAK,kCAAiCC,EAAOpC,UAAS3B,SAAA,CACzEF,EAAAA,IAAA,QAAA,CACE+D,KAAK,WACLG,GAAI,kBAAkBD,EAAO9J,MAC7BgK,QAASF,EAAOpC,UAChBuC,SAAU,IAAMd,EAAmBC,GACnCc,SAAUjB,EAAW,OAEvBpD,EAAAA,IAAA,QAAA,CAAOsE,QAAS,kBAAkBL,EAAO9J,MAAK+F,SAC3C+D,EAAOM,UATHN,EAAO9J,WAgBvB,CAACsH,EAAc2B,EAAUE,EAAoBE,IAG1CgB,GAAuB5J,cAC1BqJ,IACC,GAAIA,EAAOQ,SAAU,CACnB,MAAMrK,EACJI,EAAUL,MAAQ8J,EAAON,KAAOnJ,EAAUJ,UAAY,OAClDsK,EACU,QAAdtK,EACI,YACc,SAAdA,EACA,aACA,OAEN,OACEgG,EAAAA,aAAM5G,UAAU,qBAAoB0G,SAAA,CAClCF,MAAA,OAAA,CAAAE,SAAO+D,EAAOM,QACdvE,MAAA,SAAA,CACE8D,QAAS,IAAMnJ,EAAWsJ,EAAON,MACjCnK,UAAU,eAAc,YACbkL,EAAQ,aACP,WAAWT,EAAOM,QAC9BR,KAAK,SAAQ7D,SAEbF,EAAAA,IAACD,EAAQ,CAAC3F,UAAWA,QAI7B,CACA,OAAO4F,EAAAA,IAAA,OAAA,CAAAE,SAAO+D,EAAOM,SAEvB,CAAC/J,EAAWG,IAIRgK,GAAa/J,EAAAA,YAAY,IAE3BoF,EAAAA,IAAA4E,EAAAA,SAAA,CAAA1E,SACGpB,GAAc6C,IAAI,CAACpF,EAAMgH,KACxB,MAAMsB,EAAWtI,EAAKM,GAChBiI,EACFjL,OADWgL,QACJA,EACAtB,GACLhG,EAAWQ,EAAc+G,GAE/B,OACE1E,EAAAA,KAAA,KAAA,CAEE5G,UAAW+D,EAAW,oBAAsB,GAC5CyG,KAAK,MAAK9D,SAAA,CAETe,GACCjB,EAAAA,IAAA,KAAA,CAAIxG,UAAU,kBAAkBwK,KAAK,WAAU9D,SAC7CF,EAAAA,IAAA,QAAA,CACE+D,KAAK,WACLI,QAAS5G,EACT6G,SAAU,IAAMlH,EAAa4H,GAAO,aACxB,cAAcA,QAI/BrD,EAAaE,IAAKsC,IACjB,IAAKA,EAAOpC,UAAW,OAAO,KAC9B,MAAMkD,EAAYxI,EAAK0H,EAAON,MACxBqB,EAAazL,EAAoB0K,EAAOzK,WACxCyL,EAAYhB,EAAOzK,UACrB,UAAUwL,KAAcf,EAAOzK,YAC/B,GAEJ,OACEwG,EAAAA,IAAA,KAAA,CAAqBxG,UAAWyL,EAAWjB,KAAK,WAAU9D,SACvD+D,EAAOiB,UACJjB,EAAOiB,UAAUH,EAAWxI,GAC5BwI,QACAlL,OAAOkL,GACP,IALGd,EAAO9J,SAvBf2K,OAqCd,CAAChG,GAAejC,EAAQoE,EAAclD,EAAeb,EAAcuE,IAGhE0D,GAAmBvK,EAAAA,YAAY,KAC9BuD,GAAYA,GAAY,GAAoB,IAAfI,GAAyB,KAGzD6B,OAAA,MAAA,CAAK5G,UAAU,iBAAiBwK,KAAK,aAAY,aAAY,mBAAkB9D,SAAA,CAC7EE,EAAAA,aAAM5G,UAAU,sBAAqB0G,SAAA,CAAA,WAC1BhB,GAAU,IAAGC,GAAQ,OAAMZ,GAAU,cAEhD6B,EAAAA,KAAA,MAAA,CAAK5G,UAAU,0BAAyB0G,SAAA,CACtCF,EAAAA,IAAA,SAAA,CACExG,UAAU,qBACVsK,QAAStE,GACT4F,SAAU/G,IAAe,EAAC,aACf,gBACX0F,KAAK,SAAQ7D,SAAA,MAIdT,GAAYkC,IAAKtC,GAChBW,EAAAA,IAAA,SAAA,CAEExG,UAAW,sBACT6F,IAAShB,GAAc,8BAAgC,IAEzDyF,QAAS,IAAM1E,GAASC,GAAK,aACjB,QAAQA,IAAM,eACZA,IAAShB,GAAc,YAASyD,EAC9CiC,KAAK,SAAQ7D,SAEZb,GATIA,IAYTW,MAAA,SAAA,CACExG,UAAU,qBACVsK,QAASvE,GACT6F,SAAU/G,IAAeG,gBACd,YACXuF,KAAK,SAAQ7D,SAAA,YAOpB,CACD/B,EACAI,GACAW,GACAC,GACAd,GACAG,GACAiB,GACAL,GACAG,GACAC,KAIF,GAAI2D,EACF,OACE/C,cAAK5G,UAAU,kCAAkCwK,KAAK,SAAQ,YAAW,SAAQ9D,SAAA,CAC/EF,EAAAA,IAAA,OAAA,CAAMxG,UAAU,gBAChBwG,EAAAA,IAAA,OAAA,CAAAE,SAAA,gBAMN,GAAIkC,EACF,OACEhC,EAAAA,YAAK5G,UAAU,gCAAgCwK,KAAK,QAAO9D,SAAA,CACrBmB,EACX,iBAAjBA,GACNjB,EAAAA,KAAA,OAAA,CAAMiF,MAAO,CAAEC,WAAY,EAAGC,SAAU,SAAUlF,QAAS,IAAKH,SAAA,CAAA,IAAIkC,EAAK,UAOjF,MAAMoD,GAAe,CACnB,YACAlE,EAAe,oBAAsB,GACrCC,EAAU,qBAAuB,GACjCC,EAAW,sBAAwB,GACnChI,GAEC8C,OAAOmJ,SACPC,KAAK,KAEFC,GAAiBlE,EAAanF,OAAQoH,GAAMA,EAAE7B,WAEpD,OACEzB,OAAA,MAAA,CAAK5G,UAAU,gBAAe0G,SAAA,CAE3Bc,GACCZ,EAAAA,YAAK5G,UAAU,uBAAsB0G,SAAA,CACnCF,eACExG,UAAU,mBACVuK,KAAK,OACL6B,YAAY,UAAS,aACV,oBACXhM,MAAOkC,EACPsI,SAAWyB,GAA2C7J,EAAa6J,EAAEvG,OAAO1F,SAE7EiK,QAKkB,IAAtBX,EAAWvF,QAAiBwF,GAAgBf,EAK3ChC,OAAAwE,EAAAA,SAAA,CAAA1E,SAAA,CACEE,EAAAA,KAAA,QAAA,CAAO5G,UAAWgM,GAAcxB,KAAK,OAAM9D,SAAA,CACzCF,EAAAA,IAAA,QAAA,CAAAE,SACEE,EAAAA,KAAA,KAAA,CAAI4D,KAAK,MAAK9D,SAAA,CACXe,GACCjB,EAAAA,IAAA,KAAA,CAAIxG,UAAU,oBAAoBwK,KAAK,eAAc9D,SACnDF,EAAAA,IAAA,QAAA,CACE+D,KAAK,WACLG,GAAG,iBACHC,QAASnG,EACToG,SAAU,IAAM5G,EAAgBoG,GAAe,aACpC,sBAIhB+B,GAAehE,IAAKsC,IACnB,MAAMe,EAAazL,EAAoB0K,EAAOzK,WACxCsM,EAAU7B,EAAOzK,UACnB,UAAUwL,KAAcf,EAAOzK,YAC/B,GAEJ,OACEwG,EAAAA,UAAqBxG,UAAWsM,EAAS9B,KAAK,eAAc9D,SACzDsE,GAAqBP,IADfA,EAAO9J,YAOxB6F,EAAAA,IAAA,QAAA,CAAAE,SAAQyE,UAETQ,QAnCHnF,EAAAA,IAAA,MAAA,CAAKxG,UAAU,gCAAgCwK,KAAK,SAAQ9D,SACzDkB,MAuCX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
package/dist/table.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--rlt-font-family:inherit;--rlt-font-size:14px;--rlt-header-bg:#f8f9fa;--rlt-header-color:#333;--rlt-header-font-weight:600;--rlt-row-hover-bg:#f5f5f5;--rlt-row-selected-bg:#e3f2fd;--rlt-row-striped-bg:#fafafa;--rlt-border-color:#dee2e6;--rlt-sort-icon-color:#666;--rlt-sort-active-color:#333;--rlt-search-border-color:#ccc;--rlt-search-focus-border:#4a90d9;--rlt-search-bg:#fff;--rlt-cell-padding:12px 15px;--rlt-pagination-active-bg:#4a90d9;--rlt-pagination-active-color:#fff;--rlt-pagination-hover-bg:#e9ecef;--rlt-loading-color:#4a90d9;--rlt-error-color:#dc3545;--rlt-empty-color:#6c757d}.rlt-table{border-collapse:collapse;border-spacing:0;font-family:var(--rlt-font-family);font-size:var(--rlt-font-size);width:100%}.rlt-table--bordered,.rlt-table--bordered td,.rlt-table--bordered th{border:1px solid var(--rlt-border-color)}.rlt-table thead th{background:var(--rlt-header-bg);border-bottom:2px solid var(--rlt-border-color);color:var(--rlt-header-color);font-weight:var(--rlt-header-font-weight);padding:var(--rlt-cell-padding);text-align:left;white-space:nowrap}.rlt-table--sticky thead th{position:sticky;top:0;z-index:10}.rlt-table tbody td{border-bottom:1px solid var(--rlt-border-color);padding:var(--rlt-cell-padding);vertical-align:middle}.rlt-table tbody tr:hover{background:var(--rlt-row-hover-bg)}.rlt-table tbody tr.rlt-row--selected,.rlt-table tbody tr.rlt-row--selected:hover{background:var(--rlt-row-selected-bg)}.rlt-table--striped tbody tr:nth-child(2n){background:var(--rlt-row-striped-bg)}.rlt-table--striped tbody tr:nth-child(2n):hover{background:var(--rlt-row-hover-bg)}.rlt-sort-btn{align-items:center;background:transparent;border:1px solid var(--rlt-border-color);border-radius:3px;color:var(--rlt-sort-icon-color);cursor:pointer;display:inline-flex;justify-content:center;line-height:1;margin-left:6px;padding:2px 6px;transition:color .15s ease,border-color .15s ease;vertical-align:middle}.rlt-sort-btn:hover{border-color:var(--rlt-sort-active-color);color:var(--rlt-sort-active-color)}.rlt-sort-btn:focus-visible{outline:2px solid var(--rlt-search-focus-border);outline-offset:1px}.rlt-sort-icon{align-items:center;display:inline-flex;flex-direction:column;gap:1px}.rlt-sort-icon svg{fill:currentColor;height:10px;width:10px}.rlt-action-container{align-items:center;display:flex;gap:10px;justify-content:flex-end;padding:10px 0}.rlt-search-input{background:var(--rlt-search-bg);border:1px solid var(--rlt-search-border-color);border-radius:4px;font-family:var(--rlt-font-family);font-size:var(--rlt-font-size);min-width:200px;outline:none;padding:8px 12px;transition:border-color .15s ease}.rlt-search-input:focus{border-color:var(--rlt-search-focus-border);box-shadow:0 0 0 2px rgba(74,144,217,.2)}.rlt-column-controller{display:inline-block;position:relative}.rlt-btn-column-controller{align-items:center;background:transparent;border:1px solid var(--rlt-border-color);border-radius:4px;color:var(--rlt-sort-icon-color);cursor:pointer;display:inline-flex;justify-content:center;padding:7px 10px;transition:color .15s ease,border-color .15s ease}.rlt-btn-column-controller:hover{border-color:var(--rlt-sort-active-color);color:var(--rlt-sort-active-color)}.rlt-btn-column-controller:focus-visible{outline:2px solid var(--rlt-search-focus-border);outline-offset:1px}.rlt-controller-list{background:#fff;border:1px solid var(--rlt-border-color);border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.1);list-style:none;margin-top:4px;min-width:160px;padding:4px 0;position:absolute;right:0;top:100%;z-index:20}.rlt-controller-list li{align-items:center;cursor:pointer;display:flex;gap:8px;padding:6px 12px;transition:background .15s ease}.rlt-controller-list li:hover{background:var(--rlt-row-hover-bg)}.rlt-controller-list li label{cursor:pointer;user-select:none}.rlt-hide{display:none}.rlt-select-column{text-align:center;width:50px}.rlt-select-cell input[type=checkbox],.rlt-select-column input[type=checkbox]{cursor:pointer;height:16px;width:16px}.rlt-select-cell{text-align:center}.rlt-pagination{align-items:center;display:flex;flex-wrap:wrap;font-family:var(--rlt-font-family);font-size:var(--rlt-font-size);gap:16px;justify-content:space-between;padding:12px 0}.rlt-pagination-info{color:var(--rlt-empty-color)}.rlt-pagination-controls{align-items:center;display:flex;gap:4px}.rlt-pagination-btn{align-items:center;background:#fff;border:1px solid var(--rlt-border-color);border-radius:4px;color:var(--rlt-header-color);cursor:pointer;display:inline-flex;font-family:var(--rlt-font-family);font-size:var(--rlt-font-size);height:32px;justify-content:center;min-width:32px;padding:0 8px;transition:background .15s ease,border-color .15s ease}.rlt-pagination-btn:hover:not(:disabled){background:var(--rlt-pagination-hover-bg)}.rlt-pagination-btn:disabled{cursor:not-allowed;opacity:.4}.rlt-pagination-btn:focus-visible{outline:2px solid var(--rlt-search-focus-border);outline-offset:1px}.rlt-pagination-btn--active{border-color:var(--rlt-pagination-active-bg);color:var(--rlt-pagination-active-color)}.rlt-pagination-btn--active,.rlt-pagination-btn--active:hover{background:var(--rlt-pagination-active-bg)}.rlt-state-container{align-items:center;display:flex;font-family:var(--rlt-font-family);font-size:var(--rlt-font-size);justify-content:center;padding:40px 20px}.rlt-loading{color:var(--rlt-loading-color)}.rlt-error{color:var(--rlt-error-color)}.rlt-empty{color:var(--rlt-empty-color)}.rlt-spinner{animation:rlt-spin .6s linear infinite;border:2px solid var(--rlt-border-color);border-radius:50%;border-top-color:var(--rlt-loading-color);display:inline-block;height:20px;margin-right:8px;width:20px}@keyframes rlt-spin{to{transform:rotate(1turn)}}.rlt-header-content{align-items:center;display:inline-flex}.rlt-column-icon svg{fill:currentColor;height:16px;width:16px}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the first class name from a space-separated class string.
|
|
3
|
+
* Returns empty string if className is undefined/empty.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getDefaultClassName(className: string | undefined): string;
|
|
6
|
+
/**
|
|
7
|
+
* Safely convert a value to a comparable string.
|
|
8
|
+
* Handles null, undefined, objects, numbers, and strings.
|
|
9
|
+
*/
|
|
10
|
+
export declare function toComparableString(value: unknown): string;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a value is numeric.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isNumericValue(value: unknown): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get a value from an item by key, returning undefined if not found.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getItemValue<T extends Record<string, unknown>>(item: T, key: string): unknown;
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kedman1234/react-light-table",
|
|
3
|
+
"version": "2.0.3",
|
|
4
|
+
"description": "A lightweight, accessible, sortable, searchable, and selectable React table component for any dataset",
|
|
5
|
+
"author": "kedarvijaykulkarni",
|
|
6
|
+
"contributors": [
|
|
7
|
+
{
|
|
8
|
+
"name": "Kedar Vijay Kulkarni",
|
|
9
|
+
"url": "https://github.com/kedarvijaykulkarni"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"private": false,
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"module": "dist/index.esm.js",
|
|
16
|
+
"types": "dist/index.d.ts",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": [
|
|
23
|
+
"**/*.css"
|
|
24
|
+
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"react",
|
|
27
|
+
"table",
|
|
28
|
+
"data-table",
|
|
29
|
+
"sortable",
|
|
30
|
+
"searchable",
|
|
31
|
+
"selectable",
|
|
32
|
+
"pagination",
|
|
33
|
+
"accessible",
|
|
34
|
+
"lightweight",
|
|
35
|
+
"typescript",
|
|
36
|
+
"react-component",
|
|
37
|
+
"ui"
|
|
38
|
+
],
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/kedarvijaykulkarni/react-light-table.git"
|
|
42
|
+
},
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/kedarvijaykulkarni/react-light-table/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/kedarvijaykulkarni/react-light-table#readme",
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"react": ">=18.0.0",
|
|
49
|
+
"react-dom": ">=18.0.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
53
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
54
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
55
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
56
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
57
|
+
"@testing-library/react": "^16.3.2",
|
|
58
|
+
"@testing-library/user-event": "^14.6.1",
|
|
59
|
+
"@types/react": "^19.0.0",
|
|
60
|
+
"@types/react-dom": "^19.0.0",
|
|
61
|
+
"jsdom": "^26.1.0",
|
|
62
|
+
"react": "^19.2.5",
|
|
63
|
+
"react-dom": "^19.2.5",
|
|
64
|
+
"rollup": "^4.40.0",
|
|
65
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
66
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
67
|
+
"tslib": "^2.8.1",
|
|
68
|
+
"typescript": "^5.7.3",
|
|
69
|
+
"vite": "^6.3.2",
|
|
70
|
+
"vitest": "^3.1.1"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "rollup -c",
|
|
74
|
+
"test": "vitest run",
|
|
75
|
+
"test:watch": "vitest",
|
|
76
|
+
"test:coverage": "vitest run --coverage",
|
|
77
|
+
"dev": "vite demo",
|
|
78
|
+
"lint": "tsc --noEmit",
|
|
79
|
+
"prepublishOnly": "npm run lint && npm run test && npm run build",
|
|
80
|
+
"clean": "rimraf dist"
|
|
81
|
+
}
|
|
82
|
+
}
|