handsontable 0.0.0-next-3d099da-20231208 → 0.0.0-next-51d3397-20231211
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/3rdparty/walkontable/src/calculator/index.js +11 -6
- package/3rdparty/walkontable/src/calculator/index.mjs +5 -3
- package/3rdparty/walkontable/src/calculator/renderAllColumns.js +50 -0
- package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +46 -0
- package/3rdparty/walkontable/src/calculator/renderAllRows.js +50 -0
- package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +46 -0
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -122
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +2 -124
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +2 -3
- package/3rdparty/walkontable/src/core/_base.js +0 -12
- package/3rdparty/walkontable/src/core/_base.mjs +0 -12
- package/3rdparty/walkontable/src/core/core.js +0 -2
- package/3rdparty/walkontable/src/core/core.mjs +0 -2
- package/3rdparty/walkontable/src/facade/core.js +0 -9
- package/3rdparty/walkontable/src/facade/core.mjs +0 -9
- package/3rdparty/walkontable/src/index.js +3 -4
- package/3rdparty/walkontable/src/index.mjs +1 -2
- package/3rdparty/walkontable/src/overlays.js +0 -3
- package/3rdparty/walkontable/src/overlays.mjs +0 -4
- package/3rdparty/walkontable/src/renderer/colGroup.js +10 -0
- package/3rdparty/walkontable/src/renderer/colGroup.mjs +10 -0
- package/3rdparty/walkontable/src/renderer/rows.js +4 -3
- package/3rdparty/walkontable/src/renderer/rows.mjs +4 -3
- package/3rdparty/walkontable/src/selection/manager.js +0 -1
- package/3rdparty/walkontable/src/selection/manager.mjs +0 -1
- package/3rdparty/walkontable/src/settings.js +3 -0
- package/3rdparty/walkontable/src/settings.mjs +2 -0
- package/3rdparty/walkontable/src/table.js +0 -1
- package/3rdparty/walkontable/src/table.mjs +0 -1
- package/3rdparty/walkontable/src/utils/column.js +27 -12
- package/3rdparty/walkontable/src/utils/column.mjs +27 -12
- package/3rdparty/walkontable/src/utils/columnStretching.js +219 -0
- package/3rdparty/walkontable/src/utils/columnStretching.mjs +215 -0
- package/3rdparty/walkontable/src/viewport.js +22 -17
- package/3rdparty/walkontable/src/viewport.mjs +23 -18
- package/base.js +4 -2
- package/base.mjs +2 -2
- package/core/focusCatcher/index.js +44 -6
- package/core/focusCatcher/index.mjs +44 -6
- package/core.js +0 -11
- package/core.mjs +0 -11
- package/dataMap/dataMap.js +1 -0
- package/dataMap/metaManager/metaSchema.js +28 -2
- package/dataMap/metaManager/metaSchema.mjs +28 -2
- package/dataMap/metaManager/mods/extendMetaProperties.js +12 -0
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +12 -0
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +3 -3
- package/dist/handsontable.full.js +3979 -5577
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +66 -71
- package/dist/handsontable.js +3058 -4305
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +35 -39
- package/editorManager.js +3 -4
- package/editorManager.mjs +3 -4
- package/editors/autocompleteEditor/autocompleteEditor.js +0 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +0 -2
- package/editors/dateEditor/dateEditor.d.ts +1 -1
- package/editors/dateEditor/dateEditor.js +4 -1
- package/editors/dateEditor/dateEditor.mjs +4 -1
- package/editors/handsontableEditor/handsontableEditor.js +0 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +0 -1
- package/editors/textEditor/textEditor.js +0 -4
- package/editors/textEditor/textEditor.mjs +0 -4
- package/helpers/browser.js +5 -2
- package/helpers/browser.mjs +5 -2
- package/helpers/feature.js +10 -0
- package/helpers/feature.mjs +9 -0
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +3 -4
- package/pluginHooks.d.ts +6 -29
- package/pluginHooks.js +65 -123
- package/pluginHooks.mjs +62 -122
- package/plugins/copyPaste/clipboardData.js +18 -0
- package/plugins/copyPaste/clipboardData.mjs +14 -0
- package/plugins/copyPaste/copyPaste.js +129 -51
- package/plugins/copyPaste/copyPaste.mjs +132 -54
- package/plugins/copyPaste/copyableRanges.js +43 -7
- package/plugins/copyPaste/copyableRanges.mjs +42 -7
- package/plugins/copyPaste/pasteEvent.mjs +1 -1
- package/plugins/customBorders/customBorders.js +0 -5
- package/plugins/customBorders/customBorders.mjs +0 -5
- package/plugins/customBorders/utils.js +0 -1
- package/plugins/customBorders/utils.mjs +0 -1
- package/plugins/filters/ui/radioInput.js +1 -1
- package/plugins/filters/ui/radioInput.mjs +1 -1
- package/plugins/formulas/formulas.js +0 -2
- package/plugins/formulas/formulas.mjs +0 -2
- package/plugins/formulas/indexSyncer/axisSyncer.js +0 -1
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +0 -1
- package/plugins/manualColumnResize/manualColumnResize.js +0 -1
- package/plugins/manualColumnResize/manualColumnResize.mjs +0 -1
- package/plugins/mergeCells/mergeCells.js +1 -127
- package/plugins/mergeCells/mergeCells.mjs +1 -127
- package/plugins/nestedHeaders/nestedHeaders.js +41 -87
- package/plugins/nestedHeaders/nestedHeaders.mjs +42 -88
- package/plugins/nestedHeaders/stateManager/headersTree.js +0 -1
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +0 -1
- package/plugins/undoRedo/undoRedo.js +0 -2
- package/plugins/undoRedo/undoRedo.mjs +0 -2
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +0 -2
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +0 -2
- package/selection/highlight/highlight.js +0 -1
- package/selection/highlight/highlight.mjs +0 -1
- package/selection/index.js +1 -3
- package/selection/index.mjs +2 -2
- package/selection/utils.js +0 -34
- package/selection/utils.mjs +0 -33
- package/settings.d.ts +2 -1
- package/tableView.js +1 -2
- package/tableView.mjs +1 -2
- package/translations/indexMapper.js +2 -1
- package/utils/parseTable.js +84 -538
- package/utils/parseTable.mjs +83 -534
- package/validators/timeValidator/timeValidator.js +0 -1
- package/validators/timeValidator/timeValidator.mjs +0 -1
- package/plugins/copyPaste/clipboardData/clipboardData.js +0 -588
- package/plugins/copyPaste/clipboardData/clipboardData.mjs +0 -584
- package/plugins/copyPaste/clipboardData/copyClipboardData.js +0 -69
- package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +0 -65
- package/plugins/copyPaste/clipboardData/index.js +0 -9
- package/plugins/copyPaste/clipboardData/index.mjs +0 -4
- package/plugins/copyPaste/clipboardData/pasteClipboardData.js +0 -81
- package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +0 -77
@@ -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
|
+
}
|
@@ -255,15 +255,15 @@ class Viewport {
|
|
255
255
|
wtSettings,
|
256
256
|
wtTable
|
257
257
|
} = this;
|
258
|
-
|
258
|
+
if (wtSettings.getSetting('renderAllRows') && calculationType === _calculator.RENDER_TYPE) {
|
259
|
+
return new _calculator.RenderAllRowsCalculator({
|
260
|
+
totalRows: wtSettings.getSetting('totalRows')
|
261
|
+
});
|
262
|
+
}
|
263
|
+
let height = this.getViewportHeight();
|
259
264
|
let scrollbarHeight;
|
260
265
|
let fixedRowsHeight;
|
261
266
|
this.rowHeaderWidth = NaN;
|
262
|
-
if (wtSettings.getSetting('renderAllRows') && calculationType === _calculator.RENDER_TYPE) {
|
263
|
-
height = Infinity;
|
264
|
-
} else {
|
265
|
-
height = this.getViewportHeight();
|
266
|
-
}
|
267
267
|
let pos = this.dataAccessObject.topScrollPosition - this.dataAccessObject.topParentOffset;
|
268
268
|
const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');
|
269
269
|
const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');
|
@@ -308,6 +308,11 @@ class Viewport {
|
|
308
308
|
wtSettings,
|
309
309
|
wtTable
|
310
310
|
} = this;
|
311
|
+
if (wtSettings.getSetting('renderAllColumns') && calculationType === _calculator.RENDER_TYPE) {
|
312
|
+
return new _calculator.RenderAllColumnsCalculator({
|
313
|
+
totalColumns: wtSettings.getSetting('totalColumns')
|
314
|
+
});
|
315
|
+
}
|
311
316
|
let width = this.getViewportWidth();
|
312
317
|
let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;
|
313
318
|
this.columnHeaderHeight = NaN;
|
@@ -327,10 +332,6 @@ class Viewport {
|
|
327
332
|
columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),
|
328
333
|
overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),
|
329
334
|
calculationType,
|
330
|
-
stretchMode: wtSettings.getSetting('stretchH'),
|
331
|
-
stretchingColumnWidthFn: (stretchedWidth, column) => {
|
332
|
-
return wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column);
|
333
|
-
},
|
334
335
|
inlineStartOffset: this.dataAccessObject.inlineStartParentOffset
|
335
336
|
});
|
336
337
|
}
|
@@ -345,22 +346,26 @@ class Viewport {
|
|
345
346
|
*/
|
346
347
|
createRenderCalculators() {
|
347
348
|
let fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
348
|
-
|
349
|
-
|
349
|
+
const {
|
350
|
+
wtSettings
|
351
|
+
} = this;
|
352
|
+
if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
|
350
353
|
const proposedRowsVisibleCalculator = this.createRowsCalculator(_calculator.FULLY_VISIBLE_TYPE);
|
354
|
+
fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
|
355
|
+
}
|
356
|
+
if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
|
351
357
|
const proposedColumnsVisibleCalculator = this.createColumnsCalculator(_calculator.FULLY_VISIBLE_TYPE);
|
352
|
-
|
353
|
-
runFastDraw = false;
|
354
|
-
}
|
358
|
+
fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
|
355
359
|
}
|
356
|
-
if (!
|
360
|
+
if (!fastDraw) {
|
357
361
|
this.rowsRenderCalculator = this.createRowsCalculator(_calculator.RENDER_TYPE);
|
358
362
|
this.columnsRenderCalculator = this.createColumnsCalculator(_calculator.RENDER_TYPE);
|
359
363
|
}
|
364
|
+
|
360
365
|
// delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator
|
361
366
|
this.rowsVisibleCalculator = null;
|
362
367
|
this.columnsVisibleCalculator = null;
|
363
|
-
return
|
368
|
+
return fastDraw;
|
364
369
|
}
|
365
370
|
|
366
371
|
/**
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { getScrollbarWidth, getStyle, offset, outerHeight, outerWidth } from "../../../helpers/dom/element.mjs";
|
2
2
|
import { objectEach } from "../../../helpers/object.mjs";
|
3
|
-
import { RENDER_TYPE, FULLY_VISIBLE_TYPE, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
|
3
|
+
import { RENDER_TYPE, FULLY_VISIBLE_TYPE, RenderAllColumnsCalculator, RenderAllRowsCalculator, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
|
4
4
|
/**
|
5
5
|
* @class Viewport
|
6
6
|
*/
|
@@ -252,15 +252,15 @@ class Viewport {
|
|
252
252
|
wtSettings,
|
253
253
|
wtTable
|
254
254
|
} = this;
|
255
|
-
|
255
|
+
if (wtSettings.getSetting('renderAllRows') && calculationType === RENDER_TYPE) {
|
256
|
+
return new RenderAllRowsCalculator({
|
257
|
+
totalRows: wtSettings.getSetting('totalRows')
|
258
|
+
});
|
259
|
+
}
|
260
|
+
let height = this.getViewportHeight();
|
256
261
|
let scrollbarHeight;
|
257
262
|
let fixedRowsHeight;
|
258
263
|
this.rowHeaderWidth = NaN;
|
259
|
-
if (wtSettings.getSetting('renderAllRows') && calculationType === RENDER_TYPE) {
|
260
|
-
height = Infinity;
|
261
|
-
} else {
|
262
|
-
height = this.getViewportHeight();
|
263
|
-
}
|
264
264
|
let pos = this.dataAccessObject.topScrollPosition - this.dataAccessObject.topParentOffset;
|
265
265
|
const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');
|
266
266
|
const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');
|
@@ -305,6 +305,11 @@ class Viewport {
|
|
305
305
|
wtSettings,
|
306
306
|
wtTable
|
307
307
|
} = this;
|
308
|
+
if (wtSettings.getSetting('renderAllColumns') && calculationType === RENDER_TYPE) {
|
309
|
+
return new RenderAllColumnsCalculator({
|
310
|
+
totalColumns: wtSettings.getSetting('totalColumns')
|
311
|
+
});
|
312
|
+
}
|
308
313
|
let width = this.getViewportWidth();
|
309
314
|
let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;
|
310
315
|
this.columnHeaderHeight = NaN;
|
@@ -324,10 +329,6 @@ class Viewport {
|
|
324
329
|
columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),
|
325
330
|
overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),
|
326
331
|
calculationType,
|
327
|
-
stretchMode: wtSettings.getSetting('stretchH'),
|
328
|
-
stretchingColumnWidthFn: (stretchedWidth, column) => {
|
329
|
-
return wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column);
|
330
|
-
},
|
331
332
|
inlineStartOffset: this.dataAccessObject.inlineStartParentOffset
|
332
333
|
});
|
333
334
|
}
|
@@ -342,22 +343,26 @@ class Viewport {
|
|
342
343
|
*/
|
343
344
|
createRenderCalculators() {
|
344
345
|
let fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
345
|
-
|
346
|
-
|
346
|
+
const {
|
347
|
+
wtSettings
|
348
|
+
} = this;
|
349
|
+
if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
|
347
350
|
const proposedRowsVisibleCalculator = this.createRowsCalculator(FULLY_VISIBLE_TYPE);
|
351
|
+
fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
|
352
|
+
}
|
353
|
+
if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
|
348
354
|
const proposedColumnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);
|
349
|
-
|
350
|
-
runFastDraw = false;
|
351
|
-
}
|
355
|
+
fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
|
352
356
|
}
|
353
|
-
if (!
|
357
|
+
if (!fastDraw) {
|
354
358
|
this.rowsRenderCalculator = this.createRowsCalculator(RENDER_TYPE);
|
355
359
|
this.columnsRenderCalculator = this.createColumnsCalculator(RENDER_TYPE);
|
356
360
|
}
|
361
|
+
|
357
362
|
// delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator
|
358
363
|
this.rowsVisibleCalculator = null;
|
359
364
|
this.columnsVisibleCalculator = null;
|
360
|
-
return
|
365
|
+
return fastDraw;
|
361
366
|
}
|
362
367
|
|
363
368
|
/**
|
package/base.js
CHANGED
@@ -15,7 +15,9 @@ exports.CellRange = _src.CellRange;
|
|
15
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
16
16
|
// FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883
|
17
17
|
/* eslint-disable import/named */
|
18
|
+
|
18
19
|
/* eslint-enable import/named */
|
20
|
+
|
19
21
|
// register default mandatory cell type for the Base package
|
20
22
|
(0, _registry2.registerCellType)(_textType.TextCellType);
|
21
23
|
|
@@ -43,8 +45,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
|
|
43
45
|
Handsontable.CellCoords = _src.CellCoords;
|
44
46
|
Handsontable.CellRange = _src.CellRange;
|
45
47
|
Handsontable.packageName = 'handsontable';
|
46
|
-
Handsontable.buildDate = "
|
47
|
-
Handsontable.version = "0.0.0-next-
|
48
|
+
Handsontable.buildDate = "11/12/2023 13:18:24";
|
49
|
+
Handsontable.version = "0.0.0-next-51d3397-20231211";
|
48
50
|
Handsontable.languages = {
|
49
51
|
dictionaryKeys: _registry.dictionaryKeys,
|
50
52
|
getLanguageDictionary: _registry.getLanguageDictionary,
|
package/base.mjs
CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
|
|
35
35
|
Handsontable.CellCoords = CellCoords;
|
36
36
|
Handsontable.CellRange = CellRange;
|
37
37
|
Handsontable.packageName = 'handsontable';
|
38
|
-
Handsontable.buildDate = "
|
39
|
-
Handsontable.version = "0.0.0-next-
|
38
|
+
Handsontable.buildDate = "11/12/2023 13:18:31";
|
39
|
+
Handsontable.version = "0.0.0-next-51d3397-20231211";
|
40
40
|
Handsontable.languages = {
|
41
41
|
dictionaryKeys,
|
42
42
|
getLanguageDictionary,
|