handsontable 15.3.0-next-175012b-20250429 → 16.0.0-next-f486b48-20250702

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/3rdparty/walkontable/src/core/_base.js +0 -3
  2. package/3rdparty/walkontable/src/core/_base.mjs +0 -3
  3. package/3rdparty/walkontable/src/core/clone.js +0 -1
  4. package/3rdparty/walkontable/src/core/clone.mjs +0 -1
  5. package/3rdparty/walkontable/src/core/core.js +0 -2
  6. package/3rdparty/walkontable/src/core/core.mjs +0 -2
  7. package/3rdparty/walkontable/src/facade/core.js +0 -3
  8. package/3rdparty/walkontable/src/facade/core.mjs +0 -3
  9. package/3rdparty/walkontable/src/index.js +1 -2
  10. package/3rdparty/walkontable/src/overlay/_base.js +1 -3
  11. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -3
  12. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  13. package/3rdparty/walkontable/src/overlay/bottom.mjs +2 -2
  14. package/3rdparty/walkontable/src/overlay/top.js +1 -1
  15. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  16. package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
  17. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
  18. package/3rdparty/walkontable/src/selection/border/border.js +17 -11
  19. package/3rdparty/walkontable/src/selection/border/border.mjs +17 -11
  20. package/3rdparty/walkontable/src/selection/border/utils.js +1 -1
  21. package/3rdparty/walkontable/src/selection/border/utils.mjs +1 -1
  22. package/3rdparty/walkontable/src/settings.js +3 -1
  23. package/3rdparty/walkontable/src/settings.mjs +3 -1
  24. package/3rdparty/walkontable/src/table.js +9 -6
  25. package/3rdparty/walkontable/src/table.mjs +9 -6
  26. package/3rdparty/walkontable/src/types.js +0 -1
  27. package/3rdparty/walkontable/src/types.mjs +0 -1
  28. package/3rdparty/walkontable/src/utils/column.js +1 -1
  29. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  30. package/3rdparty/walkontable/src/viewport.js +1 -1
  31. package/3rdparty/walkontable/src/viewport.mjs +1 -1
  32. package/CHANGELOG.md +23 -0
  33. package/README.md +10 -4
  34. package/base.js +2 -2
  35. package/base.mjs +2 -2
  36. package/cellTypes/registry.js +2 -3
  37. package/cellTypes/registry.mjs +1 -1
  38. package/core/coordsMapper/rangeToRenderableMapper.js +124 -0
  39. package/core/coordsMapper/rangeToRenderableMapper.mjs +120 -0
  40. package/core/focusCatcher/focusDetector.js +2 -2
  41. package/core/focusCatcher/focusDetector.mjs +2 -2
  42. package/core/hooks/constants.js +259 -1
  43. package/core/hooks/constants.mjs +259 -1
  44. package/core.d.ts +2 -0
  45. package/core.js +202 -58
  46. package/core.mjs +202 -58
  47. package/dataMap/dataMap.js +16 -30
  48. package/dataMap/dataMap.mjs +16 -30
  49. package/dataMap/metaManager/metaSchema.js +58 -0
  50. package/dataMap/metaManager/metaSchema.mjs +58 -0
  51. package/dist/handsontable.css +30 -4
  52. package/dist/handsontable.full.css +30 -4
  53. package/dist/handsontable.full.js +6073 -4352
  54. package/dist/handsontable.full.min.css +3 -3
  55. package/dist/handsontable.full.min.js +206 -206
  56. package/dist/handsontable.js +5751 -4037
  57. package/dist/handsontable.min.css +3 -3
  58. package/dist/handsontable.min.js +41 -41
  59. package/dist/languages/all.min.js +1 -1
  60. package/dist/languages/ar-AR.min.js +1 -1
  61. package/dist/languages/cs-CZ.min.js +1 -1
  62. package/dist/languages/de-CH.min.js +1 -1
  63. package/dist/languages/de-DE.min.js +1 -1
  64. package/dist/languages/en-US.min.js +1 -1
  65. package/dist/languages/es-MX.min.js +1 -1
  66. package/dist/languages/fa-IR.min.js +1 -1
  67. package/dist/languages/fr-FR.min.js +1 -1
  68. package/dist/languages/hr-HR.min.js +1 -1
  69. package/dist/languages/it-IT.min.js +1 -1
  70. package/dist/languages/ja-JP.min.js +1 -1
  71. package/dist/languages/ko-KR.min.js +1 -1
  72. package/dist/languages/lv-LV.min.js +1 -1
  73. package/dist/languages/nb-NO.min.js +1 -1
  74. package/dist/languages/nl-NL.min.js +1 -1
  75. package/dist/languages/pl-PL.min.js +1 -1
  76. package/dist/languages/pt-BR.min.js +1 -1
  77. package/dist/languages/ru-RU.min.js +1 -1
  78. package/dist/languages/sr-SP.min.js +1 -1
  79. package/dist/languages/zh-CN.min.js +1 -1
  80. package/dist/languages/zh-TW.min.js +1 -1
  81. package/editorManager.js +5 -1
  82. package/editorManager.mjs +5 -1
  83. package/editors/autocompleteEditor/autocompleteEditor.d.ts +0 -12
  84. package/editors/autocompleteEditor/autocompleteEditor.js +42 -69
  85. package/editors/autocompleteEditor/autocompleteEditor.mjs +43 -70
  86. package/editors/baseEditor/baseEditor.js +1 -1
  87. package/editors/baseEditor/baseEditor.mjs +1 -1
  88. package/editors/dateEditor/dateEditor.js +2 -8
  89. package/editors/dateEditor/dateEditor.mjs +3 -9
  90. package/editors/handsontableEditor/handsontableEditor.d.ts +8 -0
  91. package/editors/handsontableEditor/handsontableEditor.js +173 -17
  92. package/editors/handsontableEditor/handsontableEditor.mjs +173 -17
  93. package/editors/passwordEditor/passwordEditor.js +2 -0
  94. package/editors/passwordEditor/passwordEditor.mjs +2 -0
  95. package/editors/registry.js +2 -3
  96. package/editors/registry.mjs +1 -1
  97. package/editors/textEditor/textEditor.js +2 -0
  98. package/editors/textEditor/textEditor.mjs +2 -0
  99. package/helpers/a11y.js +2 -0
  100. package/helpers/a11y.mjs +1 -0
  101. package/helpers/dom/element.d.ts +1 -0
  102. package/helpers/dom/element.js +26 -1
  103. package/helpers/dom/element.mjs +25 -1
  104. package/helpers/mixed.js +4 -4
  105. package/helpers/mixed.mjs +4 -4
  106. package/i18n/languages/ar-AR.js +1 -2
  107. package/i18n/languages/cs-CZ.js +1 -2
  108. package/i18n/languages/de-CH.js +1 -2
  109. package/i18n/languages/de-DE.js +1 -2
  110. package/i18n/languages/en-US.js +1 -2
  111. package/i18n/languages/es-MX.js +1 -2
  112. package/i18n/languages/fa-IR.js +1 -2
  113. package/i18n/languages/fr-FR.js +1 -2
  114. package/i18n/languages/hr-HR.js +1 -2
  115. package/i18n/languages/it-IT.js +1 -2
  116. package/i18n/languages/ja-JP.js +1 -2
  117. package/i18n/languages/ko-KR.js +1 -2
  118. package/i18n/languages/lv-LV.js +1 -2
  119. package/i18n/languages/nb-NO.js +1 -2
  120. package/i18n/languages/nl-NL.js +1 -2
  121. package/i18n/languages/pl-PL.js +1 -2
  122. package/i18n/languages/pt-BR.js +1 -2
  123. package/i18n/languages/ru-RU.js +1 -2
  124. package/i18n/languages/sr-SP.js +1 -2
  125. package/i18n/languages/zh-CN.js +1 -2
  126. package/i18n/languages/zh-TW.js +1 -2
  127. package/i18n/phraseFormatters/index.js +2 -2
  128. package/i18n/phraseFormatters/index.mjs +1 -1
  129. package/i18n/registry.js +3 -4
  130. package/i18n/registry.mjs +1 -1
  131. package/index.js +1 -2
  132. package/package.json +10 -4
  133. package/plugins/autoColumnSize/autoColumnSize.js +47 -0
  134. package/plugins/autoColumnSize/autoColumnSize.mjs +47 -0
  135. package/plugins/autoRowSize/autoRowSize.js +45 -0
  136. package/plugins/autoRowSize/autoRowSize.mjs +45 -0
  137. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +13 -0
  138. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +13 -0
  139. package/plugins/collapsibleColumns/collapsibleColumns.js +31 -0
  140. package/plugins/collapsibleColumns/collapsibleColumns.mjs +31 -0
  141. package/plugins/columnSorting/sortService/registry.js +3 -4
  142. package/plugins/columnSorting/sortService/registry.mjs +1 -1
  143. package/plugins/columnSummary/columnSummary.js +33 -0
  144. package/plugins/columnSummary/columnSummary.mjs +33 -0
  145. package/plugins/comments/commentEditor.js +8 -2
  146. package/plugins/comments/commentEditor.mjs +8 -2
  147. package/plugins/comments/comments.js +59 -15
  148. package/plugins/comments/comments.mjs +60 -16
  149. package/plugins/comments/contextMenuItem/addEditComment.js +1 -2
  150. package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -2
  151. package/plugins/comments/contextMenuItem/removeComment.js +1 -2
  152. package/plugins/contextMenu/contextMenu.js +1 -1
  153. package/plugins/contextMenu/contextMenu.mjs +1 -1
  154. package/plugins/contextMenu/menu/menu.js +12 -6
  155. package/plugins/contextMenu/menu/menu.mjs +13 -7
  156. package/plugins/contextMenu/predefinedItems/alignment.js +1 -2
  157. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -2
  158. package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -2
  159. package/plugins/contextMenu/predefinedItems/columnRight.js +1 -2
  160. package/plugins/contextMenu/predefinedItems/index.js +1 -2
  161. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -2
  162. package/plugins/contextMenu/predefinedItems/redo.js +1 -2
  163. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -2
  164. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -2
  165. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -2
  166. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -2
  167. package/plugins/contextMenu/predefinedItems/undo.js +1 -2
  168. package/plugins/copyPaste/contextMenuItem/cut.js +1 -2
  169. package/plugins/customBorders/contextMenuItem/bottom.js +1 -2
  170. package/plugins/customBorders/contextMenuItem/left.js +1 -2
  171. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -2
  172. package/plugins/customBorders/contextMenuItem/right.js +1 -2
  173. package/plugins/customBorders/contextMenuItem/top.js +1 -2
  174. package/plugins/customBorders/customBorders.js +1 -2
  175. package/plugins/dropdownMenu/dropdownMenu.js +16 -1
  176. package/plugins/dropdownMenu/dropdownMenu.mjs +16 -1
  177. package/plugins/exportFile/exportFile.js +59 -2
  178. package/plugins/exportFile/exportFile.mjs +58 -0
  179. package/plugins/filters/component/actionBar.js +1 -2
  180. package/plugins/filters/component/condition.js +1 -2
  181. package/plugins/filters/component/value.js +1 -2
  182. package/plugins/filters/condition/beginsWith.js +1 -2
  183. package/plugins/filters/condition/between.js +1 -2
  184. package/plugins/filters/condition/contains.js +1 -2
  185. package/plugins/filters/condition/date/after.js +1 -2
  186. package/plugins/filters/condition/date/before.js +1 -2
  187. package/plugins/filters/condition/date/today.js +1 -2
  188. package/plugins/filters/condition/date/tomorrow.js +1 -2
  189. package/plugins/filters/condition/date/yesterday.js +1 -2
  190. package/plugins/filters/condition/empty.js +1 -2
  191. package/plugins/filters/condition/endsWith.js +1 -2
  192. package/plugins/filters/condition/equal.js +1 -2
  193. package/plugins/filters/condition/greaterThan.js +1 -2
  194. package/plugins/filters/condition/greaterThanOrEqual.js +1 -2
  195. package/plugins/filters/condition/lessThan.js +1 -2
  196. package/plugins/filters/condition/lessThanOrEqual.js +1 -2
  197. package/plugins/filters/condition/none.js +1 -2
  198. package/plugins/filters/condition/notBetween.js +1 -2
  199. package/plugins/filters/condition/notContains.js +1 -2
  200. package/plugins/filters/condition/notEmpty.js +1 -2
  201. package/plugins/filters/condition/notEqual.js +1 -2
  202. package/plugins/filters/filters.js +76 -3
  203. package/plugins/filters/filters.mjs +75 -1
  204. package/plugins/filters/logicalOperations/conjunction.js +1 -2
  205. package/plugins/filters/logicalOperations/disjunction.js +1 -2
  206. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -2
  207. package/plugins/filters/ui/_base.js +1 -2
  208. package/plugins/filters/ui/multipleSelect.js +1 -7
  209. package/plugins/filters/ui/multipleSelect.mjs +0 -5
  210. package/plugins/filters/ui/select.js +1 -2
  211. package/plugins/formulas/engine/register.js +3 -4
  212. package/plugins/formulas/engine/register.mjs +1 -1
  213. package/plugins/formulas/formulas.js +40 -41
  214. package/plugins/formulas/formulas.mjs +39 -40
  215. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -2
  216. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -2
  217. package/plugins/hiddenColumns/hiddenColumns.js +64 -0
  218. package/plugins/hiddenColumns/hiddenColumns.mjs +64 -0
  219. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -2
  220. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -2
  221. package/plugins/hiddenRows/hiddenRows.js +64 -0
  222. package/plugins/hiddenRows/hiddenRows.mjs +64 -0
  223. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -2
  224. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -2
  225. package/plugins/manualRowMove/manualRowMove.js +1 -1
  226. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  227. package/plugins/manualRowResize/manualRowResize.js +1 -1
  228. package/plugins/manualRowResize/manualRowResize.mjs +1 -1
  229. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -2
  230. package/plugins/mergeCells/mergeCells.js +56 -38
  231. package/plugins/mergeCells/mergeCells.mjs +56 -38
  232. package/plugins/mergeCells/utils.js +3 -4
  233. package/plugins/mergeCells/utils.mjs +3 -4
  234. package/plugins/nestedHeaders/nestedHeaders.js +37 -12
  235. package/plugins/nestedHeaders/nestedHeaders.mjs +37 -12
  236. package/plugins/nestedRows/nestedRows.js +12 -12
  237. package/plugins/nestedRows/nestedRows.mjs +12 -12
  238. package/plugins/nestedRows/ui/contextMenu.js +1 -2
  239. package/plugins/nestedRows/ui/headers.js +2 -3
  240. package/plugins/nestedRows/ui/headers.mjs +2 -3
  241. package/plugins/persistentState/persistentState.js +1 -1
  242. package/plugins/persistentState/persistentState.mjs +1 -1
  243. package/plugins/stretchColumns/calculator.js +3 -2
  244. package/plugins/stretchColumns/calculator.mjs +3 -2
  245. package/plugins/stretchColumns/stretchColumns.js +13 -0
  246. package/plugins/stretchColumns/stretchColumns.mjs +13 -0
  247. package/plugins/trimRows/trimRows.js +61 -0
  248. package/plugins/trimRows/trimRows.mjs +61 -0
  249. package/renderers/baseRenderer/baseRenderer.js +4 -0
  250. package/renderers/baseRenderer/baseRenderer.mjs +4 -0
  251. package/renderers/registry.js +2 -3
  252. package/renderers/registry.mjs +1 -1
  253. package/selection/mouseEventHandler.js +48 -13
  254. package/selection/mouseEventHandler.mjs +47 -13
  255. package/selection/range.js +73 -6
  256. package/selection/range.mjs +73 -6
  257. package/selection/selection.js +46 -32
  258. package/selection/selection.mjs +45 -30
  259. package/settings.d.ts +1 -0
  260. package/styles/handsontable.css +131 -55
  261. package/styles/handsontable.min.css +3 -3
  262. package/styles/ht-theme-horizon.css +296 -181
  263. package/styles/ht-theme-horizon.min.css +3 -3
  264. package/styles/ht-theme-main.css +314 -205
  265. package/styles/ht-theme-main.min.css +3 -3
  266. package/tableView.js +9 -20
  267. package/tableView.mjs +9 -20
  268. package/translations/indexMapper.js +9 -5
  269. package/translations/indexMapper.mjs +9 -5
  270. package/utils/paginator.js +13 -0
  271. package/utils/paginator.mjs +13 -0
  272. package/utils/staticRegister.js +24 -2
  273. package/utils/staticRegister.mjs +23 -2
  274. package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.js +16 -30
  275. package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.mjs +16 -30
  276. package/validators/registry.js +2 -3
  277. package/validators/registry.mjs +1 -1
@@ -382,31 +382,20 @@ class DataMap {
382
382
  }
383
383
  const dataSource = this.dataSource;
384
384
  const maxCols = this.tableMeta.maxCols;
385
- const countSourceCols = this.hot.countSourceCols();
386
- let columnIndex = index;
387
- if (typeof columnIndex !== 'number' || columnIndex >= countSourceCols) {
388
- columnIndex = countSourceCols;
389
- }
390
- const continueProcess = this.hot.runHooks('beforeCreateCol', columnIndex, amount, source);
391
- if (continueProcess === false) {
385
+ const numberOfSourceCols = this.hot.countSourceCols();
386
+ const numberOfVisualCols = this.hot.countCols();
387
+ const numberOfSourceRows = this.hot.countSourceRows();
388
+ const visualColumnIndex = typeof index === 'number' && index <= numberOfSourceCols ? index : numberOfVisualCols;
389
+ if (this.hot.runHooks('beforeCreateCol', visualColumnIndex, amount, source) === false) {
392
390
  return {
393
391
  delta: 0
394
392
  };
395
393
  }
396
- let physicalColumnIndex = countSourceCols;
397
- if (columnIndex < this.hot.countCols()) {
398
- physicalColumnIndex = this.hot.toPhysicalColumn(columnIndex);
399
- }
400
- const numberOfSourceRows = this.hot.countSourceRows();
401
- let nrOfColumns = this.hot.countCols();
394
+ const physicalColumnIndex = visualColumnIndex < numberOfVisualCols ? this.hot.toPhysicalColumn(visualColumnIndex) : numberOfSourceCols;
395
+ const firstNewPhysicalColumnIndex = mode === 'end' ? Math.min(physicalColumnIndex + 1, numberOfSourceCols) : physicalColumnIndex;
402
396
  let numberOfCreatedCols = 0;
403
- let currentIndex = physicalColumnIndex;
404
- if (mode === 'end') {
405
- currentIndex = Math.min(currentIndex + 1, countSourceCols);
406
- }
407
- const startPhysicalIndex = currentIndex;
408
- while (numberOfCreatedCols < amount && nrOfColumns < maxCols) {
409
- if (typeof columnIndex !== 'number' || columnIndex >= nrOfColumns) {
397
+ for (let col = firstNewPhysicalColumnIndex; numberOfCreatedCols < amount && numberOfVisualCols + numberOfCreatedCols < maxCols; col++) {
398
+ if (typeof visualColumnIndex !== 'number' || visualColumnIndex >= numberOfVisualCols + numberOfCreatedCols) {
410
399
  if (numberOfSourceRows > 0) {
411
400
  for (let row = 0; row < numberOfSourceRows; row += 1) {
412
401
  if (typeof dataSource[row] === 'undefined') {
@@ -419,29 +408,26 @@ class DataMap {
419
408
  }
420
409
  } else {
421
410
  for (let row = 0; row < numberOfSourceRows; row++) {
422
- dataSource[row].splice(currentIndex, 0, null);
411
+ dataSource[row].splice(col, 0, null);
423
412
  }
424
413
  }
425
414
  numberOfCreatedCols += 1;
426
- currentIndex += 1;
427
- nrOfColumns += 1;
428
415
  }
429
- this.hot.columnIndexMapper.insertIndexes(columnIndex, numberOfCreatedCols);
430
416
  if (numberOfCreatedCols > 0) {
431
417
  if (index === undefined || index === null) {
432
418
  // Creates the meta columns at the end of the columns collection without shifting the cells
433
419
  // that were defined out of the range of the dataset.
434
420
  this.metaManager.createColumn(null, numberOfCreatedCols);
435
421
  } else if (source !== 'auto') {
436
- this.metaManager.createColumn(startPhysicalIndex, amount);
422
+ this.metaManager.createColumn(firstNewPhysicalColumnIndex, amount);
437
423
  }
438
424
  }
439
- const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);
440
- this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);
425
+ this.hot.columnIndexMapper.insertIndexes(visualColumnIndex, numberOfCreatedCols, mode);
426
+ this.hot.runHooks('afterCreateCol', this.hot.toVisualColumn(firstNewPhysicalColumnIndex), numberOfCreatedCols, source);
441
427
  this.refreshDuckSchema();
442
428
  return {
443
429
  delta: numberOfCreatedCols,
444
- startPhysicalIndex
430
+ startPhysicalIndex: firstNewPhysicalColumnIndex
445
431
  };
446
432
  }
447
433
 
@@ -681,7 +667,7 @@ class DataMap {
681
667
  }
682
668
  if (this.hot.hasHook('modifyData')) {
683
669
  const valueHolder = createObjectPropListener(value);
684
- this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'get');
670
+ this.hot.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'get');
685
671
  if (valueHolder.isTouched()) {
686
672
  value = valueHolder.value;
687
673
  }
@@ -721,7 +707,7 @@ class DataMap {
721
707
 
722
708
  if (this.hot.hasHook('modifyData')) {
723
709
  const valueHolder = createObjectPropListener(newValue);
724
- this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'set');
710
+ this.hot.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'set');
725
711
  if (valueHolder.isTouched()) {
726
712
  newValue = valueHolder.value;
727
713
  }
@@ -83,6 +83,33 @@ var _object = require("../../helpers/object");
83
83
  * ```
84
84
  * :::
85
85
  *
86
+ * ::: only-for angular
87
+ * ```ts
88
+ * settings = {
89
+ * data: [
90
+ * ["A1", "B1", "C1", "D1", "E1"],
91
+ * ["A2", "B2", "C2", "D2", "E2"],
92
+ * ["A3", "B3", "C3", "D3", "E3"],
93
+ * ["A4", "B4", "C4", "D4", "E4"],
94
+ * ["A5", "B5", "C5", "D5", "E5"],
95
+ * ],
96
+ * width: 400,
97
+ * height: 300,
98
+ * colHeaders: true,
99
+ * rowHeaders: true,
100
+ * customBorders: true,
101
+ * dropdownMenu: true,
102
+ * multiColumnSorting: true,
103
+ * filters: true,
104
+ * manualRowMove: true,
105
+ * };
106
+ * ```
107
+ *
108
+ * ```html
109
+ * <hot-table [settings]="settings" />
110
+ * ```
111
+ * :::
112
+ *
86
113
  * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:
87
114
  * - [The entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
88
115
  * - [Individual columns](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)
@@ -4330,6 +4357,37 @@ var _default = () => {
4330
4357
  * ```
4331
4358
  */
4332
4359
  tableClassName: undefined,
4360
+ /**
4361
+ * The `textEllipsis` option configures whether the text content in the cells should be truncated with an ellipsis (three dots).
4362
+ *
4363
+ * You can set the `textEllipsis` option to one of the following:
4364
+ *
4365
+ * | Setting | Description |
4366
+ * | ----------------- | --------------------------------------------- |
4367
+ * | `false` (default) | Don't truncate text content with an ellipsis |
4368
+ * | `true` | Truncate text content with an ellipsis |
4369
+ *
4370
+ * @since 16.0.0
4371
+ * @memberof Options#
4372
+ * @type {boolean}
4373
+ * @default false
4374
+ * @category Core
4375
+ *
4376
+ * @example
4377
+ * ```js
4378
+ * columns: [
4379
+ * {
4380
+ * // truncate text content with an ellipsis
4381
+ * textEllipsis: true,
4382
+ * },
4383
+ * {
4384
+ * // don't truncate text content with an ellipsis
4385
+ * textEllipsis: false,
4386
+ * }
4387
+ * ],
4388
+ * ```
4389
+ */
4390
+ textEllipsis: false,
4333
4391
  /**
4334
4392
  * The `themeName` option allows enabling a theme by that name.
4335
4393
  *
@@ -80,6 +80,33 @@ import { isObjectEqual } from "../../helpers/object.mjs";
80
80
  * ```
81
81
  * :::
82
82
  *
83
+ * ::: only-for angular
84
+ * ```ts
85
+ * settings = {
86
+ * data: [
87
+ * ["A1", "B1", "C1", "D1", "E1"],
88
+ * ["A2", "B2", "C2", "D2", "E2"],
89
+ * ["A3", "B3", "C3", "D3", "E3"],
90
+ * ["A4", "B4", "C4", "D4", "E4"],
91
+ * ["A5", "B5", "C5", "D5", "E5"],
92
+ * ],
93
+ * width: 400,
94
+ * height: 300,
95
+ * colHeaders: true,
96
+ * rowHeaders: true,
97
+ * customBorders: true,
98
+ * dropdownMenu: true,
99
+ * multiColumnSorting: true,
100
+ * filters: true,
101
+ * manualRowMove: true,
102
+ * };
103
+ * ```
104
+ *
105
+ * ```html
106
+ * <hot-table [settings]="settings" />
107
+ * ```
108
+ * :::
109
+ *
83
110
  * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:
84
111
  * - [The entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
85
112
  * - [Individual columns](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)
@@ -4327,6 +4354,37 @@ export default () => {
4327
4354
  * ```
4328
4355
  */
4329
4356
  tableClassName: undefined,
4357
+ /**
4358
+ * The `textEllipsis` option configures whether the text content in the cells should be truncated with an ellipsis (three dots).
4359
+ *
4360
+ * You can set the `textEllipsis` option to one of the following:
4361
+ *
4362
+ * | Setting | Description |
4363
+ * | ----------------- | --------------------------------------------- |
4364
+ * | `false` (default) | Don't truncate text content with an ellipsis |
4365
+ * | `true` | Truncate text content with an ellipsis |
4366
+ *
4367
+ * @since 16.0.0
4368
+ * @memberof Options#
4369
+ * @type {boolean}
4370
+ * @default false
4371
+ * @category Core
4372
+ *
4373
+ * @example
4374
+ * ```js
4375
+ * columns: [
4376
+ * {
4377
+ * // truncate text content with an ellipsis
4378
+ * textEllipsis: true,
4379
+ * },
4380
+ * {
4381
+ * // don't truncate text content with an ellipsis
4382
+ * textEllipsis: false,
4383
+ * }
4384
+ * ],
4385
+ * ```
4386
+ */
4387
+ textEllipsis: false,
4330
4388
  /**
4331
4389
  * The `themeName` option allows enabling a theme by that name.
4332
4390
  *
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 15.3.0-next-175012b-20250429
30
- * Release date: 29/04/2025 (built at 29/04/2025 10:35:24)
29
+ * Version: 16.0.0-next-f486b48-20250702
30
+ * Release date: 09/07/2025 (built at 02/07/2025 09:19:08)
31
31
  */
32
32
  /**
33
33
  * Fix for bootstrap styles
@@ -293,6 +293,16 @@ innerBorderBottom - Property controlled by bottom overlay
293
293
  display: none !important;
294
294
  }
295
295
 
296
+ .handsontable .wtBorder:nth-child(1),
297
+ .handsontable .wtBorder:nth-child(3) {
298
+ z-index: 2;
299
+ }
300
+
301
+ .handsontable .wtBorder:nth-child(2),
302
+ .handsontable .wtBorder:nth-child(4) {
303
+ z-index: 1;
304
+ }
305
+
296
306
  /* A layer order of the selection types */
297
307
  .handsontable .wtBorder.current {
298
308
  z-index: 10;
@@ -422,7 +432,7 @@ innerBorderBottom - Property controlled by bottom overlay
422
432
  font-size: 10px;
423
433
  }
424
434
 
425
- .handsontable .htFocusCatcher {
435
+ .ht-root-wrapper .htFocusCatcher {
426
436
  position: absolute;
427
437
  z-index: -1;
428
438
  opacity: 0;
@@ -433,6 +443,12 @@ innerBorderBottom - Property controlled by bottom overlay
433
443
  height: 0;
434
444
  }
435
445
 
446
+ .handsontable .htTextEllipsis {
447
+ text-overflow: ellipsis;
448
+ overflow: hidden;
449
+ white-space: nowrap;
450
+ }
451
+
436
452
  /* plugins */
437
453
  /* row + column resizer */
438
454
  .handsontable .manualColumnResizer {
@@ -699,15 +715,25 @@ TextRenderer placeholder value
699
715
  * Handsontable listbox theme
700
716
  */
701
717
  .handsontable.listbox {
718
+ border: 1px solid #ccc;
702
719
  margin: 0;
703
720
  }
704
721
 
722
+ .handsontable.listbox.autocompleteEditor,
723
+ .handsontable.listbox.dropdownEditor {
724
+ border-width: 0;
725
+ }
726
+
705
727
  .handsontable.listbox .ht_master table {
706
- border: 1px solid #ccc;
707
728
  border-collapse: separate;
708
729
  background: white;
709
730
  }
710
731
 
732
+ .handsontable.listbox.autocompleteEditor .ht_master table,
733
+ .handsontable.listbox.dropdownEditor .ht_master table {
734
+ border: 1px solid #ccc;
735
+ }
736
+
711
737
  .handsontable.listbox th,
712
738
  .handsontable.listbox tr:first-child th,
713
739
  .handsontable.listbox tr:last-child th,
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 15.3.0-next-175012b-20250429
30
- * Release date: 29/04/2025 (built at 29/04/2025 10:35:24)
29
+ * Version: 16.0.0-next-f486b48-20250702
30
+ * Release date: 09/07/2025 (built at 02/07/2025 09:19:08)
31
31
  */
32
32
  /**
33
33
  * Fix for bootstrap styles
@@ -293,6 +293,16 @@ innerBorderBottom - Property controlled by bottom overlay
293
293
  display: none !important;
294
294
  }
295
295
 
296
+ .handsontable .wtBorder:nth-child(1),
297
+ .handsontable .wtBorder:nth-child(3) {
298
+ z-index: 2;
299
+ }
300
+
301
+ .handsontable .wtBorder:nth-child(2),
302
+ .handsontable .wtBorder:nth-child(4) {
303
+ z-index: 1;
304
+ }
305
+
296
306
  /* A layer order of the selection types */
297
307
  .handsontable .wtBorder.current {
298
308
  z-index: 10;
@@ -422,7 +432,7 @@ innerBorderBottom - Property controlled by bottom overlay
422
432
  font-size: 10px;
423
433
  }
424
434
 
425
- .handsontable .htFocusCatcher {
435
+ .ht-root-wrapper .htFocusCatcher {
426
436
  position: absolute;
427
437
  z-index: -1;
428
438
  opacity: 0;
@@ -433,6 +443,12 @@ innerBorderBottom - Property controlled by bottom overlay
433
443
  height: 0;
434
444
  }
435
445
 
446
+ .handsontable .htTextEllipsis {
447
+ text-overflow: ellipsis;
448
+ overflow: hidden;
449
+ white-space: nowrap;
450
+ }
451
+
436
452
  /* plugins */
437
453
  /* row + column resizer */
438
454
  .handsontable .manualColumnResizer {
@@ -699,15 +715,25 @@ TextRenderer placeholder value
699
715
  * Handsontable listbox theme
700
716
  */
701
717
  .handsontable.listbox {
718
+ border: 1px solid #ccc;
702
719
  margin: 0;
703
720
  }
704
721
 
722
+ .handsontable.listbox.autocompleteEditor,
723
+ .handsontable.listbox.dropdownEditor {
724
+ border-width: 0;
725
+ }
726
+
705
727
  .handsontable.listbox .ht_master table {
706
- border: 1px solid #ccc;
707
728
  border-collapse: separate;
708
729
  background: white;
709
730
  }
710
731
 
732
+ .handsontable.listbox.autocompleteEditor .ht_master table,
733
+ .handsontable.listbox.dropdownEditor .ht_master table {
734
+ border: 1px solid #ccc;
735
+ }
736
+
711
737
  .handsontable.listbox th,
712
738
  .handsontable.listbox tr:first-child th,
713
739
  .handsontable.listbox tr:last-child th,