handsontable 0.0.0-next-b02b3d1-20230710 → 0.0.0-next-3b33ccd-20230710

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (64) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/core.d.ts +1 -0
  4. package/core.js +31 -24
  5. package/core.mjs +31 -24
  6. package/dataMap/metaManager/metaSchema.js +0 -22
  7. package/dataMap/metaManager/metaSchema.mjs +0 -22
  8. package/dist/handsontable.css +2 -13
  9. package/dist/handsontable.full.css +2 -13
  10. package/dist/handsontable.full.js +4811 -4809
  11. package/dist/handsontable.full.min.css +3 -3
  12. package/dist/handsontable.full.min.js +61 -61
  13. package/dist/handsontable.js +13683 -13681
  14. package/dist/handsontable.min.css +3 -3
  15. package/dist/handsontable.min.js +4 -4
  16. package/editorManager.js +4 -10
  17. package/editorManager.mjs +4 -10
  18. package/helpers/mixed.js +1 -1
  19. package/helpers/mixed.mjs +1 -1
  20. package/package.json +1 -1
  21. package/pluginHooks.d.ts +1 -1
  22. package/pluginHooks.js +7 -10
  23. package/pluginHooks.mjs +7 -10
  24. package/plugins/comments/commentEditor.js +1 -0
  25. package/plugins/comments/commentEditor.mjs +1 -0
  26. package/plugins/comments/comments.js +289 -231
  27. package/plugins/comments/comments.mjs +297 -241
  28. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  29. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  30. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  31. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  32. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  33. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  34. package/plugins/contextMenu/contextMenu.js +1 -0
  35. package/plugins/contextMenu/contextMenu.mjs +1 -0
  36. package/plugins/copyPaste/copyPaste.js +1 -1
  37. package/plugins/copyPaste/copyPaste.mjs +1 -1
  38. package/plugins/dropdownMenu/dropdownMenu.js +0 -1
  39. package/plugins/dropdownMenu/dropdownMenu.mjs +0 -1
  40. package/plugins/formulas/engine/settings.js +2 -2
  41. package/plugins/formulas/engine/settings.mjs +2 -2
  42. package/plugins/formulas/formulas.js +2 -2
  43. package/plugins/formulas/formulas.mjs +2 -2
  44. package/plugins/manualRowResize/manualRowResize.js +2 -2
  45. package/plugins/manualRowResize/manualRowResize.mjs +2 -2
  46. package/settings.d.ts +0 -1
  47. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +7 -2
  48. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +7 -2
  49. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +7 -2
  50. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +7 -2
  51. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +7 -2
  52. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +7 -2
  53. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +7 -2
  54. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +7 -2
  55. package/shortcutContexts/constants.js +6 -1
  56. package/shortcutContexts/constants.mjs +4 -0
  57. package/tableView.js +9 -4
  58. package/tableView.mjs +9 -4
  59. package/core/focusCatcher/focusDetector.js +0 -62
  60. package/core/focusCatcher/focusDetector.mjs +0 -58
  61. package/core/focusCatcher/index.js +0 -133
  62. package/core/focusCatcher/index.mjs +0 -129
  63. package/core/index.js +0 -12
  64. package/core/index.mjs +0 -1
package/base.js CHANGED
@@ -44,8 +44,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
44
44
  Handsontable.CellCoords = _src.CellCoords;
45
45
  Handsontable.CellRange = _src.CellRange;
46
46
  Handsontable.packageName = 'handsontable';
47
- Handsontable.buildDate = "10/07/2023 08:56:32";
48
- Handsontable.version = "0.0.0-next-b02b3d1-20230710";
47
+ Handsontable.buildDate = "10/07/2023 09:29:49";
48
+ Handsontable.version = "0.0.0-next-3b33ccd-20230710";
49
49
  Handsontable.languages = {
50
50
  dictionaryKeys: _registry.dictionaryKeys,
51
51
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "10/07/2023 08:56:52";
39
- Handsontable.version = "0.0.0-next-b02b3d1-20230710";
38
+ Handsontable.buildDate = "10/07/2023 09:30:03";
39
+ Handsontable.version = "0.0.0-next-3b33ccd-20230710";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys: dictionaryKeys,
42
42
  getLanguageDictionary: getLanguageDictionary,
package/core.d.ts CHANGED
@@ -131,6 +131,7 @@ export default class Core {
131
131
  rowIndexMapper: IndexMapper;
132
132
  runHooks(key: keyof Events, p1?: any, p2?: any, p3?: any, p4?: any, p5?: any, p6?: any): any;
133
133
  scrollViewportTo(row?: number, column?: number, snapToBottom?: boolean, snapToRight?: boolean, considerHiddenIndexes?: boolean): boolean;
134
+ scrollToFocusedCell(callback?: () => void): void;
134
135
  selectAll(includeRowHeaders?: boolean, includeColumnHeaders?: boolean, focusPosition?: { row?: number, col?: number }): void;
135
136
  selectCell(row: number, col: number, endRow?: number, endCol?: number, scrollToCell?: boolean, changeListener?: boolean): boolean;
136
137
  selectCellByProp(row: number, prop: string, endRow?: number, endProp?: string, scrollToCell?: boolean): boolean;
package/core.js CHANGED
@@ -8,11 +8,10 @@ require("core-js/modules/es.function.name.js");
8
8
  exports.__esModule = true;
9
9
  exports.default = Core;
10
10
  require("core-js/modules/es.array.iterator.js");
11
- require("core-js/modules/es.map.js");
12
11
  require("core-js/modules/es.object.to-string.js");
12
+ require("core-js/modules/es.set.js");
13
13
  require("core-js/modules/es.string.iterator.js");
14
14
  require("core-js/modules/web.dom-collections.iterator.js");
15
- require("core-js/modules/es.set.js");
16
15
  require("core-js/modules/es.array.includes.js");
17
16
  require("core-js/modules/es.array.concat.js");
18
17
  require("core-js/modules/es.array.sort.js");
@@ -25,10 +24,10 @@ require("core-js/modules/es.array.map.js");
25
24
  require("core-js/modules/es.regexp.exec.js");
26
25
  require("core-js/modules/es.string.replace.js");
27
26
  require("core-js/modules/es.array.filter.js");
28
- require("core-js/modules/web.dom-collections.for-each.js");
29
27
  require("core-js/modules/es.array.from.js");
30
28
  require("core-js/modules/es.array.index-of.js");
31
29
  require("core-js/modules/es.array.reverse.js");
30
+ require("core-js/modules/web.dom-collections.for-each.js");
32
31
  require("core-js/modules/web.timers.js");
33
32
  require("core-js/modules/web.immediate.js");
34
33
  var _element = require("./helpers/dom/element");
@@ -57,7 +56,6 @@ var _registry5 = require("./i18n/registry");
57
56
  var _utils = require("./i18n/utils");
58
57
  var _selection = require("./selection");
59
58
  var _dataMap = require("./dataMap");
60
- var _index3 = require("./core/index");
61
59
  var _uniqueMap = require("./utils/dataStructures/uniqueMap");
62
60
  var _shortcuts = require("./shortcuts");
63
61
  var _shortcutContexts = require("./shortcutContexts");
@@ -75,15 +73,6 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
75
73
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
76
74
  var activeGuid = null;
77
75
 
78
- /**
79
- * Keeps the collection of the all Handsontable instances created on the same page. The
80
- * list is then used to trigger the "afterUnlisten" hook when the "listen()" method was
81
- * called on another instance.
82
- *
83
- * @type {Map<string, Core>}
84
- */
85
- var foreignHotInstances = new Map();
86
-
87
76
  /**
88
77
  * A set of deprecated feature names.
89
78
  *
@@ -261,8 +250,6 @@ function Core(rootElement, userSettings) {
261
250
  }
262
251
  this.guid = "ht_".concat((0, _string.randomString)()); // this is the namespace for global events
263
252
 
264
- foreignHotInstances.set(this.guid, this);
265
-
266
253
  /**
267
254
  * Instance of index mapper which is responsible for managing the column indexes.
268
255
  *
@@ -1119,9 +1106,6 @@ function Core(rootElement, userSettings) {
1119
1106
  this.updateSettings(tableMeta, true);
1120
1107
  this.view = new _tableView.default(this);
1121
1108
  editorManager = _editorManager.default.getInstance(instance, tableMeta, selection);
1122
- if ((0, _rootInstance.isRootInstance)(this)) {
1123
- (0, _index3.installFocusCatcher)(instance);
1124
- }
1125
1109
  instance.runHooks('init');
1126
1110
  this.forceFullRender = true; // used when data was changed
1127
1111
  this.view.render();
@@ -1538,11 +1522,6 @@ function Core(rootElement, userSettings) {
1538
1522
  */
1539
1523
  this.listen = function () {
1540
1524
  if (instance && !instance.isListening()) {
1541
- foreignHotInstances.forEach(function (foreignHot) {
1542
- if (instance !== foreignHot) {
1543
- foreignHot.unlisten();
1544
- }
1545
- });
1546
1525
  activeGuid = instance.guid;
1547
1526
  instance.runHooks('afterListen');
1548
1527
  }
@@ -4145,6 +4124,35 @@ function Core(rootElement, userSettings) {
4145
4124
  return false;
4146
4125
  };
4147
4126
 
4127
+ /**
4128
+ * Scrolls the viewport to coordinates specified by the currently focused cell.
4129
+ *
4130
+ * @since 14.0.0
4131
+ * @memberof Core#
4132
+ * @function scrollToFocusedCell
4133
+ * @param {Function} callback The callback function to call after the viewport is scrolled.
4134
+ */
4135
+ this.scrollToFocusedCell = function () {
4136
+ var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
4137
+ if (!this.selection.isSelected()) {
4138
+ return;
4139
+ }
4140
+ this.addHookOnce('afterScroll', callback);
4141
+ var _this$getSelectedRang = this.getSelectedRangeLast(),
4142
+ highlight = _this$getSelectedRang.highlight;
4143
+ var renderableRowIndex = this.rowIndexMapper.getRenderableFromVisualIndex(highlight.row);
4144
+ var renderableColumnIndex = this.columnIndexMapper.getRenderableFromVisualIndex(highlight.col);
4145
+ var isScrolled = this.view.scrollViewport(this._createCellCoords(renderableRowIndex, renderableColumnIndex));
4146
+ if (isScrolled) {
4147
+ this.view.render();
4148
+ } else {
4149
+ this.removeHook('afterScroll', callback);
4150
+ this._registerImmediate(function () {
4151
+ return callback();
4152
+ });
4153
+ }
4154
+ };
4155
+
4148
4156
  /**
4149
4157
  * Removes the table from the DOM and destroys the instance of the Handsontable.
4150
4158
  *
@@ -4165,7 +4173,6 @@ function Core(rootElement, userSettings) {
4165
4173
  dataSource = null;
4166
4174
  this.getShortcutManager().destroy();
4167
4175
  metaManager.clearCache();
4168
- foreignHotInstances.delete(this.guid);
4169
4176
  if ((0, _rootInstance.isRootInstance)(instance)) {
4170
4177
  var licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');
4171
4178
  if (licenseInfo) {
package/core.mjs CHANGED
@@ -10,11 +10,10 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
10
10
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
11
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
12
  import "core-js/modules/es.array.iterator.js";
13
- import "core-js/modules/es.map.js";
14
13
  import "core-js/modules/es.object.to-string.js";
14
+ import "core-js/modules/es.set.js";
15
15
  import "core-js/modules/es.string.iterator.js";
16
16
  import "core-js/modules/web.dom-collections.iterator.js";
17
- import "core-js/modules/es.set.js";
18
17
  import "core-js/modules/es.array.includes.js";
19
18
  import "core-js/modules/es.array.concat.js";
20
19
  import "core-js/modules/es.array.sort.js";
@@ -27,10 +26,10 @@ import "core-js/modules/es.array.map.js";
27
26
  import "core-js/modules/es.regexp.exec.js";
28
27
  import "core-js/modules/es.string.replace.js";
29
28
  import "core-js/modules/es.array.filter.js";
30
- import "core-js/modules/web.dom-collections.for-each.js";
31
29
  import "core-js/modules/es.array.from.js";
32
30
  import "core-js/modules/es.array.index-of.js";
33
31
  import "core-js/modules/es.array.reverse.js";
32
+ import "core-js/modules/web.dom-collections.for-each.js";
34
33
  import "core-js/modules/web.timers.js";
35
34
  import "core-js/modules/web.immediate.js";
36
35
  import "core-js/modules/es.symbol.js";
@@ -64,21 +63,11 @@ import { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from
64
63
  import { warnUserAboutLanguageRegistration, normalizeLanguageCode } from "./i18n/utils.mjs";
65
64
  import { Selection } from "./selection/index.mjs";
66
65
  import { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from "./dataMap/index.mjs";
67
- import { installFocusCatcher } from "./core/index.mjs";
68
66
  import { createUniqueMap } from "./utils/dataStructures/uniqueMap.mjs";
69
67
  import { createShortcutManager } from "./shortcuts/index.mjs";
70
68
  import { registerAllShortcutContexts } from "./shortcutContexts/index.mjs";
71
69
  var activeGuid = null;
72
70
 
73
- /**
74
- * Keeps the collection of the all Handsontable instances created on the same page. The
75
- * list is then used to trigger the "afterUnlisten" hook when the "listen()" method was
76
- * called on another instance.
77
- *
78
- * @type {Map<string, Core>}
79
- */
80
- var foreignHotInstances = new Map();
81
-
82
71
  /**
83
72
  * A set of deprecated feature names.
84
73
  *
@@ -256,8 +245,6 @@ export default function Core(rootElement, userSettings) {
256
245
  }
257
246
  this.guid = "ht_".concat(randomString()); // this is the namespace for global events
258
247
 
259
- foreignHotInstances.set(this.guid, this);
260
-
261
248
  /**
262
249
  * Instance of index mapper which is responsible for managing the column indexes.
263
250
  *
@@ -1114,9 +1101,6 @@ export default function Core(rootElement, userSettings) {
1114
1101
  this.updateSettings(tableMeta, true);
1115
1102
  this.view = new TableView(this);
1116
1103
  editorManager = EditorManager.getInstance(instance, tableMeta, selection);
1117
- if (isRootInstance(this)) {
1118
- installFocusCatcher(instance);
1119
- }
1120
1104
  instance.runHooks('init');
1121
1105
  this.forceFullRender = true; // used when data was changed
1122
1106
  this.view.render();
@@ -1533,11 +1517,6 @@ export default function Core(rootElement, userSettings) {
1533
1517
  */
1534
1518
  this.listen = function () {
1535
1519
  if (instance && !instance.isListening()) {
1536
- foreignHotInstances.forEach(function (foreignHot) {
1537
- if (instance !== foreignHot) {
1538
- foreignHot.unlisten();
1539
- }
1540
- });
1541
1520
  activeGuid = instance.guid;
1542
1521
  instance.runHooks('afterListen');
1543
1522
  }
@@ -4140,6 +4119,35 @@ export default function Core(rootElement, userSettings) {
4140
4119
  return false;
4141
4120
  };
4142
4121
 
4122
+ /**
4123
+ * Scrolls the viewport to coordinates specified by the currently focused cell.
4124
+ *
4125
+ * @since 14.0.0
4126
+ * @memberof Core#
4127
+ * @function scrollToFocusedCell
4128
+ * @param {Function} callback The callback function to call after the viewport is scrolled.
4129
+ */
4130
+ this.scrollToFocusedCell = function () {
4131
+ var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
4132
+ if (!this.selection.isSelected()) {
4133
+ return;
4134
+ }
4135
+ this.addHookOnce('afterScroll', callback);
4136
+ var _this$getSelectedRang = this.getSelectedRangeLast(),
4137
+ highlight = _this$getSelectedRang.highlight;
4138
+ var renderableRowIndex = this.rowIndexMapper.getRenderableFromVisualIndex(highlight.row);
4139
+ var renderableColumnIndex = this.columnIndexMapper.getRenderableFromVisualIndex(highlight.col);
4140
+ var isScrolled = this.view.scrollViewport(this._createCellCoords(renderableRowIndex, renderableColumnIndex));
4141
+ if (isScrolled) {
4142
+ this.view.render();
4143
+ } else {
4144
+ this.removeHook('afterScroll', callback);
4145
+ this._registerImmediate(function () {
4146
+ return callback();
4147
+ });
4148
+ }
4149
+ };
4150
+
4143
4151
  /**
4144
4152
  * Removes the table from the DOM and destroys the instance of the Handsontable.
4145
4153
  *
@@ -4160,7 +4168,6 @@ export default function Core(rootElement, userSettings) {
4160
4168
  dataSource = null;
4161
4169
  this.getShortcutManager().destroy();
4162
4170
  metaManager.clearCache();
4163
- foreignHotInstances.delete(this.guid);
4164
4171
  if (isRootInstance(instance)) {
4165
4172
  var licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');
4166
4173
  if (licenseInfo) {
@@ -3131,28 +3131,6 @@ var _default = function _default() {
3131
3131
  * ```
3132
3132
  */
3133
3133
  navigableHeaders: false,
3134
- /**
3135
- * When set to `true`, the `disableTabNavigation` option changes the behavior of the
3136
- * <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts. The Handsontable
3137
- * no more captures that shortcuts to make the grid navigation available (`disableTabNavigation: false`)
3138
- * but returns control to the browser so the native page navigation is possible.
3139
- *
3140
- * @since 14.0.0
3141
- * @memberof Options#
3142
- * @type {boolean}
3143
- * @default false
3144
- * @category Core
3145
- *
3146
- * @example
3147
- * ```js
3148
- * // you can't navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts
3149
- * disableTabNavigation: true,
3150
- *
3151
- * // default behavior: you can navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts
3152
- * disableTabNavigation: false,
3153
- * ```
3154
- */
3155
- disableTabNavigation: false,
3156
3134
  /**
3157
3135
  * @description
3158
3136
  * The `nestedHeaders` option configures the [`NestedHeaders`](@/api/nestedHeaders.md) plugin.
@@ -3127,28 +3127,6 @@ export default (function () {
3127
3127
  * ```
3128
3128
  */
3129
3129
  navigableHeaders: false,
3130
- /**
3131
- * When set to `true`, the `disableTabNavigation` option changes the behavior of the
3132
- * <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts. The Handsontable
3133
- * no more captures that shortcuts to make the grid navigation available (`disableTabNavigation: false`)
3134
- * but returns control to the browser so the native page navigation is possible.
3135
- *
3136
- * @since 14.0.0
3137
- * @memberof Options#
3138
- * @type {boolean}
3139
- * @default false
3140
- * @category Core
3141
- *
3142
- * @example
3143
- * ```js
3144
- * // you can't navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts
3145
- * disableTabNavigation: true,
3146
- *
3147
- * // default behavior: you can navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts
3148
- * disableTabNavigation: false,
3149
- * ```
3150
- */
3151
- disableTabNavigation: false,
3152
3130
  /**
3153
3131
  * @description
3154
3132
  * The `nestedHeaders` option configures the [`NestedHeaders`](@/api/nestedHeaders.md) plugin.
@@ -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-b02b3d1-20230710
29
- * Release date: 22/06/2023 (built at 10/07/2023 08:57:09)
28
+ * Version: 0.0.0-next-3b33ccd-20230710
29
+ * Release date: 22/06/2023 (built at 10/07/2023 09:30:15)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -410,17 +410,6 @@ innerBorderBottom - Property controlled by bottom overlay
410
410
  font-size: 10px;
411
411
  }
412
412
 
413
- .handsontable .htFocusCatcher {
414
- position: absolute;
415
- z-index: -1;
416
- opacity: 0;
417
- border: 0;
418
- margin: 0;
419
- padding: 0;
420
- width: 0;
421
- height: 0;
422
- }
423
-
424
413
  /* plugins */
425
414
  /* row + column resizer*/
426
415
  .handsontable .manualColumnResizer {
@@ -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-b02b3d1-20230710
29
- * Release date: 22/06/2023 (built at 10/07/2023 08:57:09)
28
+ * Version: 0.0.0-next-3b33ccd-20230710
29
+ * Release date: 22/06/2023 (built at 10/07/2023 09:30:15)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -410,17 +410,6 @@ innerBorderBottom - Property controlled by bottom overlay
410
410
  font-size: 10px;
411
411
  }
412
412
 
413
- .handsontable .htFocusCatcher {
414
- position: absolute;
415
- z-index: -1;
416
- opacity: 0;
417
- border: 0;
418
- margin: 0;
419
- padding: 0;
420
- width: 0;
421
- height: 0;
422
- }
423
-
424
413
  /* plugins */
425
414
  /* row + column resizer*/
426
415
  .handsontable .manualColumnResizer {