@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 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
+ [![npm version](https://img.shields.io/npm/v/react-light-table.svg)](https://www.npmjs.com/package/react-light-table)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](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,2 @@
1
+ export { default as Table } from './Table';
2
+ export type { TableProps, ColumnDef } from './Table.types';
@@ -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 {};
@@ -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":"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"}
@@ -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
+ }