handsontable 0.0.0-next-6eb0244-20241118 → 0.0.0-next-b93496c-20241118

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 (106) hide show
  1. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  2. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  4. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  5. package/3rdparty/walkontable/src/core/_base.js +3 -0
  6. package/3rdparty/walkontable/src/core/_base.mjs +3 -0
  7. package/3rdparty/walkontable/src/core/clone.js +1 -0
  8. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  9. package/3rdparty/walkontable/src/core/core.js +2 -0
  10. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  11. package/3rdparty/walkontable/src/facade/core.js +3 -0
  12. package/3rdparty/walkontable/src/facade/core.mjs +3 -0
  13. package/3rdparty/walkontable/src/index.js +0 -1
  14. package/3rdparty/walkontable/src/index.mjs +2 -2
  15. package/3rdparty/walkontable/src/overlay/_base.js +3 -1
  16. package/3rdparty/walkontable/src/overlay/_base.mjs +3 -1
  17. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  18. package/3rdparty/walkontable/src/overlay/bottom.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/top.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  21. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  22. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  23. package/3rdparty/walkontable/src/renderer/table.js +12 -3
  24. package/3rdparty/walkontable/src/renderer/table.mjs +12 -3
  25. package/3rdparty/walkontable/src/settings.js +0 -2
  26. package/3rdparty/walkontable/src/settings.mjs +0 -2
  27. package/3rdparty/walkontable/src/table.js +17 -9
  28. package/3rdparty/walkontable/src/table.mjs +17 -9
  29. package/3rdparty/walkontable/src/types.js +1 -0
  30. package/3rdparty/walkontable/src/types.mjs +1 -0
  31. package/3rdparty/walkontable/src/utils/column.js +1 -1
  32. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  33. package/3rdparty/walkontable/src/utils/stylesHandler.js +287 -0
  34. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +283 -0
  35. package/3rdparty/walkontable/src/viewport.js +1 -0
  36. package/3rdparty/walkontable/src/viewport.mjs +1 -0
  37. package/base.js +2 -2
  38. package/base.mjs +2 -2
  39. package/core/hooks/constants.js +9 -0
  40. package/core/hooks/constants.mjs +9 -0
  41. package/core/hooks/index.d.ts +1 -0
  42. package/core.d.ts +2 -0
  43. package/core.js +47 -0
  44. package/core.mjs +47 -0
  45. package/dataMap/metaManager/metaSchema.js +23 -3
  46. package/dataMap/metaManager/metaSchema.mjs +23 -3
  47. package/dist/handsontable.css +17 -9
  48. package/dist/handsontable.full.css +249 -240
  49. package/dist/handsontable.full.js +4552 -4218
  50. package/dist/handsontable.full.min.css +11 -9
  51. package/dist/handsontable.full.min.js +53 -53
  52. package/dist/handsontable.js +4259 -3919
  53. package/dist/handsontable.min.css +5 -4
  54. package/dist/handsontable.min.js +24 -24
  55. package/editors/autocompleteEditor/autocompleteEditor.js +1 -1
  56. package/editors/autocompleteEditor/autocompleteEditor.mjs +1 -1
  57. package/editors/baseEditor/baseEditor.js +1 -1
  58. package/editors/baseEditor/baseEditor.mjs +1 -1
  59. package/editors/dateEditor/dateEditor.js +9 -0
  60. package/editors/dateEditor/dateEditor.mjs +10 -1
  61. package/editors/handsontableEditor/handsontableEditor.js +7 -1
  62. package/editors/handsontableEditor/handsontableEditor.mjs +7 -1
  63. package/editors/selectEditor/selectEditor.js +20 -9
  64. package/editors/selectEditor/selectEditor.mjs +20 -9
  65. package/editors/textEditor/textEditor.js +4 -11
  66. package/editors/textEditor/textEditor.mjs +4 -11
  67. package/helpers/dom/element.js +32 -1
  68. package/helpers/dom/element.mjs +31 -1
  69. package/helpers/mixed.js +2 -2
  70. package/helpers/mixed.mjs +2 -2
  71. package/helpers/themes.js +17 -0
  72. package/helpers/themes.mjs +13 -0
  73. package/package.json +10 -3
  74. package/plugins/comments/commentEditor.js +9 -0
  75. package/plugins/comments/commentEditor.mjs +9 -0
  76. package/plugins/comments/comments.js +14 -0
  77. package/plugins/comments/comments.mjs +15 -1
  78. package/plugins/contextMenu/menu/menu.js +9 -4
  79. package/plugins/contextMenu/menu/menu.mjs +9 -4
  80. package/plugins/filters/ui/multipleSelect.js +6 -0
  81. package/plugins/filters/ui/multipleSelect.mjs +6 -0
  82. package/plugins/manualRowMove/manualRowMove.js +1 -1
  83. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  84. package/plugins/manualRowResize/manualRowResize.js +1 -2
  85. package/plugins/manualRowResize/manualRowResize.mjs +2 -3
  86. package/plugins/mergeCells/mergeCells.js +1 -1
  87. package/plugins/mergeCells/mergeCells.mjs +1 -1
  88. package/plugins/nestedRows/ui/headers.js +7 -1
  89. package/plugins/nestedRows/ui/headers.mjs +7 -1
  90. package/plugins/stretchColumns/calculator.js +2 -1
  91. package/plugins/stretchColumns/calculator.mjs +3 -2
  92. package/renderers/checkboxRenderer/checkboxRenderer.js +5 -8
  93. package/renderers/checkboxRenderer/checkboxRenderer.mjs +5 -8
  94. package/settings.d.ts +1 -0
  95. package/styles/handsontable.css +2165 -0
  96. package/styles/handsontable.min.css +30 -0
  97. package/styles/ht-theme-horizon.css +607 -0
  98. package/styles/ht-theme-horizon.min.css +30 -0
  99. package/styles/ht-theme-main.css +613 -0
  100. package/styles/ht-theme-main.min.css +30 -0
  101. package/tableView.js +46 -0
  102. package/tableView.mjs +47 -1
  103. package/utils/autoResize.js +4 -1
  104. package/utils/autoResize.mjs +4 -1
  105. package/utils/ghostTable.js +5 -3
  106. package/utils/ghostTable.mjs +5 -3
@@ -162,6 +162,12 @@ class Menu {
162
162
  return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
163
163
  });
164
164
  }
165
+ this.hot.addHook('afterSetTheme', (themeName, firstRun) => {
166
+ if (!firstRun) {
167
+ var _this$hotMenu;
168
+ (_this$hotMenu = this.hotMenu) === null || _this$hotMenu === void 0 || _this$hotMenu.useTheme(themeName);
169
+ }
170
+ });
165
171
  }
166
172
 
167
173
  /**
@@ -286,6 +292,7 @@ class Menu {
286
292
  disableVisualSelection: 'area',
287
293
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
288
294
  ariaTags: false,
295
+ themeName: this.hot.getCurrentThemeName(),
289
296
  beforeOnCellMouseOver: (event, coords) => {
290
297
  _classPrivateFieldGet(_navigator, this).setCurrentPage(coords.row);
291
298
  },
@@ -579,10 +586,8 @@ class Menu {
579
586
  const currentRowHeight = itemCell ? (0, _element.outerHeight)(this.hotMenu.getCell(index, 0)) : 0;
580
587
  return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : currentRowHeight);
581
588
  }, 0);
582
-
583
- // Additional 3px to menu's size because of additional border around its `table.htCore`.
584
- holderStyle.width = `${currentHiderWidth + 3}px`;
585
- holderStyle.height = `${realHeight + 3}px`;
589
+ holderStyle.width = `${currentHiderWidth}px`;
590
+ holderStyle.height = `${realHeight}px`;
586
591
  hiderStyle.height = holderStyle.height;
587
592
  }
588
593
 
@@ -158,6 +158,12 @@ export class Menu {
158
158
  return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
159
159
  });
160
160
  }
161
+ this.hot.addHook('afterSetTheme', (themeName, firstRun) => {
162
+ if (!firstRun) {
163
+ var _this$hotMenu;
164
+ (_this$hotMenu = this.hotMenu) === null || _this$hotMenu === void 0 || _this$hotMenu.useTheme(themeName);
165
+ }
166
+ });
161
167
  }
162
168
 
163
169
  /**
@@ -282,6 +288,7 @@ export class Menu {
282
288
  disableVisualSelection: 'area',
283
289
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
284
290
  ariaTags: false,
291
+ themeName: this.hot.getCurrentThemeName(),
285
292
  beforeOnCellMouseOver: (event, coords) => {
286
293
  _classPrivateFieldGet(_navigator, this).setCurrentPage(coords.row);
287
294
  },
@@ -575,10 +582,8 @@ export class Menu {
575
582
  const currentRowHeight = itemCell ? outerHeight(this.hotMenu.getCell(index, 0)) : 0;
576
583
  return accumulator + (value.name === SEPARATOR ? 1 : currentRowHeight);
577
584
  }, 0);
578
-
579
- // Additional 3px to menu's size because of additional border around its `table.htCore`.
580
- holderStyle.width = `${currentHiderWidth + 3}px`;
581
- holderStyle.height = `${realHeight + 3}px`;
585
+ holderStyle.width = `${currentHiderWidth}px`;
586
+ holderStyle.height = `${realHeight}px`;
582
587
  hiderStyle.height = holderStyle.height;
583
588
  }
584
589
 
@@ -265,9 +265,15 @@ class MultipleSelectUI extends _base.BaseUI {
265
265
  row: 1,
266
266
  col: 0
267
267
  },
268
+ themeName: this.hot.getCurrentThemeName(),
268
269
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr'
269
270
  }));
270
271
  _classPrivateFieldGet(_itemsBox, this).init();
272
+ this.hot.addHook('afterSetTheme', (themeName, firstRun) => {
273
+ if (!firstRun) {
274
+ _classPrivateFieldGet(_itemsBox, this).useTheme(themeName);
275
+ }
276
+ });
271
277
  const shortcutManager = _classPrivateFieldGet(_itemsBox, this).getShortcutManager();
272
278
  const gridContext = shortcutManager.getContext('grid');
273
279
  gridContext.removeShortcutsByKeys(['Tab']);
@@ -260,9 +260,15 @@ export class MultipleSelectUI extends BaseUI {
260
260
  row: 1,
261
261
  col: 0
262
262
  },
263
+ themeName: this.hot.getCurrentThemeName(),
263
264
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr'
264
265
  }));
265
266
  _classPrivateFieldGet(_itemsBox, this).init();
267
+ this.hot.addHook('afterSetTheme', (themeName, firstRun) => {
268
+ if (!firstRun) {
269
+ _classPrivateFieldGet(_itemsBox, this).useTheme(themeName);
270
+ }
271
+ });
266
272
  const shortcutManager = _classPrivateFieldGet(_itemsBox, this).getShortcutManager();
267
273
  const gridContext = shortcutManager.getContext('grid');
268
274
  gridContext.removeShortcutsByKeys(['Tab']);
@@ -319,7 +319,7 @@ class ManualRowMove extends _base.BasePlugin {
319
319
  for (let visualRowIndex = fromRow; visualRowIndex <= toRow; visualRowIndex++) {
320
320
  const renderableIndex = rowMapper.getRenderableFromVisualIndex(visualRowIndex);
321
321
  if (renderableIndex !== null) {
322
- rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || 23;
322
+ rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || this.hot.view.getDefaultRowHeight();
323
323
  }
324
324
  }
325
325
  return rowsHeight;
@@ -315,7 +315,7 @@ export class ManualRowMove extends BasePlugin {
315
315
  for (let visualRowIndex = fromRow; visualRowIndex <= toRow; visualRowIndex++) {
316
316
  const renderableIndex = rowMapper.getRenderableFromVisualIndex(visualRowIndex);
317
317
  if (renderableIndex !== null) {
318
- rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || 23;
318
+ rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || this.hot.view.getDefaultRowHeight();
319
319
  }
320
320
  }
321
321
  return rowsHeight;
@@ -10,7 +10,6 @@ var _element = require("../../helpers/dom/element");
10
10
  var _array = require("../../helpers/array");
11
11
  var _number = require("../../helpers/number");
12
12
  var _translations = require("../../translations");
13
- var _src = require("../../3rdparty/walkontable/src");
14
13
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
15
14
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
16
15
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -229,7 +228,7 @@ class ManualRowResize extends _base.BasePlugin {
229
228
  */
230
229
  setManualSize(row, height) {
231
230
  const physicalRow = this.hot.toPhysicalRow(row);
232
- const newHeight = Math.max(height, _src.DEFAULT_ROW_HEIGHT);
231
+ const newHeight = Math.max(height, this.hot.view.getDefaultRowHeight());
233
232
  _classPrivateFieldGet(_rowHeightsMap, this).setValueAtIndex(physicalRow, newHeight);
234
233
  return newHeight;
235
234
  }
@@ -12,8 +12,7 @@ import { BasePlugin } from "../base/index.mjs";
12
12
  import { addClass, closest, hasClass, removeClass, outerWidth, isDetached } from "../../helpers/dom/element.mjs";
13
13
  import { arrayEach } from "../../helpers/array.mjs";
14
14
  import { rangeEach } from "../../helpers/number.mjs";
15
- import { PhysicalIndexToValueMap as IndexToValueMap } from "../../translations/index.mjs";
16
- import { DEFAULT_ROW_HEIGHT } from "../../3rdparty/walkontable/src/index.mjs"; // Developer note! Whenever you make a change in this file, make an analogous change in manualColumnResize.js
15
+ import { PhysicalIndexToValueMap as IndexToValueMap } from "../../translations/index.mjs"; // Developer note! Whenever you make a change in this file, make an analogous change in manualColumnResize.js
17
16
  export const PLUGIN_KEY = 'manualRowResize';
18
17
  export const PLUGIN_PRIORITY = 30;
19
18
  const PERSISTENT_STATE_KEY = 'manualRowHeights';
@@ -224,7 +223,7 @@ export class ManualRowResize extends BasePlugin {
224
223
  */
225
224
  setManualSize(row, height) {
226
225
  const physicalRow = this.hot.toPhysicalRow(row);
227
- const newHeight = Math.max(height, DEFAULT_ROW_HEIGHT);
226
+ const newHeight = Math.max(height, this.hot.view.getDefaultRowHeight());
228
227
  _classPrivateFieldGet(_rowHeightsMap, this).setValueAtIndex(physicalRow, newHeight);
229
228
  return newHeight;
230
229
  }
@@ -1496,7 +1496,7 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1496
1496
  * @returns {number}
1497
1497
  */
1498
1498
  function _sumCellsHeights(row, rowspan) {
1499
- const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');
1499
+ const defaultHeight = this.hot.view.getDefaultRowHeight();
1500
1500
  const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
1501
1501
  let height = 0;
1502
1502
  for (let i = row; i < row + rowspan; i++) {
@@ -1491,7 +1491,7 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1491
1491
  * @returns {number}
1492
1492
  */
1493
1493
  function _sumCellsHeights(row, rowspan) {
1494
- const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');
1494
+ const defaultHeight = this.hot.view.getDefaultRowHeight();
1495
1495
  const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
1496
1496
  let height = 0;
1497
1497
  for (let i = row; i < row + rowspan; i++) {
@@ -125,7 +125,13 @@ class HeadersUI extends _base.default {
125
125
  if (!deepestLevelIndex) {
126
126
  deepestLevelIndex = this.dataManager.cache.levelCount;
127
127
  }
128
- this.rowHeaderWidthCache = Math.max(50, 11 + 10 * deepestLevelIndex + 25);
128
+ const stylesHandler = this.hot.view.getStylesHandler();
129
+ let completeVerticalPadding = 11;
130
+ if (!stylesHandler.isClassicTheme()) {
131
+ const verticalPadding = stylesHandler.getCSSVariableValue('cell-horizontal-padding');
132
+ completeVerticalPadding = verticalPadding * 2;
133
+ }
134
+ this.rowHeaderWidthCache = Math.max(50, completeVerticalPadding + 10 * deepestLevelIndex + 25);
129
135
  this.hot.render();
130
136
  }
131
137
  }
@@ -121,7 +121,13 @@ class HeadersUI extends BaseUI {
121
121
  if (!deepestLevelIndex) {
122
122
  deepestLevelIndex = this.dataManager.cache.levelCount;
123
123
  }
124
- this.rowHeaderWidthCache = Math.max(50, 11 + 10 * deepestLevelIndex + 25);
124
+ const stylesHandler = this.hot.view.getStylesHandler();
125
+ let completeVerticalPadding = 11;
126
+ if (!stylesHandler.isClassicTheme()) {
127
+ const verticalPadding = stylesHandler.getCSSVariableValue('cell-horizontal-padding');
128
+ completeVerticalPadding = verticalPadding * 2;
129
+ }
130
+ this.rowHeaderWidthCache = Math.max(50, completeVerticalPadding + 10 * deepestLevelIndex + 25);
125
131
  this.hot.render();
126
132
  }
127
133
  }
@@ -127,11 +127,12 @@ function _willVerticalScrollAppear() {
127
127
  }
128
128
  const viewportHeight = view.getViewportHeight();
129
129
  const totalRows = _classPrivateFieldGet(_hot, this).countRows();
130
+ const defaultRowHeight = view.getStylesHandler().getDefaultRowHeight();
130
131
  let totalHeight = 0;
131
132
  let hasVerticalScroll = false;
132
133
  for (let row = 0; row < totalRows; row++) {
133
134
  var _classPrivateFieldGet2;
134
- totalHeight += ((_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getRowHeight(row)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : _src.DEFAULT_ROW_HEIGHT) + (row === 0 ? 1 : 0);
135
+ totalHeight += ((_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getRowHeight(row)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : defaultRowHeight) + (row === 0 ? 1 : 0);
135
136
  if (totalHeight > viewportHeight) {
136
137
  hasVerticalScroll = true;
137
138
  break;
@@ -7,7 +7,7 @@ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("C
7
7
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
8
8
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
9
9
  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"); }
10
- import { DEFAULT_COLUMN_WIDTH, DEFAULT_ROW_HEIGHT } from "../../3rdparty/walkontable/src/index.mjs";
10
+ import { DEFAULT_COLUMN_WIDTH } from "../../3rdparty/walkontable/src/index.mjs";
11
11
  import { getScrollbarWidth } from "../../helpers/dom/element.mjs";
12
12
  import { StretchAllStrategy } from "./strategies/all.mjs";
13
13
  import { StretchLastStrategy } from "./strategies/last.mjs";
@@ -123,11 +123,12 @@ function _willVerticalScrollAppear() {
123
123
  }
124
124
  const viewportHeight = view.getViewportHeight();
125
125
  const totalRows = _classPrivateFieldGet(_hot, this).countRows();
126
+ const defaultRowHeight = view.getStylesHandler().getDefaultRowHeight();
126
127
  let totalHeight = 0;
127
128
  let hasVerticalScroll = false;
128
129
  for (let row = 0; row < totalRows; row++) {
129
130
  var _classPrivateFieldGet2;
130
- totalHeight += ((_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getRowHeight(row)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : DEFAULT_ROW_HEIGHT) + (row === 0 ? 1 : 0);
131
+ totalHeight += ((_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getRowHeight(row)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : defaultRowHeight) + (row === 0 ? 1 : 0);
131
132
  if (totalHeight > viewportHeight) {
132
133
  hasVerticalScroll = true;
133
134
  break;
@@ -302,16 +302,13 @@ function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellProperties
302
302
  const bottomRight = selRange[key].getBottomEndCorner();
303
303
  for (let visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {
304
304
  for (let visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {
305
- const cellMeta = hotInstance.getCellMeta(visualRow, visualColumn);
306
-
307
- /* eslint-disable no-continue */
308
- if (cellMeta.readOnly) {
309
- continue;
310
- }
305
+ const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);
311
306
  const cell = hotInstance.getCell(visualRow, visualColumn);
312
- if (cell instanceof HTMLElement) {
307
+ if (cell === null || cell === undefined) {
308
+ return true;
309
+ } else {
313
310
  const checkboxes = cell.querySelectorAll('input[type=checkbox]');
314
- if (checkboxes.length > 0) {
311
+ if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {
315
312
  return true;
316
313
  }
317
314
  }
@@ -297,16 +297,13 @@ export function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellPro
297
297
  const bottomRight = selRange[key].getBottomEndCorner();
298
298
  for (let visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {
299
299
  for (let visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {
300
- const cellMeta = hotInstance.getCellMeta(visualRow, visualColumn);
301
-
302
- /* eslint-disable no-continue */
303
- if (cellMeta.readOnly) {
304
- continue;
305
- }
300
+ const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);
306
301
  const cell = hotInstance.getCell(visualRow, visualColumn);
307
- if (cell instanceof HTMLElement) {
302
+ if (cell === null || cell === undefined) {
303
+ return true;
304
+ } else {
308
305
  const checkboxes = cell.querySelectorAll('input[type=checkbox]');
309
- if (checkboxes.length > 0) {
306
+ if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {
310
307
  return true;
311
308
  }
312
309
  }
package/settings.d.ts CHANGED
@@ -214,6 +214,7 @@ export interface GridSettings extends Events {
214
214
  strict?: boolean;
215
215
  tableClassName?: string | string[];
216
216
  tabMoves?: CellCoords | SimpleCellCoords | ((event: KeyboardEvent) => CellCoords | SimpleCellCoords);
217
+ themeName?: string;
217
218
  title?: string;
218
219
  trimDropdown?: boolean;
219
220
  trimRows?: TrimRowsSettings;