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.

Files changed (126) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/cellTypes/autocompleteType/autocompleteType.js +1 -4
  4. package/cellTypes/autocompleteType/autocompleteType.mjs +1 -4
  5. package/cellTypes/checkboxType/checkboxType.js +1 -3
  6. package/cellTypes/checkboxType/checkboxType.mjs +1 -3
  7. package/cellTypes/dropdownType/dropdownType.js +1 -4
  8. package/cellTypes/dropdownType/dropdownType.mjs +1 -4
  9. package/cellTypes/numericType/numericType.js +1 -3
  10. package/cellTypes/numericType/numericType.mjs +1 -3
  11. package/core/focusCatcher/index.js +37 -20
  12. package/core/focusCatcher/index.mjs +37 -20
  13. package/core/focusCatcher/utils.js +3 -64
  14. package/core/focusCatcher/utils.mjs +1 -60
  15. package/core/hooks/constants.js +58 -0
  16. package/core/hooks/constants.mjs +58 -0
  17. package/core/hooks/index.d.ts +7 -0
  18. package/core.d.ts +0 -1
  19. package/core.js +59 -55
  20. package/core.mjs +61 -57
  21. package/dataMap/dataMap.js +3 -13
  22. package/dataMap/dataMap.mjs +4 -14
  23. package/dataMap/dataSource.js +0 -16
  24. package/dataMap/dataSource.mjs +0 -16
  25. package/dataMap/metaManager/lazyFactoryMap.js +3 -4
  26. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -2
  27. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -3
  28. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -3
  29. package/dataMap/metaManager/metaSchema.js +97 -68
  30. package/dataMap/metaManager/metaSchema.mjs +97 -68
  31. package/dataMap/metaManager/utils.js +11 -0
  32. package/dataMap/metaManager/utils.mjs +10 -0
  33. package/dist/handsontable.css +103 -5
  34. package/dist/handsontable.full.css +103 -5
  35. package/dist/handsontable.full.js +2770 -1954
  36. package/dist/handsontable.full.min.css +3 -3
  37. package/dist/handsontable.full.min.js +67 -67
  38. package/dist/handsontable.js +2772 -1956
  39. package/dist/handsontable.min.css +3 -3
  40. package/dist/handsontable.min.js +27 -27
  41. package/editors/autocompleteEditor/autocompleteEditor.js +8 -33
  42. package/editors/autocompleteEditor/autocompleteEditor.mjs +9 -34
  43. package/editors/baseEditor/baseEditor.js +2 -2
  44. package/editors/baseEditor/baseEditor.mjs +2 -2
  45. package/helpers/a11y.js +5 -1
  46. package/helpers/a11y.mjs +3 -1
  47. package/helpers/mixed.js +64 -1
  48. package/helpers/mixed.mjs +62 -1
  49. package/helpers/number.js +0 -28
  50. package/helpers/number.mjs +0 -26
  51. package/helpers/string.js +0 -19
  52. package/helpers/string.mjs +0 -18
  53. package/index.d.ts +9 -0
  54. package/package.json +6 -1
  55. package/plugins/autofill/autofill.js +3 -50
  56. package/plugins/autofill/autofill.mjs +3 -50
  57. package/plugins/base/base.js +75 -14
  58. package/plugins/base/base.mjs +75 -14
  59. package/plugins/contextMenu/contextMenu.js +1 -0
  60. package/plugins/contextMenu/contextMenu.mjs +1 -0
  61. package/plugins/copyPaste/copyPaste.js +28 -61
  62. package/plugins/copyPaste/copyPaste.mjs +29 -62
  63. package/plugins/dialog/dialog.d.ts +23 -0
  64. package/plugins/dialog/dialog.js +469 -0
  65. package/plugins/dialog/dialog.mjs +465 -0
  66. package/plugins/dialog/index.d.ts +1 -0
  67. package/plugins/dialog/index.js +7 -0
  68. package/plugins/dialog/index.mjs +1 -0
  69. package/plugins/dialog/ui.js +240 -0
  70. package/plugins/dialog/ui.mjs +235 -0
  71. package/plugins/dropdownMenu/dropdownMenu.js +1 -0
  72. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -0
  73. package/plugins/index.d.ts +3 -0
  74. package/plugins/index.js +3 -0
  75. package/plugins/index.mjs +3 -1
  76. package/plugins/pagination/focusController.js +27 -0
  77. package/plugins/pagination/focusController.mjs +23 -0
  78. package/plugins/pagination/pagination.js +165 -18
  79. package/plugins/pagination/pagination.mjs +165 -18
  80. package/plugins/pagination/ui.js +101 -62
  81. package/plugins/pagination/ui.mjs +102 -63
  82. package/selection/range.js +11 -0
  83. package/selection/range.mjs +11 -0
  84. package/selection/selection.js +63 -2
  85. package/selection/selection.mjs +63 -2
  86. package/selection/utils.js +2 -1
  87. package/selection/utils.mjs +2 -1
  88. package/settings.d.ts +3 -3
  89. package/shortcuts/context.js +4 -1
  90. package/shortcuts/context.mjs +4 -1
  91. package/shortcuts/manager.js +17 -3
  92. package/shortcuts/manager.mjs +17 -3
  93. package/styles/handsontable.css +106 -22
  94. package/styles/handsontable.min.css +3 -3
  95. package/styles/ht-theme-horizon.css +24 -6
  96. package/styles/ht-theme-horizon.min.css +3 -3
  97. package/styles/ht-theme-main.css +52 -34
  98. package/styles/ht-theme-main.min.css +3 -3
  99. package/tableView.js +7 -2
  100. package/tableView.mjs +7 -2
  101. package/{core/focusCatcher → utils}/focusDetector.js +29 -11
  102. package/{core/focusCatcher → utils}/focusDetector.mjs +29 -11
  103. package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
  104. package/validators/autocompleteValidator/autocompleteValidator.mjs +1 -2
  105. package/cellTypes/autocompleteType/accessors/index.js +0 -7
  106. package/cellTypes/autocompleteType/accessors/index.mjs +0 -2
  107. package/cellTypes/autocompleteType/accessors/valueGetter.js +0 -14
  108. package/cellTypes/autocompleteType/accessors/valueGetter.mjs +0 -10
  109. package/cellTypes/autocompleteType/accessors/valueSetter.js +0 -25
  110. package/cellTypes/autocompleteType/accessors/valueSetter.mjs +0 -21
  111. package/cellTypes/checkboxType/accessors/index.js +0 -5
  112. package/cellTypes/checkboxType/accessors/index.mjs +0 -1
  113. package/cellTypes/checkboxType/accessors/valueSetter.js +0 -26
  114. package/cellTypes/checkboxType/accessors/valueSetter.mjs +0 -22
  115. package/cellTypes/dropdownType/accessors/index.js +0 -7
  116. package/cellTypes/dropdownType/accessors/index.mjs +0 -2
  117. package/cellTypes/dropdownType/accessors/valueGetter.js +0 -14
  118. package/cellTypes/dropdownType/accessors/valueGetter.mjs +0 -10
  119. package/cellTypes/dropdownType/accessors/valueSetter.js +0 -17
  120. package/cellTypes/dropdownType/accessors/valueSetter.mjs +0 -13
  121. package/cellTypes/numericType/accessors/index.js +0 -5
  122. package/cellTypes/numericType/accessors/index.mjs +0 -1
  123. package/cellTypes/numericType/accessors/valueSetter.js +0 -19
  124. package/cellTypes/numericType/accessors/valueSetter.mjs +0 -15
  125. package/utils/valueAccessors.js +0 -45
  126. package/utils/valueAccessors.mjs +0 -40
@@ -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
@@ -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(from, from, to);
124
+ return createCellRange(highlight, from, to);
124
125
  };
125
126
  }
126
127
 
@@ -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(from, from, to);
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[] | { key: any, value: any }[] | ((this: CellProperties, query: string, callback: (items: string[]) => void) => void);
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';
@@ -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,
@@ -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,
@@ -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
- const context = (0, _context.createContext)(contextName);
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, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
175
+ const keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEventWithScope, beforeKeyDown, afterKeyDown, recorderCallback);
162
176
  keyRecorder.mount();
163
177
  return {
164
178
  addContext,
@@ -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
- const context = createContext(contextName);
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, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
172
+ const keyRecorder = useRecorder(ownerWindow, handleEventWithScope, beforeKeyDown, afterKeyDown, recorderCallback);
159
173
  keyRecorder.mount();
160
174
  return {
161
175
  addContext,
@@ -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-2c41c5b-20250814
29
- * Release date: 10/07/2025 (built at 14/08/2025 13:37:28)
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
- .ht-root-wrapper .htFocusCatcher {
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
- .handsontable.ht-pagination-container {
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-container--bordered {
2499
+ .handsontable.ht-pagination--bordered {
2416
2500
  border-top-color: var(--ht-wrapper-border-color);
2417
2501
  }
2418
- .handsontable.ht-pagination-container .ht-pagination-container__inner {
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-container .ht-page-size-section {
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-container .ht-page-size-section__label {
2518
+ .handsontable.ht-pagination .ht-page-size-section__label {
2435
2519
  white-space: nowrap;
2436
2520
  }
2437
- .handsontable.ht-pagination-container .ht-page-size-section__select-wrapper {
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-container .ht-page-size-section__select-wrapper select {
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-container .ht-page-size-section__select-wrapper select:disabled {
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-container .ht-page-size-section__select-wrapper select:hover:not(:disabled) {
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-container .ht-page-size-section__select-wrapper select:focus {
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-container .ht-page-size-section__select-wrapper::after {
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-container .ht-page-counter-section {
2561
+ .handsontable.ht-pagination .ht-page-counter-section {
2478
2562
  margin-inline-end: auto;
2479
2563
  }
2480
- .handsontable.ht-pagination-container .ht-page-navigation-section {
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-container .ht-page-navigation-section__button {
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-container .ht-page-navigation-section__button::before {
2578
+ .handsontable.ht-pagination .ht-page-navigation-section__button::before {
2495
2579
  content: "";
2496
2580
  display: block;
2497
2581
  }
2498
- .handsontable.ht-pagination-container .ht-page-navigation-section__button--disabled {
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-container .ht-page-navigation-section__button:hover:not(:disabled) {
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-container .ht-page-navigation-section__button:focus {
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-container .ht-page-navigation-section__label {
2593
+ .handsontable.ht-pagination .ht-page-navigation-section__label {
2510
2594
  white-space: nowrap;
2511
2595
  min-width: 100px;
2512
2596
  text-align: center;