handsontable 0.0.0-next-2c41c5b-20250814 → 0.0.0-next-fce5825-20250822
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/autocompleteType.js +1 -4
- package/cellTypes/autocompleteType/autocompleteType.mjs +1 -4
- package/cellTypes/checkboxType/checkboxType.js +1 -3
- package/cellTypes/checkboxType/checkboxType.mjs +1 -3
- package/cellTypes/dropdownType/dropdownType.js +1 -4
- package/cellTypes/dropdownType/dropdownType.mjs +1 -4
- package/cellTypes/numericType/numericType.js +1 -3
- package/cellTypes/numericType/numericType.mjs +1 -3
- package/core/focusCatcher/index.js +37 -20
- package/core/focusCatcher/index.mjs +37 -20
- package/core/focusCatcher/utils.js +3 -64
- package/core/focusCatcher/utils.mjs +1 -60
- package/core/hooks/constants.js +58 -0
- package/core/hooks/constants.mjs +58 -0
- package/core/hooks/index.d.ts +7 -0
- package/core.d.ts +0 -1
- package/core.js +59 -55
- package/core.mjs +61 -57
- package/dataMap/dataMap.js +3 -13
- package/dataMap/dataMap.mjs +4 -14
- package/dataMap/dataSource.js +0 -16
- package/dataMap/dataSource.mjs +0 -16
- package/dataMap/metaManager/lazyFactoryMap.js +3 -4
- package/dataMap/metaManager/lazyFactoryMap.mjs +1 -2
- package/dataMap/metaManager/metaLayers/cellMeta.js +2 -3
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -3
- package/dataMap/metaManager/metaSchema.js +97 -68
- package/dataMap/metaManager/metaSchema.mjs +97 -68
- package/dataMap/metaManager/utils.js +11 -0
- package/dataMap/metaManager/utils.mjs +10 -0
- package/dist/handsontable.css +103 -5
- package/dist/handsontable.full.css +103 -5
- package/dist/handsontable.full.js +2770 -1954
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +67 -67
- package/dist/handsontable.js +2772 -1956
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +27 -27
- package/editors/autocompleteEditor/autocompleteEditor.js +8 -33
- package/editors/autocompleteEditor/autocompleteEditor.mjs +9 -34
- package/editors/baseEditor/baseEditor.js +2 -2
- package/editors/baseEditor/baseEditor.mjs +2 -2
- package/helpers/a11y.js +5 -1
- package/helpers/a11y.mjs +3 -1
- package/helpers/mixed.js +64 -1
- package/helpers/mixed.mjs +62 -1
- package/helpers/number.js +0 -28
- package/helpers/number.mjs +0 -26
- package/helpers/string.js +0 -19
- package/helpers/string.mjs +0 -18
- package/index.d.ts +9 -0
- package/package.json +6 -1
- package/plugins/autofill/autofill.js +3 -50
- package/plugins/autofill/autofill.mjs +3 -50
- package/plugins/base/base.js +75 -14
- package/plugins/base/base.mjs +75 -14
- package/plugins/contextMenu/contextMenu.js +1 -0
- package/plugins/contextMenu/contextMenu.mjs +1 -0
- package/plugins/copyPaste/copyPaste.js +28 -61
- package/plugins/copyPaste/copyPaste.mjs +29 -62
- package/plugins/dialog/dialog.d.ts +23 -0
- package/plugins/dialog/dialog.js +469 -0
- package/plugins/dialog/dialog.mjs +465 -0
- package/plugins/dialog/index.d.ts +1 -0
- package/plugins/dialog/index.js +7 -0
- package/plugins/dialog/index.mjs +1 -0
- package/plugins/dialog/ui.js +240 -0
- package/plugins/dialog/ui.mjs +235 -0
- package/plugins/dropdownMenu/dropdownMenu.js +1 -0
- package/plugins/dropdownMenu/dropdownMenu.mjs +1 -0
- package/plugins/index.d.ts +3 -0
- package/plugins/index.js +3 -0
- package/plugins/index.mjs +3 -1
- package/plugins/pagination/focusController.js +27 -0
- package/plugins/pagination/focusController.mjs +23 -0
- package/plugins/pagination/pagination.js +165 -18
- package/plugins/pagination/pagination.mjs +165 -18
- package/plugins/pagination/ui.js +101 -62
- package/plugins/pagination/ui.mjs +102 -63
- package/selection/range.js +11 -0
- package/selection/range.mjs +11 -0
- package/selection/selection.js +63 -2
- package/selection/selection.mjs +63 -2
- package/selection/utils.js +2 -1
- package/selection/utils.mjs +2 -1
- package/settings.d.ts +3 -3
- package/shortcuts/context.js +4 -1
- package/shortcuts/context.mjs +4 -1
- package/shortcuts/manager.js +17 -3
- package/shortcuts/manager.mjs +17 -3
- package/styles/handsontable.css +106 -22
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-theme-horizon.css +24 -6
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main.css +52 -34
- package/styles/ht-theme-main.min.css +3 -3
- package/tableView.js +7 -2
- package/tableView.mjs +7 -2
- package/{core/focusCatcher → utils}/focusDetector.js +29 -11
- package/{core/focusCatcher → utils}/focusDetector.mjs +29 -11
- package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
- package/validators/autocompleteValidator/autocompleteValidator.mjs +1 -2
- package/cellTypes/autocompleteType/accessors/index.js +0 -7
- package/cellTypes/autocompleteType/accessors/index.mjs +0 -2
- package/cellTypes/autocompleteType/accessors/valueGetter.js +0 -14
- package/cellTypes/autocompleteType/accessors/valueGetter.mjs +0 -10
- package/cellTypes/autocompleteType/accessors/valueSetter.js +0 -25
- package/cellTypes/autocompleteType/accessors/valueSetter.mjs +0 -21
- package/cellTypes/checkboxType/accessors/index.js +0 -5
- package/cellTypes/checkboxType/accessors/index.mjs +0 -1
- package/cellTypes/checkboxType/accessors/valueSetter.js +0 -26
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +0 -22
- package/cellTypes/dropdownType/accessors/index.js +0 -7
- package/cellTypes/dropdownType/accessors/index.mjs +0 -2
- package/cellTypes/dropdownType/accessors/valueGetter.js +0 -14
- package/cellTypes/dropdownType/accessors/valueGetter.mjs +0 -10
- package/cellTypes/dropdownType/accessors/valueSetter.js +0 -17
- package/cellTypes/dropdownType/accessors/valueSetter.mjs +0 -13
- package/cellTypes/numericType/accessors/index.js +0 -5
- package/cellTypes/numericType/accessors/index.mjs +0 -1
- package/cellTypes/numericType/accessors/valueSetter.js +0 -19
- package/cellTypes/numericType/accessors/valueSetter.mjs +0 -15
- package/utils/valueAccessors.js +0 -45
- package/utils/valueAccessors.mjs +0 -40
package/selection/selection.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
|
2
|
+
import "core-js/modules/es.array.push.js";
|
|
2
3
|
import "core-js/modules/es.set.difference.v2.js";
|
|
3
4
|
import "core-js/modules/es.set.intersection.v2.js";
|
|
4
5
|
import "core-js/modules/es.set.is-disjoint-from.v2.js";
|
|
@@ -29,6 +30,15 @@ import { ExtenderTransformation, FocusTransformation } from "./transformation/in
|
|
|
29
30
|
import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
|
|
30
31
|
import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
|
|
31
32
|
import { A11Y_SELECTED } from "../helpers/a11y.mjs";
|
|
33
|
+
/**
|
|
34
|
+
* @typedef {object} SelectionState
|
|
35
|
+
* @property {CellRange[]} ranges The array of all ranges.
|
|
36
|
+
* @property {CellRange} activeRange The active range.
|
|
37
|
+
* @property {number} activeSelectionLayer The active selection layer.
|
|
38
|
+
* @property {number[]} selectedByRowHeader The state of the selected row headers.
|
|
39
|
+
* @property {number[]} selectedByColumnHeader The state of the selected column headers.
|
|
40
|
+
* @property {boolean} disableHeadersHighlight The state of the disable headers highlight.
|
|
41
|
+
*/
|
|
32
42
|
/**
|
|
33
43
|
* @class Selection
|
|
34
44
|
* @util
|
|
@@ -350,6 +360,7 @@ class Selection {
|
|
|
350
360
|
// We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
|
|
351
361
|
// should be handled by next methods.
|
|
352
362
|
const coordsClone = coords.clone();
|
|
363
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
|
353
364
|
_classPrivateFieldSet(_isFocusSelectionChanged, this, false);
|
|
354
365
|
this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
|
|
355
366
|
if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
|
|
@@ -947,7 +958,6 @@ class Selection {
|
|
|
947
958
|
focusPosition,
|
|
948
959
|
disableHeadersHighlight
|
|
949
960
|
} = options;
|
|
950
|
-
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
|
951
961
|
if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
|
|
952
962
|
highlight = this.tableProps.createCellCoords(clamp(focusPosition.row, rowFrom, nrOfRows - 1), clamp(focusPosition.col, columnFrom, nrOfColumns - 1));
|
|
953
963
|
}
|
|
@@ -956,6 +966,7 @@ class Selection {
|
|
|
956
966
|
this.clear();
|
|
957
967
|
this.runLocalHooks('beforeSelectAll', startCoords, endCoords, highlight);
|
|
958
968
|
this.setRangeStartOnly(startCoords, undefined, highlight);
|
|
969
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
|
959
970
|
if (columnFrom < 0) {
|
|
960
971
|
this.selectedByRowHeader.add(this.getLayerLevel());
|
|
961
972
|
}
|
|
@@ -965,7 +976,6 @@ class Selection {
|
|
|
965
976
|
this.setRangeEnd(endCoords);
|
|
966
977
|
this.runLocalHooks('afterSelectAll', startCoords, endCoords, highlight);
|
|
967
978
|
this.finish();
|
|
968
|
-
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
|
969
979
|
}
|
|
970
980
|
|
|
971
981
|
/**
|
|
@@ -1132,6 +1142,57 @@ class Selection {
|
|
|
1132
1142
|
return isValid;
|
|
1133
1143
|
}
|
|
1134
1144
|
|
|
1145
|
+
/**
|
|
1146
|
+
* Allows importing the selection for all layers from the provided array of CellRange objects.
|
|
1147
|
+
* The method clears the current selection and sets the new one without triggering any
|
|
1148
|
+
* selection related hooks.
|
|
1149
|
+
*
|
|
1150
|
+
* @param {SelectionState} selectionState The selection state to import.
|
|
1151
|
+
*/
|
|
1152
|
+
importSelection(_ref) {
|
|
1153
|
+
let {
|
|
1154
|
+
ranges,
|
|
1155
|
+
activeRange,
|
|
1156
|
+
activeSelectionLayer,
|
|
1157
|
+
selectedByRowHeader,
|
|
1158
|
+
selectedByColumnHeader,
|
|
1159
|
+
disableHeadersHighlight
|
|
1160
|
+
} = _ref;
|
|
1161
|
+
if (ranges.length === 0) {
|
|
1162
|
+
return;
|
|
1163
|
+
}
|
|
1164
|
+
this.selectedRange.clear();
|
|
1165
|
+
this.highlight.clear();
|
|
1166
|
+
this.inProgress = true;
|
|
1167
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
|
1168
|
+
this.selectedByRowHeader = new Set(selectedByRowHeader);
|
|
1169
|
+
this.selectedByColumnHeader = new Set(selectedByColumnHeader);
|
|
1170
|
+
this.setActiveSelectionLayerIndex(0);
|
|
1171
|
+
ranges.forEach((cellRange, selectionLayerIndex) => {
|
|
1172
|
+
this.selectedRange.push(cellRange);
|
|
1173
|
+
this.applyAndCommit(cellRange, selectionLayerIndex);
|
|
1174
|
+
});
|
|
1175
|
+
this.setRangeFocus(activeRange.highlight, activeSelectionLayer);
|
|
1176
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
|
1177
|
+
this.inProgress = false;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
/**
|
|
1181
|
+
* Exports all selection layers with other properties related to the selection state.
|
|
1182
|
+
*
|
|
1183
|
+
* @returns {SelectionState}
|
|
1184
|
+
*/
|
|
1185
|
+
exportSelection() {
|
|
1186
|
+
return {
|
|
1187
|
+
ranges: Array.from(this.selectedRange).map(range => range.clone()),
|
|
1188
|
+
activeRange: this.getActiveSelectedRange(),
|
|
1189
|
+
activeSelectionLayer: this.getActiveSelectionLayerIndex(),
|
|
1190
|
+
selectedByRowHeader: Array.from(this.selectedByRowHeader),
|
|
1191
|
+
selectedByColumnHeader: Array.from(this.selectedByColumnHeader),
|
|
1192
|
+
disableHeadersHighlight: _classPrivateFieldGet(_disableHeadersHighlight, this)
|
|
1193
|
+
};
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1135
1196
|
/**
|
|
1136
1197
|
* Refreshes the whole selection by clearing, reapplying and committing (calculating visual to renderable indexes)
|
|
1137
1198
|
* the selection by using already added visual ranges. The method can be useful when underneath some indexes
|
package/selection/utils.js
CHANGED
|
@@ -118,9 +118,10 @@ function normalizeSelectionFactory(type) {
|
|
|
118
118
|
rowEnd = Math.max(origRowStart, origRowEnd);
|
|
119
119
|
columnEnd = Math.max(origColumnStart, origColumnEnd);
|
|
120
120
|
}
|
|
121
|
+
const highlight = isObjectType ? selection.highlight.clone() : createCellCoords(rowStart, columnStart);
|
|
121
122
|
const from = createCellCoords(rowStart, columnStart);
|
|
122
123
|
const to = createCellCoords(rowEnd, columnEnd);
|
|
123
|
-
return createCellRange(
|
|
124
|
+
return createCellRange(highlight, from, to);
|
|
124
125
|
};
|
|
125
126
|
}
|
|
126
127
|
|
package/selection/utils.mjs
CHANGED
|
@@ -111,9 +111,10 @@ export function normalizeSelectionFactory(type) {
|
|
|
111
111
|
rowEnd = Math.max(origRowStart, origRowEnd);
|
|
112
112
|
columnEnd = Math.max(origColumnStart, origColumnEnd);
|
|
113
113
|
}
|
|
114
|
+
const highlight = isObjectType ? selection.highlight.clone() : createCellCoords(rowStart, columnStart);
|
|
114
115
|
const from = createCellCoords(rowStart, columnStart);
|
|
115
116
|
const to = createCellCoords(rowEnd, columnEnd);
|
|
116
|
-
return createCellRange(
|
|
117
|
+
return createCellRange(highlight, from, to);
|
|
117
118
|
};
|
|
118
119
|
}
|
|
119
120
|
|
package/settings.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ import { Settings as PaginationSettings } from './plugins/pagination';
|
|
|
41
41
|
import { Settings as PersistentStateSettings } from './plugins/persistentState';
|
|
42
42
|
import { Settings as SearchSettings } from './plugins/search';
|
|
43
43
|
import { Settings as TrimRowsSettings } from './plugins/trimRows';
|
|
44
|
+
import { Settings as DialogSettings } from './plugins/dialog';
|
|
44
45
|
import { Settings as UndoRedoSettings } from './plugins/undoRedo';
|
|
45
46
|
import { EditorType, BaseEditor } from './editors';
|
|
46
47
|
import { RendererType } from './renderers';
|
|
@@ -210,7 +211,7 @@ export interface GridSettings extends Events {
|
|
|
210
211
|
skipColumnOnPaste?: boolean;
|
|
211
212
|
skipRowOnPaste?: boolean;
|
|
212
213
|
sortByRelevance?: boolean;
|
|
213
|
-
source?: string[] | number[] |
|
|
214
|
+
source?: string[] | number[] | ((this: CellProperties, query: string, callback: (items: string[]) => void) => void);
|
|
214
215
|
startCols?: number;
|
|
215
216
|
startRows?: number;
|
|
216
217
|
stretchH?: 'none' | 'all' | 'last';
|
|
@@ -225,10 +226,9 @@ export interface GridSettings extends Events {
|
|
|
225
226
|
trimWhitespace?: boolean;
|
|
226
227
|
type?: CellType | string;
|
|
227
228
|
uncheckedTemplate?: boolean | string | number;
|
|
229
|
+
dialog?: DialogSettings;
|
|
228
230
|
undo?: UndoRedoSettings;
|
|
229
231
|
validator?: BaseValidator | RegExp | ValidatorType | string;
|
|
230
|
-
valueGetter?: (this: Core, value: CellValue, row: number, column: number, cellProperties: CellProperties) => CellValue;
|
|
231
|
-
valueSetter?: (this: Core, value: CellValue, row: number, column: number, cellProperties: CellProperties) => CellValue;
|
|
232
232
|
viewportColumnRenderingOffset?: number | 'auto';
|
|
233
233
|
viewportRowRenderingOffset?: number | 'auto';
|
|
234
234
|
viewportColumnRenderingThreshold?: number | 'auto';
|
package/shortcuts/context.js
CHANGED
|
@@ -34,9 +34,11 @@ function isContextObject(objectToCheck) {
|
|
|
34
34
|
* @alias ShortcutContext
|
|
35
35
|
* @class ShortcutContext
|
|
36
36
|
* @param {string} name The name of the keyboard shortcut context
|
|
37
|
+
* @param {string} [scope='table'] The scope of the shortcut: `'table'` or `'global'`
|
|
37
38
|
* @returns {object}
|
|
38
39
|
*/
|
|
39
|
-
const createContext = name
|
|
40
|
+
const createContext = function (name) {
|
|
41
|
+
let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';
|
|
40
42
|
const SHORTCUTS = (0, _uniqueMap.createUniqueMap)({
|
|
41
43
|
errorIdExists: keys => `The "${keys}" shortcut is already registered in the "${name}" context.`
|
|
42
44
|
});
|
|
@@ -212,6 +214,7 @@ const createContext = name => {
|
|
|
212
214
|
};
|
|
213
215
|
return {
|
|
214
216
|
__kindOf,
|
|
217
|
+
scope,
|
|
215
218
|
addShortcut,
|
|
216
219
|
addShortcuts,
|
|
217
220
|
getShortcuts,
|
package/shortcuts/context.mjs
CHANGED
|
@@ -30,9 +30,11 @@ export function isContextObject(objectToCheck) {
|
|
|
30
30
|
* @alias ShortcutContext
|
|
31
31
|
* @class ShortcutContext
|
|
32
32
|
* @param {string} name The name of the keyboard shortcut context
|
|
33
|
+
* @param {string} [scope='table'] The scope of the shortcut: `'table'` or `'global'`
|
|
33
34
|
* @returns {object}
|
|
34
35
|
*/
|
|
35
|
-
export const createContext = name
|
|
36
|
+
export const createContext = function (name) {
|
|
37
|
+
let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';
|
|
36
38
|
const SHORTCUTS = createUniqueMap({
|
|
37
39
|
errorIdExists: keys => `The "${keys}" shortcut is already registered in the "${name}" context.`
|
|
38
40
|
});
|
|
@@ -208,6 +210,7 @@ export const createContext = name => {
|
|
|
208
210
|
};
|
|
209
211
|
return {
|
|
210
212
|
__kindOf,
|
|
213
|
+
scope,
|
|
211
214
|
addShortcut,
|
|
212
215
|
addShortcuts,
|
|
213
216
|
getShortcuts,
|
package/shortcuts/manager.js
CHANGED
|
@@ -50,10 +50,12 @@ const createShortcutManager = _ref => {
|
|
|
50
50
|
*
|
|
51
51
|
* @memberof ShortcutManager#
|
|
52
52
|
* @param {string} contextName The name of the new shortcut context
|
|
53
|
+
* @param {string} [scope='table'] The scope of the shortcut: `'table'` or `'global'`
|
|
53
54
|
* @returns {object}
|
|
54
55
|
*/
|
|
55
|
-
const addContext = contextName
|
|
56
|
-
|
|
56
|
+
const addContext = function (contextName) {
|
|
57
|
+
let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';
|
|
58
|
+
const context = (0, _context.createContext)(contextName, scope);
|
|
57
59
|
CONTEXTS.addItem(contextName, context);
|
|
58
60
|
return context;
|
|
59
61
|
};
|
|
@@ -153,12 +155,24 @@ const createShortcutManager = _ref => {
|
|
|
153
155
|
return isExecutionCancelled;
|
|
154
156
|
};
|
|
155
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Handle the event with the scope of the active context.
|
|
160
|
+
*
|
|
161
|
+
* @param {KeyboardEvent} event The keyboard event.
|
|
162
|
+
* @returns {boolean}
|
|
163
|
+
*/
|
|
164
|
+
const handleEventWithScope = event => {
|
|
165
|
+
const context = getActiveContextName();
|
|
166
|
+
const activeContext = (0, _context.isContextObject)(context) ? context : getContext(context);
|
|
167
|
+
return handleEvent(event, activeContext.scope);
|
|
168
|
+
};
|
|
169
|
+
|
|
156
170
|
/**
|
|
157
171
|
* Internal key recorder.
|
|
158
172
|
*
|
|
159
173
|
* @private
|
|
160
174
|
*/
|
|
161
|
-
const keyRecorder = (0, _recorder.useRecorder)(ownerWindow,
|
|
175
|
+
const keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEventWithScope, beforeKeyDown, afterKeyDown, recorderCallback);
|
|
162
176
|
keyRecorder.mount();
|
|
163
177
|
return {
|
|
164
178
|
addContext,
|
package/shortcuts/manager.mjs
CHANGED
|
@@ -47,10 +47,12 @@ export const createShortcutManager = _ref => {
|
|
|
47
47
|
*
|
|
48
48
|
* @memberof ShortcutManager#
|
|
49
49
|
* @param {string} contextName The name of the new shortcut context
|
|
50
|
+
* @param {string} [scope='table'] The scope of the shortcut: `'table'` or `'global'`
|
|
50
51
|
* @returns {object}
|
|
51
52
|
*/
|
|
52
|
-
const addContext = contextName
|
|
53
|
-
|
|
53
|
+
const addContext = function (contextName) {
|
|
54
|
+
let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';
|
|
55
|
+
const context = createContext(contextName, scope);
|
|
54
56
|
CONTEXTS.addItem(contextName, context);
|
|
55
57
|
return context;
|
|
56
58
|
};
|
|
@@ -150,12 +152,24 @@ export const createShortcutManager = _ref => {
|
|
|
150
152
|
return isExecutionCancelled;
|
|
151
153
|
};
|
|
152
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Handle the event with the scope of the active context.
|
|
157
|
+
*
|
|
158
|
+
* @param {KeyboardEvent} event The keyboard event.
|
|
159
|
+
* @returns {boolean}
|
|
160
|
+
*/
|
|
161
|
+
const handleEventWithScope = event => {
|
|
162
|
+
const context = getActiveContextName();
|
|
163
|
+
const activeContext = isContextObject(context) ? context : getContext(context);
|
|
164
|
+
return handleEvent(event, activeContext.scope);
|
|
165
|
+
};
|
|
166
|
+
|
|
153
167
|
/**
|
|
154
168
|
* Internal key recorder.
|
|
155
169
|
*
|
|
156
170
|
* @private
|
|
157
171
|
*/
|
|
158
|
-
const keyRecorder = useRecorder(ownerWindow,
|
|
172
|
+
const keyRecorder = useRecorder(ownerWindow, handleEventWithScope, beforeKeyDown, afterKeyDown, recorderCallback);
|
|
159
173
|
keyRecorder.mount();
|
|
160
174
|
return {
|
|
161
175
|
addContext,
|
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: 0.0.0-next-
|
|
29
|
-
* Release date: 10/07/2025 (built at
|
|
28
|
+
* Version: 0.0.0-next-fce5825-20250822
|
|
29
|
+
* Release date: 10/07/2025 (built at 22/08/2025 10:30:06)
|
|
30
30
|
*/
|
|
31
31
|
.ht-root-wrapper:not([class*=ht-theme]),
|
|
32
32
|
.ht-portal:not([class*=ht-theme]) {
|
|
@@ -58,9 +58,13 @@
|
|
|
58
58
|
|
|
59
59
|
.ht-root-wrapper {
|
|
60
60
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Helvetica Neue, Arial, sans-serif;
|
|
61
|
+
position: relative;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
61
64
|
height: 100%;
|
|
62
65
|
}
|
|
63
|
-
|
|
66
|
+
|
|
67
|
+
.htFocusCatcher {
|
|
64
68
|
position: absolute;
|
|
65
69
|
width: 0;
|
|
66
70
|
height: 0;
|
|
@@ -71,6 +75,11 @@
|
|
|
71
75
|
z-index: -1;
|
|
72
76
|
}
|
|
73
77
|
|
|
78
|
+
.ht-grid {
|
|
79
|
+
flex: 1 1 auto;
|
|
80
|
+
min-height: 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
74
83
|
.handsontable {
|
|
75
84
|
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Helvetica Neue, Arial, sans-serif;
|
|
76
85
|
position: relative;
|
|
@@ -2401,7 +2410,82 @@
|
|
|
2401
2410
|
display: block;
|
|
2402
2411
|
}
|
|
2403
2412
|
|
|
2404
|
-
.
|
|
2413
|
+
.ht-dialog {
|
|
2414
|
+
position: absolute;
|
|
2415
|
+
top: 0;
|
|
2416
|
+
left: 0;
|
|
2417
|
+
display: none;
|
|
2418
|
+
font-size: var(--ht-font-size);
|
|
2419
|
+
line-height: var(--ht-line-height);
|
|
2420
|
+
letter-spacing: var(--ht-letter-spacing);
|
|
2421
|
+
width: 100%;
|
|
2422
|
+
height: 100%;
|
|
2423
|
+
z-index: 1060;
|
|
2424
|
+
opacity: 0;
|
|
2425
|
+
overflow-y: auto;
|
|
2426
|
+
border-radius: var(--ht-wrapper-border-radius);
|
|
2427
|
+
border: 1px solid var(--ht-border-color);
|
|
2428
|
+
box-sizing: border-box !important;
|
|
2429
|
+
}
|
|
2430
|
+
.ht-dialog[dir=rtl] {
|
|
2431
|
+
left: auto;
|
|
2432
|
+
right: 0;
|
|
2433
|
+
}
|
|
2434
|
+
.ht-dialog:has(.htFocusCatcher:focus) {
|
|
2435
|
+
border: 1px solid var(--ht-accent-color);
|
|
2436
|
+
outline: none;
|
|
2437
|
+
}
|
|
2438
|
+
.ht-dialog * {
|
|
2439
|
+
box-sizing: border-box !important;
|
|
2440
|
+
}
|
|
2441
|
+
.ht-dialog--background-solid {
|
|
2442
|
+
background-color: var(--ht-dialog-solid-background-color);
|
|
2443
|
+
}
|
|
2444
|
+
.ht-dialog--background-semi-transparent {
|
|
2445
|
+
background-color: var(--ht-dialog-semi-transparent-background-color);
|
|
2446
|
+
}
|
|
2447
|
+
.ht-dialog--animation {
|
|
2448
|
+
transition: opacity var(--ht-table-transition) ease-in-out;
|
|
2449
|
+
}
|
|
2450
|
+
.ht-dialog--show {
|
|
2451
|
+
opacity: 1;
|
|
2452
|
+
}
|
|
2453
|
+
.ht-dialog__content-wrapper {
|
|
2454
|
+
display: flex;
|
|
2455
|
+
align-items: center;
|
|
2456
|
+
justify-content: center;
|
|
2457
|
+
width: 100%;
|
|
2458
|
+
min-height: 100%;
|
|
2459
|
+
padding: calc(var(--ht-gap-size) * 4);
|
|
2460
|
+
border-radius: var(--ht-wrapper-border-radius);
|
|
2461
|
+
}
|
|
2462
|
+
.ht-dialog__content {
|
|
2463
|
+
position: relative;
|
|
2464
|
+
padding: var(--ht-dialog-content-padding-horizontal) var(--ht-dialog-content-padding-vertical);
|
|
2465
|
+
display: flex;
|
|
2466
|
+
gap: var(--ht-dialog-content-gap);
|
|
2467
|
+
max-width: 480px;
|
|
2468
|
+
color: var(--ht-foreground-color);
|
|
2469
|
+
}
|
|
2470
|
+
.ht-dialog__content--background {
|
|
2471
|
+
box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) var(--ht-shadow-color, rgba(0, 0, 0, 0.08));
|
|
2472
|
+
border-radius: var(--ht-dialog-content-border-radius);
|
|
2473
|
+
background-color: var(--ht-dialog-content-background-color);
|
|
2474
|
+
}
|
|
2475
|
+
.ht-dialog__content--flex-row {
|
|
2476
|
+
flex-direction: row;
|
|
2477
|
+
}
|
|
2478
|
+
.ht-dialog__content--flex-row-reverse {
|
|
2479
|
+
flex-direction: row-reverse;
|
|
2480
|
+
}
|
|
2481
|
+
.ht-dialog__content--flex-column {
|
|
2482
|
+
flex-direction: column;
|
|
2483
|
+
}
|
|
2484
|
+
.ht-dialog__content--flex-column-reverse {
|
|
2485
|
+
flex-direction: column-reverse;
|
|
2486
|
+
}
|
|
2487
|
+
|
|
2488
|
+
.handsontable.ht-pagination {
|
|
2405
2489
|
color: var(--ht-pagination-bar-foreground-color);
|
|
2406
2490
|
background: var(--ht-pagination-bar-background-color);
|
|
2407
2491
|
border: 1px solid var(--ht-wrapper-border-color);
|
|
@@ -2412,10 +2496,10 @@
|
|
|
2412
2496
|
box-sizing: border-box;
|
|
2413
2497
|
overflow-x: auto;
|
|
2414
2498
|
}
|
|
2415
|
-
.handsontable.ht-pagination
|
|
2499
|
+
.handsontable.ht-pagination--bordered {
|
|
2416
2500
|
border-top-color: var(--ht-wrapper-border-color);
|
|
2417
2501
|
}
|
|
2418
|
-
.handsontable.ht-pagination
|
|
2502
|
+
.handsontable.ht-pagination .ht-pagination__inner {
|
|
2419
2503
|
display: flex;
|
|
2420
2504
|
justify-content: space-between;
|
|
2421
2505
|
align-items: center;
|
|
@@ -2426,20 +2510,20 @@
|
|
|
2426
2510
|
padding-block: var(--ht-pagination-bar-vertical-padding);
|
|
2427
2511
|
min-width: 230px;
|
|
2428
2512
|
}
|
|
2429
|
-
.handsontable.ht-pagination
|
|
2513
|
+
.handsontable.ht-pagination .ht-page-size-section {
|
|
2430
2514
|
display: flex;
|
|
2431
2515
|
align-items: center;
|
|
2432
2516
|
gap: calc(var(--ht-gap-size) * 2);
|
|
2433
2517
|
}
|
|
2434
|
-
.handsontable.ht-pagination
|
|
2518
|
+
.handsontable.ht-pagination .ht-page-size-section__label {
|
|
2435
2519
|
white-space: nowrap;
|
|
2436
2520
|
}
|
|
2437
|
-
.handsontable.ht-pagination
|
|
2521
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper {
|
|
2438
2522
|
position: relative;
|
|
2439
2523
|
border-radius: var(--ht-input-border-radius);
|
|
2440
2524
|
border: 1px solid var(--ht-input-border-color);
|
|
2441
2525
|
}
|
|
2442
|
-
.handsontable.ht-pagination
|
|
2526
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper select {
|
|
2443
2527
|
padding-inline-start: var(--ht-gap-size);
|
|
2444
2528
|
padding-inline-end: calc(var(--ht-gap-size) + var(--ht-icon-size));
|
|
2445
2529
|
padding-top: var(--ht-gap-size);
|
|
@@ -2453,18 +2537,18 @@
|
|
|
2453
2537
|
font-size: inherit;
|
|
2454
2538
|
cursor: pointer;
|
|
2455
2539
|
}
|
|
2456
|
-
.handsontable.ht-pagination
|
|
2540
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:disabled {
|
|
2457
2541
|
opacity: 0.4;
|
|
2458
2542
|
cursor: default;
|
|
2459
2543
|
}
|
|
2460
|
-
.handsontable.ht-pagination
|
|
2544
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:hover:not(:disabled) {
|
|
2461
2545
|
background-color: var(--ht-secondary-button-hover-background-color);
|
|
2462
2546
|
}
|
|
2463
|
-
.handsontable.ht-pagination
|
|
2547
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:focus {
|
|
2464
2548
|
background-color: var(--ht-input-focus-background-color);
|
|
2465
2549
|
outline: 1px solid var(--ht-accent-color);
|
|
2466
2550
|
}
|
|
2467
|
-
.handsontable.ht-pagination
|
|
2551
|
+
.handsontable.ht-pagination .ht-page-size-section__select-wrapper::after {
|
|
2468
2552
|
content: "";
|
|
2469
2553
|
display: block;
|
|
2470
2554
|
position: absolute;
|
|
@@ -2474,15 +2558,15 @@
|
|
|
2474
2558
|
background-color: var(--ht-foreground-color);
|
|
2475
2559
|
pointer-events: none;
|
|
2476
2560
|
}
|
|
2477
|
-
.handsontable.ht-pagination
|
|
2561
|
+
.handsontable.ht-pagination .ht-page-counter-section {
|
|
2478
2562
|
margin-inline-end: auto;
|
|
2479
2563
|
}
|
|
2480
|
-
.handsontable.ht-pagination
|
|
2564
|
+
.handsontable.ht-pagination .ht-page-navigation-section {
|
|
2481
2565
|
display: flex;
|
|
2482
2566
|
align-items: center;
|
|
2483
2567
|
gap: 1px;
|
|
2484
2568
|
}
|
|
2485
|
-
.handsontable.ht-pagination
|
|
2569
|
+
.handsontable.ht-pagination .ht-page-navigation-section__button {
|
|
2486
2570
|
font-size: inherit;
|
|
2487
2571
|
color: var(--ht-foreground-color);
|
|
2488
2572
|
background-color: var(--ht-pagination-bar-background-color);
|
|
@@ -2491,22 +2575,22 @@
|
|
|
2491
2575
|
padding: var(--ht-icon-button-large-padding);
|
|
2492
2576
|
cursor: pointer;
|
|
2493
2577
|
}
|
|
2494
|
-
.handsontable.ht-pagination
|
|
2578
|
+
.handsontable.ht-pagination .ht-page-navigation-section__button::before {
|
|
2495
2579
|
content: "";
|
|
2496
2580
|
display: block;
|
|
2497
2581
|
}
|
|
2498
|
-
.handsontable.ht-pagination
|
|
2582
|
+
.handsontable.ht-pagination .ht-page-navigation-section__button--disabled {
|
|
2499
2583
|
opacity: 0.4;
|
|
2500
2584
|
cursor: default;
|
|
2501
2585
|
pointer-events: none;
|
|
2502
2586
|
}
|
|
2503
|
-
.handsontable.ht-pagination
|
|
2587
|
+
.handsontable.ht-pagination .ht-page-navigation-section__button:hover:not(:disabled) {
|
|
2504
2588
|
background-color: var(--ht-input-hover-background-color);
|
|
2505
2589
|
}
|
|
2506
|
-
.handsontable.ht-pagination
|
|
2590
|
+
.handsontable.ht-pagination .ht-page-navigation-section__button:focus {
|
|
2507
2591
|
outline: 1px solid var(--ht-accent-color);
|
|
2508
2592
|
}
|
|
2509
|
-
.handsontable.ht-pagination
|
|
2593
|
+
.handsontable.ht-pagination .ht-page-navigation-section__label {
|
|
2510
2594
|
white-space: nowrap;
|
|
2511
2595
|
min-width: 100px;
|
|
2512
2596
|
text-align: center;
|