handsontable 0.0.0-next-2c41c5b-20250814 → 0.0.0-next-fce5825-20250822

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (126) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/cellTypes/autocompleteType/autocompleteType.js +1 -4
  4. package/cellTypes/autocompleteType/autocompleteType.mjs +1 -4
  5. package/cellTypes/checkboxType/checkboxType.js +1 -3
  6. package/cellTypes/checkboxType/checkboxType.mjs +1 -3
  7. package/cellTypes/dropdownType/dropdownType.js +1 -4
  8. package/cellTypes/dropdownType/dropdownType.mjs +1 -4
  9. package/cellTypes/numericType/numericType.js +1 -3
  10. package/cellTypes/numericType/numericType.mjs +1 -3
  11. package/core/focusCatcher/index.js +37 -20
  12. package/core/focusCatcher/index.mjs +37 -20
  13. package/core/focusCatcher/utils.js +3 -64
  14. package/core/focusCatcher/utils.mjs +1 -60
  15. package/core/hooks/constants.js +58 -0
  16. package/core/hooks/constants.mjs +58 -0
  17. package/core/hooks/index.d.ts +7 -0
  18. package/core.d.ts +0 -1
  19. package/core.js +59 -55
  20. package/core.mjs +61 -57
  21. package/dataMap/dataMap.js +3 -13
  22. package/dataMap/dataMap.mjs +4 -14
  23. package/dataMap/dataSource.js +0 -16
  24. package/dataMap/dataSource.mjs +0 -16
  25. package/dataMap/metaManager/lazyFactoryMap.js +3 -4
  26. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -2
  27. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -3
  28. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -3
  29. package/dataMap/metaManager/metaSchema.js +97 -68
  30. package/dataMap/metaManager/metaSchema.mjs +97 -68
  31. package/dataMap/metaManager/utils.js +11 -0
  32. package/dataMap/metaManager/utils.mjs +10 -0
  33. package/dist/handsontable.css +103 -5
  34. package/dist/handsontable.full.css +103 -5
  35. package/dist/handsontable.full.js +2770 -1954
  36. package/dist/handsontable.full.min.css +3 -3
  37. package/dist/handsontable.full.min.js +67 -67
  38. package/dist/handsontable.js +2772 -1956
  39. package/dist/handsontable.min.css +3 -3
  40. package/dist/handsontable.min.js +27 -27
  41. package/editors/autocompleteEditor/autocompleteEditor.js +8 -33
  42. package/editors/autocompleteEditor/autocompleteEditor.mjs +9 -34
  43. package/editors/baseEditor/baseEditor.js +2 -2
  44. package/editors/baseEditor/baseEditor.mjs +2 -2
  45. package/helpers/a11y.js +5 -1
  46. package/helpers/a11y.mjs +3 -1
  47. package/helpers/mixed.js +64 -1
  48. package/helpers/mixed.mjs +62 -1
  49. package/helpers/number.js +0 -28
  50. package/helpers/number.mjs +0 -26
  51. package/helpers/string.js +0 -19
  52. package/helpers/string.mjs +0 -18
  53. package/index.d.ts +9 -0
  54. package/package.json +6 -1
  55. package/plugins/autofill/autofill.js +3 -50
  56. package/plugins/autofill/autofill.mjs +3 -50
  57. package/plugins/base/base.js +75 -14
  58. package/plugins/base/base.mjs +75 -14
  59. package/plugins/contextMenu/contextMenu.js +1 -0
  60. package/plugins/contextMenu/contextMenu.mjs +1 -0
  61. package/plugins/copyPaste/copyPaste.js +28 -61
  62. package/plugins/copyPaste/copyPaste.mjs +29 -62
  63. package/plugins/dialog/dialog.d.ts +23 -0
  64. package/plugins/dialog/dialog.js +469 -0
  65. package/plugins/dialog/dialog.mjs +465 -0
  66. package/plugins/dialog/index.d.ts +1 -0
  67. package/plugins/dialog/index.js +7 -0
  68. package/plugins/dialog/index.mjs +1 -0
  69. package/plugins/dialog/ui.js +240 -0
  70. package/plugins/dialog/ui.mjs +235 -0
  71. package/plugins/dropdownMenu/dropdownMenu.js +1 -0
  72. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -0
  73. package/plugins/index.d.ts +3 -0
  74. package/plugins/index.js +3 -0
  75. package/plugins/index.mjs +3 -1
  76. package/plugins/pagination/focusController.js +27 -0
  77. package/plugins/pagination/focusController.mjs +23 -0
  78. package/plugins/pagination/pagination.js +165 -18
  79. package/plugins/pagination/pagination.mjs +165 -18
  80. package/plugins/pagination/ui.js +101 -62
  81. package/plugins/pagination/ui.mjs +102 -63
  82. package/selection/range.js +11 -0
  83. package/selection/range.mjs +11 -0
  84. package/selection/selection.js +63 -2
  85. package/selection/selection.mjs +63 -2
  86. package/selection/utils.js +2 -1
  87. package/selection/utils.mjs +2 -1
  88. package/settings.d.ts +3 -3
  89. package/shortcuts/context.js +4 -1
  90. package/shortcuts/context.mjs +4 -1
  91. package/shortcuts/manager.js +17 -3
  92. package/shortcuts/manager.mjs +17 -3
  93. package/styles/handsontable.css +106 -22
  94. package/styles/handsontable.min.css +3 -3
  95. package/styles/ht-theme-horizon.css +24 -6
  96. package/styles/ht-theme-horizon.min.css +3 -3
  97. package/styles/ht-theme-main.css +52 -34
  98. package/styles/ht-theme-main.min.css +3 -3
  99. package/tableView.js +7 -2
  100. package/tableView.mjs +7 -2
  101. package/{core/focusCatcher → utils}/focusDetector.js +29 -11
  102. package/{core/focusCatcher → utils}/focusDetector.mjs +29 -11
  103. package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
  104. package/validators/autocompleteValidator/autocompleteValidator.mjs +1 -2
  105. package/cellTypes/autocompleteType/accessors/index.js +0 -7
  106. package/cellTypes/autocompleteType/accessors/index.mjs +0 -2
  107. package/cellTypes/autocompleteType/accessors/valueGetter.js +0 -14
  108. package/cellTypes/autocompleteType/accessors/valueGetter.mjs +0 -10
  109. package/cellTypes/autocompleteType/accessors/valueSetter.js +0 -25
  110. package/cellTypes/autocompleteType/accessors/valueSetter.mjs +0 -21
  111. package/cellTypes/checkboxType/accessors/index.js +0 -5
  112. package/cellTypes/checkboxType/accessors/index.mjs +0 -1
  113. package/cellTypes/checkboxType/accessors/valueSetter.js +0 -26
  114. package/cellTypes/checkboxType/accessors/valueSetter.mjs +0 -22
  115. package/cellTypes/dropdownType/accessors/index.js +0 -7
  116. package/cellTypes/dropdownType/accessors/index.mjs +0 -2
  117. package/cellTypes/dropdownType/accessors/valueGetter.js +0 -14
  118. package/cellTypes/dropdownType/accessors/valueGetter.mjs +0 -10
  119. package/cellTypes/dropdownType/accessors/valueSetter.js +0 -17
  120. package/cellTypes/dropdownType/accessors/valueSetter.mjs +0 -13
  121. package/cellTypes/numericType/accessors/index.js +0 -5
  122. package/cellTypes/numericType/accessors/index.mjs +0 -1
  123. package/cellTypes/numericType/accessors/valueSetter.js +0 -19
  124. package/cellTypes/numericType/accessors/valueSetter.mjs +0 -15
  125. package/utils/valueAccessors.js +0 -45
  126. package/utils/valueAccessors.mjs +0 -40
@@ -13,7 +13,6 @@ require("core-js/modules/es.set.union.v2.js");
13
13
  require("core-js/modules/esnext.iterator.constructor.js");
14
14
  require("core-js/modules/esnext.iterator.filter.js");
15
15
  var _utils = require("./utils");
16
- var _number = require("../../helpers/number");
17
16
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
18
17
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
19
18
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -180,7 +179,7 @@ class LazyFactoryMap {
180
179
  * @returns {*}
181
180
  */
182
181
  obtain(key) {
183
- (0, _utils.assert)(() => (0, _number.isUnsignedNumber)(key), 'Expecting an unsigned number.');
182
+ (0, _utils.assert)(() => (0, _utils.isUnsignedNumber)(key), 'Expecting an unsigned number.');
184
183
  const dataIndex = this._getStorageIndexByKey(key);
185
184
  let result;
186
185
  if (dataIndex >= 0) {
@@ -214,7 +213,7 @@ class LazyFactoryMap {
214
213
  */
215
214
  insert(key) {
216
215
  let amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
217
- (0, _utils.assert)(() => (0, _number.isUnsignedNumber)(key) || (0, _utils.isNullish)(key), 'Expecting an unsigned number or null/undefined argument.');
216
+ (0, _utils.assert)(() => (0, _utils.isUnsignedNumber)(key) || (0, _utils.isNullish)(key), 'Expecting an unsigned number or null/undefined argument.');
218
217
  const newIndexes = [];
219
218
  const dataLength = this.data.length;
220
219
  for (let i = 0; i < amount; i++) {
@@ -233,7 +232,7 @@ class LazyFactoryMap {
233
232
  */
234
233
  remove(key) {
235
234
  let amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
236
- (0, _utils.assert)(() => (0, _number.isUnsignedNumber)(key) || (0, _utils.isNullish)(key), 'Expecting an unsigned number or null/undefined argument.');
235
+ (0, _utils.assert)(() => (0, _utils.isUnsignedNumber)(key) || (0, _utils.isNullish)(key), 'Expecting an unsigned number or null/undefined argument.');
237
236
  const removed = this.index.splice((0, _utils.isNullish)(key) ? this.index.length - amount : key, amount);
238
237
  for (let i = 0; i < removed.length; i++) {
239
238
  const removedIndex = removed[i];
@@ -12,8 +12,7 @@ import "core-js/modules/esnext.iterator.filter.js";
12
12
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
13
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
14
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
- import { assert, isNullish } from "./utils.mjs";
16
- import { isUnsignedNumber } from "../../helpers/number.mjs";
15
+ import { assert, isUnsignedNumber, isNullish } from "./utils.mjs";
17
16
  /* eslint-disable jsdoc/require-description-complete-sentence */
18
17
  /**
19
18
  * @class LazyFactoryMap
@@ -3,11 +3,10 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ var _object = require("../../../helpers/object");
6
7
  var _utils = require("../utils");
7
8
  var _lazyFactoryMap = _interopRequireDefault(require("../lazyFactoryMap"));
8
- var _object = require("../../../helpers/object");
9
9
  var _mixed = require("../../../helpers/mixed");
10
- var _number = require("../../../helpers/number");
11
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
11
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
12
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -190,7 +189,7 @@ class CellMeta {
190
189
  * @returns {object[]}
191
190
  */
192
191
  getMetasAtRow(physicalRow) {
193
- (0, _utils.assert)(() => (0, _number.isUnsignedNumber)(physicalRow), 'Expecting an unsigned number.');
192
+ (0, _utils.assert)(() => (0, _utils.isUnsignedNumber)(physicalRow), 'Expecting an unsigned number.');
194
193
  const rowsMeta = new Map(this.metas);
195
194
  return rowsMeta.has(physicalRow) ? Array.from(rowsMeta.get(physicalRow).values()) : [];
196
195
  }
@@ -3,11 +3,10 @@ import "core-js/modules/es.array.push.js";
3
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import { extendByMetaType, assert } from "../utils.mjs";
7
- import LazyFactoryMap from "../lazyFactoryMap.mjs";
8
6
  import { extend } from "../../../helpers/object.mjs";
7
+ import { extendByMetaType, assert, isUnsignedNumber } from "../utils.mjs";
8
+ import LazyFactoryMap from "../lazyFactoryMap.mjs";
9
9
  import { isDefined } from "../../../helpers/mixed.mjs";
10
- import { isUnsignedNumber } from "../../../helpers/number.mjs";
11
10
  /* eslint-disable jsdoc/require-description-complete-sentence */
12
11
  /**
13
12
  * @class CellMeta
@@ -1797,6 +1797,101 @@ var _default = () => {
1797
1797
  * ```
1798
1798
  */
1799
1799
  disableVisualSelection: false,
1800
+ /**
1801
+ * @description
1802
+ * The `dialog` option configures the [`Dialog`](@/api/dialog.md) plugin.
1803
+ *
1804
+ * You can set the `dialog` option to one of the following:
1805
+ *
1806
+ * | Setting | Description |
1807
+ * | --------- | --------------------------------------------------------------------------- |
1808
+ * | `false` | Disable the [`Dialog`](@/api/dialog.md) plugin |
1809
+ * | `true` | Enable the [`Dialog`](@/api/dialog.md) plugin with default options |
1810
+ *
1811
+ * ##### dialog: Additional options
1812
+ *
1813
+ * | Option | Possible settings | Description |
1814
+ * | ------------------------ | ------------------------------------------------------------------------------------------------------ | ----------------------------------------|
1815
+ * | `content` | A string, HTMLElement or DocumentFragment (default: `''`) | The content of the dialog |
1816
+ * | `customClassName` | A string (default: `''`) | The custom class name of the dialog |
1817
+ * | `background` | One of the options: `'solid'` or `'semi-transparent'` (default: `'solid'`) | The background of the dialog |
1818
+ * | `contentBackground` | Boolean (default: `false`) | Whether to show the content background |
1819
+ * | `contentDirections` | One of the options: `'row'` or `'row-reverse'` or `'column'` or `'column-reverse'` (default: `'row'`) | The direction of the content |
1820
+ * | `animation` | Boolean (default: `true`) | Whether to show the animation |
1821
+ * | `closable` | Boolean (default: `false`) | Whether to show the close button |
1822
+ *
1823
+ * Read more:
1824
+ * - [Plugins: `Dialog`](@/api/dialog.md)
1825
+ *
1826
+ * @since 16.1.0
1827
+ * @memberof Options#
1828
+ * @type {boolean|object}
1829
+ * @default false
1830
+ * @category Dialog
1831
+ *
1832
+ * @example
1833
+ * ::: only-for javascript
1834
+ * ```js
1835
+ * // enable the Dialog plugin with default option
1836
+ * dialog: true,
1837
+ *
1838
+ * // enable the Dialog plugin with custom configuration
1839
+ * dialog: {
1840
+ * content: 'Dialog content',
1841
+ * customClassName: 'custom-dialog',
1842
+ * background: 'semi-transparent',
1843
+ * contentBackground: false,
1844
+ * contentDirections: 'column',
1845
+ * animation: false,
1846
+ * closable: true,
1847
+ * }
1848
+ * ```
1849
+ * :::
1850
+ *
1851
+ * ::: only-for react
1852
+ * ```jsx
1853
+ * // enable the Dialog plugin with default option
1854
+ * <HotTable
1855
+ * dialog={true}
1856
+ * />
1857
+ *
1858
+ * // enable the Dialog plugin with custom configuration
1859
+ * <HotTable
1860
+ * dialog={{
1861
+ * content: 'Dialog content',
1862
+ * customClassName: 'custom-dialog',
1863
+ * background: 'semi-transparent',
1864
+ * contentBackground: false,
1865
+ * contentDirections: 'column',
1866
+ * animation: false,
1867
+ * closable: true,
1868
+ * }}
1869
+ * />
1870
+ * ```
1871
+ * :::
1872
+ *
1873
+ * ::: only-for angular
1874
+ * ```ts
1875
+ * settings = {
1876
+ * dialog: {
1877
+ * content: 'Dialog content',
1878
+ * customClassName: 'custom-dialog',
1879
+ * background: 'semi-transparent',
1880
+ * contentBackground: false,
1881
+ * contentDirections: 'column',
1882
+ * animation: false,
1883
+ * closable: true,
1884
+ * }
1885
+ * };
1886
+ * ```
1887
+ *
1888
+ * ```html
1889
+ * <hot-table [settings]="settings" />
1890
+ * ```
1891
+ * :::
1892
+ *
1893
+ */
1894
+ dialog: false,
1800
1895
  /**
1801
1896
  * @description
1802
1897
  * The `dragToScroll` option configures the [`DragToScroll`](@/api/dragToScroll.md) plugin.
@@ -4242,13 +4337,9 @@ var _default = () => {
4242
4337
  *
4243
4338
  * You can set the `source` option to one of the following:
4244
4339
  *
4245
- * - An array of string values
4246
- * - An array of objects with `key` and `value` properties
4340
+ * - An array
4247
4341
  * - A function
4248
4342
  *
4249
- * Note: When defining the `source` option as an array of objects with `key` and `value` properties, the data format for that cell
4250
- * needs to be an object with `key` and `value` properties as well.
4251
- *
4252
4343
  * Read more:
4253
4344
  * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)
4254
4345
  * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)
@@ -4264,7 +4355,7 @@ var _default = () => {
4264
4355
  *
4265
4356
  * @example
4266
4357
  * ```js
4267
- * // set `source` to an array of string values
4358
+ * // set `source` to an array
4268
4359
  * columns: [{
4269
4360
  * // set the `type` of each cell in this column to `autocomplete`
4270
4361
  * type: 'autocomplete',
@@ -4272,20 +4363,6 @@ var _default = () => {
4272
4363
  * source: ['A', 'B', 'C', 'D']
4273
4364
  * }],
4274
4365
  *
4275
- * // set `source` to an array of objects with `key` and `value` properties
4276
- * columns: [{
4277
- * // set the `type` of each cell in this column to `autocomplete`
4278
- * type: 'autocomplete',
4279
- * // set options available in every `autocomplete` cell of this column
4280
- * source: [{
4281
- * key: 'A',
4282
- * value: 'Label A'
4283
- * }, {
4284
- * key: 'B',
4285
- * value: 'Label B'
4286
- * }]
4287
- * }],
4288
- *
4289
4366
  * // set `source` to a function
4290
4367
  * columns: [{
4291
4368
  * // set the `type` of each cell in this column to `autocomplete`
@@ -4839,54 +4916,6 @@ var _default = () => {
4839
4916
  * ```
4840
4917
  */
4841
4918
  validator: undefined,
4842
- /**
4843
- * @description
4844
- * The `valueGetter` option configures a function that defines what value will be used when displaying the cell content.
4845
- * It can be used to modify the value of a cell before it is displayed (for example, for object-based data).
4846
- *
4847
- * @example
4848
- * ```js
4849
- * // use the `label` property of the value object with a fallback to the value itself
4850
- * valueGetter: (value, row, column, cellMeta) => {
4851
- * return value?.label ?? value;
4852
- * }
4853
- * ```
4854
- *
4855
- * @memberof Options#
4856
- * @type {function(any, number, number): any}
4857
- * @param {*} value The value to be displayed in the cell.
4858
- * @param {number} row The visual row index of the cell.
4859
- * @param {number} column The visual column index of the cell.
4860
- * @param {object} cellMeta The cell meta object.
4861
- * @since 16.1.0
4862
- * @default undefined
4863
- * @category Core
4864
- */
4865
- valueGetter: undefined,
4866
- /**
4867
- * @description
4868
- * The `valueSetter` option configures a function that defines what value will be used when setting the cell content.
4869
- * It can be used to modify the value of a cell before it is saved (for example, for object-based data).
4870
- *
4871
- * @example
4872
- * ```js
4873
- * // Modify the value of a cell before it is saved
4874
- * valueSetter: (value, row, column, cellMeta) => {
4875
- * return { id: value?.id ?? value, value: `${value?.value ?? value} at ${row}, ${column}` }
4876
- * },
4877
- * ```
4878
- *
4879
- * @memberof Options#
4880
- * @type {function(any, number, number): any}
4881
- * @param {*} value The value to be set to a cell.
4882
- * @param {number} row The visual row index of the cell.
4883
- * @param {number} column The visual column index of the cell.
4884
- * @param {object} cellMeta The cell meta object.
4885
- * @since 16.1.0
4886
- * @default undefined
4887
- * @category Core
4888
- */
4889
- valueSetter: undefined,
4890
4919
  /**
4891
4920
  * @description
4892
4921
  * The `viewportColumnRenderingOffset` option configures the number of columns
@@ -1794,6 +1794,101 @@ export default () => {
1794
1794
  * ```
1795
1795
  */
1796
1796
  disableVisualSelection: false,
1797
+ /**
1798
+ * @description
1799
+ * The `dialog` option configures the [`Dialog`](@/api/dialog.md) plugin.
1800
+ *
1801
+ * You can set the `dialog` option to one of the following:
1802
+ *
1803
+ * | Setting | Description |
1804
+ * | --------- | --------------------------------------------------------------------------- |
1805
+ * | `false` | Disable the [`Dialog`](@/api/dialog.md) plugin |
1806
+ * | `true` | Enable the [`Dialog`](@/api/dialog.md) plugin with default options |
1807
+ *
1808
+ * ##### dialog: Additional options
1809
+ *
1810
+ * | Option | Possible settings | Description |
1811
+ * | ------------------------ | ------------------------------------------------------------------------------------------------------ | ----------------------------------------|
1812
+ * | `content` | A string, HTMLElement or DocumentFragment (default: `''`) | The content of the dialog |
1813
+ * | `customClassName` | A string (default: `''`) | The custom class name of the dialog |
1814
+ * | `background` | One of the options: `'solid'` or `'semi-transparent'` (default: `'solid'`) | The background of the dialog |
1815
+ * | `contentBackground` | Boolean (default: `false`) | Whether to show the content background |
1816
+ * | `contentDirections` | One of the options: `'row'` or `'row-reverse'` or `'column'` or `'column-reverse'` (default: `'row'`) | The direction of the content |
1817
+ * | `animation` | Boolean (default: `true`) | Whether to show the animation |
1818
+ * | `closable` | Boolean (default: `false`) | Whether to show the close button |
1819
+ *
1820
+ * Read more:
1821
+ * - [Plugins: `Dialog`](@/api/dialog.md)
1822
+ *
1823
+ * @since 16.1.0
1824
+ * @memberof Options#
1825
+ * @type {boolean|object}
1826
+ * @default false
1827
+ * @category Dialog
1828
+ *
1829
+ * @example
1830
+ * ::: only-for javascript
1831
+ * ```js
1832
+ * // enable the Dialog plugin with default option
1833
+ * dialog: true,
1834
+ *
1835
+ * // enable the Dialog plugin with custom configuration
1836
+ * dialog: {
1837
+ * content: 'Dialog content',
1838
+ * customClassName: 'custom-dialog',
1839
+ * background: 'semi-transparent',
1840
+ * contentBackground: false,
1841
+ * contentDirections: 'column',
1842
+ * animation: false,
1843
+ * closable: true,
1844
+ * }
1845
+ * ```
1846
+ * :::
1847
+ *
1848
+ * ::: only-for react
1849
+ * ```jsx
1850
+ * // enable the Dialog plugin with default option
1851
+ * <HotTable
1852
+ * dialog={true}
1853
+ * />
1854
+ *
1855
+ * // enable the Dialog plugin with custom configuration
1856
+ * <HotTable
1857
+ * dialog={{
1858
+ * content: 'Dialog content',
1859
+ * customClassName: 'custom-dialog',
1860
+ * background: 'semi-transparent',
1861
+ * contentBackground: false,
1862
+ * contentDirections: 'column',
1863
+ * animation: false,
1864
+ * closable: true,
1865
+ * }}
1866
+ * />
1867
+ * ```
1868
+ * :::
1869
+ *
1870
+ * ::: only-for angular
1871
+ * ```ts
1872
+ * settings = {
1873
+ * dialog: {
1874
+ * content: 'Dialog content',
1875
+ * customClassName: 'custom-dialog',
1876
+ * background: 'semi-transparent',
1877
+ * contentBackground: false,
1878
+ * contentDirections: 'column',
1879
+ * animation: false,
1880
+ * closable: true,
1881
+ * }
1882
+ * };
1883
+ * ```
1884
+ *
1885
+ * ```html
1886
+ * <hot-table [settings]="settings" />
1887
+ * ```
1888
+ * :::
1889
+ *
1890
+ */
1891
+ dialog: false,
1797
1892
  /**
1798
1893
  * @description
1799
1894
  * The `dragToScroll` option configures the [`DragToScroll`](@/api/dragToScroll.md) plugin.
@@ -4239,13 +4334,9 @@ export default () => {
4239
4334
  *
4240
4335
  * You can set the `source` option to one of the following:
4241
4336
  *
4242
- * - An array of string values
4243
- * - An array of objects with `key` and `value` properties
4337
+ * - An array
4244
4338
  * - A function
4245
4339
  *
4246
- * Note: When defining the `source` option as an array of objects with `key` and `value` properties, the data format for that cell
4247
- * needs to be an object with `key` and `value` properties as well.
4248
- *
4249
4340
  * Read more:
4250
4341
  * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)
4251
4342
  * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)
@@ -4261,7 +4352,7 @@ export default () => {
4261
4352
  *
4262
4353
  * @example
4263
4354
  * ```js
4264
- * // set `source` to an array of string values
4355
+ * // set `source` to an array
4265
4356
  * columns: [{
4266
4357
  * // set the `type` of each cell in this column to `autocomplete`
4267
4358
  * type: 'autocomplete',
@@ -4269,20 +4360,6 @@ export default () => {
4269
4360
  * source: ['A', 'B', 'C', 'D']
4270
4361
  * }],
4271
4362
  *
4272
- * // set `source` to an array of objects with `key` and `value` properties
4273
- * columns: [{
4274
- * // set the `type` of each cell in this column to `autocomplete`
4275
- * type: 'autocomplete',
4276
- * // set options available in every `autocomplete` cell of this column
4277
- * source: [{
4278
- * key: 'A',
4279
- * value: 'Label A'
4280
- * }, {
4281
- * key: 'B',
4282
- * value: 'Label B'
4283
- * }]
4284
- * }],
4285
- *
4286
4363
  * // set `source` to a function
4287
4364
  * columns: [{
4288
4365
  * // set the `type` of each cell in this column to `autocomplete`
@@ -4836,54 +4913,6 @@ export default () => {
4836
4913
  * ```
4837
4914
  */
4838
4915
  validator: undefined,
4839
- /**
4840
- * @description
4841
- * The `valueGetter` option configures a function that defines what value will be used when displaying the cell content.
4842
- * It can be used to modify the value of a cell before it is displayed (for example, for object-based data).
4843
- *
4844
- * @example
4845
- * ```js
4846
- * // use the `label` property of the value object with a fallback to the value itself
4847
- * valueGetter: (value, row, column, cellMeta) => {
4848
- * return value?.label ?? value;
4849
- * }
4850
- * ```
4851
- *
4852
- * @memberof Options#
4853
- * @type {function(any, number, number): any}
4854
- * @param {*} value The value to be displayed in the cell.
4855
- * @param {number} row The visual row index of the cell.
4856
- * @param {number} column The visual column index of the cell.
4857
- * @param {object} cellMeta The cell meta object.
4858
- * @since 16.1.0
4859
- * @default undefined
4860
- * @category Core
4861
- */
4862
- valueGetter: undefined,
4863
- /**
4864
- * @description
4865
- * The `valueSetter` option configures a function that defines what value will be used when setting the cell content.
4866
- * It can be used to modify the value of a cell before it is saved (for example, for object-based data).
4867
- *
4868
- * @example
4869
- * ```js
4870
- * // Modify the value of a cell before it is saved
4871
- * valueSetter: (value, row, column, cellMeta) => {
4872
- * return { id: value?.id ?? value, value: `${value?.value ?? value} at ${row}, ${column}` }
4873
- * },
4874
- * ```
4875
- *
4876
- * @memberof Options#
4877
- * @type {function(any, number, number): any}
4878
- * @param {*} value The value to be set to a cell.
4879
- * @param {number} row The visual row index of the cell.
4880
- * @param {number} column The visual column index of the cell.
4881
- * @param {object} cellMeta The cell meta object.
4882
- * @since 16.1.0
4883
- * @default undefined
4884
- * @category Core
4885
- */
4886
- valueSetter: undefined,
4887
4916
  /**
4888
4917
  * @description
4889
4918
  * The `viewportColumnRenderingOffset` option configures the number of columns
@@ -5,6 +5,7 @@ exports.assert = assert;
5
5
  exports.columnFactory = columnFactory;
6
6
  exports.extendByMetaType = extendByMetaType;
7
7
  exports.isNullish = isNullish;
8
+ exports.isUnsignedNumber = isUnsignedNumber;
8
9
  require("core-js/modules/es.error.cause.js");
9
10
  require("core-js/modules/es.set.difference.v2.js");
10
11
  require("core-js/modules/es.set.intersection.v2.js");
@@ -94,6 +95,16 @@ function columnFactory(TableMeta) {
94
95
  return ColumnMeta;
95
96
  }
96
97
 
98
+ /**
99
+ * Helper which checks if the provided argument is an unsigned number.
100
+ *
101
+ * @param {*} value Value to check.
102
+ * @returns {boolean}
103
+ */
104
+ function isUnsignedNumber(value) {
105
+ return Number.isInteger(value) && value >= 0;
106
+ }
107
+
97
108
  /**
98
109
  * Function which makes assertion by custom condition. Function throws an error when assertion doesn't meet the spec.
99
110
  *
@@ -87,6 +87,16 @@ export function columnFactory(TableMeta) {
87
87
  return ColumnMeta;
88
88
  }
89
89
 
90
+ /**
91
+ * Helper which checks if the provided argument is an unsigned number.
92
+ *
93
+ * @param {*} value Value to check.
94
+ * @returns {boolean}
95
+ */
96
+ export function isUnsignedNumber(value) {
97
+ return Number.isInteger(value) && value >= 0;
98
+ }
99
+
90
100
  /**
91
101
  * Function which makes assertion by custom condition. Function throws an error when assertion doesn't meet the spec.
92
102
  *
@@ -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: 0.0.0-next-2c41c5b-20250814
30
- * Release date: 10/07/2025 (built at 14/08/2025 13:37:46)
29
+ * Version: 0.0.0-next-fce5825-20250822
30
+ * Release date: 10/07/2025 (built at 22/08/2025 10:30:25)
31
31
  */
32
32
  /**
33
33
  * Fix for bootstrap styles
@@ -2100,10 +2100,108 @@ thead th.hiddenHeaderText .colHeader {
2100
2100
  }
2101
2101
 
2102
2102
  .ht-root-wrapper {
2103
+ position: relative;
2104
+ display: flex;
2105
+ flex-direction: column;
2103
2106
  height: 100%;
2104
2107
  }
2105
2108
 
2106
- .ht-root-wrapper .ht-pagination-container {
2109
+ .ht-grid {
2110
+ flex: 1 1 auto;
2111
+ min-height: 0;
2112
+ }
2113
+
2114
+ .ht-dialog {
2115
+ position: absolute;
2116
+ top: 0;
2117
+ left: 0;
2118
+ display: none;
2119
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Helvetica Neue", Arial, sans-serif;
2120
+ font-size: 13px;
2121
+ width: 100%;
2122
+ height: 100%;
2123
+ z-index: 1060;
2124
+ opacity: 0;
2125
+ overflow-y: auto;
2126
+ border: 1px solid #ccc;
2127
+ box-sizing: border-box !important;
2128
+ }
2129
+
2130
+ .ht-dialog[dir=rtl] {
2131
+ left: auto;
2132
+ right: 0
2133
+ }
2134
+
2135
+ .ht-dialog:has(.htFocusCatcher:focus) {
2136
+ border: 1px solid var(--ht-accent-color);
2137
+ outline: none
2138
+ }
2139
+
2140
+ .ht-dialog * {
2141
+ box-sizing: border-box !important;
2142
+ }
2143
+
2144
+ .ht-dialog--background-solid {
2145
+ background-color: #fff;
2146
+ }
2147
+
2148
+ .ht-dialog--background-semi-transparent {
2149
+ background-color: rgba(255, 255, 255, 0.5);
2150
+ }
2151
+
2152
+ .ht-dialog--animation {
2153
+ transition: opacity 0.15s ease-in-out;
2154
+ }
2155
+
2156
+ .ht-dialog--show {
2157
+ opacity: 1;
2158
+ }
2159
+
2160
+ .ht-dialog__content-wrapper {
2161
+ display: flex;
2162
+ align-items: center;
2163
+ justify-content: center;
2164
+ width: 100%;
2165
+ min-height: 100%;
2166
+ padding: 16px;
2167
+ }
2168
+
2169
+ .ht-dialog__content-wrapper:focus {
2170
+ border: 1px solid #4b89ff;
2171
+ outline: none;
2172
+ }
2173
+
2174
+ .ht-dialog__content {
2175
+ position: relative;
2176
+ padding: 8px;
2177
+ display: flex;
2178
+ gap: 8px;
2179
+ max-width: 480px;
2180
+ color: #222;
2181
+ }
2182
+
2183
+ .ht-dialog__content--background {
2184
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08);
2185
+ background-color: #f7f7f9;
2186
+ }
2187
+
2188
+ .ht-dialog__content--flex-row {
2189
+ flex-direction: row;
2190
+ }
2191
+
2192
+ .ht-dialog__content--flex-row-reverse {
2193
+ flex-direction: row-reverse;
2194
+ }
2195
+
2196
+ .ht-dialog__content--flex-column {
2197
+ flex-direction: column;
2198
+ }
2199
+
2200
+ .ht-dialog__content--flex-column-reverse {
2201
+ flex-direction: column-reverse;
2202
+ }
2203
+
2204
+ .ht-root-wrapper .ht-pagination {
2107
2205
  color: #222;
2108
2206
  background: #f0f0f0;
2109
2207
  border: 1px solid #ccc;
@@ -2115,7 +2213,7 @@ thead th.hiddenHeaderText .colHeader {
2115
2213
  overflow-x: auto;
2116
2214
  }
2117
2215
 
2118
- .ht-root-wrapper .ht-pagination-container__inner {
2216
+ .ht-root-wrapper .ht-pagination__inner {
2119
2217
  display: flex;
2120
2218
  justify-content: space-between;
2121
2219
  align-items: center;
@@ -2126,7 +2224,7 @@ thead th.hiddenHeaderText .colHeader {
2126
2224
  min-width: 230px;
2127
2225
  }
2128
2226
 
2129
- .ht-root-wrapper .ht-pagination-container--bordered {
2227
+ .ht-root-wrapper .ht-pagination--bordered {
2130
2228
  border-top-color: #ccc;
2131
2229
  }
2132
2230