handsontable 16.2.0-next-90d1117-20251117 → 16.2.0-next-bf17104-20251120
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.
- package/CHANGELOG.md +2 -1
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/dist/handsontable.css +3 -2
- package/dist/handsontable.full.css +3 -2
- package/dist/handsontable.full.js +17 -30
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +5 -5
- package/dist/handsontable.js +17 -30
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +5 -5
- package/editors/autocompleteEditor/autocompleteEditor.d.ts +9 -2
- package/editors/autocompleteEditor/autocompleteEditor.js +0 -1
- package/editors/autocompleteEditor/autocompleteEditor.mjs +0 -1
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/package.json +1 -1
- package/plugins/columnSummary/columnSummary.js +2 -2
- package/plugins/columnSummary/columnSummary.mjs +2 -2
- package/plugins/emptyDataState/ui.js +4 -1
- package/plugins/emptyDataState/ui.mjs +4 -1
- package/plugins/undoRedo/undoRedo.js +5 -20
- package/plugins/undoRedo/undoRedo.mjs +5 -20
- package/styles/handsontable.css +3 -3
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-icons-horizon.css +2 -2
- package/styles/ht-icons-horizon.min.css +2 -2
- package/styles/ht-icons-main.css +2 -2
- package/styles/ht-icons-main.min.css +2 -2
- package/styles/ht-theme-classic-no-icons.css +6 -6
- package/styles/ht-theme-classic-no-icons.min.css +3 -3
- package/styles/ht-theme-classic.css +6 -6
- package/styles/ht-theme-classic.min.css +3 -3
- package/styles/ht-theme-horizon-no-icons.css +8 -8
- package/styles/ht-theme-horizon-no-icons.min.css +3 -3
- package/styles/ht-theme-horizon.css +8 -8
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main-no-icons.css +2 -2
- package/styles/ht-theme-main-no-icons.min.css +2 -2
- package/styles/ht-theme-main.css +2 -2
- package/styles/ht-theme-main.min.css +2 -2
|
@@ -3,14 +3,21 @@ import { HandsontableEditor } from '../handsontableEditor';
|
|
|
3
3
|
|
|
4
4
|
export const EDITOR_TYPE: 'autocomplete';
|
|
5
5
|
|
|
6
|
+
type ChoiceObject = {
|
|
7
|
+
key: any;
|
|
8
|
+
value: any;
|
|
9
|
+
};
|
|
10
|
+
type ChoiceArray = (string | number)[] | ChoiceObject[];
|
|
11
|
+
|
|
6
12
|
export class AutocompleteEditor extends HandsontableEditor {
|
|
7
13
|
constructor(instance: Core);
|
|
8
14
|
|
|
9
15
|
query: string;
|
|
10
|
-
strippedChoices:
|
|
11
|
-
rawChoices:
|
|
16
|
+
strippedChoices: ChoiceArray;
|
|
17
|
+
rawChoices: ChoiceArray;
|
|
12
18
|
|
|
13
19
|
queryChoices(query: string): void;
|
|
20
|
+
updateChoicesList(choicesList: ChoiceArray): void;
|
|
14
21
|
}
|
|
15
22
|
export namespace AutocompleteEditor {
|
|
16
23
|
export function sortByRelevance(value: any, choices: string[], caseSensitive: boolean): number[];
|
|
@@ -267,7 +267,6 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
|
|
|
267
267
|
/**
|
|
268
268
|
* Updates list of the possible completions to choose.
|
|
269
269
|
*
|
|
270
|
-
* @private
|
|
271
270
|
* @param {Array} choicesList The choices list to process.
|
|
272
271
|
*/
|
|
273
272
|
updateChoicesList(choicesList) {
|
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 = "16.2.0-next-
|
|
137
|
+
const hotVersion = "16.2.0-next-bf17104-20251120";
|
|
138
138
|
let keyValidityDate;
|
|
139
139
|
let consoleMessageState = 'invalid';
|
|
140
140
|
let domMessageState = 'invalid';
|
|
@@ -142,7 +142,7 @@ function _injectProductInfo(key, element) {
|
|
|
142
142
|
const schemaValidity = _checkKeySchema(key);
|
|
143
143
|
if (hasValidType || isNonCommercial || schemaValidity) {
|
|
144
144
|
if (schemaValidity) {
|
|
145
|
-
const releaseDate = (0, _moment.default)("
|
|
145
|
+
const releaseDate = (0, _moment.default)("25/11/2025", 'DD/MM/YYYY');
|
|
146
146
|
const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
|
|
147
147
|
const keyValidityDays = _extractTime(key);
|
|
148
148
|
keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
|
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 = "16.2.0-next-
|
|
127
|
+
const hotVersion = "16.2.0-next-bf17104-20251120";
|
|
128
128
|
let keyValidityDate;
|
|
129
129
|
let consoleMessageState = 'invalid';
|
|
130
130
|
let domMessageState = 'invalid';
|
|
@@ -132,7 +132,7 @@ export function _injectProductInfo(key, element) {
|
|
|
132
132
|
const schemaValidity = _checkKeySchema(key);
|
|
133
133
|
if (hasValidType || isNonCommercial || schemaValidity) {
|
|
134
134
|
if (schemaValidity) {
|
|
135
|
-
const releaseDate = moment("
|
|
135
|
+
const releaseDate = moment("25/11/2025", 'DD/MM/YYYY');
|
|
136
136
|
const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
|
|
137
137
|
const keyValidityDays = _extractTime(key);
|
|
138
138
|
keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
|
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": "16.2.0-next-
|
|
13
|
+
"version": "16.2.0-next-bf17104-20251120",
|
|
14
14
|
"main": "index",
|
|
15
15
|
"module": "index.mjs",
|
|
16
16
|
"jsnext:main": "index.mjs",
|
|
@@ -39,9 +39,9 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 220;
|
|
|
39
39
|
* | `destinationRow` | Yes | Number | - | [Sets the destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |
|
|
40
40
|
* | `destinationColumn` | Yes | Number | - | [Sets the destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |
|
|
41
41
|
* | `forceNumeric` | No | Boolean | `false` | [Forces the summary to treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values) |
|
|
42
|
-
* | `reversedRowCoords` | No | Boolean | `false` | [Reverses row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell) |
|
|
42
|
+
* | `reversedRowCoords` | No | Boolean | `false` | [Reverses the row coordinate, count row coordinates backward](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell). Useful when displaying summary results at the bottom of the grid, as it allows you to reference rows relative to the last row (e.g., `destinationRow: 0` refers to the last row when this option is enabled) |
|
|
43
43
|
* | `suppressDataTypeErrors` | No | Boolean | `true` | [Suppresses data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors) |
|
|
44
|
-
* | `readOnly` | No | Boolean | `true` | Makes summary cell read-only |
|
|
44
|
+
* | `readOnly` | No | Boolean | `true` | Makes summary cell [read-only](@/api/options.md#readonly) |
|
|
45
45
|
* | `roundFloat` | No | Number/<br>Boolean | - | [Rounds summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result) |
|
|
46
46
|
* | `customFunction` | No | Function | - | [Lets you add a custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function) |
|
|
47
47
|
*
|
|
@@ -35,9 +35,9 @@ export const PLUGIN_PRIORITY = 220;
|
|
|
35
35
|
* | `destinationRow` | Yes | Number | - | [Sets the destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |
|
|
36
36
|
* | `destinationColumn` | Yes | Number | - | [Sets the destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |
|
|
37
37
|
* | `forceNumeric` | No | Boolean | `false` | [Forces the summary to treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values) |
|
|
38
|
-
* | `reversedRowCoords` | No | Boolean | `false` | [Reverses row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell) |
|
|
38
|
+
* | `reversedRowCoords` | No | Boolean | `false` | [Reverses the row coordinate, count row coordinates backward](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell). Useful when displaying summary results at the bottom of the grid, as it allows you to reference rows relative to the last row (e.g., `destinationRow: 0` refers to the last row when this option is enabled) |
|
|
39
39
|
* | `suppressDataTypeErrors` | No | Boolean | `true` | [Suppresses data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors) |
|
|
40
|
-
* | `readOnly` | No | Boolean | `true` | Makes summary cell read-only |
|
|
40
|
+
* | `readOnly` | No | Boolean | `true` | Makes summary cell [read-only](@/api/options.md#readonly) |
|
|
41
41
|
* | `roundFloat` | No | Number/<br>Boolean | - | [Rounds summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result) |
|
|
42
42
|
* | `customFunction` | No | Function | - | [Lets you add a custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function) |
|
|
43
43
|
*
|
|
@@ -227,6 +227,7 @@ class EmptyDataStateUI {
|
|
|
227
227
|
const scrollbarSize = view.hasHorizontalScroll() ? (0, _element.getScrollbarWidth)(view.hot.rootDocument) : 0;
|
|
228
228
|
const rows = view.countRenderableRows();
|
|
229
229
|
const cols = view.countRenderableColumns();
|
|
230
|
+
const headerCols = view.getColumnHeadersCount();
|
|
230
231
|
emptyDataStateElement.style.top = cols > 0 ? `${view.getColumnHeaderHeight()}px` : '0px';
|
|
231
232
|
emptyDataStateElement.style.insetInlineStart = rows > 0 ? `${view.getRowHeaderWidth()}px` : '0px';
|
|
232
233
|
if (rows === 0) {
|
|
@@ -261,8 +262,10 @@ class EmptyDataStateUI {
|
|
|
261
262
|
} else {
|
|
262
263
|
height = view.hot.getTableHeight();
|
|
263
264
|
}
|
|
264
|
-
} else if (
|
|
265
|
+
} else if (headerCols > 0 && cols > 0) {
|
|
265
266
|
height = view.getViewportHeight() - scrollbarSize;
|
|
267
|
+
} else if (headerCols > 0 && cols === 0) {
|
|
268
|
+
height = view.getWorkspaceHeight() - scrollbarSize;
|
|
266
269
|
}
|
|
267
270
|
emptyDataStateElement.style.width = `${width}px`;
|
|
268
271
|
emptyDataStateElement.style.height = `${height}px`;
|
|
@@ -224,6 +224,7 @@ export class EmptyDataStateUI {
|
|
|
224
224
|
const scrollbarSize = view.hasHorizontalScroll() ? getScrollbarWidth(view.hot.rootDocument) : 0;
|
|
225
225
|
const rows = view.countRenderableRows();
|
|
226
226
|
const cols = view.countRenderableColumns();
|
|
227
|
+
const headerCols = view.getColumnHeadersCount();
|
|
227
228
|
emptyDataStateElement.style.top = cols > 0 ? `${view.getColumnHeaderHeight()}px` : '0px';
|
|
228
229
|
emptyDataStateElement.style.insetInlineStart = rows > 0 ? `${view.getRowHeaderWidth()}px` : '0px';
|
|
229
230
|
if (rows === 0) {
|
|
@@ -258,8 +259,10 @@ export class EmptyDataStateUI {
|
|
|
258
259
|
} else {
|
|
259
260
|
height = view.hot.getTableHeight();
|
|
260
261
|
}
|
|
261
|
-
} else if (
|
|
262
|
+
} else if (headerCols > 0 && cols > 0) {
|
|
262
263
|
height = view.getViewportHeight() - scrollbarSize;
|
|
264
|
+
} else if (headerCols > 0 && cols === 0) {
|
|
265
|
+
height = view.getWorkspaceHeight() - scrollbarSize;
|
|
263
266
|
}
|
|
264
267
|
emptyDataStateElement.style.width = `${width}px`;
|
|
265
268
|
emptyDataStateElement.style.height = `${height}px`;
|
|
@@ -322,11 +322,8 @@ function _exposeAPIToCore() {
|
|
|
322
322
|
};
|
|
323
323
|
|
|
324
324
|
/**
|
|
325
|
-
* ::: warning
|
|
326
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#undo-2) plugin.
|
|
327
|
-
* :::
|
|
328
|
-
*
|
|
329
325
|
* @alias undo
|
|
326
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#undo-2) plugin.
|
|
330
327
|
* @memberof! Core#
|
|
331
328
|
*/
|
|
332
329
|
this.hot.undo = () => {
|
|
@@ -334,11 +331,8 @@ function _exposeAPIToCore() {
|
|
|
334
331
|
this.undo();
|
|
335
332
|
};
|
|
336
333
|
/**
|
|
337
|
-
* ::: warning
|
|
338
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#redo) plugin.
|
|
339
|
-
* :::
|
|
340
|
-
*
|
|
341
334
|
* @alias redo
|
|
335
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#redo) plugin.
|
|
342
336
|
* @memberof! Core#
|
|
343
337
|
*/
|
|
344
338
|
this.hot.redo = () => {
|
|
@@ -346,11 +340,8 @@ function _exposeAPIToCore() {
|
|
|
346
340
|
this.redo();
|
|
347
341
|
};
|
|
348
342
|
/**
|
|
349
|
-
* ::: warning
|
|
350
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isundoavailable) plugin.
|
|
351
|
-
* :::
|
|
352
|
-
*
|
|
353
343
|
* @alias isUndoAvailable
|
|
344
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isundoavailable) plugin.
|
|
354
345
|
* @memberof! Core#
|
|
355
346
|
* @returns {boolean}
|
|
356
347
|
*/
|
|
@@ -359,11 +350,8 @@ function _exposeAPIToCore() {
|
|
|
359
350
|
return this.isUndoAvailable();
|
|
360
351
|
};
|
|
361
352
|
/**
|
|
362
|
-
* ::: warning
|
|
363
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isredoavailable) plugin.
|
|
364
|
-
* :::
|
|
365
|
-
*
|
|
366
353
|
* @alias isRedoAvailable
|
|
354
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isredoavailable) plugin.
|
|
367
355
|
* @memberof! Core#
|
|
368
356
|
* @returns {boolean}
|
|
369
357
|
*/
|
|
@@ -372,11 +360,8 @@ function _exposeAPIToCore() {
|
|
|
372
360
|
return this.isRedoAvailable();
|
|
373
361
|
};
|
|
374
362
|
/**
|
|
375
|
-
* ::: warning
|
|
376
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#clear) plugin.
|
|
377
|
-
* :::
|
|
378
|
-
*
|
|
379
363
|
* @alias clearUndo
|
|
364
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#clear) plugin.
|
|
380
365
|
* @memberof! Core#
|
|
381
366
|
*/
|
|
382
367
|
this.hot.clearUndo = () => {
|
|
@@ -319,11 +319,8 @@ function _exposeAPIToCore() {
|
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
/**
|
|
322
|
-
* ::: warning
|
|
323
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#undo-2) plugin.
|
|
324
|
-
* :::
|
|
325
|
-
*
|
|
326
322
|
* @alias undo
|
|
323
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#undo-2) plugin.
|
|
327
324
|
* @memberof! Core#
|
|
328
325
|
*/
|
|
329
326
|
this.hot.undo = () => {
|
|
@@ -331,11 +328,8 @@ function _exposeAPIToCore() {
|
|
|
331
328
|
this.undo();
|
|
332
329
|
};
|
|
333
330
|
/**
|
|
334
|
-
* ::: warning
|
|
335
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#redo) plugin.
|
|
336
|
-
* :::
|
|
337
|
-
*
|
|
338
331
|
* @alias redo
|
|
332
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#redo) plugin.
|
|
339
333
|
* @memberof! Core#
|
|
340
334
|
*/
|
|
341
335
|
this.hot.redo = () => {
|
|
@@ -343,11 +337,8 @@ function _exposeAPIToCore() {
|
|
|
343
337
|
this.redo();
|
|
344
338
|
};
|
|
345
339
|
/**
|
|
346
|
-
* ::: warning
|
|
347
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isundoavailable) plugin.
|
|
348
|
-
* :::
|
|
349
|
-
*
|
|
350
340
|
* @alias isUndoAvailable
|
|
341
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isundoavailable) plugin.
|
|
351
342
|
* @memberof! Core#
|
|
352
343
|
* @returns {boolean}
|
|
353
344
|
*/
|
|
@@ -356,11 +347,8 @@ function _exposeAPIToCore() {
|
|
|
356
347
|
return this.isUndoAvailable();
|
|
357
348
|
};
|
|
358
349
|
/**
|
|
359
|
-
* ::: warning
|
|
360
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isredoavailable) plugin.
|
|
361
|
-
* :::
|
|
362
|
-
*
|
|
363
350
|
* @alias isRedoAvailable
|
|
351
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#isredoavailable) plugin.
|
|
364
352
|
* @memberof! Core#
|
|
365
353
|
* @returns {boolean}
|
|
366
354
|
*/
|
|
@@ -369,11 +357,8 @@ function _exposeAPIToCore() {
|
|
|
369
357
|
return this.isRedoAvailable();
|
|
370
358
|
};
|
|
371
359
|
/**
|
|
372
|
-
* ::: warning
|
|
373
|
-
* This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#clear) plugin.
|
|
374
|
-
* :::
|
|
375
|
-
*
|
|
376
360
|
* @alias clearUndo
|
|
361
|
+
* @deprecated This method is deprecated and it will be removed from the Core API in the future. Please use the method from the [`UndoRedo`](@/api/undoRedo.md#clear) plugin.
|
|
377
362
|
* @memberof! Core#
|
|
378
363
|
*/
|
|
379
364
|
this.hot.clearUndo = () => {
|
package/styles/handsontable.css
CHANGED
|
@@ -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: 16.2.0-next-
|
|
29
|
-
* Release date:
|
|
28
|
+
* Version: 16.2.0-next-bf17104-20251120
|
|
29
|
+
* Release date: 25/11/2025 (built at 20/11/2025 13:06:28)
|
|
30
30
|
*/
|
|
31
31
|
.htBorders .wtBorder.ht-border-style-dashed-vertical {
|
|
32
32
|
background-image: repeating-linear-gradient(to bottom, var(--ht-custom-border-color) 0 5px, transparent 0 10px);
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
}
|
|
276
276
|
.handsontable tbody tr th .relative {
|
|
277
277
|
padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);
|
|
278
|
-
height: 100%;
|
|
278
|
+
min-height: 100%;
|
|
279
279
|
}
|
|
280
280
|
.handsontable tbody tr td:first-child {
|
|
281
281
|
border-inline-start-color: var(--ht-border-color);
|