beautiful-grid 1.0.13 → 1.0.15

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.
Files changed (50) hide show
  1. package/README.md +121 -6
  2. package/cjs/BGrid.js +388 -44
  3. package/cjs/components/CellNavigationDomSync.js +8 -0
  4. package/cjs/components/CellTextEditorGateway.js +13 -9
  5. package/cjs/components/ColResizer.js +13 -7
  6. package/cjs/components/MasterDetailCell.js +145 -0
  7. package/cjs/components/MasterDetailContext.js +42 -0
  8. package/cjs/components/Table.js +162 -52
  9. package/cjs/components/TableBody.js +7 -3
  10. package/cjs/components/TableBodyCell.js +2 -1
  11. package/cjs/components/TableSummary.js +25 -34
  12. package/cjs/components/TableSummaryFronzen.js +36 -34
  13. package/cjs/store/createAppStore.js +2 -0
  14. package/cjs/utils/cellSelectionGeometry.js +32 -6
  15. package/cjs/utils/columnVisibility.js +17 -14
  16. package/cjs/utils/index.js +1 -0
  17. package/cjs/utils/rowHeightMetrics.js +47 -6
  18. package/cjs/utils/summary.js +55 -0
  19. package/cjs/utils/useRowReorderController.js +5 -1
  20. package/esm/BGrid.js +387 -72
  21. package/esm/components/CellNavigationDomSync.js +8 -0
  22. package/esm/components/CellTextEditorGateway.js +12 -9
  23. package/esm/components/ColResizer.js +8 -2
  24. package/esm/components/MasterDetailCell.js +101 -0
  25. package/esm/components/MasterDetailContext.js +5 -0
  26. package/esm/components/Table.js +151 -42
  27. package/esm/components/TableBody.js +6 -2
  28. package/esm/components/TableBodyCell.js +2 -1
  29. package/esm/components/TableSummary.js +26 -29
  30. package/esm/components/TableSummaryFronzen.js +26 -29
  31. package/esm/store/createAppStore.js +2 -0
  32. package/esm/utils/cellSelectionGeometry.js +31 -5
  33. package/esm/utils/columnVisibility.js +21 -18
  34. package/esm/utils/index.js +1 -0
  35. package/esm/utils/rowHeightMetrics.js +46 -6
  36. package/esm/utils/summary.js +35 -0
  37. package/esm/utils/useRowReorderController.js +5 -1
  38. package/package.json +1 -1
  39. package/style.css +164 -14
  40. package/types/BGrid.d.ts +1 -1
  41. package/types/components/MasterDetailCell.d.ts +21 -0
  42. package/types/components/MasterDetailContext.d.ts +20 -0
  43. package/types/components/Table.d.ts +1 -0
  44. package/types/components/TableBody.d.ts +2 -1
  45. package/types/store/createAppStore.d.ts +1 -1
  46. package/types/types.d.ts +70 -4
  47. package/types/utils/cellSelectionGeometry.d.ts +3 -1
  48. package/types/utils/index.d.ts +1 -0
  49. package/types/utils/rowHeightMetrics.d.ts +15 -1
  50. package/types/utils/summary.d.ts +13 -0
@@ -64,61 +64,52 @@ var react_1 = require("react");
64
64
  var React = __importStar(require("react"));
65
65
  var shallow_1 = require("zustand/react/shallow");
66
66
  var store_1 = require("../store");
67
+ var utils_1 = require("../utils");
67
68
  var TableColGroup_1 = __importDefault(require("./TableColGroup"));
68
69
  function TableSummary(_a) {
69
70
  var position = _a.position;
70
71
  // [Selector Group 1] Summary Configuration - 요약 설정
71
72
  var _b = (0, store_1.useAppStore)((0, shallow_1.useShallow)(function (s) { return ({
72
73
  summaryHeight: s.summaryHeight,
74
+ summaryRowHeight: s.summaryRowHeight,
73
75
  summary: s.summary,
74
76
  columns: s.columns,
75
- columnsGroup: s.columnsGroup,
76
77
  frozenColumnIndex: s.frozenColumnIndex,
77
78
  variant: s.variant,
78
79
  data: s.data,
79
- }); })), summaryHeight = _b.summaryHeight, summary = _b.summary, columns = _b.columns, columnsGroup = _b.columnsGroup, frozenColumnIndex = _b.frozenColumnIndex, variant = _b.variant, data = _b.data;
80
- var summaryColumns = (0, react_1.useMemo)(function () {
81
- var ignoreColumnCnt = 0;
82
- return columns.slice(frozenColumnIndex).map(function (column, index) {
83
- var _a, _b, _c;
84
- var columnIndex = frozenColumnIndex + index;
85
- var summaryColumn = (_a = summary === null || summary === void 0 ? void 0 : summary.columns) === null || _a === void 0 ? void 0 : _a.find(function (sc) { return sc.columnIndex === columnIndex; });
86
- if (summaryColumn && ((_b = summaryColumn.colSpan) !== null && _b !== void 0 ? _b : 1) > 1) {
87
- ignoreColumnCnt = ((_c = summaryColumn.colSpan) !== null && _c !== void 0 ? _c : 1) - 1;
88
- }
89
- else {
90
- if (ignoreColumnCnt > 0) {
91
- ignoreColumnCnt--;
92
- return {};
93
- }
94
- }
95
- return {
96
- column: column,
97
- columnIndex: columnIndex,
98
- summaryColumn: summaryColumn,
99
- };
100
- });
101
- }, [columns, frozenColumnIndex, summary]);
80
+ }); })), summaryHeight = _b.summaryHeight, summaryRowHeight = _b.summaryRowHeight, summary = _b.summary, columns = _b.columns, frozenColumnIndex = _b.frozenColumnIndex, variant = _b.variant, data = _b.data;
81
+ var summaryRows = (0, react_1.useMemo)(function () { return (0, utils_1.normalizeSummaryRows)(summary); }, [summary]);
82
+ var renderedRows = (0, react_1.useMemo)(function () {
83
+ var targetColumns = columns.slice(frozenColumnIndex);
84
+ return summaryRows.map(function (row, rowIndex) { return ({
85
+ row: row,
86
+ rowIndex: rowIndex,
87
+ cells: (0, utils_1.buildSummaryRowCells)(targetColumns, row.columns, frozenColumnIndex),
88
+ }); });
89
+ }, [summaryRows, columns, frozenColumnIndex]);
102
90
  return (React.createElement(SummaryTable, { variant: variant, summaryHeight: summaryHeight, position: position },
103
91
  React.createElement(TableColGroup_1.default, null),
104
- React.createElement("tbody", { role: 'rfdg-summary' },
105
- React.createElement("tr", null,
106
- summaryColumns.map(function (_a, index) {
107
- var _b, _c;
108
- var column = _a.column, summaryColumn = _a.summaryColumn, columnIndex = _a.columnIndex;
109
- if (!column)
92
+ React.createElement("tbody", { role: 'rfdg-summary' }, renderedRows.map(function (_a) {
93
+ var _b, _c, _d;
94
+ var row = _a.row, rowIndex = _a.rowIndex, cells = _a.cells;
95
+ var rowHeight = (_b = row.height) !== null && _b !== void 0 ? _b : summaryRowHeight;
96
+ return (React.createElement("tr", { key: (_c = row.id) !== null && _c !== void 0 ? _c : rowIndex, className: ['bgrid-summary-row', (_d = row.className) !== null && _d !== void 0 ? _d : ''].filter(Boolean).join(' '), style: __assign(__assign({}, (rowHeight !== undefined ? { height: rowHeight } : {})), row.style) },
97
+ cells.map(function (cell, index) {
98
+ var _a, _b;
99
+ if (!cell || !cell.column)
110
100
  return null;
101
+ var column = cell.column, summaryColumn = cell.summaryColumn, columnIndex = cell.columnIndex;
111
102
  if (!summaryColumn)
112
103
  return React.createElement("td", { key: index });
113
- return (React.createElement("td", { key: index, style: {
114
- textAlign: summaryColumn.align,
115
- }, colSpan: (_b = summaryColumn.colSpan) !== null && _b !== void 0 ? _b : 1 }, (_c = summaryColumn.itemRender) === null || _c === void 0 ? void 0 : _c.call(summaryColumn, {
104
+ return (React.createElement("td", { key: index, className: summaryColumn.className, style: __assign({ textAlign: summaryColumn.align }, summaryColumn.style), colSpan: (_a = summaryColumn.colSpan) !== null && _a !== void 0 ? _a : 1 }, (_b = summaryColumn.itemRender) === null || _b === void 0 ? void 0 : _b.call(summaryColumn, {
116
105
  column: column,
117
106
  columnIndex: columnIndex,
107
+ rowIndex: rowIndex,
118
108
  data: data,
119
109
  })));
120
110
  }),
121
- React.createElement("td", { "data-none": true })))));
111
+ React.createElement("td", { "data-none": true })));
112
+ }))));
122
113
  }
123
114
  function SummaryTable(_a) {
124
115
  var summaryHeight = _a.summaryHeight, variant = _a.variant, position = _a.position, className = _a.className, children = _a.children, rest = __rest(_a, ["summaryHeight", "variant", "position", "className", "children"]);
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
14
  if (k2 === undefined) k2 = k;
4
15
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -41,6 +52,7 @@ var React = __importStar(require("react"));
41
52
  var react_1 = require("react");
42
53
  var shallow_1 = require("zustand/react/shallow");
43
54
  var store_1 = require("../store");
55
+ var utils_1 = require("../utils");
44
56
  var TableColGroupFrozen_1 = __importDefault(require("./TableColGroupFrozen"));
45
57
  var TableHead_1 = require("./TableHead");
46
58
  var TableSummary_1 = require("./TableSummary");
@@ -49,57 +61,47 @@ function TableSummaryFrozen(_a) {
49
61
  // [Selector Group 1] Summary Configuration - 요약 설정
50
62
  var _b = (0, store_1.useAppStore)((0, shallow_1.useShallow)(function (s) { return ({
51
63
  summaryHeight: s.summaryHeight,
64
+ summaryRowHeight: s.summaryRowHeight,
52
65
  summary: s.summary,
53
66
  columns: s.columns,
54
- columnsGroup: s.columnsGroup,
55
67
  frozenColumnIndex: s.frozenColumnIndex,
56
68
  variant: s.variant,
57
69
  data: s.data,
58
70
  showLineNumber: s.showLineNumber,
59
71
  rowChecked: s.rowChecked,
60
- }); })), summaryHeight = _b.summaryHeight, summary = _b.summary, columns = _b.columns, columnsGroup = _b.columnsGroup, frozenColumnIndex = _b.frozenColumnIndex, variant = _b.variant, data = _b.data, showLineNumber = _b.showLineNumber, rowChecked = _b.rowChecked;
72
+ }); })), summaryHeight = _b.summaryHeight, summaryRowHeight = _b.summaryRowHeight, summary = _b.summary, columns = _b.columns, frozenColumnIndex = _b.frozenColumnIndex, variant = _b.variant, data = _b.data, showLineNumber = _b.showLineNumber, rowChecked = _b.rowChecked;
61
73
  var hasRowSelection = !!rowChecked;
62
- var summaryColumns = (0, react_1.useMemo)(function () {
63
- var ignoreColumnCnt = 0;
64
- return columns.slice(0, frozenColumnIndex).map(function (column, index) {
65
- var _a, _b, _c;
66
- var columnIndex = index;
67
- var summaryColumn = (_a = summary === null || summary === void 0 ? void 0 : summary.columns) === null || _a === void 0 ? void 0 : _a.find(function (sc) { return sc.columnIndex === columnIndex; });
68
- if (summaryColumn && ((_b = summaryColumn.colSpan) !== null && _b !== void 0 ? _b : 1) > 1) {
69
- ignoreColumnCnt = ((_c = summaryColumn.colSpan) !== null && _c !== void 0 ? _c : 1) - 1;
70
- }
71
- else {
72
- if (ignoreColumnCnt > 0) {
73
- ignoreColumnCnt--;
74
- return {};
75
- }
76
- }
77
- return {
78
- column: column,
79
- columnIndex: columnIndex,
80
- summaryColumn: summaryColumn,
81
- };
82
- });
83
- }, [columns, frozenColumnIndex, summary]);
74
+ var summaryRows = (0, react_1.useMemo)(function () { return (0, utils_1.normalizeSummaryRows)(summary); }, [summary]);
75
+ var renderedRows = (0, react_1.useMemo)(function () {
76
+ var targetColumns = columns.slice(0, frozenColumnIndex);
77
+ return summaryRows.map(function (row, rowIndex) { return ({
78
+ row: row,
79
+ rowIndex: rowIndex,
80
+ cells: (0, utils_1.buildSummaryRowCells)(targetColumns, row.columns, 0),
81
+ }); });
82
+ }, [summaryRows, columns, frozenColumnIndex]);
84
83
  return (React.createElement(TableSummary_1.SummaryTable, { variant: variant, summaryHeight: summaryHeight, position: position },
85
84
  React.createElement(TableColGroupFrozen_1.default, null),
86
- React.createElement("tbody", { role: 'rfdg-summay-frozen' },
87
- React.createElement("tr", null,
85
+ React.createElement("tbody", { role: 'rfdg-summay-frozen' }, renderedRows.map(function (_a) {
86
+ var _b, _c, _d;
87
+ var row = _a.row, rowIndex = _a.rowIndex, cells = _a.cells;
88
+ var rowHeight = (_b = row.height) !== null && _b !== void 0 ? _b : summaryRowHeight;
89
+ return (React.createElement("tr", { key: (_c = row.id) !== null && _c !== void 0 ? _c : rowIndex, className: ['bgrid-summary-row', (_d = row.className) !== null && _d !== void 0 ? _d : ''].filter(Boolean).join(' '), style: __assign(__assign({}, (rowHeight !== undefined ? { height: rowHeight } : {})), row.style) },
88
90
  showLineNumber && React.createElement(TableHead_1.HeadTd, { className: !hasRowSelection ? 'bordered' : '' }, "\u00A0"),
89
91
  hasRowSelection && React.createElement("td", { className: 'bordered' }, "\u00A0"),
90
- summaryColumns.map(function (_a, index) {
91
- var _b, _c;
92
- var column = _a.column, summaryColumn = _a.summaryColumn, columnIndex = _a.columnIndex;
93
- if (!column)
92
+ cells.map(function (cell, index) {
93
+ var _a, _b;
94
+ if (!cell || !cell.column)
94
95
  return null;
96
+ var column = cell.column, summaryColumn = cell.summaryColumn, columnIndex = cell.columnIndex;
95
97
  if (!summaryColumn)
96
98
  return React.createElement("td", { key: index });
97
- return (React.createElement("td", { key: index, style: {
98
- textAlign: summaryColumn.align,
99
- }, colSpan: (_b = summaryColumn.colSpan) !== null && _b !== void 0 ? _b : 1 }, (_c = summaryColumn.itemRender) === null || _c === void 0 ? void 0 : _c.call(summaryColumn, {
99
+ return (React.createElement("td", { key: index, className: summaryColumn.className, style: __assign({ textAlign: summaryColumn.align }, summaryColumn.style), colSpan: (_a = summaryColumn.colSpan) !== null && _a !== void 0 ? _a : 1 }, (_b = summaryColumn.itemRender) === null || _b === void 0 ? void 0 : _b.call(summaryColumn, {
100
100
  column: column,
101
101
  columnIndex: columnIndex,
102
+ rowIndex: rowIndex,
102
103
  data: data,
103
104
  })));
104
- })))));
105
+ })));
106
+ }))));
105
107
  }
@@ -223,6 +223,7 @@ function AppStoreProvider(_a) {
223
223
  visible: true,
224
224
  },
225
225
  summaryHeight: (_j = initialState === null || initialState === void 0 ? void 0 : initialState.summaryHeight) !== null && _j !== void 0 ? _j : 30,
226
+ summaryRowHeight: initialState === null || initialState === void 0 ? void 0 : initialState.summaryRowHeight,
226
227
  itemHeight: (_k = initialState === null || initialState === void 0 ? void 0 : initialState.itemHeight) !== null && _k !== void 0 ? _k : 15,
227
228
  itemPadding: (_l = initialState === null || initialState === void 0 ? void 0 : initialState.itemPadding) !== null && _l !== void 0 ? _l : 7,
228
229
  frozenColumnIndex: (_m = initialState === null || initialState === void 0 ? void 0 : initialState.frozenColumnIndex) !== null && _m !== void 0 ? _m : 0,
@@ -917,6 +918,7 @@ function AppStoreProvider(_a) {
917
918
  setHeaderHeight: function (headerHeight) { return set({ headerHeight: headerHeight }); },
918
919
  setFooterHeight: function (footerHeight) { return set({ footerHeight: footerHeight }); },
919
920
  setSummaryHeight: function (summaryHeight) { return set({ summaryHeight: summaryHeight }); },
921
+ setSummaryRowHeight: function (summaryRowHeight) { return set({ summaryRowHeight: summaryRowHeight }); },
920
922
  setItemHeight: function (itemHeight) { return set({ itemHeight: itemHeight }); },
921
923
  setItemPadding: function (itemPadding) { return set({ itemPadding: itemPadding }); },
922
924
  setFrozenColumnIndex: function (frozenColumnIndex) { return set({ frozenColumnIndex: frozenColumnIndex }); },
@@ -15,7 +15,7 @@ exports.getCellSelectionFragments = getCellSelectionFragments;
15
15
  exports.clipCellSelectionFragment = clipCellSelectionFragment;
16
16
  exports.normalizeCellSelectionRange = normalizeCellSelectionRange;
17
17
  function getCellSelectionFragments(_a) {
18
- var ranges = _a.ranges, columns = _a.columns, rowCount = _a.rowCount, rowHeight = _a.rowHeight, frozenColumnCount = _a.frozenColumnCount, frozenRowCount = _a.frozenRowCount, frozenColumnsWidth = _a.frozenColumnsWidth, rowOffsets = _a.rowOffsets;
18
+ var ranges = _a.ranges, columns = _a.columns, rowCount = _a.rowCount, rowHeight = _a.rowHeight, frozenColumnCount = _a.frozenColumnCount, frozenRowCount = _a.frozenRowCount, frozenColumnsWidth = _a.frozenColumnsWidth, rowOffsets = _a.rowOffsets, rowHeights = _a.rowHeights, detailHeights = _a.detailHeights;
19
19
  var safeRowCount = Math.max(0, Math.floor(rowCount));
20
20
  var safeColumnCount = columns.length;
21
21
  var safeRowHeight = Math.max(1, rowHeight);
@@ -55,6 +55,8 @@ function getCellSelectionFragments(_a) {
55
55
  selectedColumns: selectedColumns,
56
56
  rowHeight: safeRowHeight,
57
57
  rowOffsets: rowOffsets,
58
+ rowHeights: rowHeights,
59
+ detailHeights: detailHeights,
58
60
  left: frozenDataOffset + getColumnsWidth(columns, 0, leftColumns.start - 1),
59
61
  width: getColumnsWidth(columns, leftColumns.start, leftColumns.end),
60
62
  top: getRowsTop(topRows.start, 0, safeRowHeight, rowOffsets),
@@ -70,6 +72,8 @@ function getCellSelectionFragments(_a) {
70
72
  selectedColumns: selectedColumns,
71
73
  rowHeight: safeRowHeight,
72
74
  rowOffsets: rowOffsets,
75
+ rowHeights: rowHeights,
76
+ detailHeights: detailHeights,
73
77
  left: getMainColumnLeft(columns, mainColumns.start, safeFrozenColumnCount),
74
78
  width: getMainColumnRight(columns, mainColumns.end, safeFrozenColumnCount) -
75
79
  getMainColumnLeft(columns, mainColumns.start, safeFrozenColumnCount),
@@ -86,6 +90,8 @@ function getCellSelectionFragments(_a) {
86
90
  selectedColumns: selectedColumns,
87
91
  rowHeight: safeRowHeight,
88
92
  rowOffsets: rowOffsets,
93
+ rowHeights: rowHeights,
94
+ detailHeights: detailHeights,
89
95
  left: frozenDataOffset + getColumnsWidth(columns, 0, leftColumns.start - 1),
90
96
  width: getColumnsWidth(columns, leftColumns.start, leftColumns.end),
91
97
  top: getRowsTop(bodyRows.start, safeFrozenRowCount, safeRowHeight, rowOffsets),
@@ -101,6 +107,8 @@ function getCellSelectionFragments(_a) {
101
107
  selectedColumns: selectedColumns,
102
108
  rowHeight: safeRowHeight,
103
109
  rowOffsets: rowOffsets,
110
+ rowHeights: rowHeights,
111
+ detailHeights: detailHeights,
104
112
  left: getMainColumnLeft(columns, mainColumns.start, safeFrozenColumnCount),
105
113
  width: getMainColumnRight(columns, mainColumns.end, safeFrozenColumnCount) -
106
114
  getMainColumnLeft(columns, mainColumns.start, safeFrozenColumnCount),
@@ -137,17 +145,14 @@ function normalizeCellSelectionRange(range) {
137
145
  };
138
146
  }
139
147
  function createFragment(_a) {
140
- var _b, _c;
141
- var rangeIndex = _a.rangeIndex, quadrant = _a.quadrant, rows = _a.rows, columns = _a.columns, selectedRows = _a.selectedRows, selectedColumns = _a.selectedColumns, rowHeight = _a.rowHeight, rowOffsets = _a.rowOffsets, left = _a.left, top = _a.top, width = _a.width;
148
+ var rangeIndex = _a.rangeIndex, quadrant = _a.quadrant, rows = _a.rows, columns = _a.columns, selectedRows = _a.selectedRows, selectedColumns = _a.selectedColumns, rowHeight = _a.rowHeight, rowOffsets = _a.rowOffsets, rowHeights = _a.rowHeights, detailHeights = _a.detailHeights, left = _a.left, top = _a.top, width = _a.width;
142
149
  return {
143
150
  rangeIndex: rangeIndex,
144
151
  quadrant: quadrant,
145
152
  left: left,
146
153
  top: top,
147
154
  width: width,
148
- height: rowOffsets
149
- ? ((_b = rowOffsets[rows.end + 1]) !== null && _b !== void 0 ? _b : 0) - ((_c = rowOffsets[rows.start]) !== null && _c !== void 0 ? _c : 0)
150
- : (rows.end - rows.start + 1) * rowHeight,
155
+ height: getRowsHeight(rows.start, rows.end, rowHeight, rowOffsets, rowHeights, detailHeights),
151
156
  edges: {
152
157
  top: rows.start === selectedRows.start,
153
158
  right: columns.end === selectedColumns.end,
@@ -156,6 +161,27 @@ function createFragment(_a) {
156
161
  },
157
162
  };
158
163
  }
164
+ function getRowsHeight(start, end, rowHeight, rowOffsets, rowHeights, detailHeights) {
165
+ var _a, _b, _c, _d, _e, _f;
166
+ if (rowHeights && rowHeights[end] !== undefined) {
167
+ var endRowHeight = rowHeights[end];
168
+ if (start === end)
169
+ return endRowHeight;
170
+ var topStart = rowOffsets ? (_a = rowOffsets[start]) !== null && _a !== void 0 ? _a : 0 : start * rowHeight;
171
+ var topEnd = rowOffsets ? (_b = rowOffsets[end]) !== null && _b !== void 0 ? _b : 0 : end * rowHeight;
172
+ return topEnd + endRowHeight - topStart;
173
+ }
174
+ if (rowOffsets) {
175
+ var topStart = (_c = rowOffsets[start]) !== null && _c !== void 0 ? _c : 0;
176
+ var topEnd = (_d = rowOffsets[end]) !== null && _d !== void 0 ? _d : 0;
177
+ var detailEnd = (_e = detailHeights === null || detailHeights === void 0 ? void 0 : detailHeights[end]) !== null && _e !== void 0 ? _e : 0;
178
+ var endRowHeight = Math.max(((_f = rowOffsets[end + 1]) !== null && _f !== void 0 ? _f : (topEnd + rowHeight)) - topEnd - detailEnd, 0);
179
+ if (start === end)
180
+ return endRowHeight;
181
+ return topEnd + endRowHeight - topStart;
182
+ }
183
+ return (end - start + 1) * rowHeight;
184
+ }
159
185
  function getRowsTop(start, base, rowHeight, rowOffsets) {
160
186
  var _a, _b;
161
187
  return rowOffsets ? ((_a = rowOffsets[start]) !== null && _a !== void 0 ? _a : 0) - ((_b = rowOffsets[base]) !== null && _b !== void 0 ? _b : 0) : (start - base) * rowHeight;
@@ -94,21 +94,24 @@ function projectCellMergeOptions(options, visibleIndexByOriginalIndex) {
94
94
  }, {});
95
95
  return __assign(__assign({}, options), { columnsMap: columnsMap });
96
96
  }
97
- function projectSummary(summary, visibleIndexByOriginalIndex) {
97
+ function projectSummaryColumn(sc, vMap) {
98
+ var _a;
99
+ var end = sc.columnIndex + ((_a = sc.colSpan) !== null && _a !== void 0 ? _a : 1);
100
+ var idxs = [];
101
+ for (var i = sc.columnIndex; i < end; i++) {
102
+ var v = vMap.get(i);
103
+ if (v !== undefined)
104
+ idxs.push(v);
105
+ }
106
+ return idxs.length ? [__assign(__assign({}, sc), { columnIndex: idxs[0], colSpan: idxs.length })] : [];
107
+ }
108
+ function projectSummary(summary, vMap) {
98
109
  if (!summary)
99
110
  return undefined;
100
- var columns = summary.columns.flatMap(function (summaryColumn) {
101
- var _a;
102
- var originalEnd = summaryColumn.columnIndex + ((_a = summaryColumn.colSpan) !== null && _a !== void 0 ? _a : 1);
103
- var visibleIndexes = [];
104
- for (var index = summaryColumn.columnIndex; index < originalEnd; index += 1) {
105
- var visibleIndex = visibleIndexByOriginalIndex.get(index);
106
- if (visibleIndex !== undefined)
107
- visibleIndexes.push(visibleIndex);
111
+ var projectCols = function (cols) { return cols.flatMap(function (c) { return projectSummaryColumn(c, vMap); }); };
112
+ return __assign(__assign(__assign({}, summary), (summary.columns ? { columns: projectCols(summary.columns) } : {})), (summary.rows
113
+ ? {
114
+ rows: summary.rows.map(function (r) { return (Array.isArray(r) ? projectCols(r) : __assign(__assign({}, r), { columns: projectCols(r.columns) })); }),
108
115
  }
109
- if (!visibleIndexes.length)
110
- return [];
111
- return [__assign(__assign({}, summaryColumn), { columnIndex: visibleIndexes[0], colSpan: visibleIndexes.length })];
112
- });
113
- return __assign(__assign({}, summary), { columns: columns });
116
+ : {}));
114
117
  }
@@ -46,3 +46,4 @@ __exportStar(require("./checkedIndexes"), exports);
46
46
  __exportStar(require("./exportData"), exports);
47
47
  __exportStar(require("./exportCsv"), exports);
48
48
  __exportStar(require("./exportExcel"), exports);
49
+ __exportStar(require("./summary"), exports);
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRowHeightMetrics = createRowHeightMetrics;
4
4
  exports.getRowIndexAtOffset = getRowIndexAtOffset;
5
5
  exports.lowerBoundRowOffset = lowerBoundRowOffset;
6
- function createRowHeightMetrics(data, fallbackHeight, getRowHeight) {
6
+ function createRowHeightMetrics(data, fallbackHeight, getRowHeight, masterDetail) {
7
+ var _a, _b;
7
8
  var safeFallback = Number.isFinite(fallbackHeight) && fallbackHeight > 0 ? fallbackHeight : 1;
8
- if (!getRowHeight) {
9
+ var hasMasterDetail = Boolean(masterDetail && masterDetail.expandedKeysSet.size > 0);
10
+ if (!getRowHeight && !hasMasterDetail) {
9
11
  return {
10
12
  heights: new Float64Array(0),
11
13
  offsets: new Float64Array(0),
@@ -15,17 +17,56 @@ function createRowHeightMetrics(data, fallbackHeight, getRowHeight) {
15
17
  }
16
18
  var heights = new Float64Array(data.length);
17
19
  var offsets = new Float64Array(data.length + 1);
20
+ var detailHeights = hasMasterDetail ? new Float64Array(data.length) : undefined;
18
21
  for (var index = 0; index < data.length; index += 1) {
19
- var requestedHeight = getRowHeight(data[index].values, index);
20
- var height = Number.isFinite(requestedHeight) && requestedHeight > 0 ? requestedHeight : safeFallback;
21
- heights[index] = height;
22
- offsets[index + 1] = offsets[index] + height;
22
+ var item = data[index];
23
+ var sourceIndex = (_b = (_a = masterDetail === null || masterDetail === void 0 ? void 0 : masterDetail.sourceIndexByVisibleIndex) === null || _a === void 0 ? void 0 : _a[index]) !== null && _b !== void 0 ? _b : index;
24
+ var masterHeight = safeFallback;
25
+ if (getRowHeight) {
26
+ try {
27
+ var requestedHeight = getRowHeight(item.values, index);
28
+ masterHeight = Number.isFinite(requestedHeight) && requestedHeight > 0 ? requestedHeight : safeFallback;
29
+ }
30
+ catch (_c) {
31
+ masterHeight = safeFallback;
32
+ }
33
+ }
34
+ heights[index] = masterHeight;
35
+ var detailHeight = 0;
36
+ if (hasMasterDetail && masterDetail) {
37
+ var rowKey = masterDetail.getRowKey(item.values, index);
38
+ if (rowKey !== undefined && rowKey !== null && masterDetail.expandedKeysSet.has(rowKey)) {
39
+ var isExpandable = true;
40
+ if (masterDetail.hasDetail) {
41
+ try {
42
+ isExpandable = masterDetail.hasDetail(item, sourceIndex);
43
+ }
44
+ catch (_d) {
45
+ isExpandable = false;
46
+ }
47
+ }
48
+ if (isExpandable) {
49
+ try {
50
+ var requestedDetailHeight = masterDetail.getDetailHeight(item, sourceIndex);
51
+ detailHeight =
52
+ Number.isFinite(requestedDetailHeight) && requestedDetailHeight > 0 ? requestedDetailHeight : 200;
53
+ }
54
+ catch (_e) {
55
+ detailHeight = 200;
56
+ }
57
+ }
58
+ }
59
+ detailHeights[index] = detailHeight;
60
+ }
61
+ var layoutHeight = masterHeight + detailHeight;
62
+ offsets[index + 1] = offsets[index] + layoutHeight;
23
63
  }
24
64
  return {
25
65
  heights: heights,
26
66
  offsets: offsets,
27
67
  totalHeight: offsets[data.length],
28
68
  variable: true,
69
+ detailHeights: detailHeights,
29
70
  };
30
71
  }
31
72
  /** Returns the row containing offset, or rowCount when offset is at/after the end. */
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.DEFAULT_SUMMARY_ROW_HEIGHT = void 0;
15
+ exports.normalizeSummaryRows = normalizeSummaryRows;
16
+ exports.computeSummaryHeight = computeSummaryHeight;
17
+ exports.buildSummaryRowCells = buildSummaryRowCells;
18
+ exports.DEFAULT_SUMMARY_ROW_HEIGHT = 30;
19
+ function normalizeSummaryRows(summary) {
20
+ var _a, _b;
21
+ if (!summary)
22
+ return [];
23
+ if ((_a = summary.rows) === null || _a === void 0 ? void 0 : _a.length) {
24
+ return summary.rows.map(function (row, idx) { var _a; return Array.isArray(row) ? { id: idx, columns: row } : __assign(__assign({}, row), { id: (_a = row.id) !== null && _a !== void 0 ? _a : idx }); });
25
+ }
26
+ return ((_b = summary.columns) === null || _b === void 0 ? void 0 : _b.length) ? [{ id: 0, columns: summary.columns }] : [];
27
+ }
28
+ function computeSummaryHeight(options) {
29
+ var summary = options.summary, summaryHeight = options.summaryHeight, _a = options.summaryRowHeight, summaryRowHeight = _a === void 0 ? exports.DEFAULT_SUMMARY_ROW_HEIGHT : _a;
30
+ if (!summary)
31
+ return 0;
32
+ var rows = normalizeSummaryRows(summary);
33
+ if (!rows.length)
34
+ return 0;
35
+ return summaryHeight !== undefined
36
+ ? summaryHeight
37
+ : rows.reduce(function (acc, row) { var _a; return acc + ((_a = row.height) !== null && _a !== void 0 ? _a : summaryRowHeight); }, 0);
38
+ }
39
+ function buildSummaryRowCells(columns, summaryColumns, startIndex) {
40
+ if (startIndex === void 0) { startIndex = 0; }
41
+ var ignoreCnt = 0;
42
+ return columns.map(function (column, i) {
43
+ var _a, _b;
44
+ var columnIndex = startIndex + i;
45
+ var summaryColumn = summaryColumns === null || summaryColumns === void 0 ? void 0 : summaryColumns.find(function (sc) { return sc.columnIndex === columnIndex; });
46
+ if (summaryColumn && ((_a = summaryColumn.colSpan) !== null && _a !== void 0 ? _a : 1) > 1) {
47
+ ignoreCnt = ((_b = summaryColumn.colSpan) !== null && _b !== void 0 ? _b : 1) - 1;
48
+ }
49
+ else if (ignoreCnt > 0) {
50
+ ignoreCnt--;
51
+ return null;
52
+ }
53
+ return { column: column, columnIndex: columnIndex, summaryColumn: summaryColumn };
54
+ });
55
+ }
@@ -387,7 +387,11 @@ function useRowReorderController(_a) {
387
387
  container.style.setProperty('--bgrid-row-reorder-height', "".concat(session.rowHeight, "px"));
388
388
  store.getState().clearCellSelection();
389
389
  store.getState().closeTransientSurfaces();
390
- container.querySelectorAll('.bgrid-row-hover').forEach(function (element) { return element.classList.remove('bgrid-row-hover'); });
390
+ container.querySelectorAll('.bgrid-row-hover').forEach(function (element) {
391
+ if (element.closest('[role="grid"], [role="treegrid"]') !== container)
392
+ return;
393
+ element.classList.remove('bgrid-row-hover');
394
+ });
391
395
  store.setState({
392
396
  reorderingInfo: {
393
397
  fromIndex: session.fromIndex,