@rimelight/ui 0.0.50 → 0.0.52
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/package.json +10 -8
- package/src/components/dropdown-menu/RLADropdownMenu.astro +258 -250
- package/src/components/dropdown-menu/RLSDropdownMenu.tsx +161 -140
- package/src/components/head/RLSHead.tsx +2 -7
- package/src/components/popover/RLAPopover.astro +1 -2
- package/src/components/select/RLASelect.astro +1 -1
- package/src/components/table/RLATable.astro +1692 -1044
- package/src/components/table/RLSTable.tsx +1239 -162
- package/src/components/table/table.theme.ts +20 -14
- package/src/components/table/table.ts +211 -43
- package/LICENSE +0 -21
|
@@ -17,32 +17,42 @@ export const tableTheme = defineTheme("table", {
|
|
|
17
17
|
"trGroup",
|
|
18
18
|
"tdGroup",
|
|
19
19
|
"trExpanded",
|
|
20
|
-
"tdExpanded"
|
|
20
|
+
"tdExpanded",
|
|
21
|
+
"toolbar",
|
|
22
|
+
"resizer",
|
|
23
|
+
"dragHandle"
|
|
21
24
|
],
|
|
22
25
|
base: {
|
|
23
|
-
root: "relative w-full overflow-
|
|
24
|
-
base: "min-w-full
|
|
26
|
+
root: "relative block w-full overflow-hidden rounded-lg border border-default shadow-sm outline-primary/25 focus-visible:outline-3",
|
|
27
|
+
base: "min-w-full w-full border-separate border-spacing-0 text-sm text-left",
|
|
25
28
|
caption: "sr-only p-4 text-xs text-muted text-center",
|
|
29
|
+
toolbar:
|
|
30
|
+
"flex items-center gap-3 px-3.5 py-3 border-b border-default bg-muted/20 overflow-x-auto",
|
|
26
31
|
thead:
|
|
27
32
|
"relative bg-muted/50 border-b border-default text-xs uppercase font-semibold text-muted",
|
|
28
33
|
tbody:
|
|
29
34
|
"divide-y divide-default/60 [&>tr]:data-[selectable=true]:hover:bg-muted/30 [&>tr]:data-[selectable=true]:cursor-pointer",
|
|
30
35
|
tfoot: "relative bg-muted/30 border-t border-default font-medium text-xs text-muted",
|
|
31
|
-
tr: "transition-colors data-[selected=true]:bg-primary/10 data-[expanded=true]:bg-muted/40",
|
|
32
|
-
th: "px-4 py-3.5 text-xs font-semibold text-muted text-left uppercase tracking-wider [&:has([role=checkbox])]:pe-0",
|
|
33
|
-
td: "p-4 text-sm text-highlighted align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0",
|
|
36
|
+
tr: "relative transition-colors data-[selected=true]:bg-primary/10 data-[expanded=true]:bg-muted/40 data-[drop-position=top]:after:absolute data-[drop-position=top]:after:inset-x-0 data-[drop-position=top]:after:top-0 data-[drop-position=top]:after:h-0.5 data-[drop-position=top]:after:bg-primary data-[drop-position=top]:after:z-30 data-[drop-position=bottom]:after:absolute data-[drop-position=bottom]:after:inset-x-0 data-[drop-position=bottom]:after:bottom-0 data-[drop-position=bottom]:after:h-0.5 data-[drop-position=bottom]:after:bg-primary data-[drop-position=bottom]:after:z-30",
|
|
37
|
+
th: "relative group/th px-4 py-3.5 text-xs font-semibold text-muted text-left uppercase tracking-wider border-b border-default [&:has([role=checkbox])]:pe-0 data-[drop-position=left]:after:absolute data-[drop-position=left]:after:inset-y-0 data-[drop-position=left]:after:start-0 data-[drop-position=left]:after:w-0.5 data-[drop-position=left]:after:bg-primary data-[drop-position=left]:after:z-30 data-[drop-position=right]:after:absolute data-[drop-position=right]:after:inset-y-0 data-[drop-position=right]:after:end-0 data-[drop-position=right]:after:w-0.5 data-[drop-position=right]:after:bg-primary data-[drop-position=right]:after:z-30",
|
|
38
|
+
td: "p-4 text-sm text-highlighted align-middle whitespace-nowrap border-b border-default/40 [&:has([role=checkbox])]:pe-0",
|
|
34
39
|
separator: "absolute z-10 start-0 w-full h-px bg-neutral-200",
|
|
35
40
|
empty: "py-8 text-center text-sm text-muted",
|
|
36
41
|
loading: "py-8 text-center text-sm text-muted",
|
|
37
42
|
trGroup: "bg-muted/40",
|
|
38
|
-
tdGroup:
|
|
43
|
+
tdGroup:
|
|
44
|
+
"px-4 py-2 text-xs font-bold uppercase tracking-wider text-highlighted border-b border-default",
|
|
39
45
|
trExpanded: "bg-muted/20 border-b border-default",
|
|
40
|
-
tdExpanded: "p-4"
|
|
46
|
+
tdExpanded: "p-4 border-b border-default",
|
|
47
|
+
resizer:
|
|
48
|
+
"absolute top-0 end-0 h-full w-1.5 cursor-col-resize select-none touch-none hover:bg-primary/50 transition-colors opacity-0 group-hover/th:opacity-60",
|
|
49
|
+
dragHandle:
|
|
50
|
+
"inline-flex items-center justify-center cursor-grab active:cursor-grabbing text-muted/50 hover:text-highlighted touch-none select-none p-1 rounded hover:bg-muted/40 transition-colors"
|
|
41
51
|
},
|
|
42
52
|
variants: {
|
|
43
53
|
pinned: {
|
|
44
54
|
true: {
|
|
45
|
-
th: "sticky bg-
|
|
55
|
+
th: "sticky bg-muted z-10",
|
|
46
56
|
td: "sticky bg-default z-10"
|
|
47
57
|
}
|
|
48
58
|
},
|
|
@@ -72,7 +82,7 @@ export const tableTheme = defineTheme("table", {
|
|
|
72
82
|
striped: {
|
|
73
83
|
true: {
|
|
74
84
|
tbody:
|
|
75
|
-
"[&>tr:not([data-slot=tr-group]):not([data-slot=tr-expanded])]:
|
|
85
|
+
"[&>tr:nth-child(even):not([data-slot=tr-group]):not([data-slot=tr-expanded])]:bg-muted/25 [&>tr:nth-child(even):not([data-slot=tr-group]):not([data-slot=tr-expanded])>td]:bg-muted/25"
|
|
76
86
|
}
|
|
77
87
|
},
|
|
78
88
|
hoverable: {
|
|
@@ -114,25 +124,21 @@ export const tableTheme = defineTheme("table", {
|
|
|
114
124
|
{ loading: true, loadingColor: "error", classNames: { thead: "after:bg-destructive" } },
|
|
115
125
|
{ loading: true, loadingColor: "neutral", classNames: { thead: "after:bg-muted" } },
|
|
116
126
|
// Loading animation variants
|
|
117
|
-
// carousel: left-to-right sweep (keyframe: @keyframes carousel { 0%{transform:translateX(-100%)} 100%{transform:translateX(400%)} })
|
|
118
127
|
{
|
|
119
128
|
loading: true,
|
|
120
129
|
loadingAnimation: "carousel",
|
|
121
130
|
classNames: { thead: "motion-safe:after:animate-[carousel_2s_linear_infinite]" }
|
|
122
131
|
},
|
|
123
|
-
// carousel-inverse: right-to-left sweep
|
|
124
132
|
{
|
|
125
133
|
loading: true,
|
|
126
134
|
loadingAnimation: "carousel-inverse",
|
|
127
135
|
classNames: { thead: "motion-safe:after:animate-[carousel-inverse_2s_linear_infinite]" }
|
|
128
136
|
},
|
|
129
|
-
// swing: pendulum back-and-forth
|
|
130
137
|
{
|
|
131
138
|
loading: true,
|
|
132
139
|
loadingAnimation: "swing",
|
|
133
140
|
classNames: { thead: "motion-safe:after:animate-[swing_2s_ease-in-out_infinite]" }
|
|
134
141
|
},
|
|
135
|
-
// elastic: springy bounce
|
|
136
142
|
{
|
|
137
143
|
loading: true,
|
|
138
144
|
loadingAnimation: "elastic",
|
|
@@ -16,14 +16,48 @@ export interface TableColumnMeta {
|
|
|
16
16
|
[key: string]: any
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export type TableAggregationFn<T = any> =
|
|
20
|
+
| "count"
|
|
21
|
+
| "sum"
|
|
22
|
+
| "min"
|
|
23
|
+
| "max"
|
|
24
|
+
| "extent"
|
|
25
|
+
| "mean"
|
|
26
|
+
| "median"
|
|
27
|
+
| "unique"
|
|
28
|
+
| "uniqueCount"
|
|
29
|
+
| ((values: any[], rows: TableRow<T>[]) => any)
|
|
30
|
+
|
|
31
|
+
import type { DropdownMenuItem } from "../dropdown-menu/dropdown-menu"
|
|
32
|
+
|
|
19
33
|
export interface TableColumn<T = any> {
|
|
20
34
|
id?: string
|
|
21
35
|
accessorKey?: keyof T | string
|
|
36
|
+
accessorFn?: (row: T) => any
|
|
22
37
|
header?: string | ((props: { column: TableColumn<T>; table: any }) => any)
|
|
23
38
|
cell?: (props: {
|
|
24
39
|
row: TableRow<T>
|
|
25
40
|
getValue: () => any
|
|
26
41
|
renderValue: () => any
|
|
42
|
+
isEditing?: () => boolean
|
|
43
|
+
setEditing?: (editing: boolean) => void
|
|
44
|
+
column: TableColumn<T>
|
|
45
|
+
table: any
|
|
46
|
+
}) => any
|
|
47
|
+
actions?:
|
|
48
|
+
| ((row: TableRow<T>) => DropdownMenuItem[] | DropdownMenuItem[][])
|
|
49
|
+
| DropdownMenuItem[]
|
|
50
|
+
| DropdownMenuItem[][]
|
|
51
|
+
items?:
|
|
52
|
+
| ((row: TableRow<T>) => DropdownMenuItem[] | DropdownMenuItem[][])
|
|
53
|
+
| DropdownMenuItem[]
|
|
54
|
+
| DropdownMenuItem[][]
|
|
55
|
+
aggregatedCell?: (props: {
|
|
56
|
+
row: TableRow<T>
|
|
57
|
+
getValue: () => any
|
|
58
|
+
renderValue: () => any
|
|
59
|
+
isEditing?: () => boolean
|
|
60
|
+
setEditing?: (editing: boolean) => void
|
|
27
61
|
column: TableColumn<T>
|
|
28
62
|
table: any
|
|
29
63
|
}) => any
|
|
@@ -31,7 +65,11 @@ export interface TableColumn<T = any> {
|
|
|
31
65
|
meta?: TableColumnMeta
|
|
32
66
|
enableSorting?: boolean
|
|
33
67
|
enableHiding?: boolean
|
|
68
|
+
enablePinning?: boolean
|
|
69
|
+
aggregationFn?: TableAggregationFn<T>
|
|
34
70
|
size?: number | string
|
|
71
|
+
minSize?: number | string
|
|
72
|
+
maxSize?: number | string
|
|
35
73
|
[key: string]: any
|
|
36
74
|
}
|
|
37
75
|
|
|
@@ -40,13 +78,16 @@ export interface TableRow<T = any> {
|
|
|
40
78
|
original: T
|
|
41
79
|
index: number
|
|
42
80
|
depth: number
|
|
81
|
+
groupingColumnId?: string
|
|
82
|
+
groupingValue?: any
|
|
43
83
|
getValue: (key: string) => any
|
|
44
84
|
getIsSelected: () => boolean
|
|
85
|
+
getIsSomeSelected: () => boolean
|
|
45
86
|
toggleSelected: (value?: boolean) => void
|
|
46
87
|
getIsExpanded: () => boolean
|
|
47
88
|
toggleExpanded: (value?: boolean) => void
|
|
48
|
-
getToggleExpandedHandler
|
|
49
|
-
getToggleSelectedHandler
|
|
89
|
+
getToggleExpandedHandler: () => (e?: Event) => void
|
|
90
|
+
getToggleSelectedHandler: () => (e?: Event) => void
|
|
50
91
|
getIsPinned: () => boolean | "top" | "bottom"
|
|
51
92
|
pin: (position: boolean | "top" | "bottom") => void
|
|
52
93
|
getIsGrouped: () => boolean
|
|
@@ -59,6 +100,7 @@ export interface TableGroup<T = any> {
|
|
|
59
100
|
id: string
|
|
60
101
|
columnId: string
|
|
61
102
|
value: any
|
|
103
|
+
depth?: number
|
|
62
104
|
rows: TableRow<T>[]
|
|
63
105
|
}
|
|
64
106
|
|
|
@@ -96,21 +138,47 @@ export interface TableColumnPinningState {
|
|
|
96
138
|
right?: string[]
|
|
97
139
|
}
|
|
98
140
|
|
|
141
|
+
export type TableColumnSizingState = Record<string, number>
|
|
142
|
+
export type TableColumnOrderState = string[]
|
|
143
|
+
export type TableEditingCellState = { rowId: string; columnId: string } | null
|
|
144
|
+
|
|
145
|
+
export interface TableExportOptions {
|
|
146
|
+
filename?: string
|
|
147
|
+
selectedOnly?: boolean
|
|
148
|
+
columns?: string[]
|
|
149
|
+
}
|
|
150
|
+
|
|
99
151
|
export interface TablePaginationState {
|
|
100
152
|
pageIndex: number
|
|
101
153
|
pageSize: number
|
|
102
154
|
}
|
|
103
155
|
|
|
156
|
+
export interface TableVirtualizeOptions {
|
|
157
|
+
estimateSize?: number | ((index: number) => number)
|
|
158
|
+
overscan?: number
|
|
159
|
+
scrollMargin?: number
|
|
160
|
+
getScrollElement?: () => HTMLElement | null
|
|
161
|
+
}
|
|
162
|
+
|
|
104
163
|
/**
|
|
105
164
|
* Imperative API exposed by RLATable (on the custom element) and RLSTable (via ref callback).
|
|
106
165
|
*/
|
|
107
166
|
export interface TableApi<T = any> {
|
|
108
167
|
tableRef: HTMLTableElement | null
|
|
109
168
|
getFilteredRows(): TableRow<T>[]
|
|
169
|
+
getFlatRows(): TableRow<T>[]
|
|
110
170
|
getSortedRows(): TableRow<T>[]
|
|
111
171
|
getSelectedRows(): TableRow<T>[]
|
|
172
|
+
getFilteredSelectedRowModel(): { rows: TableRow<T>[]; flatRows: TableRow<T>[] }
|
|
173
|
+
getFilteredRowModel(): { rows: TableRow<T>[]; flatRows: TableRow<T>[] }
|
|
112
174
|
getAllColumns(): TableColumn<T>[]
|
|
113
175
|
getColumn(id: string): TableColumn<T> | undefined
|
|
176
|
+
getIsAllRowsSelected(): boolean
|
|
177
|
+
getIsSomeRowsSelected(): boolean
|
|
178
|
+
toggleAllRowsSelected(selected?: boolean): void
|
|
179
|
+
getIsAllPageRowsSelected(): boolean
|
|
180
|
+
getIsSomePageRowsSelected(): boolean
|
|
181
|
+
toggleAllPageRowsSelected(selected?: boolean): void
|
|
114
182
|
setGlobalFilter(value: string): void
|
|
115
183
|
setColumnFilter(id: string, value: any): void
|
|
116
184
|
setColumnVisibility(id: string, visible: boolean): void
|
|
@@ -118,16 +186,35 @@ export interface TableApi<T = any> {
|
|
|
118
186
|
setRowPinning(pinning: TableRowPinningState): void
|
|
119
187
|
setSorting(state: SortingState): void
|
|
120
188
|
setPagination(state: TablePaginationState): void
|
|
189
|
+
setPageIndex(pageIndex: number): void
|
|
190
|
+
setPageSize(pageSize: number): void
|
|
191
|
+
// Resizing & Ordering
|
|
192
|
+
setColumnSizing(id: string, size: number): void
|
|
193
|
+
resetColumnSizing(): void
|
|
194
|
+
setColumnOrder(order: TableColumnOrderState): void
|
|
195
|
+
resetColumnOrder(): void
|
|
196
|
+
// Exporting
|
|
197
|
+
exportToCsv(options?: TableExportOptions): string
|
|
198
|
+
exportToJson(options?: TableExportOptions): string
|
|
199
|
+
// Faceted statistics
|
|
200
|
+
getFacetedUniqueValues(columnId: string): Map<any, number>
|
|
201
|
+
getFacetedMinMaxValues(columnId: string): [number, number] | undefined
|
|
202
|
+
// Inline editing support
|
|
203
|
+
setEditingCell(cell: TableEditingCellState): void
|
|
204
|
+
getEditingCell(): TableEditingCellState
|
|
121
205
|
getState(): {
|
|
122
206
|
sorting: SortingState
|
|
123
207
|
globalFilter: string
|
|
124
208
|
columnFilters: ColumnFiltersState
|
|
125
209
|
columnVisibility: Record<string, boolean>
|
|
126
210
|
columnPinning: TableColumnPinningState
|
|
211
|
+
columnSizing: TableColumnSizingState
|
|
212
|
+
columnOrder: TableColumnOrderState
|
|
127
213
|
rowSelection: Record<string, boolean>
|
|
128
214
|
expanded: Record<string, boolean>
|
|
129
215
|
rowPinning: TableRowPinningState
|
|
130
216
|
pagination: TablePaginationState
|
|
217
|
+
editingCell: TableEditingCellState
|
|
131
218
|
}
|
|
132
219
|
}
|
|
133
220
|
|
|
@@ -135,140 +222,221 @@ export interface TableProps<T = any> {
|
|
|
135
222
|
/**
|
|
136
223
|
* Data rows. Auto-infers columns from the first row's keys when `columns` is omitted.
|
|
137
224
|
*/
|
|
138
|
-
data?: T[]
|
|
225
|
+
data?: T[] | undefined
|
|
139
226
|
/**
|
|
140
227
|
* Column definitions.
|
|
141
228
|
*/
|
|
142
|
-
columns?: TableColumn<T>[]
|
|
229
|
+
columns?: TableColumn<T>[] | undefined
|
|
143
230
|
/**
|
|
144
|
-
* Accessible table caption (visually hidden).
|
|
231
|
+
* Accessible table caption (visually hidden or styled).
|
|
145
232
|
*/
|
|
146
|
-
caption?: string
|
|
233
|
+
caption?: string | undefined
|
|
147
234
|
/**
|
|
148
235
|
* Table-level metadata, e.g. a per-row `class.tr` function.
|
|
149
236
|
*/
|
|
150
|
-
meta?: TableMeta<T>
|
|
237
|
+
meta?: TableMeta<T> | undefined
|
|
151
238
|
/**
|
|
152
239
|
* Stick the header, footer, or both when the table scrolls.
|
|
153
240
|
*/
|
|
154
|
-
sticky?: boolean | "header" | "footer"
|
|
241
|
+
sticky?: boolean | "header" | "footer" | undefined
|
|
242
|
+
/**
|
|
243
|
+
* Enable virtualization for large datasets.
|
|
244
|
+
*/
|
|
245
|
+
virtualize?: boolean | TableVirtualizeOptions | undefined
|
|
155
246
|
/**
|
|
156
247
|
* Show a loading progress bar.
|
|
157
248
|
*/
|
|
158
|
-
loading?: boolean
|
|
249
|
+
loading?: boolean | undefined
|
|
159
250
|
/**
|
|
160
251
|
* Color of the loading bar. @default 'primary'
|
|
161
252
|
*/
|
|
162
|
-
loadingColor?:
|
|
253
|
+
loadingColor?:
|
|
254
|
+
| "primary"
|
|
255
|
+
| "secondary"
|
|
256
|
+
| "success"
|
|
257
|
+
| "info"
|
|
258
|
+
| "warning"
|
|
259
|
+
| "error"
|
|
260
|
+
| "neutral"
|
|
261
|
+
| undefined
|
|
163
262
|
/**
|
|
164
263
|
* Animation of the loading bar. @default 'carousel'
|
|
165
264
|
*/
|
|
166
|
-
loadingAnimation?: "carousel" | "carousel-inverse" | "swing" | "elastic"
|
|
265
|
+
loadingAnimation?: "carousel" | "carousel-inverse" | "swing" | "elastic" | undefined
|
|
167
266
|
/**
|
|
168
267
|
* Empty-state text. @default 'No data available'
|
|
169
268
|
*/
|
|
170
|
-
empty?: string
|
|
269
|
+
empty?: string | undefined
|
|
171
270
|
/**
|
|
172
271
|
* Alternate row background colors.
|
|
173
272
|
*/
|
|
174
|
-
striped?: boolean
|
|
273
|
+
striped?: boolean | undefined
|
|
175
274
|
/**
|
|
176
275
|
* Show borders on every cell.
|
|
177
276
|
*/
|
|
178
|
-
bordered?: boolean
|
|
277
|
+
bordered?: boolean | undefined
|
|
179
278
|
/**
|
|
180
279
|
* Highlight row on hover.
|
|
181
280
|
*/
|
|
182
|
-
hoverable?: boolean
|
|
281
|
+
hoverable?: boolean | undefined
|
|
183
282
|
/**
|
|
184
283
|
* Global text filter across all columns.
|
|
185
284
|
*/
|
|
186
|
-
globalFilter?: string
|
|
285
|
+
globalFilter?: string | undefined
|
|
187
286
|
/**
|
|
188
287
|
* Per-column filter state.
|
|
189
288
|
*/
|
|
190
|
-
columnFilters?: ColumnFiltersState
|
|
289
|
+
columnFilters?: ColumnFiltersState | undefined
|
|
191
290
|
/**
|
|
192
291
|
* Column visibility map — `{ [columnId]: boolean }`.
|
|
193
292
|
*/
|
|
194
|
-
columnVisibility?: Record<string, boolean>
|
|
293
|
+
columnVisibility?: Record<string, boolean> | undefined
|
|
195
294
|
/**
|
|
196
295
|
* Sticky column pinning — `{ left?: string[], right?: string[] }`.
|
|
197
296
|
*/
|
|
198
|
-
columnPinning?: TableColumnPinningState
|
|
297
|
+
columnPinning?: TableColumnPinningState | undefined
|
|
199
298
|
/**
|
|
200
299
|
* Active sort state.
|
|
201
300
|
*/
|
|
202
|
-
sorting?: SortingState
|
|
301
|
+
sorting?: SortingState | undefined
|
|
203
302
|
/**
|
|
204
303
|
* Column IDs to group rows by (first entry is used).
|
|
205
304
|
*/
|
|
206
|
-
grouping?: string[]
|
|
305
|
+
grouping?: string[] | undefined
|
|
207
306
|
/**
|
|
208
307
|
* Row pinning — `{ top?: string[], bottom?: string[] }`.
|
|
209
308
|
*/
|
|
210
|
-
rowPinning?: TableRowPinningState
|
|
309
|
+
rowPinning?: TableRowPinningState | undefined
|
|
211
310
|
/**
|
|
212
311
|
* Row selection map — `{ [rowId]: boolean }`.
|
|
213
312
|
*/
|
|
214
|
-
rowSelection?: Record<string, boolean>
|
|
313
|
+
rowSelection?: Record<string, boolean> | undefined
|
|
215
314
|
/**
|
|
216
315
|
* Expanded rows map — `{ [rowId]: boolean }`.
|
|
217
316
|
*/
|
|
218
|
-
expanded?: Record<string, boolean>
|
|
317
|
+
expanded?: Record<string, boolean> | undefined
|
|
219
318
|
/**
|
|
220
319
|
* Pagination state.
|
|
221
320
|
*/
|
|
222
|
-
pagination?: TablePaginationState
|
|
321
|
+
pagination?: TablePaginationState | undefined
|
|
223
322
|
/**
|
|
224
323
|
* Extract sub-rows for tree/hierarchical data.
|
|
225
324
|
*/
|
|
226
|
-
getSubRows?: (row: T, index: number) => T[] | undefined
|
|
325
|
+
getSubRows?: ((row: T, index: number) => T[] | undefined) | undefined
|
|
326
|
+
/**
|
|
327
|
+
* Custom predicate to determine whether a row can be expanded. Defaults to checking if subRows
|
|
328
|
+
* exist.
|
|
329
|
+
*/
|
|
330
|
+
getRowCanExpand?: ((row: TableRow<T>) => boolean) | undefined
|
|
227
331
|
/**
|
|
228
332
|
* Custom row ID extractor. Defaults to `row.id ?? String(index)`.
|
|
229
333
|
*/
|
|
230
|
-
getRowId?: (row: T, index: number) => string
|
|
334
|
+
getRowId?: ((row: T, index: number) => string) | undefined
|
|
231
335
|
/**
|
|
232
336
|
* Called when a data row is clicked (skips clicks on interactive elements).
|
|
233
337
|
*/
|
|
234
|
-
onSelect?: (e: Event, row: TableRow<T>) => void
|
|
338
|
+
onSelect?: ((e: Event, row: TableRow<T>) => void) | undefined
|
|
235
339
|
/**
|
|
236
340
|
* Called when the pointer enters or leaves a row (`null` on leave).
|
|
237
341
|
*/
|
|
238
|
-
onHover?: (e: Event, row: TableRow<T> | null) => void
|
|
342
|
+
onHover?: ((e: Event, row: TableRow<T> | null) => void) | undefined
|
|
239
343
|
/**
|
|
240
344
|
* Called on row right-click.
|
|
241
345
|
*/
|
|
242
|
-
onContextmenu?: (e: Event, row: TableRow<T>) => void
|
|
346
|
+
onContextmenu?: ((e: Event, row: TableRow<T>) => void) | undefined
|
|
243
347
|
// Controlled-mode callbacks — provide these to take ownership of state externally
|
|
244
|
-
onSortingChange?: (state: SortingState) => void
|
|
245
|
-
onColumnFiltersChange?: (state: ColumnFiltersState) => void
|
|
246
|
-
onGlobalFilterChange?: (value: string) => void
|
|
247
|
-
onColumnVisibilityChange?: (state: Record<string, boolean>) => void
|
|
248
|
-
onColumnPinningChange?: (state: TableColumnPinningState) => void
|
|
249
|
-
onRowSelectionChange?: (state: Record<string, boolean>) => void
|
|
250
|
-
onExpandedChange?: (state: Record<string, boolean>) => void
|
|
251
|
-
onRowPinningChange?: (state: TableRowPinningState) => void
|
|
252
|
-
onPaginationChange?: (state: TablePaginationState) => void
|
|
348
|
+
onSortingChange?: ((state: SortingState) => void) | undefined
|
|
349
|
+
onColumnFiltersChange?: ((state: ColumnFiltersState) => void) | undefined
|
|
350
|
+
onGlobalFilterChange?: ((value: string) => void) | undefined
|
|
351
|
+
onColumnVisibilityChange?: ((state: Record<string, boolean>) => void) | undefined
|
|
352
|
+
onColumnPinningChange?: ((state: TableColumnPinningState) => void) | undefined
|
|
353
|
+
onRowSelectionChange?: ((state: Record<string, boolean>) => void) | undefined
|
|
354
|
+
onExpandedChange?: ((state: Record<string, boolean>) => void) | undefined
|
|
355
|
+
onRowPinningChange?: ((state: TableRowPinningState) => void) | undefined
|
|
356
|
+
onPaginationChange?: ((state: TablePaginationState) => void) | undefined
|
|
357
|
+
/**
|
|
358
|
+
* Enable interactive drag resizing for columns.
|
|
359
|
+
*/
|
|
360
|
+
enableColumnResizing?: boolean | undefined
|
|
361
|
+
/**
|
|
362
|
+
* Column resize mode: "onChange" updates dynamically during drag, "onEnd" updates when mouse is
|
|
363
|
+
* released. @default 'onChange'
|
|
364
|
+
*/
|
|
365
|
+
columnResizeMode?: "onChange" | "onEnd" | undefined
|
|
366
|
+
/**
|
|
367
|
+
* Controlled column sizing state — `{ [columnId]: widthInPixels }`.
|
|
368
|
+
*/
|
|
369
|
+
columnSizing?: TableColumnSizingState | undefined
|
|
370
|
+
onColumnSizingChange?: ((state: TableColumnSizingState) => void) | undefined
|
|
371
|
+
/**
|
|
372
|
+
* Enable drag-and-drop column reordering.
|
|
373
|
+
*/
|
|
374
|
+
enableColumnReordering?: boolean | undefined
|
|
375
|
+
/**
|
|
376
|
+
* Controlled column order state — `[columnId1, columnId2, ...]`.
|
|
377
|
+
*/
|
|
378
|
+
columnOrder?: TableColumnOrderState | undefined
|
|
379
|
+
onColumnOrderChange?: ((state: TableColumnOrderState) => void) | undefined
|
|
380
|
+
/**
|
|
381
|
+
* Enable drag-and-drop row reordering.
|
|
382
|
+
*/
|
|
383
|
+
enableRowReordering?: boolean | undefined
|
|
384
|
+
/**
|
|
385
|
+
* Called when a row is reordered via drag-and-drop.
|
|
386
|
+
*/
|
|
387
|
+
onRowReorder?: ((newOrder: T[], fromIndex: number, toIndex: number) => void) | undefined
|
|
388
|
+
/**
|
|
389
|
+
* Active cell being edited — `{ rowId: string, columnId: string } | null`.
|
|
390
|
+
*/
|
|
391
|
+
editingCell?: TableEditingCellState | undefined
|
|
392
|
+
onEditingCellChange?: ((cell: TableEditingCellState) => void) | undefined
|
|
253
393
|
/**
|
|
254
394
|
* Render a built-in search input in the toolbar.
|
|
255
395
|
*/
|
|
256
|
-
searchable?: boolean
|
|
396
|
+
searchable?: boolean | undefined
|
|
257
397
|
/**
|
|
258
398
|
* Placeholder for the built-in search input. @default 'Filter table...'
|
|
259
399
|
*/
|
|
260
|
-
searchPlaceholder?: string
|
|
400
|
+
searchPlaceholder?: string | undefined
|
|
261
401
|
/**
|
|
262
402
|
* Render a column-visibility dropdown in the toolbar.
|
|
263
403
|
*/
|
|
264
|
-
showColumnsToggle?: boolean
|
|
404
|
+
showColumnsToggle?: boolean | undefined
|
|
405
|
+
/**
|
|
406
|
+
* Render an export dropdown (CSV, JSON) in the toolbar. @default false
|
|
407
|
+
*/
|
|
408
|
+
exportable?: boolean | undefined
|
|
409
|
+
/**
|
|
410
|
+
* Default filename prefix for exported files. @default 'export'
|
|
411
|
+
*/
|
|
412
|
+
exportFilename?: string | undefined
|
|
413
|
+
/**
|
|
414
|
+
* Row actions dropdown definition. Generates an Actions column automatically.
|
|
415
|
+
*/
|
|
416
|
+
actions?:
|
|
417
|
+
| ((row: TableRow<T>) => DropdownMenuItem[] | DropdownMenuItem[][])
|
|
418
|
+
| DropdownMenuItem[]
|
|
419
|
+
| DropdownMenuItem[][]
|
|
420
|
+
| undefined
|
|
421
|
+
/**
|
|
422
|
+
* Alias for actions.
|
|
423
|
+
*/
|
|
424
|
+
rowActions?:
|
|
425
|
+
| ((row: TableRow<T>) => DropdownMenuItem[] | DropdownMenuItem[][])
|
|
426
|
+
| DropdownMenuItem[]
|
|
427
|
+
| DropdownMenuItem[][]
|
|
428
|
+
| undefined
|
|
265
429
|
/**
|
|
266
430
|
* Per-slot class overrides.
|
|
267
431
|
*/
|
|
268
|
-
ui?: Partial<Record<string, string>>
|
|
432
|
+
ui?: Partial<Record<string, string>> | undefined
|
|
269
433
|
/**
|
|
270
434
|
* Additional classes on the root element.
|
|
271
435
|
*/
|
|
272
436
|
class?: any
|
|
437
|
+
/**
|
|
438
|
+
* Solid slot overrides dictionary (e.g. { "name-cell": ({ row }) => ... })
|
|
439
|
+
*/
|
|
440
|
+
slots?: Record<string, (props: any) => any> | undefined
|
|
273
441
|
[key: string]: unknown
|
|
274
442
|
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Rimelight Entertainment
|
|
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.
|