@vuu-ui/vuu-table 0.8.26-debug → 0.8.27-debug
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/cjs/index.js +67 -19
- package/cjs/index.js.map +3 -3
- package/esm/index.js +95 -37
- package/esm/index.js.map +3 -3
- package/index.css +17 -10
- package/index.css.map +2 -2
- package/package.json +8 -8
- package/types/Table.d.ts +5 -0
- package/types/header-cell/HeaderCell.d.ts +1 -1
- package/types/table-header/TableHeader.d.ts +2 -1
- package/types/table-header/useTableHeader.d.ts +3 -3
package/esm/index.js
CHANGED
|
@@ -76,7 +76,7 @@ var SortIndicator = ({ column }) => {
|
|
|
76
76
|
import { useCallback as useCallback2, useRef } from "react";
|
|
77
77
|
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
78
78
|
var NOOP = () => void 0;
|
|
79
|
-
var baseClass = "
|
|
79
|
+
var baseClass = "vuuColumnResizer";
|
|
80
80
|
var ColumnResizer = ({
|
|
81
81
|
onDrag,
|
|
82
82
|
onDragEnd = NOOP,
|
|
@@ -303,8 +303,13 @@ var GroupHeaderCell = ({
|
|
|
303
303
|
};
|
|
304
304
|
|
|
305
305
|
// src/header-cell/HeaderCell.tsx
|
|
306
|
+
import { useContextMenu } from "@vuu-ui/vuu-popups";
|
|
306
307
|
import cx5 from "clsx";
|
|
307
|
-
import {
|
|
308
|
+
import {
|
|
309
|
+
useCallback as useCallback5,
|
|
310
|
+
useMemo as useMemo2,
|
|
311
|
+
useRef as useRef4
|
|
312
|
+
} from "react";
|
|
308
313
|
|
|
309
314
|
// src/column-menu/ColumnMenu.tsx
|
|
310
315
|
import { PopupMenu } from "@vuu-ui/vuu-popups";
|
|
@@ -331,9 +336,9 @@ var HeaderCell = ({
|
|
|
331
336
|
column,
|
|
332
337
|
onClick,
|
|
333
338
|
onResize,
|
|
339
|
+
showMenu = true,
|
|
334
340
|
...htmlAttributes
|
|
335
341
|
}) => {
|
|
336
|
-
var _a;
|
|
337
342
|
const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;
|
|
338
343
|
const rootRef = useRef4(null);
|
|
339
344
|
const { isResizing, ...resizeProps } = useTableColumnResize({
|
|
@@ -341,26 +346,66 @@ var HeaderCell = ({
|
|
|
341
346
|
onResize,
|
|
342
347
|
rootRef
|
|
343
348
|
});
|
|
349
|
+
const [showContextMenu] = useContextMenu();
|
|
350
|
+
const handleContextMenu = useMemo2(() => {
|
|
351
|
+
if (showMenu) {
|
|
352
|
+
return void 0;
|
|
353
|
+
} else {
|
|
354
|
+
return (e) => showContextMenu(e, "column-menu", { column });
|
|
355
|
+
}
|
|
356
|
+
}, [column, showContextMenu, showMenu]);
|
|
357
|
+
const headerItems = useMemo2(() => {
|
|
358
|
+
var _a;
|
|
359
|
+
const sortIndicator = /* @__PURE__ */ jsx7(SortIndicator, { column });
|
|
360
|
+
const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx7(
|
|
361
|
+
HeaderCellLabelRenderer,
|
|
362
|
+
{
|
|
363
|
+
className: `${classBase4}-label`,
|
|
364
|
+
column
|
|
365
|
+
}
|
|
366
|
+
) : /* @__PURE__ */ jsx7("div", { className: `${classBase4}-label`, children: (_a = column.label) != null ? _a : column.name });
|
|
367
|
+
const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx7(HeaderCellContentRenderer, { column }, "content")] : [];
|
|
368
|
+
if (showMenu) {
|
|
369
|
+
const columnMenu = /* @__PURE__ */ jsx7(ColumnMenu, { column });
|
|
370
|
+
if (column.align === "right") {
|
|
371
|
+
return [sortIndicator, columnLabel, columnContent, columnMenu];
|
|
372
|
+
} else {
|
|
373
|
+
return [columnMenu, columnLabel, sortIndicator, columnContent];
|
|
374
|
+
}
|
|
375
|
+
} else {
|
|
376
|
+
if (column.align === "right") {
|
|
377
|
+
return [sortIndicator, columnLabel, columnContent];
|
|
378
|
+
} else {
|
|
379
|
+
return [columnLabel, sortIndicator, columnContent];
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);
|
|
344
383
|
const handleClick = useCallback5(
|
|
345
384
|
(evt) => {
|
|
346
385
|
!isResizing && (onClick == null ? void 0 : onClick(evt));
|
|
347
386
|
},
|
|
348
387
|
[isResizing, onClick]
|
|
349
388
|
);
|
|
389
|
+
const handleKeyDown = useCallback5(
|
|
390
|
+
(evt) => {
|
|
391
|
+
if (evt.key === "Enter") {
|
|
392
|
+
onClick == null ? void 0 : onClick(evt);
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
[onClick]
|
|
396
|
+
);
|
|
350
397
|
const { className, style } = useCell(column, classBase4, true);
|
|
351
|
-
const columnMenu = /* @__PURE__ */ jsx7(ColumnMenu, { column });
|
|
352
|
-
const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx7(HeaderCellLabelRenderer, { className: `${classBase4}-label`, column }) : /* @__PURE__ */ jsx7("div", { className: `${classBase4}-label`, children: (_a = column.label) != null ? _a : column.name });
|
|
353
|
-
const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx7(HeaderCellContentRenderer, { column }, "content")] : [];
|
|
354
|
-
const sortIndicator = /* @__PURE__ */ jsx7(SortIndicator, { column });
|
|
355
|
-
const headerItems = column.align === "right" ? [sortIndicator, columnLabel].concat(columnContent).concat(columnMenu) : [columnMenu, columnLabel, sortIndicator].concat(columnContent);
|
|
356
398
|
return /* @__PURE__ */ jsxs5(
|
|
357
399
|
"div",
|
|
358
400
|
{
|
|
359
401
|
...htmlAttributes,
|
|
360
402
|
className: cx5(className, classNameProp, {
|
|
361
|
-
[`${classBase4}-resizing`]: isResizing
|
|
403
|
+
[`${classBase4}-resizing`]: isResizing,
|
|
404
|
+
[`${classBase4}-noMenu`]: showMenu === false
|
|
362
405
|
}),
|
|
363
406
|
onClick: handleClick,
|
|
407
|
+
onContextMenu: handleContextMenu,
|
|
408
|
+
onKeyDown: handleKeyDown,
|
|
364
409
|
ref: rootRef,
|
|
365
410
|
role: "columnheader",
|
|
366
411
|
style,
|
|
@@ -614,7 +659,11 @@ import { memo as memo2 } from "react";
|
|
|
614
659
|
import {
|
|
615
660
|
useDragDrop
|
|
616
661
|
} from "@vuu-ui/vuu-ui-controls";
|
|
617
|
-
import {
|
|
662
|
+
import {
|
|
663
|
+
moveColumnTo,
|
|
664
|
+
queryClosest,
|
|
665
|
+
visibleColumnAtIndex
|
|
666
|
+
} from "@vuu-ui/vuu-utils";
|
|
618
667
|
import { useCallback as useCallback9, useRef as useRef5 } from "react";
|
|
619
668
|
var useTableHeader = ({
|
|
620
669
|
columns,
|
|
@@ -651,10 +700,7 @@ var useTableHeader = ({
|
|
|
651
700
|
const handleColumnHeaderClick = useCallback9(
|
|
652
701
|
(evt) => {
|
|
653
702
|
var _a;
|
|
654
|
-
const
|
|
655
|
-
const headerCell = targetElement.closest(
|
|
656
|
-
".vuuTableHeaderCell"
|
|
657
|
-
);
|
|
703
|
+
const headerCell = queryClosest(evt.target, ".vuuTableHeaderCell");
|
|
658
704
|
const colIdx = parseInt((_a = headerCell == null ? void 0 : headerCell.dataset.index) != null ? _a : "-1");
|
|
659
705
|
const column = visibleColumnAtIndex(columns, colIdx);
|
|
660
706
|
const isAdditive = evt.shiftKey;
|
|
@@ -696,6 +742,7 @@ var TableHeader = memo2(
|
|
|
696
742
|
onRemoveGroupColumn,
|
|
697
743
|
onResizeColumn,
|
|
698
744
|
onSortColumn,
|
|
745
|
+
showColumnHeaderMenus,
|
|
699
746
|
tableConfig,
|
|
700
747
|
tableId,
|
|
701
748
|
virtualColSpan = 0
|
|
@@ -747,7 +794,8 @@ var TableHeader = memo2(
|
|
|
747
794
|
id: `${tableId}-col-${i}`,
|
|
748
795
|
onClick,
|
|
749
796
|
onMouseDown,
|
|
750
|
-
onResize: onResizeColumn
|
|
797
|
+
onResize: onResizeColumn,
|
|
798
|
+
showMenu: showColumnHeaderMenus
|
|
751
799
|
},
|
|
752
800
|
col.name
|
|
753
801
|
)
|
|
@@ -764,7 +812,7 @@ import {
|
|
|
764
812
|
useDragDrop as useDragDrop2
|
|
765
813
|
} from "@vuu-ui/vuu-ui-controls";
|
|
766
814
|
import {
|
|
767
|
-
|
|
815
|
+
toggleOrApplySort,
|
|
768
816
|
asDataSourceRowObject,
|
|
769
817
|
buildColumnMap as buildColumnMap2,
|
|
770
818
|
getIndexFromRowElement as getIndexFromRowElement3,
|
|
@@ -778,7 +826,7 @@ import {
|
|
|
778
826
|
import {
|
|
779
827
|
useCallback as useCallback18,
|
|
780
828
|
useEffect as useEffect4,
|
|
781
|
-
useMemo as
|
|
829
|
+
useMemo as useMemo8,
|
|
782
830
|
useRef as useRef13,
|
|
783
831
|
useState as useState6
|
|
784
832
|
} from "react";
|
|
@@ -1231,7 +1279,7 @@ var useCellEditing = ({ navigate }) => {
|
|
|
1231
1279
|
|
|
1232
1280
|
// src/useDataSource.ts
|
|
1233
1281
|
import { getFullRange, NULL_RANGE, rangesAreSame } from "@vuu-ui/vuu-utils";
|
|
1234
|
-
import { useCallback as useCallback11, useEffect, useMemo as
|
|
1282
|
+
import { useCallback as useCallback11, useEffect, useMemo as useMemo3, useRef as useRef6, useState as useState3 } from "react";
|
|
1235
1283
|
|
|
1236
1284
|
// src/moving-window.ts
|
|
1237
1285
|
import {
|
|
@@ -1309,7 +1357,7 @@ var useDataSource = ({
|
|
|
1309
1357
|
const isMounted = useRef6(true);
|
|
1310
1358
|
const hasUpdated = useRef6(false);
|
|
1311
1359
|
const rangeRef = useRef6(range);
|
|
1312
|
-
const dataWindow =
|
|
1360
|
+
const dataWindow = useMemo3(
|
|
1313
1361
|
() => new MovingWindow(getFullRange(range, renderBufferSize)),
|
|
1314
1362
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1315
1363
|
[]
|
|
@@ -1395,10 +1443,10 @@ var useDataSource = ({
|
|
|
1395
1443
|
};
|
|
1396
1444
|
|
|
1397
1445
|
// src/useInitialValue.ts
|
|
1398
|
-
import { useMemo as
|
|
1446
|
+
import { useMemo as useMemo4, useRef as useRef7 } from "react";
|
|
1399
1447
|
var useInitialValue = (value) => {
|
|
1400
1448
|
const ref = useRef7(value);
|
|
1401
|
-
return
|
|
1449
|
+
return useMemo4(() => ref.current, []);
|
|
1402
1450
|
};
|
|
1403
1451
|
|
|
1404
1452
|
// src/useKeyboardNavigation.ts
|
|
@@ -1822,6 +1870,7 @@ import {
|
|
|
1822
1870
|
applyFilterToColumns,
|
|
1823
1871
|
applyGroupByToColumns,
|
|
1824
1872
|
applySortToColumns,
|
|
1873
|
+
existingSort,
|
|
1825
1874
|
getCellRenderer,
|
|
1826
1875
|
getColumnHeaderContentRenderer,
|
|
1827
1876
|
getColumnHeaderLabelRenderer,
|
|
@@ -1833,6 +1882,7 @@ import {
|
|
|
1833
1882
|
isGroupColumn as isGroupColumn3,
|
|
1834
1883
|
isPinned,
|
|
1835
1884
|
logger,
|
|
1885
|
+
removeSort,
|
|
1836
1886
|
replaceColumn,
|
|
1837
1887
|
sortPinnedColumns,
|
|
1838
1888
|
stripFilterFromColumns,
|
|
@@ -2108,6 +2158,11 @@ function updateTableConfig2(state, { confirmed, filter, groupBy, sort }) {
|
|
|
2108
2158
|
...state,
|
|
2109
2159
|
columns: applySortToColumns(result.columns, sort)
|
|
2110
2160
|
};
|
|
2161
|
+
} else if (existingSort(result.columns)) {
|
|
2162
|
+
result = {
|
|
2163
|
+
...state,
|
|
2164
|
+
columns: removeSort(result.columns)
|
|
2165
|
+
};
|
|
2111
2166
|
}
|
|
2112
2167
|
if (hasFilter) {
|
|
2113
2168
|
result = {
|
|
@@ -2133,7 +2188,7 @@ import {
|
|
|
2133
2188
|
useCallback as useCallback15,
|
|
2134
2189
|
useEffect as useEffect3,
|
|
2135
2190
|
useImperativeHandle,
|
|
2136
|
-
useMemo as
|
|
2191
|
+
useMemo as useMemo5,
|
|
2137
2192
|
useRef as useRef10,
|
|
2138
2193
|
useState as useState4
|
|
2139
2194
|
} from "react";
|
|
@@ -2239,7 +2294,7 @@ var useTableScroll = ({
|
|
|
2239
2294
|
const columnsWithinViewportRef = useRef10([]);
|
|
2240
2295
|
const [, forceRefresh] = useState4({});
|
|
2241
2296
|
const preSpanRef = useRef10(0);
|
|
2242
|
-
|
|
2297
|
+
useMemo5(() => {
|
|
2243
2298
|
const [visibleColumns, offset] = getColumnsInViewport(
|
|
2244
2299
|
columns,
|
|
2245
2300
|
contentContainerPosRef.current.scrollLeft,
|
|
@@ -2471,7 +2526,7 @@ var useTableScroll = ({
|
|
|
2471
2526
|
viewportRowCount
|
|
2472
2527
|
]
|
|
2473
2528
|
);
|
|
2474
|
-
const scrollHandles =
|
|
2529
|
+
const scrollHandles = useMemo5(
|
|
2475
2530
|
// TODO not complete yet
|
|
2476
2531
|
() => ({
|
|
2477
2532
|
scrollToIndex: (rowIndex) => {
|
|
@@ -2530,7 +2585,7 @@ import {
|
|
|
2530
2585
|
measurePinnedColumns,
|
|
2531
2586
|
virtualRowPositioning
|
|
2532
2587
|
} from "@vuu-ui/vuu-utils";
|
|
2533
|
-
import { useCallback as useCallback16, useMemo as
|
|
2588
|
+
import { useCallback as useCallback16, useMemo as useMemo6, useRef as useRef11 } from "react";
|
|
2534
2589
|
var MAX_PIXEL_HEIGHT = 1e7;
|
|
2535
2590
|
var UNMEASURED_VIEWPORT = {
|
|
2536
2591
|
appliedPageSize: 0,
|
|
@@ -2564,15 +2619,15 @@ var useTableViewport = ({
|
|
|
2564
2619
|
const pixelContentHeight = Math.min(rowHeight * rowCount, MAX_PIXEL_HEIGHT);
|
|
2565
2620
|
const virtualContentHeight = rowCount * rowHeight;
|
|
2566
2621
|
const virtualisedExtent = virtualContentHeight - pixelContentHeight;
|
|
2567
|
-
const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } =
|
|
2622
|
+
const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } = useMemo6(
|
|
2568
2623
|
() => measurePinnedColumns(columns, selectionEndSize),
|
|
2569
2624
|
[columns, selectionEndSize]
|
|
2570
2625
|
);
|
|
2571
2626
|
const totalHeaderHeightRef = useRef11(headerHeight);
|
|
2572
|
-
|
|
2627
|
+
useMemo6(() => {
|
|
2573
2628
|
totalHeaderHeightRef.current = headerHeight * (1 + headings.length);
|
|
2574
2629
|
}, [headerHeight, headings.length]);
|
|
2575
|
-
const [getRowOffset, getRowAtPosition, isVirtualScroll] =
|
|
2630
|
+
const [getRowOffset, getRowAtPosition, isVirtualScroll] = useMemo6(() => {
|
|
2576
2631
|
if (virtualisedExtent) {
|
|
2577
2632
|
const [_getRowOffset, getRowAtPosition2, _isVirtual] = virtualRowPositioning(rowHeight, virtualisedExtent, pctScrollTopRef);
|
|
2578
2633
|
const getOffset = (row) => {
|
|
@@ -2596,7 +2651,7 @@ var useTableViewport = ({
|
|
|
2596
2651
|
);
|
|
2597
2652
|
}
|
|
2598
2653
|
}, []);
|
|
2599
|
-
return
|
|
2654
|
+
return useMemo6(() => {
|
|
2600
2655
|
if (size) {
|
|
2601
2656
|
const { current: totalHeaderHeight } = totalHeaderHeightRef;
|
|
2602
2657
|
const scrollbarSize = 15;
|
|
@@ -2776,7 +2831,7 @@ var useTableAndColumnSettings = ({
|
|
|
2776
2831
|
import {
|
|
2777
2832
|
getRowClassNameGenerator
|
|
2778
2833
|
} from "@vuu-ui/vuu-utils";
|
|
2779
|
-
import { useMemo as
|
|
2834
|
+
import { useMemo as useMemo7 } from "react";
|
|
2780
2835
|
var createClassNameGenerator = (ids) => {
|
|
2781
2836
|
const functions = [];
|
|
2782
2837
|
ids == null ? void 0 : ids.forEach((id) => {
|
|
@@ -2799,7 +2854,7 @@ var createClassNameGenerator = (ids) => {
|
|
|
2799
2854
|
var useRowClassNameGenerators = ({
|
|
2800
2855
|
rowClassNameGenerators
|
|
2801
2856
|
}) => {
|
|
2802
|
-
return
|
|
2857
|
+
return useMemo7(() => {
|
|
2803
2858
|
return createClassNameGenerator(rowClassNameGenerators);
|
|
2804
2859
|
}, [rowClassNameGenerators]);
|
|
2805
2860
|
};
|
|
@@ -2850,7 +2905,7 @@ var useTable = ({
|
|
|
2850
2905
|
}
|
|
2851
2906
|
const rowClassNameGenerator = useRowClassNameGenerators(config);
|
|
2852
2907
|
const useRowDragDrop = allowDragDrop ? useDragDrop2 : useNullDragDrop;
|
|
2853
|
-
const menuBuilder =
|
|
2908
|
+
const menuBuilder = useMemo8(
|
|
2854
2909
|
() => buildContextMenuDescriptors(dataSource),
|
|
2855
2910
|
[dataSource]
|
|
2856
2911
|
);
|
|
@@ -2882,7 +2937,7 @@ var useTable = ({
|
|
|
2882
2937
|
},
|
|
2883
2938
|
[dataSource, dispatchTableModelAction, onConfigChange]
|
|
2884
2939
|
);
|
|
2885
|
-
const columnMap =
|
|
2940
|
+
const columnMap = useMemo8(
|
|
2886
2941
|
() => buildColumnMap2(dataSource.columns),
|
|
2887
2942
|
[dataSource.columns]
|
|
2888
2943
|
);
|
|
@@ -3048,7 +3103,7 @@ var useTable = ({
|
|
|
3048
3103
|
const handleSort = useCallback18(
|
|
3049
3104
|
(column, extendSort = false, sortType) => {
|
|
3050
3105
|
if (dataSource) {
|
|
3051
|
-
dataSource.sort =
|
|
3106
|
+
dataSource.sort = toggleOrApplySort(
|
|
3052
3107
|
dataSource.sort,
|
|
3053
3108
|
column,
|
|
3054
3109
|
extendSort,
|
|
@@ -3341,13 +3396,13 @@ var useTable = ({
|
|
|
3341
3396
|
|
|
3342
3397
|
// src/useRowHeight.ts
|
|
3343
3398
|
import { isValidNumber as isValidNumber2 } from "@vuu-ui/vuu-utils";
|
|
3344
|
-
import { useCallback as useCallback19, useMemo as
|
|
3399
|
+
import { useCallback as useCallback19, useMemo as useMemo9, useRef as useRef14, useState as useState7 } from "react";
|
|
3345
3400
|
var useRowHeight = ({
|
|
3346
3401
|
rowHeight: rowHeightProp = 0
|
|
3347
3402
|
}) => {
|
|
3348
3403
|
const [rowHeight, setRowHeight] = useState7(rowHeightProp);
|
|
3349
3404
|
const heightRef = useRef14(rowHeight);
|
|
3350
|
-
const resizeObserver =
|
|
3405
|
+
const resizeObserver = useMemo9(() => {
|
|
3351
3406
|
return new ResizeObserver((entries) => {
|
|
3352
3407
|
for (const entry of entries) {
|
|
3353
3408
|
const [{ blockSize: measuredSize }] = entry.borderBoxSize;
|
|
@@ -3407,6 +3462,7 @@ var TableCore = ({
|
|
|
3407
3462
|
scrollingApiRef,
|
|
3408
3463
|
selectionModel = "extended",
|
|
3409
3464
|
showColumnHeaders = true,
|
|
3465
|
+
showColumnHeaderMenus = true,
|
|
3410
3466
|
headerHeight = showColumnHeaders ? rowHeight * 1.25 : 0,
|
|
3411
3467
|
size
|
|
3412
3468
|
}) => {
|
|
@@ -3517,6 +3573,7 @@ var TableCore = ({
|
|
|
3517
3573
|
onRemoveGroupColumn,
|
|
3518
3574
|
onResizeColumn,
|
|
3519
3575
|
onSortColumn,
|
|
3576
|
+
showColumnHeaderMenus,
|
|
3520
3577
|
tableConfig,
|
|
3521
3578
|
tableId: id,
|
|
3522
3579
|
virtualColSpan: scrollProps.virtualColSpan
|
|
@@ -3575,6 +3632,7 @@ var Table = forwardRef2(function TableNext({
|
|
|
3575
3632
|
scrollingApiRef,
|
|
3576
3633
|
selectionModel,
|
|
3577
3634
|
showColumnHeaders,
|
|
3635
|
+
showColumnHeaderMenus,
|
|
3578
3636
|
headerHeight,
|
|
3579
3637
|
style: styleProp,
|
|
3580
3638
|
...htmlAttributes
|
|
@@ -3590,7 +3648,6 @@ var Table = forwardRef2(function TableNext({
|
|
|
3590
3648
|
if (dataSource === void 0) {
|
|
3591
3649
|
throw Error("vuu Table requires dataSource prop");
|
|
3592
3650
|
}
|
|
3593
|
-
console.log({ rowHeight });
|
|
3594
3651
|
return /* @__PURE__ */ jsxs9(
|
|
3595
3652
|
MeasuredContainer,
|
|
3596
3653
|
{
|
|
@@ -3629,6 +3686,7 @@ var Table = forwardRef2(function TableNext({
|
|
|
3629
3686
|
scrollingApiRef,
|
|
3630
3687
|
selectionModel,
|
|
3631
3688
|
showColumnHeaders,
|
|
3689
|
+
showColumnHeaderMenus,
|
|
3632
3690
|
size
|
|
3633
3691
|
}
|
|
3634
3692
|
) : null
|