handsontable 12.3.3 → 12.4.0-next-ddbea0c-20230512

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. package/3rdparty/walkontable/src/cell/coords.js +13 -16
  2. package/3rdparty/walkontable/src/cell/coords.mjs +13 -16
  3. package/3rdparty/walkontable/src/cell/range.js +25 -29
  4. package/3rdparty/walkontable/src/cell/range.mjs +24 -28
  5. package/3rdparty/walkontable/src/core/_base.js +16 -20
  6. package/3rdparty/walkontable/src/core/_base.mjs +16 -20
  7. package/3rdparty/walkontable/src/event.js +4 -0
  8. package/3rdparty/walkontable/src/event.mjs +4 -0
  9. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  14. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  15. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  16. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  17. package/3rdparty/walkontable/src/overlays.js +55 -64
  18. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  19. package/3rdparty/walkontable/src/scroll.js +20 -23
  20. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  21. package/3rdparty/walkontable/src/settings.js +13 -15
  22. package/3rdparty/walkontable/src/settings.mjs +13 -15
  23. package/3rdparty/walkontable/src/table.js +22 -26
  24. package/3rdparty/walkontable/src/table.mjs +22 -26
  25. package/CHANGELOG.md +14 -0
  26. package/base.js +2 -4
  27. package/base.mjs +2 -2
  28. package/core.js +23 -6
  29. package/core.mjs +23 -6
  30. package/dataMap/dataSource.js +5 -5
  31. package/dataMap/dataSource.mjs +5 -5
  32. package/dataMap/metaManager/metaSchema.js +9 -7
  33. package/dataMap/metaManager/metaSchema.mjs +9 -7
  34. package/dist/handsontable.css +2 -2
  35. package/dist/handsontable.full.css +2 -2
  36. package/dist/handsontable.full.js +7364 -5992
  37. package/dist/handsontable.full.min.css +2 -2
  38. package/dist/handsontable.full.min.js +256 -234
  39. package/dist/handsontable.js +4326 -3275
  40. package/dist/handsontable.min.css +2 -2
  41. package/dist/handsontable.min.js +11 -3
  42. package/dist/languages/all.js +133 -0
  43. package/dist/languages/ar-AR.js +7 -0
  44. package/dist/languages/cs-CZ.js +7 -0
  45. package/dist/languages/de-CH.js +7 -0
  46. package/dist/languages/de-DE.js +7 -0
  47. package/dist/languages/en-US.js +7 -0
  48. package/dist/languages/es-MX.js +7 -0
  49. package/dist/languages/fr-FR.js +7 -0
  50. package/dist/languages/it-IT.js +7 -0
  51. package/dist/languages/ja-JP.js +7 -0
  52. package/dist/languages/ko-KR.js +7 -0
  53. package/dist/languages/lv-LV.js +7 -0
  54. package/dist/languages/nb-NO.js +7 -0
  55. package/dist/languages/nl-NL.js +7 -0
  56. package/dist/languages/pl-PL.js +7 -0
  57. package/dist/languages/pt-BR.js +7 -0
  58. package/dist/languages/ru-RU.js +7 -0
  59. package/dist/languages/sr-SP.js +7 -0
  60. package/dist/languages/zh-CN.js +7 -0
  61. package/dist/languages/zh-TW.js +7 -0
  62. package/editors/autocompleteEditor/autocompleteEditor.js +8 -9
  63. package/editors/autocompleteEditor/autocompleteEditor.mjs +8 -9
  64. package/helpers/mixed.js +2 -2
  65. package/helpers/mixed.mjs +2 -2
  66. package/i18n/languages/ar-AR.js +7 -1
  67. package/i18n/languages/cs-CZ.js +7 -1
  68. package/i18n/languages/de-CH.js +7 -1
  69. package/i18n/languages/de-DE.js +7 -1
  70. package/i18n/languages/en-US.js +7 -1
  71. package/i18n/languages/es-MX.js +7 -1
  72. package/i18n/languages/fr-FR.js +7 -1
  73. package/i18n/languages/it-IT.js +7 -1
  74. package/i18n/languages/ja-JP.js +7 -1
  75. package/i18n/languages/ko-KR.js +7 -1
  76. package/i18n/languages/lv-LV.js +7 -1
  77. package/i18n/languages/nb-NO.js +7 -1
  78. package/i18n/languages/nl-NL.js +7 -1
  79. package/i18n/languages/pl-PL.js +7 -1
  80. package/i18n/languages/pt-BR.js +7 -1
  81. package/i18n/languages/ru-RU.js +7 -1
  82. package/i18n/languages/sr-SP.js +7 -1
  83. package/i18n/languages/zh-CN.js +7 -1
  84. package/i18n/languages/zh-TW.js +7 -1
  85. package/languages/all.js +133 -0
  86. package/languages/ar-AR.js +7 -0
  87. package/languages/cs-CZ.js +7 -0
  88. package/languages/de-CH.js +7 -0
  89. package/languages/de-DE.js +7 -0
  90. package/languages/en-US.js +7 -0
  91. package/languages/es-MX.js +7 -0
  92. package/languages/fr-FR.js +7 -0
  93. package/languages/index.js +133 -0
  94. package/languages/it-IT.js +7 -0
  95. package/languages/ja-JP.js +7 -0
  96. package/languages/ko-KR.js +7 -0
  97. package/languages/lv-LV.js +7 -0
  98. package/languages/nb-NO.js +7 -0
  99. package/languages/nl-NL.js +7 -0
  100. package/languages/pl-PL.js +7 -0
  101. package/languages/pt-BR.js +7 -0
  102. package/languages/ru-RU.js +7 -0
  103. package/languages/sr-SP.js +7 -0
  104. package/languages/zh-CN.js +7 -0
  105. package/languages/zh-TW.js +7 -0
  106. package/package.json +3 -2
  107. package/pluginHooks.js +16 -6
  108. package/pluginHooks.mjs +15 -3
  109. package/plugins/autoRowSize/autoRowSize.js +2 -2
  110. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  111. package/plugins/base/base.js +9 -10
  112. package/plugins/base/base.mjs +9 -10
  113. package/plugins/collapsibleColumns/collapsibleColumns.js +24 -7
  114. package/plugins/collapsibleColumns/collapsibleColumns.mjs +24 -7
  115. package/plugins/copyPaste/copyPaste.js +92 -16
  116. package/plugins/copyPaste/copyPaste.mjs +92 -16
  117. package/plugins/copyPaste/copyableRanges.js +39 -39
  118. package/plugins/copyPaste/copyableRanges.mjs +32 -32
  119. package/plugins/customBorders/customBorders.d.ts +2 -0
  120. package/plugins/customBorders/customBorders.js +6 -7
  121. package/plugins/customBorders/customBorders.mjs +6 -7
  122. package/plugins/filters/filters.js +5 -0
  123. package/plugins/filters/filters.mjs +5 -0
  124. package/plugins/formulas/engine/register.js +9 -0
  125. package/plugins/formulas/engine/register.mjs +13 -4
  126. package/plugins/formulas/engine/settings.js +18 -3
  127. package/plugins/formulas/engine/settings.mjs +16 -3
  128. package/plugins/formulas/formulas.js +308 -162
  129. package/plugins/formulas/formulas.mjs +308 -163
  130. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  131. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  132. package/plugins/formulas/indexSyncer/index.js +225 -0
  133. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  134. package/plugins/formulas/utils.js +81 -0
  135. package/plugins/formulas/utils.mjs +74 -0
  136. package/plugins/hiddenColumns/hiddenColumns.js +12 -7
  137. package/plugins/hiddenColumns/hiddenColumns.mjs +12 -7
  138. package/plugins/hiddenRows/hiddenRows.js +12 -7
  139. package/plugins/hiddenRows/hiddenRows.mjs +12 -7
  140. package/plugins/manualRowMove/manualRowMove.js +26 -11
  141. package/plugins/manualRowMove/manualRowMove.mjs +27 -12
  142. package/plugins/nestedHeaders/nestedHeaders.js +26 -7
  143. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -7
  144. package/plugins/nestedHeaders/stateManager/headersTree.js +23 -26
  145. package/plugins/nestedHeaders/stateManager/headersTree.mjs +20 -23
  146. package/plugins/nestedHeaders/stateManager/index.js +21 -3
  147. package/plugins/nestedHeaders/stateManager/index.mjs +18 -0
  148. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  149. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +1 -1
  150. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -0
  151. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -0
  152. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  153. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  154. package/plugins/registry.js +3 -1
  155. package/plugins/undoRedo/undoRedo.js +0 -1
  156. package/plugins/undoRedo/undoRedo.mjs +0 -1
  157. package/selection/highlight/visualSelection.js +5 -6
  158. package/selection/highlight/visualSelection.mjs +5 -6
  159. package/tableView.js +62 -72
  160. package/tableView.mjs +62 -72
  161. package/translations/changesObservable/observable.js +41 -46
  162. package/translations/changesObservable/observable.mjs +36 -41
  163. package/translations/changesObservable/observer.js +8 -1
  164. package/translations/changesObservable/observer.mjs +7 -0
  165. package/translations/indexMapper.js +21 -0
  166. package/translations/indexMapper.mjs +21 -0
  167. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -0
  168. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -0
  169. package/utils/dataStructures/tree.js +15 -18
  170. package/utils/dataStructures/tree.mjs +15 -18
  171. package/utils/parseTable.js +5 -1
  172. package/utils/parseTable.mjs +5 -1
package/core.js CHANGED
@@ -107,7 +107,7 @@ var deprecationWarns = new Set();
107
107
  * :::
108
108
  *
109
109
  * ::: only-for react
110
- * ```jsx{3,7,13}
110
+ * ```jsx
111
111
  * import { useRef } from 'react';
112
112
  *
113
113
  * const hotTableComponent = useRef(null);
@@ -263,6 +263,12 @@ function Core(rootElement, userSettings) {
263
263
  * @type {IndexMapper}
264
264
  */
265
265
  this.rowIndexMapper = new _translations.IndexMapper();
266
+ this.columnIndexMapper.addLocalHook('indexesSequenceChange', function (source) {
267
+ instance.runHooks('afterColumnSequenceChange', source);
268
+ });
269
+ this.rowIndexMapper.addLocalHook('indexesSequenceChange', function (source) {
270
+ instance.runHooks('afterRowSequenceChange', source);
271
+ });
266
272
  dataSource = new _dataSource.default(instance);
267
273
  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {
268
274
  this.rootElement.id = this.guid; // if root element does not have an id, assign a random id
@@ -2442,11 +2448,13 @@ function Core(rootElement, userSettings) {
2442
2448
  };
2443
2449
 
2444
2450
  /**
2445
- * Get value from the selected cell.
2451
+ * Gets the value of the currently focused cell.
2452
+ *
2453
+ * For column headers and row headers, returns `null`.
2446
2454
  *
2447
2455
  * @memberof Core#
2448
2456
  * @function getValue
2449
- * @returns {*} Value of selected cell.
2457
+ * @returns {*} The value of the focused cell.
2450
2458
  */
2451
2459
  this.getValue = function () {
2452
2460
  var sel = instance.getSelectedLast();
@@ -2789,6 +2797,11 @@ function Core(rootElement, userSettings) {
2789
2797
  * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,
2790
2798
  * sorted or trimmed only physical indexes are correct.
2791
2799
  *
2800
+ * __Note__: This method may return incorrect values for cells that contain
2801
+ * [formulas](@/guides/formulas/formula-calculation.md). This is because `getSourceData()`
2802
+ * operates on source data ([physical indexes](@/api/indexMapper.md)),
2803
+ * whereas formulas operate on visual data (visual indexes).
2804
+ *
2792
2805
  * @memberof Core#
2793
2806
  * @function getSourceData
2794
2807
  * @param {number} [row] From physical row index.
@@ -3138,7 +3151,13 @@ function Core(rootElement, userSettings) {
3138
3151
  };
3139
3152
 
3140
3153
  /**
3141
- * Checks if the data format and config allows user to modify the column structure.
3154
+ * Checks if your [data format](@/guides/getting-started/binding-to-data.md#compatible-data-types)
3155
+ * and [configuration options](@/guides/getting-started/configuration-options.md)
3156
+ * allow for changing the number of columns.
3157
+ *
3158
+ * Returns `false` when your data is an array of objects,
3159
+ * or when you use the [`columns`](@/api/options.md#columns) option.
3160
+ * Otherwise, returns `true`.
3142
3161
  *
3143
3162
  * @memberof Core#
3144
3163
  * @function isColumnModificationAllowed
@@ -4104,8 +4123,6 @@ function Core(rootElement, userSettings) {
4104
4123
  if (datamap) {
4105
4124
  datamap.destroy();
4106
4125
  }
4107
- instance.rowIndexMapper = null;
4108
- instance.columnIndexMapper = null;
4109
4126
  datamap = null;
4110
4127
  grid = null;
4111
4128
  selection = null;
package/core.mjs CHANGED
@@ -102,7 +102,7 @@ var deprecationWarns = new Set();
102
102
  * :::
103
103
  *
104
104
  * ::: only-for react
105
- * ```jsx{3,7,13}
105
+ * ```jsx
106
106
  * import { useRef } from 'react';
107
107
  *
108
108
  * const hotTableComponent = useRef(null);
@@ -258,6 +258,12 @@ export default function Core(rootElement, userSettings) {
258
258
  * @type {IndexMapper}
259
259
  */
260
260
  this.rowIndexMapper = new IndexMapper();
261
+ this.columnIndexMapper.addLocalHook('indexesSequenceChange', function (source) {
262
+ instance.runHooks('afterColumnSequenceChange', source);
263
+ });
264
+ this.rowIndexMapper.addLocalHook('indexesSequenceChange', function (source) {
265
+ instance.runHooks('afterRowSequenceChange', source);
266
+ });
261
267
  dataSource = new DataSource(instance);
262
268
  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {
263
269
  this.rootElement.id = this.guid; // if root element does not have an id, assign a random id
@@ -2437,11 +2443,13 @@ export default function Core(rootElement, userSettings) {
2437
2443
  };
2438
2444
 
2439
2445
  /**
2440
- * Get value from the selected cell.
2446
+ * Gets the value of the currently focused cell.
2447
+ *
2448
+ * For column headers and row headers, returns `null`.
2441
2449
  *
2442
2450
  * @memberof Core#
2443
2451
  * @function getValue
2444
- * @returns {*} Value of selected cell.
2452
+ * @returns {*} The value of the focused cell.
2445
2453
  */
2446
2454
  this.getValue = function () {
2447
2455
  var sel = instance.getSelectedLast();
@@ -2784,6 +2792,11 @@ export default function Core(rootElement, userSettings) {
2784
2792
  * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,
2785
2793
  * sorted or trimmed only physical indexes are correct.
2786
2794
  *
2795
+ * __Note__: This method may return incorrect values for cells that contain
2796
+ * [formulas](@/guides/formulas/formula-calculation.md). This is because `getSourceData()`
2797
+ * operates on source data ([physical indexes](@/api/indexMapper.md)),
2798
+ * whereas formulas operate on visual data (visual indexes).
2799
+ *
2787
2800
  * @memberof Core#
2788
2801
  * @function getSourceData
2789
2802
  * @param {number} [row] From physical row index.
@@ -3133,7 +3146,13 @@ export default function Core(rootElement, userSettings) {
3133
3146
  };
3134
3147
 
3135
3148
  /**
3136
- * Checks if the data format and config allows user to modify the column structure.
3149
+ * Checks if your [data format](@/guides/getting-started/binding-to-data.md#compatible-data-types)
3150
+ * and [configuration options](@/guides/getting-started/configuration-options.md)
3151
+ * allow for changing the number of columns.
3152
+ *
3153
+ * Returns `false` when your data is an array of objects,
3154
+ * or when you use the [`columns`](@/api/options.md#columns) option.
3155
+ * Otherwise, returns `true`.
3137
3156
  *
3138
3157
  * @memberof Core#
3139
3158
  * @function isColumnModificationAllowed
@@ -4099,8 +4118,6 @@ export default function Core(rootElement, userSettings) {
4099
4118
  if (datamap) {
4100
4119
  datamap.destroy();
4101
4120
  }
4102
- instance.rowIndexMapper = null;
4103
- instance.columnIndexMapper = null;
4104
4121
  datamap = null;
4105
4122
  grid = null;
4106
4123
  selection = null;
@@ -195,7 +195,7 @@ var DataSource = /*#__PURE__*/function () {
195
195
  }
196
196
  if (this.hot.hasHook('modifySourceData')) {
197
197
  var valueHolder = (0, _object.createObjectPropListener)(value);
198
- this.hot.runHooks('modifySourceData', row, this.propToCol(column), valueHolder, 'set');
198
+ this.hot.runHooks('modifySourceData', row, column, valueHolder, 'set');
199
199
  if (valueHolder.isTouched()) {
200
200
  value = valueHolder.value;
201
201
  }
@@ -232,7 +232,7 @@ var DataSource = /*#__PURE__*/function () {
232
232
  }
233
233
  if (this.hot.hasHook('modifySourceData')) {
234
234
  var valueHolder = (0, _object.createObjectPropListener)(result);
235
- this.hot.runHooks('modifySourceData', row, this.colToProp(column), valueHolder, 'get');
235
+ this.hot.runHooks('modifySourceData', row, column, valueHolder, 'get');
236
236
  if (valueHolder.isTouched()) {
237
237
  result = valueHolder.value;
238
238
  }
@@ -244,14 +244,14 @@ var DataSource = /*#__PURE__*/function () {
244
244
  * Returns a single value from the data.
245
245
  *
246
246
  * @param {number} row Physical row index.
247
- * @param {number} column Visual column index.
247
+ * @param {number} columnOrProp Visual column index or property.
248
248
  * @returns {*}
249
249
  */
250
250
  }, {
251
251
  key: "getAtCell",
252
- value: function getAtCell(row, column) {
252
+ value: function getAtCell(row, columnOrProp) {
253
253
  var dataRow = this.modifyRowData(row);
254
- return this.getAtPhysicalCell(row, this.colToProp(column), dataRow);
254
+ return this.getAtPhysicalCell(row, this.colToProp(columnOrProp), dataRow);
255
255
  }
256
256
 
257
257
  /**
@@ -191,7 +191,7 @@ var DataSource = /*#__PURE__*/function () {
191
191
  }
192
192
  if (this.hot.hasHook('modifySourceData')) {
193
193
  var valueHolder = createObjectPropListener(value);
194
- this.hot.runHooks('modifySourceData', row, this.propToCol(column), valueHolder, 'set');
194
+ this.hot.runHooks('modifySourceData', row, column, valueHolder, 'set');
195
195
  if (valueHolder.isTouched()) {
196
196
  value = valueHolder.value;
197
197
  }
@@ -228,7 +228,7 @@ var DataSource = /*#__PURE__*/function () {
228
228
  }
229
229
  if (this.hot.hasHook('modifySourceData')) {
230
230
  var valueHolder = createObjectPropListener(result);
231
- this.hot.runHooks('modifySourceData', row, this.colToProp(column), valueHolder, 'get');
231
+ this.hot.runHooks('modifySourceData', row, column, valueHolder, 'get');
232
232
  if (valueHolder.isTouched()) {
233
233
  result = valueHolder.value;
234
234
  }
@@ -240,14 +240,14 @@ var DataSource = /*#__PURE__*/function () {
240
240
  * Returns a single value from the data.
241
241
  *
242
242
  * @param {number} row Physical row index.
243
- * @param {number} column Visual column index.
243
+ * @param {number} columnOrProp Visual column index or property.
244
244
  * @returns {*}
245
245
  */
246
246
  }, {
247
247
  key: "getAtCell",
248
- value: function getAtCell(row, column) {
248
+ value: function getAtCell(row, columnOrProp) {
249
249
  var dataRow = this.modifyRowData(row);
250
- return this.getAtPhysicalCell(row, this.colToProp(column), dataRow);
250
+ return this.getAtPhysicalCell(row, this.colToProp(columnOrProp), dataRow);
251
251
  }
252
252
 
253
253
  /**
@@ -21,7 +21,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
21
21
  * [Configuration options](@/guides/getting-started/configuration-options.md) let you heavily customize your Handsontable instance. For example, you can:
22
22
  *
23
23
  * - Enable and disable built-in features
24
- * - Enable and configure additional [plugins](@/guides/tools-and-building/custom-plugins.md)
24
+ * - Enable and configure additional [plugins](@/api/plugins.md)
25
25
  * - Personalize Handsontable's look
26
26
  * - Adjust Handsontable's behavior
27
27
  * - Implement your own custom features
@@ -945,8 +945,7 @@ var _default = function _default() {
945
945
  /**
946
946
  * The `colWidths` option sets columns' widths, in pixels.
947
947
  *
948
- * In the rendering process, the default column width is 50px. To change it,
949
- * set the `colWidths` option to one of the following:
948
+ * The default column width is 50px. To change it, set the `colWidths` option to one of the following:
950
949
  *
951
950
  * | Setting | Description | Example |
952
951
  * | ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
@@ -956,7 +955,10 @@ var _default = function _default() {
956
955
  * | A function | Set column widths dynamically,<br>on each render | `colWidths(visualColumnIndex) { return visualColumnIndex * 10; }` |
957
956
  * | `undefined` | Used by the [modifyColWidth](@/api/hooks.md#modifyColWidth) hook,<br>to detect column width changes. | `colWidths: undefined` |
958
957
  *
959
- * Setting the `colWidths` option disables the {@link AutoColumnSize} plugin.
958
+ * Setting `colWidths` even for a single column disables the {@link AutoColumnSize} plugin
959
+ * for all columns. For this reason, if you use `colWidths`, we recommend you set a width for each one
960
+ * of your columns. Otherwise, every column with an undefined width defaults back to 50px,
961
+ * which may cut longer columns names.
960
962
  *
961
963
  * Read more:
962
964
  * - [Column width](@/guides/columns/column-width.md)
@@ -978,8 +980,8 @@ var _default = function _default() {
978
980
  *
979
981
  * // set the first (by visual index) column's width to 100
980
982
  * // set the second (by visual index) column's width to 120
981
- * // set the third (by visual index) column's width to `undefined`
982
- * // set any other column's width to the default 50px
983
+ * // set the third (by visual index) column's width to `undefined`, so that it defaults to 50px
984
+ * // set any other column's width to the default 50px (note that longer cell values and column names can get cut)
983
985
  * colWidths: [100, 120, undefined],
984
986
  *
985
987
  * // set each column's width individually, using a function
@@ -2872,7 +2874,7 @@ var _default = function _default() {
2872
2874
  * The `maxRows` option sets a maximum number of rows.
2873
2875
  *
2874
2876
  * The `maxRows` option is used:
2875
- * - At initialization: if the `maxRows` value is lower than the initial number of columns,
2877
+ * - At initialization: if the `maxRows` value is lower than the initial number of rows,
2876
2878
  * Handsontable trims rows from the bottom.
2877
2879
  * - At runtime: for example, when inserting rows.
2878
2880
  *
@@ -17,7 +17,7 @@ import { isObjectEqual } from "../../helpers/object.mjs";
17
17
  * [Configuration options](@/guides/getting-started/configuration-options.md) let you heavily customize your Handsontable instance. For example, you can:
18
18
  *
19
19
  * - Enable and disable built-in features
20
- * - Enable and configure additional [plugins](@/guides/tools-and-building/custom-plugins.md)
20
+ * - Enable and configure additional [plugins](@/api/plugins.md)
21
21
  * - Personalize Handsontable's look
22
22
  * - Adjust Handsontable's behavior
23
23
  * - Implement your own custom features
@@ -941,8 +941,7 @@ export default (function () {
941
941
  /**
942
942
  * The `colWidths` option sets columns' widths, in pixels.
943
943
  *
944
- * In the rendering process, the default column width is 50px. To change it,
945
- * set the `colWidths` option to one of the following:
944
+ * The default column width is 50px. To change it, set the `colWidths` option to one of the following:
946
945
  *
947
946
  * | Setting | Description | Example |
948
947
  * | ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
@@ -952,7 +951,10 @@ export default (function () {
952
951
  * | A function | Set column widths dynamically,<br>on each render | `colWidths(visualColumnIndex) { return visualColumnIndex * 10; }` |
953
952
  * | `undefined` | Used by the [modifyColWidth](@/api/hooks.md#modifyColWidth) hook,<br>to detect column width changes. | `colWidths: undefined` |
954
953
  *
955
- * Setting the `colWidths` option disables the {@link AutoColumnSize} plugin.
954
+ * Setting `colWidths` even for a single column disables the {@link AutoColumnSize} plugin
955
+ * for all columns. For this reason, if you use `colWidths`, we recommend you set a width for each one
956
+ * of your columns. Otherwise, every column with an undefined width defaults back to 50px,
957
+ * which may cut longer columns names.
956
958
  *
957
959
  * Read more:
958
960
  * - [Column width](@/guides/columns/column-width.md)
@@ -974,8 +976,8 @@ export default (function () {
974
976
  *
975
977
  * // set the first (by visual index) column's width to 100
976
978
  * // set the second (by visual index) column's width to 120
977
- * // set the third (by visual index) column's width to `undefined`
978
- * // set any other column's width to the default 50px
979
+ * // set the third (by visual index) column's width to `undefined`, so that it defaults to 50px
980
+ * // set any other column's width to the default 50px (note that longer cell values and column names can get cut)
979
981
  * colWidths: [100, 120, undefined],
980
982
  *
981
983
  * // set each column's width individually, using a function
@@ -2868,7 +2870,7 @@ export default (function () {
2868
2870
  * The `maxRows` option sets a maximum number of rows.
2869
2871
  *
2870
2872
  * The `maxRows` option is used:
2871
- * - At initialization: if the `maxRows` value is lower than the initial number of columns,
2873
+ * - At initialization: if the `maxRows` value is lower than the initial number of rows,
2872
2874
  * Handsontable trims rows from the bottom.
2873
2875
  * - At runtime: for example, when inserting rows.
2874
2876
  *
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 12.3.3
29
- * Release date: 28/03/2023 (built at 28/03/2023 12:24:16)
28
+ * Version: 12.4.0-next-ddbea0c-20230512
29
+ * Release date: 23/05/2023 (built at 12/05/2023 12:12:44)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 12.3.3
29
- * Release date: 28/03/2023 (built at 28/03/2023 12:24:16)
28
+ * Version: 12.4.0-next-ddbea0c-20230512
29
+ * Release date: 23/05/2023 (built at 12/05/2023 12:12:44)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles