handsontable 0.0.0-next-c81ae8e-20231123 → 0.0.0-next-b86a8be-20231123

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 (65) hide show
  1. package/3rdparty/walkontable/src/selection/manager.js +31 -14
  2. package/3rdparty/walkontable/src/selection/manager.mjs +31 -14
  3. package/base.js +2 -2
  4. package/base.mjs +2 -2
  5. package/core.js +1 -1
  6. package/core.mjs +1 -1
  7. package/dist/handsontable.css +62 -44
  8. package/dist/handsontable.full.css +62 -44
  9. package/dist/handsontable.full.js +93 -289
  10. package/dist/handsontable.full.min.css +5 -5
  11. package/dist/handsontable.full.min.js +101 -101
  12. package/dist/handsontable.js +93 -289
  13. package/dist/handsontable.min.css +5 -5
  14. package/dist/handsontable.min.js +32 -32
  15. package/dist/languages/all.js +2 -24
  16. package/dist/languages/all.min.js +1 -1
  17. package/dist/languages/en-US.js +1 -12
  18. package/dist/languages/en-US.min.js +1 -1
  19. package/dist/languages/pl-PL.js +1 -12
  20. package/dist/languages/pl-PL.min.js +1 -1
  21. package/helpers/a11y.js +0 -2
  22. package/helpers/a11y.mjs +0 -1
  23. package/helpers/dom/element.js +0 -29
  24. package/helpers/dom/element.mjs +0 -28
  25. package/helpers/mixed.js +1 -1
  26. package/helpers/mixed.mjs +1 -1
  27. package/i18n/constants.js +1 -27
  28. package/i18n/constants.mjs +1 -14
  29. package/i18n/languages/en-US.js +1 -12
  30. package/i18n/languages/en-US.mjs +1 -12
  31. package/i18n/languages/pl-PL.js +1 -12
  32. package/i18n/languages/pl-PL.mjs +1 -12
  33. package/languages/all.js +2 -24
  34. package/languages/en-US.js +1 -12
  35. package/languages/en-US.mjs +1 -12
  36. package/languages/index.js +2 -24
  37. package/languages/pl-PL.js +1 -12
  38. package/languages/pl-PL.mjs +1 -12
  39. package/package.json +1 -1
  40. package/plugins/collapsibleColumns/collapsibleColumns.js +2 -3
  41. package/plugins/collapsibleColumns/collapsibleColumns.mjs +3 -4
  42. package/plugins/columnSorting/columnSorting.js +4 -30
  43. package/plugins/columnSorting/columnSorting.mjs +6 -32
  44. package/plugins/contextMenu/menu/menuItemRenderer.js +0 -12
  45. package/plugins/contextMenu/menu/menuItemRenderer.mjs +2 -14
  46. package/plugins/dropdownMenu/dropdownMenu.js +1 -2
  47. package/plugins/dropdownMenu/dropdownMenu.mjs +2 -3
  48. package/plugins/filters/ui/input.js +3 -0
  49. package/plugins/filters/ui/input.mjs +3 -0
  50. package/plugins/filters/ui/select.js +0 -6
  51. package/plugins/filters/ui/select.mjs +0 -6
  52. package/plugins/hiddenColumns/hiddenColumns.js +1 -45
  53. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -45
  54. package/plugins/hiddenRows/hiddenRows.js +1 -45
  55. package/plugins/hiddenRows/hiddenRows.mjs +1 -45
  56. package/plugins/multiColumnSorting/multiColumnSorting.js +0 -21
  57. package/plugins/multiColumnSorting/multiColumnSorting.mjs +1 -22
  58. package/plugins/nestedRows/nestedRows.js +1 -2
  59. package/plugins/nestedRows/nestedRows.mjs +1 -2
  60. package/plugins/nestedRows/ui/headers.js +3 -3
  61. package/plugins/nestedRows/ui/headers.mjs +4 -4
  62. package/selection/highlight/types/focus.js +6 -0
  63. package/selection/highlight/types/focus.mjs +6 -0
  64. package/tableView.js +2 -0
  65. package/tableView.mjs +2 -0
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ require("core-js/modules/es.array.push.js");
4
5
  require("core-js/modules/es.array.unscopables.flat.js");
5
6
  require("core-js/modules/es.error.cause.js");
6
7
  var _element = require("../../../../helpers/dom/element");
@@ -189,10 +190,13 @@ class SelectionManager {
189
190
  }
190
191
  const selections = Array.from(_classPrivateFieldGet(this, _selections));
191
192
  const classNamesMap = new Map();
193
+ const focusedHeaderAttributesMap = new Map();
192
194
  for (let i = 0; i < selections.length; i++) {
193
195
  const selection = selections[i];
194
196
  const {
195
197
  className,
198
+ cellAttributes,
199
+ focusedHeaderAttributes,
196
200
  createLayers,
197
201
  selectionType
198
202
  } = selection.settings;
@@ -206,18 +210,28 @@ class SelectionManager {
206
210
  continue; // eslint-disable-line no-continue
207
211
  }
208
212
 
209
- if (className) {
213
+ if (className || cellAttributes || selectionType === 'focus' && focusedHeaderAttributes) {
210
214
  const elements = _classPrivateFieldGet(this, _scanner).setActiveSelection(selection).scan();
211
215
  elements.forEach(element => {
212
- if (classNamesMap.has(element)) {
213
- const classNamesLayers = classNamesMap.get(element);
214
- if (classNamesLayers.has(className) && createLayers === true) {
215
- classNamesLayers.set(className, classNamesLayers.get(className) + 1);
216
+ if (className) {
217
+ if (classNamesMap.has(element)) {
218
+ const classNamesLayers = classNamesMap.get(element);
219
+ if (classNamesLayers.has(className) && createLayers === true) {
220
+ classNamesLayers.set(className, classNamesLayers.get(className) + 1);
221
+ } else {
222
+ classNamesLayers.set(className, 1);
223
+ }
216
224
  } else {
217
- classNamesLayers.set(className, 1);
225
+ classNamesMap.set(element, new Map([[className, 1]]));
226
+ }
227
+ }
228
+ if (selectionType === 'focus' && focusedHeaderAttributes) {
229
+ if (!focusedHeaderAttributesMap.has(element)) {
230
+ focusedHeaderAttributesMap.set(element, []);
231
+ }
232
+ if (element.nodeName === 'TH') {
233
+ focusedHeaderAttributesMap.get(element).push(...focusedHeaderAttributes);
218
234
  }
219
- } else {
220
- classNamesMap.set(element, new Map([[className, 1]]));
221
235
  }
222
236
  });
223
237
  }
@@ -226,7 +240,7 @@ class SelectionManager {
226
240
  borderInstance === null || borderInstance === void 0 || borderInstance.appear(corners);
227
241
  }
228
242
  classNamesMap.forEach((classNamesLayers, element) => {
229
- var _classPrivateFieldGet4, _classPrivateFieldGet5;
243
+ var _classPrivateFieldGet4;
230
244
  const classNames = Array.from(classNamesLayers).map(_ref => {
231
245
  let [className, occurrenceCount] = _ref;
232
246
  if (occurrenceCount === 1) {
@@ -240,10 +254,13 @@ class SelectionManager {
240
254
  (0, _element.addClass)(element, classNames);
241
255
  if (element.nodeName === 'TD' && Array.isArray((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.cellAttributes)) {
242
256
  (0, _element.setAttribute)(element, _classPrivateFieldGet(this, _selections).options.cellAttributes);
243
- } else if (element.nodeName === 'TH' && Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.headerAttributes)) {
244
- (0, _element.setAttribute)(element, _classPrivateFieldGet(this, _selections).options.headerAttributes);
245
257
  }
246
258
  });
259
+
260
+ // Set the attributes for the headers if they're focused.
261
+ Array.from(focusedHeaderAttributesMap.keys()).forEach(element => {
262
+ (0, _element.setAttribute)(element, [...focusedHeaderAttributesMap.get(element)]);
263
+ });
247
264
  }
248
265
  }
249
266
  exports.SelectionManager = SelectionManager;
@@ -256,13 +273,13 @@ function _resetCells2() {
256
273
  }
257
274
  }
258
275
  appliedOverlaysClasses.forEach(className => {
259
- var _classPrivateFieldGet6, _classPrivateFieldGet7;
276
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
260
277
  const nodes = _classPrivateFieldGet(this, _activeOverlaysWot).wtTable.TABLE.querySelectorAll(`.${className}`);
261
278
  let cellAttributes = [];
262
- if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.cellAttributes)) {
279
+ if (Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.cellAttributes)) {
263
280
  cellAttributes = _classPrivateFieldGet(this, _selections).options.cellAttributes.map(el => el[0]);
264
281
  }
265
- if (Array.isArray((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.headerAttributes)) {
282
+ if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.headerAttributes)) {
266
283
  cellAttributes = [...cellAttributes, ..._classPrivateFieldGet(this, _selections).options.headerAttributes.map(el => el[0])];
267
284
  }
268
285
  for (let i = 0, len = nodes.length; i < len; i++) {
@@ -1,3 +1,4 @@
1
+ import "core-js/modules/es.array.push.js";
1
2
  import "core-js/modules/es.array.unscopables.flat.js";
2
3
  import "core-js/modules/es.error.cause.js";
3
4
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -185,10 +186,13 @@ export class SelectionManager {
185
186
  }
186
187
  const selections = Array.from(_classPrivateFieldGet(this, _selections));
187
188
  const classNamesMap = new Map();
189
+ const focusedHeaderAttributesMap = new Map();
188
190
  for (let i = 0; i < selections.length; i++) {
189
191
  const selection = selections[i];
190
192
  const {
191
193
  className,
194
+ cellAttributes,
195
+ focusedHeaderAttributes,
192
196
  createLayers,
193
197
  selectionType
194
198
  } = selection.settings;
@@ -202,18 +206,28 @@ export class SelectionManager {
202
206
  continue; // eslint-disable-line no-continue
203
207
  }
204
208
 
205
- if (className) {
209
+ if (className || cellAttributes || selectionType === 'focus' && focusedHeaderAttributes) {
206
210
  const elements = _classPrivateFieldGet(this, _scanner).setActiveSelection(selection).scan();
207
211
  elements.forEach(element => {
208
- if (classNamesMap.has(element)) {
209
- const classNamesLayers = classNamesMap.get(element);
210
- if (classNamesLayers.has(className) && createLayers === true) {
211
- classNamesLayers.set(className, classNamesLayers.get(className) + 1);
212
+ if (className) {
213
+ if (classNamesMap.has(element)) {
214
+ const classNamesLayers = classNamesMap.get(element);
215
+ if (classNamesLayers.has(className) && createLayers === true) {
216
+ classNamesLayers.set(className, classNamesLayers.get(className) + 1);
217
+ } else {
218
+ classNamesLayers.set(className, 1);
219
+ }
212
220
  } else {
213
- classNamesLayers.set(className, 1);
221
+ classNamesMap.set(element, new Map([[className, 1]]));
222
+ }
223
+ }
224
+ if (selectionType === 'focus' && focusedHeaderAttributes) {
225
+ if (!focusedHeaderAttributesMap.has(element)) {
226
+ focusedHeaderAttributesMap.set(element, []);
227
+ }
228
+ if (element.nodeName === 'TH') {
229
+ focusedHeaderAttributesMap.get(element).push(...focusedHeaderAttributes);
214
230
  }
215
- } else {
216
- classNamesMap.set(element, new Map([[className, 1]]));
217
231
  }
218
232
  });
219
233
  }
@@ -222,7 +236,7 @@ export class SelectionManager {
222
236
  borderInstance === null || borderInstance === void 0 || borderInstance.appear(corners);
223
237
  }
224
238
  classNamesMap.forEach((classNamesLayers, element) => {
225
- var _classPrivateFieldGet4, _classPrivateFieldGet5;
239
+ var _classPrivateFieldGet4;
226
240
  const classNames = Array.from(classNamesLayers).map(_ref => {
227
241
  let [className, occurrenceCount] = _ref;
228
242
  if (occurrenceCount === 1) {
@@ -236,10 +250,13 @@ export class SelectionManager {
236
250
  addClass(element, classNames);
237
251
  if (element.nodeName === 'TD' && Array.isArray((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.cellAttributes)) {
238
252
  setAttribute(element, _classPrivateFieldGet(this, _selections).options.cellAttributes);
239
- } else if (element.nodeName === 'TH' && Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.headerAttributes)) {
240
- setAttribute(element, _classPrivateFieldGet(this, _selections).options.headerAttributes);
241
253
  }
242
254
  });
255
+
256
+ // Set the attributes for the headers if they're focused.
257
+ Array.from(focusedHeaderAttributesMap.keys()).forEach(element => {
258
+ setAttribute(element, [...focusedHeaderAttributesMap.get(element)]);
259
+ });
243
260
  }
244
261
  }
245
262
  function _resetCells2() {
@@ -251,13 +268,13 @@ function _resetCells2() {
251
268
  }
252
269
  }
253
270
  appliedOverlaysClasses.forEach(className => {
254
- var _classPrivateFieldGet6, _classPrivateFieldGet7;
271
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
255
272
  const nodes = _classPrivateFieldGet(this, _activeOverlaysWot).wtTable.TABLE.querySelectorAll(`.${className}`);
256
273
  let cellAttributes = [];
257
- if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.cellAttributes)) {
274
+ if (Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.cellAttributes)) {
258
275
  cellAttributes = _classPrivateFieldGet(this, _selections).options.cellAttributes.map(el => el[0]);
259
276
  }
260
- if (Array.isArray((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.headerAttributes)) {
277
+ if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.headerAttributes)) {
261
278
  cellAttributes = [...cellAttributes, ..._classPrivateFieldGet(this, _selections).options.headerAttributes.map(el => el[0])];
262
279
  }
263
280
  for (let i = 0, len = nodes.length; i < len; i++) {
package/base.js CHANGED
@@ -43,8 +43,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43
43
  Handsontable.CellCoords = _src.CellCoords;
44
44
  Handsontable.CellRange = _src.CellRange;
45
45
  Handsontable.packageName = 'handsontable';
46
- Handsontable.buildDate = "23/11/2023 08:00:00";
47
- Handsontable.version = "0.0.0-next-c81ae8e-20231123";
46
+ Handsontable.buildDate = "23/11/2023 12:44:41";
47
+ Handsontable.version = "0.0.0-next-b86a8be-20231123";
48
48
  Handsontable.languages = {
49
49
  dictionaryKeys: _registry.dictionaryKeys,
50
50
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "23/11/2023 08:00:06";
39
- Handsontable.version = "0.0.0-next-c81ae8e-20231123";
38
+ Handsontable.buildDate = "23/11/2023 12:44:47";
39
+ Handsontable.version = "0.0.0-next-b86a8be-20231123";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
package/core.js CHANGED
@@ -4428,7 +4428,7 @@ function Core(rootElement, userSettings) {
4428
4428
  * @function getTranslatedPhrase
4429
4429
  * @since 0.35.0
4430
4430
  * @param {string} dictionaryKey Constant which is dictionary key.
4431
- * @param {*} [extraArguments] Arguments which will be handled by formatters.
4431
+ * @param {*} extraArguments Arguments which will be handled by formatters.
4432
4432
  * @returns {string}
4433
4433
  */
4434
4434
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
package/core.mjs CHANGED
@@ -4423,7 +4423,7 @@ export default function Core(rootElement, userSettings) {
4423
4423
  * @function getTranslatedPhrase
4424
4424
  * @since 0.35.0
4425
4425
  * @param {string} dictionaryKey Constant which is dictionary key.
4426
- * @param {*} [extraArguments] Arguments which will be handled by formatters.
4426
+ * @param {*} extraArguments Arguments which will be handled by formatters.
4427
4427
  * @returns {string}
4428
4428
  */
4429
4429
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -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-c81ae8e-20231123
29
- * Release date: 31/08/2023 (built at 23/11/2023 08:00:12)
28
+ * Version: 0.0.0-next-b86a8be-20231123
29
+ * Release date: 31/08/2023 (built at 23/11/2023 12:44:52)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -504,10 +504,8 @@ innerBorderBottom - Property controlled by bottom overlay
504
504
  .handsontable .columnSorting.sortAction:hover {
505
505
  text-decoration: underline;
506
506
  cursor: pointer;
507
- }
508
-
509
- /* Arrow position */
510
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::before {
507
+ } /* Arrow position */
508
+ .handsontable span.colHeader.columnSorting::before {
511
509
  /* Centering start */
512
510
  top: 50%;
513
511
  /* One extra pixel for purpose of proper positioning of sorting arrow, when `font-size` set to default */
@@ -527,7 +525,7 @@ innerBorderBottom - Property controlled by bottom overlay
527
525
  background-position-x: right;
528
526
  }
529
527
 
530
- [dir=rtl].handsontable span.colHeader.columnSorting .columnSortingIndicator::before {
528
+ [dir=rtl].handsontable span.colHeader.columnSorting::before {
531
529
  /* Centering end */
532
530
  /* For purpose of continuous mouse over experience, when moving between the `span` and the `::before` elements */
533
531
  padding-right: 8px;
@@ -537,12 +535,12 @@ innerBorderBottom - Property controlled by bottom overlay
537
535
  background-position-x: left;
538
536
  }
539
537
 
540
- .handsontable span.colHeader.columnSorting.ascending .columnSortingIndicator::before {
538
+ .handsontable span.colHeader.columnSorting.ascending::before {
541
539
  /* arrow up; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */
542
540
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC);
543
541
  }
544
542
 
545
- .handsontable span.colHeader.columnSorting.descending .columnSortingIndicator::before {
543
+ .handsontable span.colHeader.columnSorting.descending::before {
546
544
  /* arrow down; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */
547
545
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=);
548
546
  }
@@ -696,7 +694,7 @@ TextRenderer readOnly cell
696
694
  position: relative;
697
695
  }
698
696
 
699
- .handsontable .htSubmenu .submenuIndicator::after {
697
+ .handsontable .htSubmenu :after {
700
698
  content: "▶";
701
699
  color: #777;
702
700
  position: absolute;
@@ -704,11 +702,11 @@ TextRenderer readOnly cell
704
702
  font-size: 9px;
705
703
  }
706
704
 
707
- [dir=rtl].handsontable .htSubmenu .submenuIndicator::after {
705
+ [dir=rtl].handsontable .htSubmenu :after {
708
706
  content: "";
709
707
  }
710
708
 
711
- [dir=rtl].handsontable .htSubmenu .submenuIndicator::before {
709
+ [dir=rtl].handsontable .htSubmenu :before {
712
710
  content: "◀";
713
711
  color: #777;
714
712
  position: absolute;
@@ -1476,6 +1474,10 @@ textarea.HandsontableCopyPaste {
1476
1474
  border: 1px solid #d2d1d1;
1477
1475
  }
1478
1476
 
1477
+ .handsontable .htUIInputIcon {
1478
+ position: absolute;
1479
+ }
1480
+
1479
1481
  /* Button */
1480
1482
  .handsontable .htUIInput.htUIButton {
1481
1483
  cursor: pointer;
@@ -1616,13 +1618,12 @@ textarea.HandsontableCopyPaste {
1616
1618
  /*
1617
1619
  * Handsontable HiddenColumns
1618
1620
  */
1619
- .handsontable th.beforeHiddenColumn,
1620
- .handsontable th.afterHiddenColumn {
1621
+ .handsontable th.beforeHiddenColumn {
1621
1622
  position: relative;
1622
1623
  }
1623
1624
 
1624
- .handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after,
1625
- .handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1625
+ .handsontable th.beforeHiddenColumn::after,
1626
+ .handsontable th.afterHiddenColumn::before {
1626
1627
  color: #bbb;
1627
1628
  position: absolute;
1628
1629
  top: 50%;
@@ -1630,33 +1631,37 @@ textarea.HandsontableCopyPaste {
1630
1631
  transform: translateY(-50%);
1631
1632
  }
1632
1633
 
1633
- .handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after {
1634
+ .handsontable th.afterHiddenColumn {
1635
+ position: relative;
1636
+ }
1637
+
1638
+ .handsontable th.beforeHiddenColumn::after {
1634
1639
  right: 1px;
1635
- content: "◀";
1640
+ content: "◀"; /* left arrow */
1636
1641
  }
1637
1642
 
1638
- [dir=rtl].handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after {
1643
+ [dir=rtl].handsontable th.beforeHiddenColumn::after {
1639
1644
  right: initial;
1640
1645
  left: 1px;
1641
- content: "▶";
1646
+ content: "▶"; /* right arrow */
1642
1647
  }
1643
1648
 
1644
- .handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1649
+ .handsontable th.afterHiddenColumn::before {
1645
1650
  left: 1px;
1646
- content: "▶";
1651
+ content: "▶"; /* right arrow */
1647
1652
  }
1648
1653
 
1649
- [dir=rtl].handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1654
+ [dir=rtl].handsontable th.afterHiddenColumn::before {
1650
1655
  right: 1px;
1651
1656
  left: initial;
1652
- content: "◀";
1657
+ content: "◀"; /* left arrow */
1653
1658
  }
1654
1659
  @charset "UTF-8";
1655
1660
  /*!
1656
1661
  * Handsontable HiddenRows
1657
1662
  */
1658
- .handsontable th.beforeHiddenRow .beforeHiddenRowIndicator::before,
1659
- .handsontable th.afterHiddenRow .afterHiddenRowIndicator::after {
1663
+ .handsontable th.beforeHiddenRow::before,
1664
+ .handsontable th.afterHiddenRow::after {
1660
1665
  color: #bbb;
1661
1666
  font-size: 6pt;
1662
1667
  line-height: 6pt;
@@ -1669,18 +1674,18 @@ textarea.HandsontableCopyPaste {
1669
1674
  position: relative;
1670
1675
  }
1671
1676
 
1672
- .handsontable th.beforeHiddenRow .beforeHiddenRowIndicator::before {
1673
- content: "▲"; /* up-pointing triangle */
1677
+ .handsontable th.beforeHiddenRow::before {
1678
+ content: "▲";
1674
1679
  bottom: 2px;
1675
1680
  }
1676
1681
 
1677
- .handsontable th.afterHiddenRow .afterHiddenRowIndicator::after {
1678
- content: "▼"; /* down-pointing triangle */
1682
+ .handsontable th.afterHiddenRow::after {
1683
+ content: "▼";
1679
1684
  top: 2px;
1680
1685
  }
1681
1686
 
1682
- .handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight .beforeHiddenRowIndicator::before,
1683
- .handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight .afterHiddenRowIndicator::after {
1687
+ .handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight:before,
1688
+ .handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight:after {
1684
1689
  color: #eee;
1685
1690
  }
1686
1691
 
@@ -1833,7 +1838,7 @@ textarea.HandsontableCopyPaste {
1833
1838
  opacity: 0.58;
1834
1839
  }
1835
1840
  /* Column's number position */
1836
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1841
+ .handsontable span.colHeader.columnSorting::after {
1837
1842
  /* Centering start */
1838
1843
  top: 50%;
1839
1844
  /* Two extra pixels (-2 instead of -4) for purpose of proper positioning of numeric indicators, when `font-size` set to default */
@@ -1852,7 +1857,7 @@ textarea.HandsontableCopyPaste {
1852
1857
  text-decoration: underline;
1853
1858
  }
1854
1859
 
1855
- [dir=rtl].handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1860
+ [dir=rtl].handsontable span.colHeader.columnSorting::after {
1856
1861
  left: -15px;
1857
1862
  right: unset;
1858
1863
  /* For purpose of continuous mouse over experience, when moving between the `::before` and the `::after` elements */
@@ -1861,41 +1866,41 @@ textarea.HandsontableCopyPaste {
1861
1866
  }
1862
1867
 
1863
1868
  /* Workaround for IE9 - IE11, https://stackoverflow.com/a/21902566, https://stackoverflow.com/a/32120247 */
1864
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1869
+ .handsontable span.colHeader.columnSorting::after {
1865
1870
  text-decoration: none;
1866
1871
  }
1867
1872
 
1868
1873
  /* We support up to 7 numeric indicators, describing order of column in sorted columns queue */
1869
- .handsontable span.colHeader.columnSorting[class^=sort-] .columnSortingIndicator::after,
1870
- .handsontable span.colHeader.columnSorting[class*=" sort-"] .columnSortingIndicator::after {
1874
+ .handsontable span.colHeader.columnSorting[class^=sort-]::after,
1875
+ .handsontable span.colHeader.columnSorting[class*=" sort-"]::after {
1871
1876
  content: "+";
1872
1877
  }
1873
1878
 
1874
- .handsontable span.colHeader.columnSorting.sort-1 .columnSortingIndicator::after {
1879
+ .handsontable span.colHeader.columnSorting.sort-1::after {
1875
1880
  content: "1";
1876
1881
  }
1877
1882
 
1878
- .handsontable span.colHeader.columnSorting.sort-2 .columnSortingIndicator::after {
1883
+ .handsontable span.colHeader.columnSorting.sort-2::after {
1879
1884
  content: "2";
1880
1885
  }
1881
1886
 
1882
- .handsontable span.colHeader.columnSorting.sort-3 .columnSortingIndicator::after {
1887
+ .handsontable span.colHeader.columnSorting.sort-3::after {
1883
1888
  content: "3";
1884
1889
  }
1885
1890
 
1886
- .handsontable span.colHeader.columnSorting.sort-4 .columnSortingIndicator::after {
1891
+ .handsontable span.colHeader.columnSorting.sort-4::after {
1887
1892
  content: "4";
1888
1893
  }
1889
1894
 
1890
- .handsontable span.colHeader.columnSorting.sort-5 .columnSortingIndicator::after {
1895
+ .handsontable span.colHeader.columnSorting.sort-5::after {
1891
1896
  content: "5";
1892
1897
  }
1893
1898
 
1894
- .handsontable span.colHeader.columnSorting.sort-6 .columnSortingIndicator::after {
1899
+ .handsontable span.colHeader.columnSorting.sort-6::after {
1895
1900
  content: "6";
1896
1901
  }
1897
1902
 
1898
- .handsontable span.colHeader.columnSorting.sort-7 .columnSortingIndicator::after {
1903
+ .handsontable span.colHeader.columnSorting.sort-7::after {
1899
1904
  content: "7";
1900
1905
  }
1901
1906
 
@@ -1906,6 +1911,7 @@ textarea.HandsontableCopyPaste {
1906
1911
  .handsontable thead th.hiddenHeader:not(:first-of-type) {
1907
1912
  display: none;
1908
1913
  }
1914
+ @charset "UTF-8";
1909
1915
  .handsontable th.ht_nestingLevels {
1910
1916
  text-align: left;
1911
1917
  padding-left: 7px;
@@ -1939,6 +1945,10 @@ textarea.HandsontableCopyPaste {
1939
1945
  right: unset;
1940
1946
  }
1941
1947
 
1948
+ .handsontable th span.ht_nestingLevel {
1949
+ display: inline-block;
1950
+ }
1951
+
1942
1952
  .handsontable th span.ht_nestingLevel_empty {
1943
1953
  display: inline-block;
1944
1954
  width: 10px;
@@ -1950,6 +1960,14 @@ textarea.HandsontableCopyPaste {
1950
1960
  float: right;
1951
1961
  }
1952
1962
 
1963
+ .handsontable th span.ht_nestingLevel::after {
1964
+ content: "┐";
1965
+ font-size: 9px;
1966
+ display: inline-block;
1967
+ position: relative;
1968
+ bottom: 3px;
1969
+ }
1970
+
1953
1971
  .handsontable th div.ht_nestingButton {
1954
1972
  display: inline-block;
1955
1973
  position: absolute;