handsontable 0.0.0-next-31297ac-20231204 → 0.0.0-next-d76be4f-20231206

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.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (46) hide show
  1. package/3rdparty/walkontable/src/calculator/index.js +11 -6
  2. package/3rdparty/walkontable/src/calculator/index.mjs +5 -3
  3. package/3rdparty/walkontable/src/calculator/renderAllColumns.js +50 -0
  4. package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +46 -0
  5. package/3rdparty/walkontable/src/calculator/renderAllRows.js +50 -0
  6. package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +46 -0
  7. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -122
  8. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +2 -124
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +2 -3
  11. package/3rdparty/walkontable/src/index.js +3 -4
  12. package/3rdparty/walkontable/src/index.mjs +1 -2
  13. package/3rdparty/walkontable/src/renderer/colGroup.js +10 -0
  14. package/3rdparty/walkontable/src/renderer/colGroup.mjs +10 -0
  15. package/3rdparty/walkontable/src/renderer/rows.js +4 -3
  16. package/3rdparty/walkontable/src/renderer/rows.mjs +4 -3
  17. package/3rdparty/walkontable/src/settings.js +2 -0
  18. package/3rdparty/walkontable/src/settings.mjs +2 -0
  19. package/3rdparty/walkontable/src/utils/column.js +27 -12
  20. package/3rdparty/walkontable/src/utils/column.mjs +27 -12
  21. package/3rdparty/walkontable/src/utils/columnStretching.js +219 -0
  22. package/3rdparty/walkontable/src/utils/columnStretching.mjs +215 -0
  23. package/3rdparty/walkontable/src/viewport.js +22 -17
  24. package/3rdparty/walkontable/src/viewport.mjs +23 -18
  25. package/base.js +2 -2
  26. package/base.mjs +2 -2
  27. package/core/focusCatcher/index.js +34 -4
  28. package/core/focusCatcher/index.mjs +34 -4
  29. package/dataMap/metaManager/metaSchema.js +28 -2
  30. package/dataMap/metaManager/metaSchema.mjs +28 -2
  31. package/dataMap/metaManager/mods/extendMetaProperties.js +12 -0
  32. package/dataMap/metaManager/mods/extendMetaProperties.mjs +12 -0
  33. package/dist/handsontable.css +2 -2
  34. package/dist/handsontable.full.css +2 -2
  35. package/dist/handsontable.full.js +1960 -1646
  36. package/dist/handsontable.full.min.css +2 -2
  37. package/dist/handsontable.full.min.js +70 -67
  38. package/dist/handsontable.js +1962 -1648
  39. package/dist/handsontable.min.css +2 -2
  40. package/dist/handsontable.min.js +27 -24
  41. package/helpers/mixed.js +1 -1
  42. package/helpers/mixed.mjs +1 -1
  43. package/package.json +1 -1
  44. package/settings.d.ts +1 -0
  45. package/tableView.js +1 -0
  46. package/tableView.mjs +1 -0
@@ -2,10 +2,10 @@ import "core-js/modules/es.error.cause.js";
2
2
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
3
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
4
4
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
5
+ import BaseRenderer from "./_base.mjs";
5
6
  import { warn } from "./../../../../helpers/console.mjs";
6
7
  import { toSingleLine } from "./../../../../helpers/templateLiteralTag.mjs";
7
8
  import { OrderView } from "./../utils/orderView/index.mjs";
8
- import BaseRenderer from "./_base.mjs";
9
9
  import { setAttribute } from "../../../../helpers/dom/element.mjs";
10
10
  import { A11Y_ROW, A11Y_ROWGROUP, A11Y_ROWINDEX } from "../../../../helpers/a11y.mjs";
11
11
  let performanceWarningAppeared = false;
@@ -53,8 +53,9 @@ export default class RowsRenderer extends BaseRenderer {
53
53
  } = this.table;
54
54
  if (!performanceWarningAppeared && rowsToRender > 1000) {
55
55
  performanceWarningAppeared = true;
56
- warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting\x20
57
- the number of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.`);
56
+ warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows.\x20
57
+ Consider limiting the number of rendered rows by specifying the table height and/or\x20
58
+ turning off the "renderAllRows" option.`);
58
59
  }
59
60
  if (this.table.isAriaEnabled()) {
60
61
  setAttribute(this.rootNode, [A11Y_ROWGROUP()]);
@@ -36,6 +36,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
36
36
  * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`.
37
37
  * @property {Option} preventOverflow Option `preventOverflow`.
38
38
  * @property {Option} preventWheel Option `preventWheel`.
39
+ * @property {Option} renderAllColumns Option `renderAllColumns`.
39
40
  * @property {Option} renderAllRows Option `renderAllRows`.
40
41
  * @property {Option} rowHeaders Option `rowHeaders`.
41
42
  * @property {Option} rowHeight Option `,`.
@@ -219,6 +220,7 @@ class Settings {
219
220
  onBeforeHighlightingColumnHeader: sourceCol => sourceCol,
220
221
  onWindowResize: null,
221
222
  onContainerElementResize: null,
223
+ renderAllColumns: false,
222
224
  renderAllRows: false,
223
225
  groups: false,
224
226
  rowHeaderWidth: null,
@@ -33,6 +33,7 @@ import { objectEach } from "../../../helpers/object.mjs";
33
33
  * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`.
34
34
  * @property {Option} preventOverflow Option `preventOverflow`.
35
35
  * @property {Option} preventWheel Option `preventWheel`.
36
+ * @property {Option} renderAllColumns Option `renderAllColumns`.
36
37
  * @property {Option} renderAllRows Option `renderAllRows`.
37
38
  * @property {Option} rowHeaders Option `rowHeaders`.
38
39
  * @property {Option} rowHeight Option `,`.
@@ -214,6 +215,7 @@ export default class Settings {
214
215
  onBeforeHighlightingColumnHeader: sourceCol => sourceCol,
215
216
  onWindowResize: null,
216
217
  onContainerElementResize: null,
218
+ renderAllColumns: false,
217
219
  renderAllRows: false,
218
220
  groups: false,
219
221
  rowHeaderWidth: null,
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  var _element = require("./../../../../helpers/dom/element");
6
+ var _columnStretching = require("./columnStretching");
6
7
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
8
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
8
9
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
@@ -29,8 +30,18 @@ class ColumnUtils {
29
30
  * @type {Map<number, number>}
30
31
  */
31
32
  _defineProperty(this, "headerWidths", new Map());
33
+ /**
34
+ * @type {ColumnStretching}
35
+ */
36
+ _defineProperty(this, "stretching", void 0);
32
37
  this.dataAccessObject = dataAccessObject;
33
38
  this.wtSettings = wtSettings;
39
+ this.stretching = new _columnStretching.ColumnStretching({
40
+ totalColumns: () => this.wtSettings.getSetting('totalColumns'),
41
+ stretchMode: () => this.wtSettings.getSetting('stretchH'),
42
+ stretchingColumnWidthFn: (stretchedWidth, column) => this.wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column),
43
+ columnWidthFn: sourceCol => this.dataAccessObject.wtTable.getColumnWidth(sourceCol)
44
+ });
34
45
  }
35
46
 
36
47
  /**
@@ -50,13 +61,10 @@ class ColumnUtils {
50
61
  * @returns {number}
51
62
  */
52
63
  getStretchedColumnWidth(sourceIndex) {
53
- const calculator = this.dataAccessObject.wtViewport.columnsRenderCalculator;
54
64
  let width = this.getWidth(sourceIndex);
55
- if (calculator) {
56
- const stretchedWidth = calculator.getStretchedColumnWidth(sourceIndex, width);
57
- if (stretchedWidth) {
58
- width = stretchedWidth;
59
- }
65
+ const stretchedWidth = this.stretching.getStretchedColumnWidth(sourceIndex, width);
66
+ if (stretchedWidth) {
67
+ width = stretchedWidth;
60
68
  }
61
69
  return width;
62
70
  }
@@ -87,12 +95,9 @@ class ColumnUtils {
87
95
  }
88
96
 
89
97
  /**
90
- * Calculates column header widths that can be retrieved from the cache.
98
+ * Refreshes the stretching column width by recalculating the widths of the columns.
91
99
  */
92
- calculateWidths() {
93
- const {
94
- wtSettings
95
- } = this;
100
+ refreshStretching() {
96
101
  const {
97
102
  wtTable,
98
103
  wtViewport,
@@ -100,8 +105,18 @@ class ColumnUtils {
100
105
  } = this.dataAccessObject;
101
106
  const mainHolder = cloneSource ? cloneSource.wtTable.holder : wtTable.holder;
102
107
  const scrollbarCompensation = mainHolder.offsetHeight < mainHolder.scrollHeight ? (0, _element.getScrollbarWidth)() : 0;
108
+ this.stretching.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);
109
+ }
110
+
111
+ /**
112
+ * Calculates column header widths that can be retrieved from the cache.
113
+ */
114
+ calculateWidths() {
115
+ const {
116
+ wtSettings
117
+ } = this;
103
118
  let rowHeaderWidthSetting = wtSettings.getSetting('rowHeaderWidth');
104
- wtViewport.columnsRenderCalculator.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);
119
+ this.refreshStretching();
105
120
  rowHeaderWidthSetting = wtSettings.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);
106
121
  if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== undefined) {
107
122
  const rowHeadersCount = wtSettings.getSetting('rowHeaders').length;
@@ -3,6 +3,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
3
3
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
4
4
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
5
5
  import { getScrollbarWidth } from "./../../../../helpers/dom/element.mjs";
6
+ import { ColumnStretching } from "./columnStretching.mjs";
6
7
  /**
7
8
  * Column utils class contains all necessary information about sizes of the columns.
8
9
  *
@@ -26,8 +27,18 @@ export default class ColumnUtils {
26
27
  * @type {Map<number, number>}
27
28
  */
28
29
  _defineProperty(this, "headerWidths", new Map());
30
+ /**
31
+ * @type {ColumnStretching}
32
+ */
33
+ _defineProperty(this, "stretching", void 0);
29
34
  this.dataAccessObject = dataAccessObject;
30
35
  this.wtSettings = wtSettings;
36
+ this.stretching = new ColumnStretching({
37
+ totalColumns: () => this.wtSettings.getSetting('totalColumns'),
38
+ stretchMode: () => this.wtSettings.getSetting('stretchH'),
39
+ stretchingColumnWidthFn: (stretchedWidth, column) => this.wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column),
40
+ columnWidthFn: sourceCol => this.dataAccessObject.wtTable.getColumnWidth(sourceCol)
41
+ });
31
42
  }
32
43
 
33
44
  /**
@@ -47,13 +58,10 @@ export default class ColumnUtils {
47
58
  * @returns {number}
48
59
  */
49
60
  getStretchedColumnWidth(sourceIndex) {
50
- const calculator = this.dataAccessObject.wtViewport.columnsRenderCalculator;
51
61
  let width = this.getWidth(sourceIndex);
52
- if (calculator) {
53
- const stretchedWidth = calculator.getStretchedColumnWidth(sourceIndex, width);
54
- if (stretchedWidth) {
55
- width = stretchedWidth;
56
- }
62
+ const stretchedWidth = this.stretching.getStretchedColumnWidth(sourceIndex, width);
63
+ if (stretchedWidth) {
64
+ width = stretchedWidth;
57
65
  }
58
66
  return width;
59
67
  }
@@ -84,12 +92,9 @@ export default class ColumnUtils {
84
92
  }
85
93
 
86
94
  /**
87
- * Calculates column header widths that can be retrieved from the cache.
95
+ * Refreshes the stretching column width by recalculating the widths of the columns.
88
96
  */
89
- calculateWidths() {
90
- const {
91
- wtSettings
92
- } = this;
97
+ refreshStretching() {
93
98
  const {
94
99
  wtTable,
95
100
  wtViewport,
@@ -97,8 +102,18 @@ export default class ColumnUtils {
97
102
  } = this.dataAccessObject;
98
103
  const mainHolder = cloneSource ? cloneSource.wtTable.holder : wtTable.holder;
99
104
  const scrollbarCompensation = mainHolder.offsetHeight < mainHolder.scrollHeight ? getScrollbarWidth() : 0;
105
+ this.stretching.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);
106
+ }
107
+
108
+ /**
109
+ * Calculates column header widths that can be retrieved from the cache.
110
+ */
111
+ calculateWidths() {
112
+ const {
113
+ wtSettings
114
+ } = this;
100
115
  let rowHeaderWidthSetting = wtSettings.getSetting('rowHeaderWidth');
101
- wtViewport.columnsRenderCalculator.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);
116
+ this.refreshStretching();
102
117
  rowHeaderWidthSetting = wtSettings.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);
103
118
  if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== undefined) {
104
119
  const rowHeadersCount = wtSettings.getSetting('rowHeaders').length;
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ require("core-js/modules/es.error.cause.js");
5
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
6
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
7
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
9
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
10
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
11
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
12
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
13
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
14
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
15
+ var _totalTargetWidth = /*#__PURE__*/new WeakMap();
16
+ var _totalColumns = /*#__PURE__*/new WeakMap();
17
+ var _stretchingColumnWidthFn = /*#__PURE__*/new WeakMap();
18
+ var _columnWidthFn = /*#__PURE__*/new WeakMap();
19
+ var _stretchMode = /*#__PURE__*/new WeakMap();
20
+ /**
21
+ * @typedef {object} ColumnStretchingOptions
22
+ * @property {number} totalColumns Total number of columns.
23
+ * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).
24
+ * @property {'all' | 'last' | 'none'} stretchMode Stretch mode 'all', 'last' or 'none'.
25
+ * @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.
26
+ */
27
+ /**
28
+ * @class ColumnStretching
29
+ */
30
+ class ColumnStretching {
31
+ /**
32
+ * Default column width.
33
+ *
34
+ * @type {number}
35
+ */
36
+ static get DEFAULT_WIDTH() {
37
+ return 50;
38
+ }
39
+
40
+ /**
41
+ * @type {number}
42
+ */
43
+
44
+ /**
45
+ * @param {ColumnStretchingOptions} options Object with all options specified for column viewport calculation.
46
+ */
47
+ constructor(_ref) {
48
+ let {
49
+ totalColumns,
50
+ stretchMode,
51
+ stretchingColumnWidthFn,
52
+ columnWidthFn
53
+ } = _ref;
54
+ _defineProperty(this, "stretchAllRatio", 0);
55
+ /**
56
+ * @type {number}
57
+ */
58
+ _defineProperty(this, "stretchLastWidth", 0);
59
+ /**
60
+ * @type {number[]}
61
+ */
62
+ _defineProperty(this, "stretchAllColumnsWidth", []);
63
+ /**
64
+ * @type {number}
65
+ */
66
+ _classPrivateFieldInitSpec(this, _totalTargetWidth, {
67
+ writable: true,
68
+ value: 0
69
+ });
70
+ /**
71
+ * @type {boolean}
72
+ */
73
+ _defineProperty(this, "needVerifyLastColumnWidth", true);
74
+ /**
75
+ * The total number of columns.
76
+ *
77
+ * @type {function(): number}
78
+ */
79
+ _classPrivateFieldInitSpec(this, _totalColumns, {
80
+ writable: true,
81
+ value: () => 0
82
+ });
83
+ /**
84
+ * Function that returns the width of the stretched column at a given index (in px).
85
+ *
86
+ * @type {function(): number}
87
+ */
88
+ _classPrivateFieldInitSpec(this, _stretchingColumnWidthFn, {
89
+ writable: true,
90
+ value: width => width
91
+ });
92
+ /**
93
+ * Function that returns the width of the column at a given index (in px).
94
+ *
95
+ * @type {function(): number}
96
+ */
97
+ _classPrivateFieldInitSpec(this, _columnWidthFn, {
98
+ writable: true,
99
+ value: width => width
100
+ });
101
+ /**
102
+ * Stretch mode.
103
+ *
104
+ * @type {function(): 'all' | 'last' | 'none'}
105
+ */
106
+ _classPrivateFieldInitSpec(this, _stretchMode, {
107
+ writable: true,
108
+ value: () => 'none'
109
+ });
110
+ _classPrivateFieldSet(this, _totalColumns, totalColumns);
111
+ _classPrivateFieldSet(this, _stretchMode, stretchMode);
112
+ _classPrivateFieldSet(this, _stretchingColumnWidthFn, stretchingColumnWidthFn !== null && stretchingColumnWidthFn !== void 0 ? stretchingColumnWidthFn : _classPrivateFieldGet(this, _stretchingColumnWidthFn));
113
+ _classPrivateFieldSet(this, _columnWidthFn, columnWidthFn !== null && columnWidthFn !== void 0 ? columnWidthFn : _classPrivateFieldGet(this, _columnWidthFn));
114
+ }
115
+
116
+ /**
117
+ * Recalculate columns stretching.
118
+ *
119
+ * @param {number} totalWidth The total width of the table.
120
+ */
121
+ refreshStretching(totalWidth) {
122
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'none') {
123
+ return;
124
+ }
125
+ _classPrivateFieldSet(this, _totalTargetWidth, totalWidth);
126
+ let sumAll = 0;
127
+ for (let i = 0; i < _classPrivateFieldGet(this, _totalColumns).call(this); i++) {
128
+ const columnWidth = this._getColumnWidth(i);
129
+ const permanentColumnWidth = _classPrivateFieldGet(this, _stretchingColumnWidthFn).call(this, undefined, i);
130
+ if (typeof permanentColumnWidth === 'number') {
131
+ totalWidth -= permanentColumnWidth;
132
+ } else {
133
+ sumAll += columnWidth;
134
+ }
135
+ }
136
+ const remainingSize = totalWidth - sumAll;
137
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'all' && remainingSize > 0) {
138
+ this.stretchAllRatio = totalWidth / sumAll;
139
+ this.stretchAllColumnsWidth = [];
140
+ this.needVerifyLastColumnWidth = true;
141
+ } else if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'last' && totalWidth !== Infinity) {
142
+ const columnWidth = this._getColumnWidth(_classPrivateFieldGet(this, _totalColumns).call(this) - 1);
143
+ const lastColumnWidth = remainingSize + columnWidth;
144
+ this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.
150
+ *
151
+ * @param {number} column The visual column index.
152
+ * @param {number} baseWidth The default column width.
153
+ * @returns {number|null}
154
+ */
155
+ getStretchedColumnWidth(column, baseWidth) {
156
+ let result = null;
157
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'all' && this.stretchAllRatio !== 0) {
158
+ result = this._getStretchedAllColumnWidth(column, baseWidth);
159
+ } else if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'last' && this.stretchLastWidth !== 0) {
160
+ result = this._getStretchedLastColumnWidth(column);
161
+ }
162
+ return result;
163
+ }
164
+
165
+ /**
166
+ * @param {number} column The visual column index.
167
+ * @param {number} baseWidth The default column width.
168
+ * @returns {number}
169
+ * @private
170
+ */
171
+ _getStretchedAllColumnWidth(column, baseWidth) {
172
+ let sumRatioWidth = 0;
173
+ if (!this.stretchAllColumnsWidth[column]) {
174
+ const stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);
175
+ const newStretchedWidth = _classPrivateFieldGet(this, _stretchingColumnWidthFn).call(this, stretchedWidth, column);
176
+ if (newStretchedWidth === undefined) {
177
+ this.stretchAllColumnsWidth[column] = stretchedWidth;
178
+ } else {
179
+ this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth;
180
+ }
181
+ }
182
+ if (this.stretchAllColumnsWidth.length === _classPrivateFieldGet(this, _totalColumns).call(this) && this.needVerifyLastColumnWidth) {
183
+ this.needVerifyLastColumnWidth = false;
184
+ for (let i = 0; i < this.stretchAllColumnsWidth.length; i++) {
185
+ sumRatioWidth += this.stretchAllColumnsWidth[i];
186
+ }
187
+ if (sumRatioWidth !== _classPrivateFieldGet(this, _totalTargetWidth)) {
188
+ this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += _classPrivateFieldGet(this, _totalTargetWidth) - sumRatioWidth;
189
+ }
190
+ }
191
+ return this.stretchAllColumnsWidth[column];
192
+ }
193
+
194
+ /**
195
+ * @param {number} column The visual column index.
196
+ * @returns {number|null}
197
+ * @private
198
+ */
199
+ _getStretchedLastColumnWidth(column) {
200
+ if (column === _classPrivateFieldGet(this, _totalColumns).call(this) - 1) {
201
+ return this.stretchLastWidth;
202
+ }
203
+ return null;
204
+ }
205
+
206
+ /**
207
+ * @param {number} column The visual column index.
208
+ * @returns {number}
209
+ * @private
210
+ */
211
+ _getColumnWidth(column) {
212
+ let width = _classPrivateFieldGet(this, _columnWidthFn).call(this, column);
213
+ if (isNaN(width)) {
214
+ width = ColumnStretching.DEFAULT_WIDTH;
215
+ }
216
+ return width;
217
+ }
218
+ }
219
+ exports.ColumnStretching = ColumnStretching;
@@ -0,0 +1,215 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
8
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
9
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
10
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
11
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
12
+ var _totalTargetWidth = /*#__PURE__*/new WeakMap();
13
+ var _totalColumns = /*#__PURE__*/new WeakMap();
14
+ var _stretchingColumnWidthFn = /*#__PURE__*/new WeakMap();
15
+ var _columnWidthFn = /*#__PURE__*/new WeakMap();
16
+ var _stretchMode = /*#__PURE__*/new WeakMap();
17
+ /**
18
+ * @typedef {object} ColumnStretchingOptions
19
+ * @property {number} totalColumns Total number of columns.
20
+ * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).
21
+ * @property {'all' | 'last' | 'none'} stretchMode Stretch mode 'all', 'last' or 'none'.
22
+ * @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.
23
+ */
24
+ /**
25
+ * @class ColumnStretching
26
+ */
27
+ export class ColumnStretching {
28
+ /**
29
+ * Default column width.
30
+ *
31
+ * @type {number}
32
+ */
33
+ static get DEFAULT_WIDTH() {
34
+ return 50;
35
+ }
36
+
37
+ /**
38
+ * @type {number}
39
+ */
40
+
41
+ /**
42
+ * @param {ColumnStretchingOptions} options Object with all options specified for column viewport calculation.
43
+ */
44
+ constructor(_ref) {
45
+ let {
46
+ totalColumns,
47
+ stretchMode,
48
+ stretchingColumnWidthFn,
49
+ columnWidthFn
50
+ } = _ref;
51
+ _defineProperty(this, "stretchAllRatio", 0);
52
+ /**
53
+ * @type {number}
54
+ */
55
+ _defineProperty(this, "stretchLastWidth", 0);
56
+ /**
57
+ * @type {number[]}
58
+ */
59
+ _defineProperty(this, "stretchAllColumnsWidth", []);
60
+ /**
61
+ * @type {number}
62
+ */
63
+ _classPrivateFieldInitSpec(this, _totalTargetWidth, {
64
+ writable: true,
65
+ value: 0
66
+ });
67
+ /**
68
+ * @type {boolean}
69
+ */
70
+ _defineProperty(this, "needVerifyLastColumnWidth", true);
71
+ /**
72
+ * The total number of columns.
73
+ *
74
+ * @type {function(): number}
75
+ */
76
+ _classPrivateFieldInitSpec(this, _totalColumns, {
77
+ writable: true,
78
+ value: () => 0
79
+ });
80
+ /**
81
+ * Function that returns the width of the stretched column at a given index (in px).
82
+ *
83
+ * @type {function(): number}
84
+ */
85
+ _classPrivateFieldInitSpec(this, _stretchingColumnWidthFn, {
86
+ writable: true,
87
+ value: width => width
88
+ });
89
+ /**
90
+ * Function that returns the width of the column at a given index (in px).
91
+ *
92
+ * @type {function(): number}
93
+ */
94
+ _classPrivateFieldInitSpec(this, _columnWidthFn, {
95
+ writable: true,
96
+ value: width => width
97
+ });
98
+ /**
99
+ * Stretch mode.
100
+ *
101
+ * @type {function(): 'all' | 'last' | 'none'}
102
+ */
103
+ _classPrivateFieldInitSpec(this, _stretchMode, {
104
+ writable: true,
105
+ value: () => 'none'
106
+ });
107
+ _classPrivateFieldSet(this, _totalColumns, totalColumns);
108
+ _classPrivateFieldSet(this, _stretchMode, stretchMode);
109
+ _classPrivateFieldSet(this, _stretchingColumnWidthFn, stretchingColumnWidthFn !== null && stretchingColumnWidthFn !== void 0 ? stretchingColumnWidthFn : _classPrivateFieldGet(this, _stretchingColumnWidthFn));
110
+ _classPrivateFieldSet(this, _columnWidthFn, columnWidthFn !== null && columnWidthFn !== void 0 ? columnWidthFn : _classPrivateFieldGet(this, _columnWidthFn));
111
+ }
112
+
113
+ /**
114
+ * Recalculate columns stretching.
115
+ *
116
+ * @param {number} totalWidth The total width of the table.
117
+ */
118
+ refreshStretching(totalWidth) {
119
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'none') {
120
+ return;
121
+ }
122
+ _classPrivateFieldSet(this, _totalTargetWidth, totalWidth);
123
+ let sumAll = 0;
124
+ for (let i = 0; i < _classPrivateFieldGet(this, _totalColumns).call(this); i++) {
125
+ const columnWidth = this._getColumnWidth(i);
126
+ const permanentColumnWidth = _classPrivateFieldGet(this, _stretchingColumnWidthFn).call(this, undefined, i);
127
+ if (typeof permanentColumnWidth === 'number') {
128
+ totalWidth -= permanentColumnWidth;
129
+ } else {
130
+ sumAll += columnWidth;
131
+ }
132
+ }
133
+ const remainingSize = totalWidth - sumAll;
134
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'all' && remainingSize > 0) {
135
+ this.stretchAllRatio = totalWidth / sumAll;
136
+ this.stretchAllColumnsWidth = [];
137
+ this.needVerifyLastColumnWidth = true;
138
+ } else if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'last' && totalWidth !== Infinity) {
139
+ const columnWidth = this._getColumnWidth(_classPrivateFieldGet(this, _totalColumns).call(this) - 1);
140
+ const lastColumnWidth = remainingSize + columnWidth;
141
+ this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth;
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.
147
+ *
148
+ * @param {number} column The visual column index.
149
+ * @param {number} baseWidth The default column width.
150
+ * @returns {number|null}
151
+ */
152
+ getStretchedColumnWidth(column, baseWidth) {
153
+ let result = null;
154
+ if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'all' && this.stretchAllRatio !== 0) {
155
+ result = this._getStretchedAllColumnWidth(column, baseWidth);
156
+ } else if (_classPrivateFieldGet(this, _stretchMode).call(this) === 'last' && this.stretchLastWidth !== 0) {
157
+ result = this._getStretchedLastColumnWidth(column);
158
+ }
159
+ return result;
160
+ }
161
+
162
+ /**
163
+ * @param {number} column The visual column index.
164
+ * @param {number} baseWidth The default column width.
165
+ * @returns {number}
166
+ * @private
167
+ */
168
+ _getStretchedAllColumnWidth(column, baseWidth) {
169
+ let sumRatioWidth = 0;
170
+ if (!this.stretchAllColumnsWidth[column]) {
171
+ const stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);
172
+ const newStretchedWidth = _classPrivateFieldGet(this, _stretchingColumnWidthFn).call(this, stretchedWidth, column);
173
+ if (newStretchedWidth === undefined) {
174
+ this.stretchAllColumnsWidth[column] = stretchedWidth;
175
+ } else {
176
+ this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth;
177
+ }
178
+ }
179
+ if (this.stretchAllColumnsWidth.length === _classPrivateFieldGet(this, _totalColumns).call(this) && this.needVerifyLastColumnWidth) {
180
+ this.needVerifyLastColumnWidth = false;
181
+ for (let i = 0; i < this.stretchAllColumnsWidth.length; i++) {
182
+ sumRatioWidth += this.stretchAllColumnsWidth[i];
183
+ }
184
+ if (sumRatioWidth !== _classPrivateFieldGet(this, _totalTargetWidth)) {
185
+ this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += _classPrivateFieldGet(this, _totalTargetWidth) - sumRatioWidth;
186
+ }
187
+ }
188
+ return this.stretchAllColumnsWidth[column];
189
+ }
190
+
191
+ /**
192
+ * @param {number} column The visual column index.
193
+ * @returns {number|null}
194
+ * @private
195
+ */
196
+ _getStretchedLastColumnWidth(column) {
197
+ if (column === _classPrivateFieldGet(this, _totalColumns).call(this) - 1) {
198
+ return this.stretchLastWidth;
199
+ }
200
+ return null;
201
+ }
202
+
203
+ /**
204
+ * @param {number} column The visual column index.
205
+ * @returns {number}
206
+ * @private
207
+ */
208
+ _getColumnWidth(column) {
209
+ let width = _classPrivateFieldGet(this, _columnWidthFn).call(this, column);
210
+ if (isNaN(width)) {
211
+ width = ColumnStretching.DEFAULT_WIDTH;
212
+ }
213
+ return width;
214
+ }
215
+ }