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.
- 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/index.js +3 -4
- package/3rdparty/walkontable/src/index.mjs +1 -2
- 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/settings.js +2 -0
- package/3rdparty/walkontable/src/settings.mjs +2 -0
- 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 +2 -2
- package/base.mjs +2 -2
- package/core/focusCatcher/index.js +34 -4
- package/core/focusCatcher/index.mjs +34 -4
- 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 +2 -2
- package/dist/handsontable.full.js +1960 -1646
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +70 -67
- package/dist/handsontable.js +1962 -1648
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +27 -24
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +1 -1
- package/settings.d.ts +1 -0
- package/tableView.js +1 -0
- 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
|
57
|
-
the number of rendered rows by specifying the table height and/or
|
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
|
-
|
56
|
-
|
57
|
-
|
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
|
-
*
|
98
|
+
* Refreshes the stretching column width by recalculating the widths of the columns.
|
91
99
|
*/
|
92
|
-
|
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
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
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
|
-
*
|
95
|
+
* Refreshes the stretching column width by recalculating the widths of the columns.
|
88
96
|
*/
|
89
|
-
|
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
|
-
|
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
|
+
}
|