@rimelight/ui 0.0.51 → 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.
@@ -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-auto rounded-lg border border-default shadow-sm outline-primary/25 focus-visible:outline-3",
24
- base: "min-w-full overflow-clip border-collapse text-sm text-left",
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: "px-4 py-2 text-xs font-bold uppercase tracking-wider text-highlighted",
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-default z-10",
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])]:odd:bg-default [&>tr:not([data-slot=tr-group]):not([data-slot=tr-expanded])]:even:bg-muted/20"
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?: () => (e?: Event) => void
49
- getToggleSelectedHandler?: () => (e?: Event) => void
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?: "primary" | "secondary" | "success" | "info" | "warning" | "error" | "neutral"
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.