handsontable 0.0.0-next-8a82cea-20250211 → 0.0.0-next-2a3a59d-20250212

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 (48) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/dist/handsontable.css +2 -2
  4. package/dist/handsontable.full.css +2 -2
  5. package/dist/handsontable.full.js +42 -47
  6. package/dist/handsontable.full.min.css +2 -2
  7. package/dist/handsontable.full.min.js +6 -6
  8. package/dist/handsontable.js +42 -47
  9. package/dist/handsontable.min.css +2 -2
  10. package/dist/handsontable.min.js +6 -6
  11. package/dist/languages/all.js +6 -0
  12. package/dist/languages/all.min.js +1 -1
  13. package/dist/languages/it-IT.js +3 -0
  14. package/dist/languages/it-IT.min.js +1 -1
  15. package/dist/languages/sr-SP.js +3 -0
  16. package/dist/languages/sr-SP.min.js +1 -1
  17. package/editors/dateEditor/dateEditor.d.ts +0 -2
  18. package/editors/dateEditor/dateEditor.js +18 -7
  19. package/editors/dateEditor/dateEditor.mjs +17 -6
  20. package/helpers/mixed.js +1 -1
  21. package/helpers/mixed.mjs +1 -1
  22. package/i18n/languages/it-IT.js +3 -0
  23. package/i18n/languages/it-IT.mjs +3 -0
  24. package/i18n/languages/sr-SP.js +3 -0
  25. package/i18n/languages/sr-SP.mjs +3 -0
  26. package/languages/all.js +6 -0
  27. package/languages/index.js +6 -0
  28. package/languages/it-IT.js +3 -0
  29. package/languages/it-IT.mjs +3 -0
  30. package/languages/sr-SP.js +3 -0
  31. package/languages/sr-SP.mjs +3 -0
  32. package/package.json +1 -1
  33. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -8
  34. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -8
  35. package/plugins/contextMenu/predefinedItems/columnRight.js +2 -9
  36. package/plugins/contextMenu/predefinedItems/columnRight.mjs +2 -9
  37. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -8
  38. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -8
  39. package/plugins/contextMenu/predefinedItems/rowBelow.js +2 -9
  40. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +2 -9
  41. package/renderers/numericRenderer/numericRenderer.js +10 -2
  42. package/renderers/numericRenderer/numericRenderer.mjs +10 -2
  43. package/styles/handsontable.css +2 -2
  44. package/styles/handsontable.min.css +2 -2
  45. package/styles/ht-theme-horizon.css +2 -2
  46. package/styles/ht-theme-horizon.min.css +2 -2
  47. package/styles/ht-theme-main.css +2 -2
  48. package/styles/ht-theme-main.min.css +2 -2
@@ -11,24 +11,30 @@ var _object = require("../../helpers/object");
11
11
  var _unicode = require("../../helpers/unicode");
12
12
  var _browser = require("../../helpers/browser");
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
15
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
14
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; }
15
17
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
16
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); }
19
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
17
20
  const EDITOR_TYPE = exports.EDITOR_TYPE = 'date';
18
21
  const SHORTCUTS_GROUP_EDITOR = 'dateEditor';
22
+ const DEFAULT_DATE_FORMAT = 'DD/MM/YYYY';
19
23
 
20
24
  /**
21
25
  * @private
22
26
  * @class DateEditor
23
27
  */
28
+ var _DateEditor_brand = /*#__PURE__*/new WeakSet();
24
29
  class DateEditor extends _textEditor.TextEditor {
25
30
  constructor() {
26
31
  super(...arguments);
27
- // TODO: Move this option to general settings
28
32
  /**
29
- * @type {string}
33
+ * Gets the current date format for this cell.
34
+ *
35
+ * @returns {string}
30
36
  */
31
- _defineProperty(this, "defaultDateFormat", 'DD/MM/YYYY');
37
+ _classPrivateMethodInitSpec(this, _DateEditor_brand);
32
38
  /**
33
39
  * @type {boolean}
34
40
  */
@@ -194,7 +200,7 @@ class DateEditor extends _textEditor.TextEditor {
194
200
  * @param {Event} event The event object.
195
201
  */
196
202
  showDatepicker(event) {
197
- const dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;
203
+ const dateFormat = _assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this);
198
204
  const isMouseDown = this.hot.view.isMouseDown();
199
205
  const isMeta = event ? (0, _unicode.isFunctionKey)(event.keyCode) : false;
200
206
  let dateStr;
@@ -246,6 +252,7 @@ class DateEditor extends _textEditor.TextEditor {
246
252
  * @returns {object}
247
253
  */
248
254
  getDatePickerConfig() {
255
+ var _options$format;
249
256
  const htInput = this.TEXTAREA;
250
257
  const options = {};
251
258
  if (this.cellProperties && this.cellProperties.datePickerConfig) {
@@ -258,7 +265,7 @@ class DateEditor extends _textEditor.TextEditor {
258
265
  options.container = this.datePicker;
259
266
  options.bound = false;
260
267
  options.keyboardInput = false;
261
- options.format = options.format || this.defaultDateFormat;
268
+ options.format = (_options$format = options.format) !== null && _options$format !== void 0 ? _options$format : _assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this);
262
269
  options.reposition = options.reposition || false;
263
270
  // Set the RTL to `false`. Due to the https://github.com/Pikaday/Pikaday/issues/647 bug, the layout direction
264
271
  // of the date picker is controlled by juggling the "dir" attribute of the root date picker element.
@@ -267,7 +274,7 @@ class DateEditor extends _textEditor.TextEditor {
267
274
  options.onSelect = value => {
268
275
  let dateStr = value;
269
276
  if (!isNaN(dateStr.getTime())) {
270
- dateStr = (0, _moment.default)(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);
277
+ dateStr = (0, _moment.default)(dateStr).format(_assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this));
271
278
  }
272
279
  this.setValue(dateStr);
273
280
  if (origOnSelect) {
@@ -334,4 +341,8 @@ class DateEditor extends _textEditor.TextEditor {
334
341
  }
335
342
  }
336
343
  }
337
- exports.DateEditor = DateEditor;
344
+ exports.DateEditor = DateEditor;
345
+ function _getDateFormat() {
346
+ var _this$cellProperties$;
347
+ return (_this$cellProperties$ = this.cellProperties.dateFormat) !== null && _this$cellProperties$ !== void 0 ? _this$cellProperties$ : DEFAULT_DATE_FORMAT;
348
+ }
@@ -1,7 +1,10 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
3
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
2
4
  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; }
3
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
6
  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); }
7
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
5
8
  import moment from 'moment';
6
9
  import Pikaday from '@handsontable/pikaday';
7
10
  import { EDITOR_STATE } from "../baseEditor/index.mjs";
@@ -12,19 +15,22 @@ import { isFunctionKey } from "../../helpers/unicode.mjs";
12
15
  import { isMobileBrowser } from "../../helpers/browser.mjs";
13
16
  export const EDITOR_TYPE = 'date';
14
17
  const SHORTCUTS_GROUP_EDITOR = 'dateEditor';
18
+ const DEFAULT_DATE_FORMAT = 'DD/MM/YYYY';
15
19
 
16
20
  /**
17
21
  * @private
18
22
  * @class DateEditor
19
23
  */
24
+ var _DateEditor_brand = /*#__PURE__*/new WeakSet();
20
25
  export class DateEditor extends TextEditor {
21
26
  constructor() {
22
27
  super(...arguments);
23
- // TODO: Move this option to general settings
24
28
  /**
25
- * @type {string}
29
+ * Gets the current date format for this cell.
30
+ *
31
+ * @returns {string}
26
32
  */
27
- _defineProperty(this, "defaultDateFormat", 'DD/MM/YYYY');
33
+ _classPrivateMethodInitSpec(this, _DateEditor_brand);
28
34
  /**
29
35
  * @type {boolean}
30
36
  */
@@ -190,7 +196,7 @@ export class DateEditor extends TextEditor {
190
196
  * @param {Event} event The event object.
191
197
  */
192
198
  showDatepicker(event) {
193
- const dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;
199
+ const dateFormat = _assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this);
194
200
  const isMouseDown = this.hot.view.isMouseDown();
195
201
  const isMeta = event ? isFunctionKey(event.keyCode) : false;
196
202
  let dateStr;
@@ -242,6 +248,7 @@ export class DateEditor extends TextEditor {
242
248
  * @returns {object}
243
249
  */
244
250
  getDatePickerConfig() {
251
+ var _options$format;
245
252
  const htInput = this.TEXTAREA;
246
253
  const options = {};
247
254
  if (this.cellProperties && this.cellProperties.datePickerConfig) {
@@ -254,7 +261,7 @@ export class DateEditor extends TextEditor {
254
261
  options.container = this.datePicker;
255
262
  options.bound = false;
256
263
  options.keyboardInput = false;
257
- options.format = options.format || this.defaultDateFormat;
264
+ options.format = (_options$format = options.format) !== null && _options$format !== void 0 ? _options$format : _assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this);
258
265
  options.reposition = options.reposition || false;
259
266
  // Set the RTL to `false`. Due to the https://github.com/Pikaday/Pikaday/issues/647 bug, the layout direction
260
267
  // of the date picker is controlled by juggling the "dir" attribute of the root date picker element.
@@ -263,7 +270,7 @@ export class DateEditor extends TextEditor {
263
270
  options.onSelect = value => {
264
271
  let dateStr = value;
265
272
  if (!isNaN(dateStr.getTime())) {
266
- dateStr = moment(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);
273
+ dateStr = moment(dateStr).format(_assertClassBrand(_DateEditor_brand, this, _getDateFormat).call(this));
267
274
  }
268
275
  this.setValue(dateStr);
269
276
  if (origOnSelect) {
@@ -329,4 +336,8 @@ export class DateEditor extends TextEditor {
329
336
  this.hideDatepicker();
330
337
  }
331
338
  }
339
+ }
340
+ function _getDateFormat() {
341
+ var _this$cellProperties$;
342
+ return (_this$cellProperties$ = this.cellProperties.dateFormat) !== null && _this$cellProperties$ !== void 0 ? _this$cellProperties$ : DEFAULT_DATE_FORMAT;
332
343
  }
package/helpers/mixed.js CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
134
134
  function _injectProductInfo(key, element) {
135
135
  const hasValidType = !isEmpty(key);
136
136
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
137
- const hotVersion = "0.0.0-next-8a82cea-20250211";
137
+ const hotVersion = "0.0.0-next-2a3a59d-20250212";
138
138
  let keyValidityDate;
139
139
  let consoleMessageState = 'invalid';
140
140
  let domMessageState = 'invalid';
package/helpers/mixed.mjs CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
124
124
  export function _injectProductInfo(key, element) {
125
125
  const hasValidType = !isEmpty(key);
126
126
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
127
- const hotVersion = "0.0.0-next-8a82cea-20250211";
127
+ const hotVersion = "0.0.0-next-2a3a59d-20250212";
128
128
  let keyValidityDate;
129
129
  let consoleMessageState = 'invalid';
130
130
  let domMessageState = 'invalid';
@@ -47,6 +47,9 @@ const dictionary = {
47
47
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
48
48
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
49
49
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
50
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
51
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
52
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
50
53
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
51
54
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
52
55
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -41,6 +41,9 @@ const dictionary = {
41
41
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
42
42
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
43
43
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
44
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
45
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
46
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
44
47
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
45
48
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
46
49
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -48,6 +48,9 @@ const dictionary = {
48
48
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
49
49
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
50
50
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
51
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
52
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
53
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
51
54
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
52
55
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
53
56
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
@@ -42,6 +42,9 @@ const dictionary = {
42
42
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
43
43
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
44
44
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
45
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
46
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
47
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
45
48
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
46
49
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
47
50
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
package/languages/all.js CHANGED
@@ -876,6 +876,9 @@ const dictionary = {
876
876
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
877
877
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
878
878
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
879
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
880
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
881
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
879
882
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
880
883
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
881
884
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -1766,6 +1769,9 @@ const dictionary = {
1766
1769
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
1767
1770
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
1768
1771
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
1772
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
1773
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
1774
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
1769
1775
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
1770
1776
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
1771
1777
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
@@ -876,6 +876,9 @@ const dictionary = {
876
876
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
877
877
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
878
878
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
879
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
880
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
881
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
879
882
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
880
883
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
881
884
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -1766,6 +1769,9 @@ const dictionary = {
1766
1769
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
1767
1770
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
1768
1771
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
1772
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
1773
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
1774
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
1769
1775
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
1770
1776
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
1771
1777
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
@@ -110,6 +110,9 @@ const dictionary = {
110
110
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
111
111
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
112
112
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
113
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
114
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
115
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
113
116
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
114
117
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
115
118
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -42,6 +42,9 @@ const dictionary = {
42
42
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Unisci celle',
43
43
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Separa celle',
44
44
  [C.CONTEXTMENU_ITEMS_COPY]: 'Copia',
45
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copia con intestazione', 'Copia con intestazioni'],
46
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: 'Copia con intestazione completa',
47
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copia solo intestazione', 'Copia solo intestazioni'],
45
48
  [C.CONTEXTMENU_ITEMS_CUT]: 'Taglia',
46
49
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Inserisci riga figlia',
47
50
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Scollega da riga madre',
@@ -111,6 +111,9 @@ const dictionary = {
111
111
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
112
112
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
113
113
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
114
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
115
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
116
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
114
117
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
115
118
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
116
119
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
@@ -43,6 +43,9 @@ const dictionary = {
43
43
  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Spoji ćelije',
44
44
  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Odvoji ćelije',
45
45
  [C.CONTEXTMENU_ITEMS_COPY]: 'Kopiraj',
46
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Kopiraj sa zaglavljem', 'Kopiraj sa zaglavljima'],
47
+ [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Kopiraj sa zaglavljem grupe', 'Kopiraj sa zaglavljima grupe'],
48
+ [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Kopiraj samo zaglavlje', 'Kopiraj samo zaglavlja'],
46
49
  [C.CONTEXTMENU_ITEMS_CUT]: 'Iseci',
47
50
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Unesi ugnježdeni red',
48
51
  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Odvoji ugnježdeni red',
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/handsontable/handsontable/issues"
11
11
  },
12
12
  "author": "Handsoncode <hello@handsontable.com>",
13
- "version": "0.0.0-next-8a82cea-20250211",
13
+ "version": "0.0.0-next-2a3a59d-20250212",
14
14
  "main": "index",
15
15
  "module": "index.mjs",
16
16
  "jsnext:main": "index.mjs",
@@ -26,19 +26,14 @@ function columnLeftItem() {
26
26
  return true;
27
27
  }
28
28
  const range = this.getSelectedRangeLast();
29
- if (!range) {
30
- return true;
31
- }
32
- if (range.isSingleHeader() && range.highlight.col < 0) {
29
+ if (!range || this.selection.isSelectedByRowHeader() || range.isSingleHeader() && range.highlight.col < 0 || this.countSourceCols() >= this.getSettings().maxCols) {
33
30
  return true;
34
31
  }
35
32
  if (this.selection.isSelectedByCorner()) {
36
- const totalColumns = this.countCols();
37
-
38
33
  // Enable "Insert column left" only when there is at least one column.
39
- return totalColumns === 0;
34
+ return this.countCols() === 0;
40
35
  }
41
- return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;
36
+ return false;
42
37
  },
43
38
  hidden() {
44
39
  return !this.getSettings().allowInsertColumn;
@@ -20,19 +20,14 @@ export default function columnLeftItem() {
20
20
  return true;
21
21
  }
22
22
  const range = this.getSelectedRangeLast();
23
- if (!range) {
24
- return true;
25
- }
26
- if (range.isSingleHeader() && range.highlight.col < 0) {
23
+ if (!range || this.selection.isSelectedByRowHeader() || range.isSingleHeader() && range.highlight.col < 0 || this.countSourceCols() >= this.getSettings().maxCols) {
27
24
  return true;
28
25
  }
29
26
  if (this.selection.isSelectedByCorner()) {
30
- const totalColumns = this.countCols();
31
-
32
27
  // Enable "Insert column left" only when there is at least one column.
33
- return totalColumns === 0;
28
+ return this.countCols() === 0;
34
29
  }
35
- return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;
30
+ return false;
36
31
  },
37
32
  hidden() {
38
33
  return !this.getSettings().allowInsertColumn;
@@ -26,17 +26,10 @@ function columnRightItem() {
26
26
  return true;
27
27
  }
28
28
  const range = this.getSelectedRangeLast();
29
- if (!range) {
29
+ if (!range || this.selection.isSelectedByRowHeader() || range.isSingleHeader() && range.highlight.col < 0 || this.countSourceCols() >= this.getSettings().maxCols) {
30
30
  return true;
31
31
  }
32
- if (range.isSingleHeader() && range.highlight.col < 0) {
33
- return true;
34
- }
35
- if (this.selection.isSelectedByCorner()) {
36
- // Enable "Insert column right" always when the menu is triggered by corner click.
37
- return false;
38
- }
39
- return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;
32
+ return false;
40
33
  },
41
34
  hidden() {
42
35
  return !this.getSettings().allowInsertColumn;
@@ -20,17 +20,10 @@ export default function columnRightItem() {
20
20
  return true;
21
21
  }
22
22
  const range = this.getSelectedRangeLast();
23
- if (!range) {
23
+ if (!range || this.selection.isSelectedByRowHeader() || range.isSingleHeader() && range.highlight.col < 0 || this.countSourceCols() >= this.getSettings().maxCols) {
24
24
  return true;
25
25
  }
26
- if (range.isSingleHeader() && range.highlight.col < 0) {
27
- return true;
28
- }
29
- if (this.selection.isSelectedByCorner()) {
30
- // Enable "Insert column right" always when the menu is triggered by corner click.
31
- return false;
32
- }
33
- return this.selection.isSelectedByRowHeader() || this.countCols() >= this.getSettings().maxCols;
26
+ return false;
34
27
  },
35
28
  hidden() {
36
29
  return !this.getSettings().allowInsertColumn;
@@ -22,19 +22,14 @@ function rowAboveItem() {
22
22
  },
23
23
  disabled() {
24
24
  const range = this.getSelectedRangeLast();
25
- if (!range) {
26
- return true;
27
- }
28
- if (range.isSingleHeader() && range.highlight.row < 0) {
25
+ if (!range || this.selection.isSelectedByColumnHeader() || range.isSingleHeader() && range.highlight.row < 0 || this.countSourceRows() >= this.getSettings().maxRows) {
29
26
  return true;
30
27
  }
31
28
  if (this.selection.isSelectedByCorner()) {
32
- const totalRows = this.countRows();
33
-
34
29
  // Enable "Insert row above" only when there is at least one row.
35
- return totalRows === 0;
30
+ return this.countRows() === 0;
36
31
  }
37
- return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;
32
+ return false;
38
33
  },
39
34
  hidden() {
40
35
  return !this.getSettings().allowInsertRow;
@@ -16,19 +16,14 @@ export default function rowAboveItem() {
16
16
  },
17
17
  disabled() {
18
18
  const range = this.getSelectedRangeLast();
19
- if (!range) {
20
- return true;
21
- }
22
- if (range.isSingleHeader() && range.highlight.row < 0) {
19
+ if (!range || this.selection.isSelectedByColumnHeader() || range.isSingleHeader() && range.highlight.row < 0 || this.countSourceRows() >= this.getSettings().maxRows) {
23
20
  return true;
24
21
  }
25
22
  if (this.selection.isSelectedByCorner()) {
26
- const totalRows = this.countRows();
27
-
28
23
  // Enable "Insert row above" only when there is at least one row.
29
- return totalRows === 0;
24
+ return this.countRows() === 0;
30
25
  }
31
- return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;
26
+ return false;
32
27
  },
33
28
  hidden() {
34
29
  return !this.getSettings().allowInsertRow;
@@ -22,17 +22,10 @@ function rowBelowItem() {
22
22
  },
23
23
  disabled() {
24
24
  const range = this.getSelectedRangeLast();
25
- if (!range) {
25
+ if (!range || this.selection.isSelectedByColumnHeader() || range.isSingleHeader() && range.highlight.row < 0 || this.countSourceRows() >= this.getSettings().maxRows) {
26
26
  return true;
27
27
  }
28
- if (range.isSingleHeader() && range.highlight.row < 0) {
29
- return true;
30
- }
31
- if (this.selection.isSelectedByCorner()) {
32
- // Enable "Insert row below" always when the menu is triggered by corner click.
33
- return false;
34
- }
35
- return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;
28
+ return false;
36
29
  },
37
30
  hidden() {
38
31
  return !this.getSettings().allowInsertRow;
@@ -16,17 +16,10 @@ export default function rowBelowItem() {
16
16
  },
17
17
  disabled() {
18
18
  const range = this.getSelectedRangeLast();
19
- if (!range) {
19
+ if (!range || this.selection.isSelectedByColumnHeader() || range.isSingleHeader() && range.highlight.row < 0 || this.countSourceRows() >= this.getSettings().maxRows) {
20
20
  return true;
21
21
  }
22
- if (range.isSingleHeader() && range.highlight.row < 0) {
23
- return true;
24
- }
25
- if (this.selection.isSelectedByCorner()) {
26
- // Enable "Insert row below" always when the menu is triggered by corner click.
27
- return false;
28
- }
29
- return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;
22
+ return false;
30
23
  },
31
24
  hidden() {
32
25
  return !this.getSettings().allowInsertRow;
@@ -50,8 +50,16 @@ function getRenderedValue(value, cellProperties) {
50
50
  function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
51
51
  let newValue = value;
52
52
  if ((0, _number.isNumeric)(newValue)) {
53
- const className = cellProperties.className || '';
54
- const classArr = className.length ? className.split(' ') : [];
53
+ let classArr = [];
54
+ if (Array.isArray(cellProperties.className)) {
55
+ classArr = cellProperties.className;
56
+ } else {
57
+ var _cellProperties$class;
58
+ const className = (_cellProperties$class = cellProperties.className) !== null && _cellProperties$class !== void 0 ? _cellProperties$class : '';
59
+ if (className.length) {
60
+ classArr = className.split(' ');
61
+ }
62
+ }
55
63
  newValue = getRenderedValue(newValue, cellProperties);
56
64
  if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {
57
65
  classArr.push('htRight');
@@ -44,8 +44,16 @@ export function getRenderedValue(value, cellProperties) {
44
44
  export function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
45
45
  let newValue = value;
46
46
  if (isNumeric(newValue)) {
47
- const className = cellProperties.className || '';
48
- const classArr = className.length ? className.split(' ') : [];
47
+ let classArr = [];
48
+ if (Array.isArray(cellProperties.className)) {
49
+ classArr = cellProperties.className;
50
+ } else {
51
+ var _cellProperties$class;
52
+ const className = (_cellProperties$class = cellProperties.className) !== null && _cellProperties$class !== void 0 ? _cellProperties$class : '';
53
+ if (className.length) {
54
+ classArr = className.split(' ');
55
+ }
56
+ }
49
57
  newValue = getRenderedValue(newValue, cellProperties);
50
58
  if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {
51
59
  classArr.push('htRight');
@@ -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: 0.0.0-next-8a82cea-20250211
29
- * Release date: 16/12/2024 (built at 11/02/2025 10:17:45)
28
+ * Version: 0.0.0-next-2a3a59d-20250212
29
+ * Release date: 16/12/2024 (built at 12/02/2025 11:26:32)
30
30
  */
31
31
  .ht-wrapper:not([class*=ht-theme]) {
32
32
  --ht-cell-horizontal-padding: 8px;