react-glide-table 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,22 +1,41 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement } from 'react';
3
- import { ColumnDef, RowSelectionState, Updater, Row } from '@tanstack/react-table';
2
+ import { ReactNode, ComponentType, RefObject } from 'react';
3
+ import { ColumnDef, RowSelectionState, Updater, Row, Table } from '@tanstack/react-table';
4
4
  export { ColumnDef, RowSelectionState } from '@tanstack/react-table';
5
+ import { Virtualizer, VirtualItem } from '@tanstack/react-virtual';
6
+
7
+ type DataTableLabels = {
8
+ empty: string;
9
+ loading: string;
10
+ selection: (selectedCount: number) => ReactNode;
11
+ expandRow: string;
12
+ collapseRow: string;
13
+ };
14
+ /** Default copy. Override via the `labels` option. */
15
+ declare const DEFAULT_DATA_TABLE_LABELS: DataTableLabels;
16
+ declare function resolveDataTableLabels(partial?: Partial<DataTableLabels>): DataTableLabels;
17
+
18
+ /** Neutral default field names for tree conversion */
19
+ declare const DEFAULT_TREE_ID_FIELD = "id";
20
+ declare const DEFAULT_TREE_PARENT_ID_FIELD = "parentId";
21
+ declare const DEFAULT_TREE_CHILDREN_FIELD = "children";
22
+ declare const DEFAULT_TREE_QTY_FIELD = "qty";
5
23
 
6
24
  type RowSelectionMode = "none" | "single" | "multi";
7
25
  type CellEditType = "text" | "number";
26
+
8
27
  declare module "@tanstack/react-table" {
9
28
  interface ColumnMeta<TData, TValue> {
10
- /** 세로 병합 대상 컬럼 여부 */
29
+ /** Whether this column participates in vertical row spanning */
11
30
  rowSpan?: boolean;
12
- /** 병합 기준 필드. 미지정 컬럼 id 사용 */
31
+ /** Merge key field. Falls back to the column id when omitted */
13
32
  rowSpanKey?: string;
14
33
  align?: "left" | "center" | "right";
15
34
  className?: string;
16
35
  headerClassName?: string;
17
- /** true 더블클릭으로 인라인 편집 가능 */
36
+ /** When true, double-click starts inline editing */
18
37
  editable?: boolean;
19
- /** 편집 입력 타입. 기본 text */
38
+ /** Inline editor input type. Defaults to text */
20
39
  editType?: CellEditType;
21
40
  }
22
41
  }
@@ -26,56 +45,116 @@ type DataTableProps<T extends Record<string, unknown>> = {
26
45
  rowSelectionMode?: RowSelectionMode;
27
46
  rowSelection?: RowSelectionState;
28
47
  onRowSelectionChange?: (updater: Updater<RowSelectionState>) => void;
29
- /** 전체 건수 (검색 전) */
48
+ /** Total row count before filtering */
30
49
  totalCount?: number;
31
- /** 현재 표시 건수 (검색 후) */
50
+ /** Visible row count after filtering */
32
51
  filteredCount?: number;
33
- /** 좌측 요약 영역 (예: 총 생산수량) */
52
+ /** Left-side summary slot */
34
53
  summary?: ReactNode;
35
- /** 우측 액션 슬롯 (Excel, 삭제, 작업전송 등) */
54
+ /** Right-side action slot */
36
55
  toolbar?: ReactNode;
37
- /** 선택 문구 커스터마이즈. 미지정 시 기본 "N개 선택됨" */
56
+ /**
57
+ * UI copy overrides.
58
+ * Takes precedence over `emptyText` / `selectionLabel`.
59
+ */
60
+ labels?: Partial<DataTableLabels>;
61
+ /** @deprecated Prefer `labels.selection` */
38
62
  selectionLabel?: (selectedCount: number) => ReactNode;
39
63
  isPending?: boolean;
64
+ /** @deprecated Prefer `labels.empty` */
40
65
  emptyText?: string;
66
+ /** @deprecated Prefer `labels.loading` */
67
+ loadingText?: string;
41
68
  enableRowSpan?: boolean;
42
69
  getRowId?: (row: T, index: number) => string;
43
70
  onRowClick?: (row: T, index: number) => void;
44
71
  preserveRowSelection?: boolean;
45
72
  getRowClassName?: (row: T, index: number) => string | undefined;
46
- /** false 반환하면 해당 행은 선택할 없음 ( 클릭·체크박스 모두 적용) */
73
+ /** Return false to make the row unselectable (row click and checkbox) */
47
74
  getRowCanSelect?: (row: T, index: number) => boolean;
48
- /** false 클릭으로 선택 토글하지 않음 (체크박스 컬럼만 선택할 때) */
75
+ /** When false, row click does not toggle selection (checkbox-only) */
49
76
  selectOnRowClick?: boolean;
50
- /** 셀 편집·채우기 핸들 완료 시 데이터 갱신 콜백 */
77
+ /**
78
+ * Enable cell drag selection and fill handle. Defaults to true.
79
+ * When false, browser text selection is allowed and cell selection UI is off.
80
+ */
81
+ enableCellSelection?: boolean;
82
+ /**
83
+ * @deprecated Combining with paged/tree-transformed data can corrupt the source.
84
+ * Prefer onCellChange / onBatchChange.
85
+ */
51
86
  onDataChange?: (data: T[]) => void;
87
+ /** Single-cell change (edit commit). Takes precedence over onDataChange */
88
+ onCellChange?: (rowId: string, columnId: string, value: unknown) => void;
89
+ /** Multi-cell change (fill handle, etc.). Takes precedence over onDataChange */
90
+ onBatchChange?: (changes: Array<{
91
+ rowId: string;
92
+ columnId: string;
93
+ value: unknown;
94
+ }>) => void;
52
95
  className?: string;
53
- /** 확장 필드. 지정 트리 변환·로우 확장 UI 활성화 (예: materialCode) */
96
+ /** Expand key field. Enables tree conversion / expand UI when set. Default `id` */
54
97
  toggleField?: string;
55
- /** 자식부모 참조 필드 (기본: assemblyCode) */
98
+ /** Childparent reference field. Default `parentId` */
56
99
  childField?: string;
57
- /** 중첩 자식 배열 필드 (기본: assemblyMaterials) */
100
+ /** Nested children array field. Default `children` */
58
101
  flattenField?: string;
59
- /** 펼쳐진 Set (controlled) */
102
+ /** Parent quantity field used for parentCount. Default `qty` */
103
+ qtyField?: string;
104
+ /** Expanded row key set (controlled) */
60
105
  expandedRows?: Set<string>;
61
106
  onExpandedRowsChange?: (next: Set<string>) => void;
62
- /** true 토글 비활성(자식 항상 표시) */
107
+ /** When true, expand is disabled (children always visible) */
63
108
  preventExpand?: boolean;
64
109
  /**
65
- * 가상화 활성화. 기본 true.
66
- * enableRowSpan이 true면 병합 유지를 위해 가상화를 강제 비활성화합니다.
67
- * (HTML table + spacer 방식 유지, absolute/translateY 미사용)
110
+ * Enable row virtualization. Defaults to true.
111
+ * Forced off when enableRowSpan is true to preserve merges
112
+ * (HTML table + spacer rows; no absolute/translateY positioning).
68
113
  */
69
114
  enableVirtualization?: boolean;
70
- /** 가상화 예상 높이(px). 기본 44. 실측은 measureElement 보정 */
115
+ /** Estimated virtual row height in px. Default 44; refined via measureElement */
71
116
  estimateRowHeight?: number;
72
- /** 가상화 overscan 수. 기본 8 */
117
+ /** Virtualization overscan row count. Default 8 */
73
118
  virtualOverscan?: number;
119
+ /**
120
+ * Optional UI part replacements for the reference DataTable renderer.
121
+ * Works with the playground `createTable` / `Table.Column` API.
122
+ */
123
+ slots?: DataTableSlots<T>;
124
+ };
125
+ type DataTableToolbarSlotProps = {
126
+ filteredCount?: number;
127
+ totalCount?: number;
128
+ summary?: ReactNode;
129
+ selectedCount: number;
130
+ selectionLabel?: (selectedCount: number) => ReactNode;
131
+ toolbar?: ReactNode;
132
+ className?: string;
133
+ };
134
+ type DataTableRowSlotProps<T extends Record<string, unknown>> = {
135
+ row: Row<T>;
136
+ onToggleSelect: () => void;
137
+ virtualIndex?: number;
138
+ measureElement?: (node: Element | null) => void;
139
+ };
140
+ type DataTableSlots<T extends Record<string, unknown>> = {
141
+ Toolbar?: ComponentType<DataTableToolbarSlotProps>;
142
+ Row?: ComponentType<DataTableRowSlotProps<T>>;
143
+ /** Replace the pending state view */
144
+ Pending?: ComponentType<{
145
+ loadingText: string;
146
+ className?: string;
147
+ }>;
148
+ /** Replace the empty-state cell content */
149
+ Empty?: ComponentType<{
150
+ emptyText: string;
151
+ columnCount: number;
152
+ }>;
74
153
  };
75
154
  type TableColumnProps<T extends Record<string, unknown>, K extends string = keyof T & string> = {
76
- /** 컬럼 id. 데이터 필드명이거나 virtual 컬럼용 임의 문자열 */
155
+ /** Column id: data field name, or an arbitrary id for virtual columns */
77
156
  field: K;
78
- /** true accessorKey 없이 id 사용하는 가상 컬럼 (선택 체크박스, No. 등) */
157
+ /** When true, uses id only (no accessorKey) e.g. checkbox / No. columns */
79
158
  virtual?: boolean;
80
159
  children?: ReactNode;
81
160
  sortable?: boolean;
@@ -93,54 +172,244 @@ type TableProps<T extends Record<string, unknown>> = Omit<DataTableProps<T>, "co
93
172
  children: ReactNode;
94
173
  };
95
174
 
96
- declare function DataTable<T extends Record<string, unknown>>({ data, columns, rowSelectionMode, rowSelection: controlledRowSelection, onRowSelectionChange, totalCount, filteredCount, summary, toolbar, selectionLabel, isPending, emptyText, enableRowSpan, getRowId, onRowClick, getRowClassName, getRowCanSelect, selectOnRowClick, onDataChange, className, preserveRowSelection, toggleField, childField, flattenField, expandedRows: controlledExpandedRows, onExpandedRowsChange, preventExpand, enableVirtualization, estimateRowHeight, virtualOverscan, }: DataTableProps<T>): react.JSX.Element;
175
+ type EditingCell = {
176
+ rowIndex: number;
177
+ colIndex: number;
178
+ };
179
+ type ColumnDefLike = {
180
+ id?: string;
181
+ accessorKey?: unknown;
182
+ meta?: {
183
+ editable?: boolean;
184
+ editType?: CellEditType;
185
+ };
186
+ };
187
+ declare function isColumnEditable(columnDef: ColumnDefLike): boolean;
188
+ declare function getColumnEditType(columnDef: ColumnDefLike): CellEditType;
189
+ declare function parseCellEditValue(raw: string, editType: CellEditType): {
190
+ ok: true;
191
+ value: string | number | null;
192
+ } | {
193
+ ok: false;
194
+ };
195
+ declare function getCellEditDraftValue(value: unknown): string;
196
+ /** Returns updated data on success; null if parsing fails or the cell is not editable */
197
+ declare function applyCellEdit<T extends Record<string, unknown>>(data: T[], rows: Row<T>[], rowIndex: number, colIndex: number, raw: string): T[] | null;
97
198
 
98
- /** 본문 슬롯 마커. 실제 tbody는 DataTable이 렌더합니다. */
99
- declare function TableBody(): null;
100
- declare namespace TableBody {
101
- var displayName: string;
102
- }
199
+ type CellPosition = {
200
+ row: number;
201
+ col: number;
202
+ };
203
+ type CellSelectionBounds = {
204
+ startRow: number;
205
+ endRow: number;
206
+ startCol: number;
207
+ endCol: number;
208
+ };
209
+ type DragState = {
210
+ isSelecting: boolean;
211
+ isFillDragging: boolean;
212
+ start: CellPosition | null;
213
+ end: CellPosition | null;
214
+ /** Fixed anchor opposite the fill handle (top-left) */
215
+ fillAnchor: CellPosition | null;
216
+ fillEnd: CellPosition | null;
217
+ };
218
+ declare function getRowIndexInMergedCell(clientY: number, cellElement: HTMLElement, rowIndex: number, rowSpan: number): number;
219
+ declare function isCellInSelection(rowIndex: number, colIndex: number, bounds: CellSelectionBounds | null, rowSpan?: number): boolean;
220
+ declare const CELL_SELECTION_EDGES_CLASS = "cell-selection-edges";
221
+ type CellSelectionEdgeStyle = {
222
+ /** Full-side inset border applied via ::after */
223
+ ["--selection-edge-shadows"]?: string;
224
+ /** Partial vertical border for merged-cell step (stair) segments */
225
+ ["--selection-edge-gradients"]?: string;
226
+ ["--selection-edge-sizes"]?: string;
227
+ ["--selection-edge-positions"]?: string;
228
+ /** Hide internal horizontal grid lines inside the selection with background color */
229
+ borderBottomColor?: string;
230
+ };
231
+ /**
232
+ * Draws the selection border with ::after (extended -1px at the bottom) plus
233
+ * inset box-shadow / partial gradients so it does not break on the cell's
234
+ * border-bottom.
235
+ *
236
+ * @param isVisuallySelectedAt Whether a logical cell is visually selected
237
+ * (including adjacent merged cells). Used to suppress internal step borders
238
+ * when multiple columns have rowSpan.
239
+ */
240
+ declare function getCellSelectionEdgeStyle(rowIndex: number, colIndex: number, bounds: CellSelectionBounds | null, rowSpan?: number, isVisuallySelectedAt?: (row: number, col: number) => boolean): CellSelectionEdgeStyle | undefined;
241
+ declare function hasCellSelectionEdges(style: CellSelectionEdgeStyle | undefined): boolean;
103
242
 
104
- /** Table.Header 안에서만 사용합니다. DOM을 렌더하지 않고 컬럼 정의만 등록합니다. */
105
- declare function TableColumn<T extends Record<string, unknown>, K extends string = keyof T & string>(props: TableColumnProps<T, K>): null;
106
- declare namespace TableColumn {
107
- var displayName: string;
108
- }
243
+ type RowSpanInfo = {
244
+ /** 0 means skip render (merged into a parent row) */
245
+ rowSpan: number;
246
+ isFirstInGroup: boolean;
247
+ };
248
+ type ColumnRowSpanMap = Map<string, RowSpanInfo[]>;
249
+ /**
250
+ * Returns the start row and rowSpan of the merged cell covering a given row.
251
+ * Rows with rowSpan === 0 walk up to the merge origin.
252
+ */
253
+ declare function resolveRowSpanAt(rowSpans: RowSpanInfo[] | undefined, rowIndex: number): {
254
+ startRow: number;
255
+ rowSpan: number;
256
+ };
257
+ /**
258
+ * Computes merge info for every column that has rowSpan meta.
259
+ */
260
+ declare function buildColumnRowSpanMap<T extends Record<string, unknown>>(data: T[], columnKeys: Array<{
261
+ columnId: string;
262
+ rowSpanKey: string;
263
+ }>): ColumnRowSpanMap;
264
+ declare function collectRowSpanColumns<T extends Record<string, unknown>>(columns: ColumnDef<T, unknown>[]): Array<{
265
+ columnId: string;
266
+ rowSpanKey: string;
267
+ }>;
109
268
 
110
- type TableHeaderProps = {
111
- children: ReactNode;
269
+ type RowData = Record<string, unknown>;
270
+ type DataTableRowContextValue = {
271
+ rowSpan: {
272
+ enableRowSpan: boolean;
273
+ primaryRowSpanKey?: string;
274
+ columnRowSpanMap: ColumnRowSpanMap;
275
+ hoveredRowIndex: number | null;
276
+ hoveredGroupKey: string | null;
277
+ selectedGroupKeys: Set<string>;
278
+ onRowHover: (rowIndex: number, rowData: RowData) => void;
279
+ };
280
+ selection: {
281
+ rowSelectionMode: RowSelectionMode;
282
+ selectOnRowClick: boolean;
283
+ onRowClick?: (row: RowData, index: number) => void;
284
+ getRowClassName?: (row: RowData, index: number) => string | undefined;
285
+ };
286
+ cellSelection: {
287
+ enableCellSelection: boolean;
288
+ activeSelectionBounds: CellSelectionBounds | null;
289
+ dragState: DragState;
290
+ onCellMouseDown: (rowIndex: number, colIndex: number) => void;
291
+ onCellMouseEnter: (rowIndex: number, colIndex: number) => void;
292
+ onFillHandleMouseDown: (rowIndex: number, colIndex: number) => void;
293
+ };
294
+ cellEdit: {
295
+ editingCell: EditingCell | null;
296
+ draftValue: string;
297
+ onDraftValueChange: (value: string) => void;
298
+ onStartEdit: (rowIndex: number, colIndex: number) => void;
299
+ onCommitEdit: (raw?: string) => boolean;
300
+ onCancelEdit: () => void;
301
+ };
302
+ expand: {
303
+ enableExpand: boolean;
304
+ toggleField?: string;
305
+ expandedRows?: Set<string>;
306
+ preventExpand: boolean;
307
+ onToggleExpand?: (rowKey: string) => void;
308
+ expandRowLabel: string;
309
+ collapseRowLabel: string;
310
+ };
112
311
  };
113
- /** 컬럼 선언 슬롯. DOM을 렌더하지 않습니다. */
114
- declare function TableHeader(props: TableHeaderProps): null;
115
- declare namespace TableHeader {
116
- var displayName: string;
117
- }
118
312
 
119
- type TablePaginationProps = {
120
- page: number;
121
- pageSize?: number;
122
- totalCount?: number;
123
- onChange: (page: number) => void;
124
- className?: string;
313
+ type UseGlideTableOptions<T extends Record<string, unknown>> = Omit<DataTableProps<T>, "className" | "slots" | "summary" | "toolbar" | "isPending" | "totalCount" | "filteredCount">;
314
+ type UseGlideTableResult<T extends Record<string, unknown>> = {
315
+ table: Table<T>;
316
+ tableData: T[];
317
+ rows: Row<T>[];
318
+ columnCount: number;
319
+ selectedCount: number;
320
+ labels: DataTableLabels;
321
+ emptyText: string;
322
+ loadingText: string;
323
+ selectionLabel: DataTableLabels["selection"];
324
+ enableCellSelection: boolean;
325
+ shouldVirtualize: boolean;
326
+ scrollRef: RefObject<HTMLDivElement | null>;
327
+ rowVirtualizer: Virtualizer<HTMLDivElement, Element>;
328
+ virtualRows: VirtualItem[];
329
+ paddingTop: number;
330
+ paddingBottom: number;
331
+ rowContextValue: DataTableRowContextValue;
332
+ handleToggleSelect: (row: Row<T>) => void;
333
+ clearHover: () => void;
334
+ };
335
+ declare function useGlideTable<T extends Record<string, unknown>>(options: UseGlideTableOptions<T>): UseGlideTableResult<T>;
336
+
337
+ type UseCellEditOptions<T extends Record<string, unknown>> = {
338
+ data: T[];
339
+ rows: Row<T>[];
340
+ onDataChange?: (data: T[]) => void;
341
+ onCellChange?: (rowId: string, columnId: string, value: unknown) => void;
342
+ };
343
+ declare function useCellEdit<T extends Record<string, unknown>>({ data, rows, onDataChange, onCellChange, }: UseCellEditOptions<T>): {
344
+ editingCell: EditingCell | null;
345
+ draftValue: string;
346
+ setDraftValue: react.Dispatch<react.SetStateAction<string>>;
347
+ startEdit: (rowIndex: number, colIndex: number) => void;
348
+ commitEdit: (raw?: string) => boolean;
349
+ cancelEdit: () => void;
125
350
  };
126
- declare function TablePagination({ page, pageSize, totalCount, onChange, className, }: TablePaginationProps): react.JSX.Element;
127
- declare namespace TablePagination {
128
- var displayName: string;
129
- }
130
351
 
131
- type TableCompoundComponent<T extends Record<string, unknown>> = ((props: TableProps<T>) => ReactElement) & {
132
- Header: typeof TableHeader;
133
- Column: <K extends string>(props: TableColumnProps<T, K>) => null;
134
- Body: typeof TableBody;
135
- Pagination: typeof TablePagination;
136
- };
137
- declare function TableRoot<T extends Record<string, unknown>>({ data, children, className, totalCount, filteredCount, ...dataTableProps }: TableProps<T>): react.JSX.Element;
138
- declare function createTable<T extends Record<string, unknown>>(): TableCompoundComponent<T>;
139
- declare const Table: typeof TableRoot & {
140
- Header: typeof TableHeader;
141
- Column: typeof TableColumn;
142
- Body: typeof TableBody;
143
- Pagination: typeof TablePagination;
352
+ type UseCellSelectionOptions<T extends Record<string, unknown>> = {
353
+ data: T[];
354
+ rows: Row<T>[];
355
+ enabled?: boolean;
356
+ onDataChange?: (data: T[]) => void;
357
+ onBatchChange?: (changes: Array<{
358
+ rowId: string;
359
+ columnId: string;
360
+ value: unknown;
361
+ }>) => void;
362
+ };
363
+ declare function useCellSelection<T extends Record<string, unknown>>({ data, rows, enabled, onDataChange, onBatchChange, }: UseCellSelectionOptions<T>): {
364
+ dragState: DragState;
365
+ activeSelectionBounds: CellSelectionBounds | null;
366
+ handleCellMouseDown: (rowIndex: number, colIndex: number) => void;
367
+ handleCellMouseEnter: (rowIndex: number, colIndex: number) => void;
368
+ handleFillHandleMouseDown: (rowIndex: number, colIndex: number) => void;
369
+ };
370
+
371
+ type CellChange = {
372
+ rowId: string;
373
+ columnId: string;
374
+ value: unknown;
375
+ };
376
+ declare function collectFillChanges<T extends Record<string, unknown>>(rows: Row<T>[], sourceBounds: CellSelectionBounds, fillBounds: CellSelectionBounds): CellChange[];
377
+ declare function applyFillData<T extends Record<string, unknown>>(data: T[], rows: Row<T>[], sourceBounds: CellSelectionBounds, fillBounds: CellSelectionBounds): T[];
378
+
379
+ type TreeRow<T extends Record<string, unknown> = Record<string, unknown>> = T & {
380
+ level: number;
381
+ children: TreeRow<T>[];
382
+ treeNo?: string;
383
+ uniqueId?: string;
384
+ parentCount?: number;
385
+ processed?: boolean;
144
386
  };
387
+ type UseConvertTreeDataParams<T extends Record<string, unknown>> = {
388
+ data: T[] | null;
389
+ /** When false, returns data unchanged (plain DataTable) */
390
+ enabled?: boolean;
391
+ /** Row id / expand key field (idField). Defaults to `id` */
392
+ toggleField?: string;
393
+ /** Child → parent reference field (parentIdField). Defaults to `parentId` */
394
+ childField?: string;
395
+ /** Nested children array field (childrenField). Defaults to `children` */
396
+ flattenField?: string;
397
+ /** Parent quantity field (qtyField). Used for parentCount. Defaults to `qty` */
398
+ qtyField?: string;
399
+ preventExpand?: boolean;
400
+ startIndex?: number;
401
+ expandedRows?: Set<string>;
402
+ onExpandedRowsChange?: (next: Set<string>) => void;
403
+ };
404
+ declare function canExpandRow(row: Record<string, unknown>): boolean;
405
+ declare function toggleExpandedRowId(rowId: string, previous: Set<string>): Set<string>;
406
+ /**
407
+ * Builds a tree from flat/nested data, then returns only rows visible under expandedRows.
408
+ * When enabled=false, returns data as-is.
409
+ */
410
+ declare const useConvertTreeData: <T extends Record<string, unknown>>({ data, enabled, toggleField, childField, flattenField, qtyField, preventExpand, startIndex, expandedRows, onExpandedRowsChange, }: UseConvertTreeDataParams<T>) => T[];
411
+
412
+ declare function resolveRowSelection(mode: RowSelectionMode, controlledSelection: RowSelectionState | undefined, internalSelection: RowSelectionState): RowSelectionState;
413
+ declare function applySelectionUpdater(mode: RowSelectionMode, updater: Updater<RowSelectionState>, previous: RowSelectionState): RowSelectionState;
145
414
 
146
- export { DataTable, type DataTableProps, type RowSelectionMode, Table, type TableColumnProps, type TableCompoundComponent, type TableProps, createTable };
415
+ export { CELL_SELECTION_EDGES_CLASS, type CellSelectionBounds, type ColumnRowSpanMap, DEFAULT_DATA_TABLE_LABELS, DEFAULT_TREE_CHILDREN_FIELD, DEFAULT_TREE_ID_FIELD, DEFAULT_TREE_PARENT_ID_FIELD, DEFAULT_TREE_QTY_FIELD, type DataTableLabels, type DataTableProps, type DataTableSlots, type DragState, type EditingCell, type RowSelectionMode, type RowSpanInfo, type TableColumnProps, type TableProps, type TreeRow, type UseConvertTreeDataParams, type UseGlideTableOptions, type UseGlideTableResult, applyCellEdit, applyFillData, applySelectionUpdater, buildColumnRowSpanMap, canExpandRow, collectFillChanges, collectRowSpanColumns, getCellEditDraftValue, getCellSelectionEdgeStyle, getColumnEditType, getRowIndexInMergedCell, hasCellSelectionEdges, isCellInSelection, isColumnEditable, parseCellEditValue, resolveDataTableLabels, resolveRowSelection, resolveRowSpanAt, toggleExpandedRowId, useCellEdit, useCellSelection, useConvertTreeData, useGlideTable };