handsontable 0.0.0-next-d7edb4b-20240927 → 0.0.0-next-f512acf-20240930
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +11 -0
- package/core.mjs +11 -0
- package/dataMap/metaManager/metaSchema.js +17 -0
- package/dataMap/metaManager/metaSchema.mjs +17 -0
- package/dist/handsontable.css +296 -145
- package/dist/handsontable.full.css +305 -152
- package/dist/handsontable.full.js +3610 -3723
- package/dist/handsontable.full.min.css +85 -14
- package/dist/handsontable.full.min.js +48 -48
- package/dist/handsontable.js +3317 -3424
- package/dist/handsontable.min.css +82 -11
- package/dist/handsontable.min.js +24 -24
- package/editors/dateEditor/dateEditor.js +2 -0
- package/editors/dateEditor/dateEditor.mjs +2 -0
- package/editors/handsontableEditor/handsontableEditor.js +1 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +1 -1
- package/editors/selectEditor/selectEditor.js +20 -9
- package/editors/selectEditor/selectEditor.mjs +20 -9
- package/editors/textEditor/textEditor.js +4 -11
- package/editors/textEditor/textEditor.mjs +4 -11
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/themes.js +17 -0
- package/helpers/themes.mjs +13 -0
- package/package.json +10 -3
- package/plugins/comments/commentEditor.js +8 -1
- package/plugins/comments/commentEditor.mjs +8 -1
- package/plugins/comments/comments.js +1 -1
- package/plugins/comments/comments.mjs +1 -1
- package/plugins/contextMenu/menu/menu.js +4 -4
- package/plugins/contextMenu/menu/menu.mjs +4 -4
- package/plugins/contextMenu/menu/shortcuts.js +1 -1
- package/plugins/contextMenu/menu/shortcuts.mjs +1 -1
- package/plugins/filters/filters.js +37 -13
- package/plugins/filters/filters.mjs +37 -13
- package/plugins/filters/menu/focusController.js +36 -14
- package/plugins/filters/menu/focusController.mjs +36 -14
- package/styles/handsontable.css +1921 -0
- package/styles/handsontable.min.css +30 -0
- package/styles/ht-theme-gemini.css +689 -0
- package/styles/ht-theme-gemini.min.css +30 -0
- package/styles/ht-theme-main.css +697 -0
- package/styles/ht-theme-main.min.css +30 -0
- package/utils/ghostTable.js +1 -1
- package/utils/ghostTable.mjs +1 -1
@@ -66,7 +66,9 @@ class DateEditor extends _textEditor.TextEditor {
|
|
66
66
|
this.datePickerStyle.left = 0;
|
67
67
|
this.datePickerStyle.zIndex = 9999;
|
68
68
|
this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');
|
69
|
+
const themeClassName = this.hot.getSettings().themeName;
|
69
70
|
(0, _element.addClass)(this.datePicker, 'htDatepickerHolder');
|
71
|
+
(0, _element.addClass)(this.datePicker, themeClassName);
|
70
72
|
this.hot.rootDocument.body.appendChild(this.datePicker);
|
71
73
|
|
72
74
|
/**
|
@@ -62,7 +62,9 @@ export class DateEditor extends TextEditor {
|
|
62
62
|
this.datePickerStyle.left = 0;
|
63
63
|
this.datePickerStyle.zIndex = 9999;
|
64
64
|
this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');
|
65
|
+
const themeClassName = this.hot.getSettings().themeName;
|
65
66
|
addClass(this.datePicker, 'htDatepickerHolder');
|
67
|
+
addClass(this.datePicker, themeClassName);
|
66
68
|
this.hot.rootDocument.body.appendChild(this.datePicker);
|
67
69
|
|
68
70
|
/**
|
@@ -4,6 +4,7 @@ exports.__esModule = true;
|
|
4
4
|
var _baseEditor = require("../baseEditor");
|
5
5
|
var _element = require("../../helpers/dom/element");
|
6
6
|
var _object = require("../../helpers/object");
|
7
|
+
var _a11y = require("../../helpers/a11y");
|
7
8
|
const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
|
8
9
|
const SHORTCUTS_GROUP = 'selectEditor';
|
9
10
|
const EDITOR_TYPE = exports.EDITOR_TYPE = 'select';
|
@@ -21,11 +22,21 @@ class SelectEditor extends _baseEditor.BaseEditor {
|
|
21
22
|
* Initializes editor instance, DOM Element and mount hooks.
|
22
23
|
*/
|
23
24
|
init() {
|
25
|
+
this.selectWrapper = this.hot.rootDocument.createElement('div');
|
24
26
|
this.select = this.hot.rootDocument.createElement('select');
|
25
27
|
this.select.setAttribute('data-hot-input', 'true');
|
26
|
-
this.
|
27
|
-
|
28
|
-
this.hot.
|
28
|
+
this.selectWrapper.style.display = 'none';
|
29
|
+
const ARROW = this.hot.rootDocument.createElement('DIV');
|
30
|
+
const isAriaEnabled = this.hot.getSettings().ariaTags;
|
31
|
+
ARROW.className = 'htAutocompleteArrow';
|
32
|
+
if (isAriaEnabled) {
|
33
|
+
ARROW.setAttribute(...(0, _a11y.A11Y_HIDDEN)());
|
34
|
+
}
|
35
|
+
ARROW.appendChild(this.hot.rootDocument.createTextNode(String.fromCharCode(9660)));
|
36
|
+
(0, _element.addClass)(this.selectWrapper, 'htSelectEditor');
|
37
|
+
this.selectWrapper.appendChild(this.select);
|
38
|
+
this.selectWrapper.insertBefore(ARROW, this.selectWrapper.firstChild);
|
39
|
+
this.hot.rootElement.appendChild(this.selectWrapper);
|
29
40
|
this.registerHooks();
|
30
41
|
}
|
31
42
|
|
@@ -53,7 +64,7 @@ class SelectEditor extends _baseEditor.BaseEditor {
|
|
53
64
|
open() {
|
54
65
|
this._opened = true;
|
55
66
|
this.refreshDimensions();
|
56
|
-
this.
|
67
|
+
this.selectWrapper.style.display = '';
|
57
68
|
const shortcutManager = this.hot.getShortcutManager();
|
58
69
|
shortcutManager.setActiveContextName('editor');
|
59
70
|
this.registerShortcuts();
|
@@ -64,9 +75,9 @@ class SelectEditor extends _baseEditor.BaseEditor {
|
|
64
75
|
*/
|
65
76
|
close() {
|
66
77
|
this._opened = false;
|
67
|
-
this.
|
68
|
-
if ((0, _element.hasClass)(this.
|
69
|
-
(0, _element.removeClass)(this.
|
78
|
+
this.selectWrapper.style.display = 'none';
|
79
|
+
if ((0, _element.hasClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME)) {
|
80
|
+
(0, _element.removeClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
|
70
81
|
}
|
71
82
|
this.unregisterShortcuts();
|
72
83
|
this.clearHooks();
|
@@ -172,13 +183,13 @@ class SelectEditor extends _baseEditor.BaseEditor {
|
|
172
183
|
width,
|
173
184
|
height
|
174
185
|
} = this.getEditedCellRect();
|
175
|
-
const selectStyle = this.
|
186
|
+
const selectStyle = this.selectWrapper.style;
|
176
187
|
selectStyle.height = `${height}px`;
|
177
188
|
selectStyle.width = `${width}px`;
|
178
189
|
selectStyle.top = `${top}px`;
|
179
190
|
selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;
|
180
191
|
selectStyle.margin = '0px';
|
181
|
-
(0, _element.addClass)(this.
|
192
|
+
(0, _element.addClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
|
182
193
|
}
|
183
194
|
|
184
195
|
/**
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { BaseEditor, EDITOR_STATE } from "../baseEditor/index.mjs";
|
2
2
|
import { addClass, empty, fastInnerHTML, hasClass, removeClass } from "../../helpers/dom/element.mjs";
|
3
3
|
import { objectEach } from "../../helpers/object.mjs";
|
4
|
+
import { A11Y_HIDDEN } from "../../helpers/a11y.mjs";
|
4
5
|
const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
|
5
6
|
const SHORTCUTS_GROUP = 'selectEditor';
|
6
7
|
export const EDITOR_TYPE = 'select';
|
@@ -18,11 +19,21 @@ export class SelectEditor extends BaseEditor {
|
|
18
19
|
* Initializes editor instance, DOM Element and mount hooks.
|
19
20
|
*/
|
20
21
|
init() {
|
22
|
+
this.selectWrapper = this.hot.rootDocument.createElement('div');
|
21
23
|
this.select = this.hot.rootDocument.createElement('select');
|
22
24
|
this.select.setAttribute('data-hot-input', 'true');
|
23
|
-
this.
|
24
|
-
|
25
|
-
this.hot.
|
25
|
+
this.selectWrapper.style.display = 'none';
|
26
|
+
const ARROW = this.hot.rootDocument.createElement('DIV');
|
27
|
+
const isAriaEnabled = this.hot.getSettings().ariaTags;
|
28
|
+
ARROW.className = 'htAutocompleteArrow';
|
29
|
+
if (isAriaEnabled) {
|
30
|
+
ARROW.setAttribute(...A11Y_HIDDEN());
|
31
|
+
}
|
32
|
+
ARROW.appendChild(this.hot.rootDocument.createTextNode(String.fromCharCode(9660)));
|
33
|
+
addClass(this.selectWrapper, 'htSelectEditor');
|
34
|
+
this.selectWrapper.appendChild(this.select);
|
35
|
+
this.selectWrapper.insertBefore(ARROW, this.selectWrapper.firstChild);
|
36
|
+
this.hot.rootElement.appendChild(this.selectWrapper);
|
26
37
|
this.registerHooks();
|
27
38
|
}
|
28
39
|
|
@@ -50,7 +61,7 @@ export class SelectEditor extends BaseEditor {
|
|
50
61
|
open() {
|
51
62
|
this._opened = true;
|
52
63
|
this.refreshDimensions();
|
53
|
-
this.
|
64
|
+
this.selectWrapper.style.display = '';
|
54
65
|
const shortcutManager = this.hot.getShortcutManager();
|
55
66
|
shortcutManager.setActiveContextName('editor');
|
56
67
|
this.registerShortcuts();
|
@@ -61,9 +72,9 @@ export class SelectEditor extends BaseEditor {
|
|
61
72
|
*/
|
62
73
|
close() {
|
63
74
|
this._opened = false;
|
64
|
-
this.
|
65
|
-
if (hasClass(this.
|
66
|
-
removeClass(this.
|
75
|
+
this.selectWrapper.style.display = 'none';
|
76
|
+
if (hasClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME)) {
|
77
|
+
removeClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
|
67
78
|
}
|
68
79
|
this.unregisterShortcuts();
|
69
80
|
this.clearHooks();
|
@@ -169,13 +180,13 @@ export class SelectEditor extends BaseEditor {
|
|
169
180
|
width,
|
170
181
|
height
|
171
182
|
} = this.getEditedCellRect();
|
172
|
-
const selectStyle = this.
|
183
|
+
const selectStyle = this.selectWrapper.style;
|
173
184
|
selectStyle.height = `${height}px`;
|
174
185
|
selectStyle.width = `${width}px`;
|
175
186
|
selectStyle.top = `${top}px`;
|
176
187
|
selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;
|
177
188
|
selectStyle.margin = '0px';
|
178
|
-
addClass(this.
|
189
|
+
addClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
|
179
190
|
}
|
180
191
|
|
181
192
|
/**
|
@@ -312,19 +312,12 @@ class TextEditor extends _baseEditor.BaseEditor {
|
|
312
312
|
this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;
|
313
313
|
this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;
|
314
314
|
this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;
|
315
|
-
const textareaComputedStyle = this.hot.rootWindow.getComputedStyle(this.TEXTAREA);
|
316
|
-
const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) + parseInt(textareaComputedStyle.paddingRight, 10);
|
317
|
-
const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) + parseInt(textareaComputedStyle.paddingBottom, 10);
|
318
|
-
const finalWidth = width - horizontalPadding;
|
319
|
-
const finalHeight = height - verticalPadding;
|
320
|
-
const finalMaxWidth = maxWidth - horizontalPadding;
|
321
|
-
const finalMaxHeight = maxHeight - verticalPadding;
|
322
315
|
this.autoResize.init(this.TEXTAREA, {
|
323
|
-
minWidth: Math.min(
|
324
|
-
minHeight: Math.min(
|
316
|
+
minWidth: Math.min(width, maxWidth),
|
317
|
+
minHeight: Math.min(height, maxHeight),
|
325
318
|
// TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)
|
326
|
-
maxWidth
|
327
|
-
maxHeight
|
319
|
+
maxWidth,
|
320
|
+
maxHeight
|
328
321
|
}, true);
|
329
322
|
}
|
330
323
|
|
@@ -308,19 +308,12 @@ export class TextEditor extends BaseEditor {
|
|
308
308
|
this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;
|
309
309
|
this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;
|
310
310
|
this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;
|
311
|
-
const textareaComputedStyle = this.hot.rootWindow.getComputedStyle(this.TEXTAREA);
|
312
|
-
const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) + parseInt(textareaComputedStyle.paddingRight, 10);
|
313
|
-
const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) + parseInt(textareaComputedStyle.paddingBottom, 10);
|
314
|
-
const finalWidth = width - horizontalPadding;
|
315
|
-
const finalHeight = height - verticalPadding;
|
316
|
-
const finalMaxWidth = maxWidth - horizontalPadding;
|
317
|
-
const finalMaxHeight = maxHeight - verticalPadding;
|
318
311
|
this.autoResize.init(this.TEXTAREA, {
|
319
|
-
minWidth: Math.min(
|
320
|
-
minHeight: Math.min(
|
312
|
+
minWidth: Math.min(width, maxWidth),
|
313
|
+
minHeight: Math.min(height, maxHeight),
|
321
314
|
// TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)
|
322
|
-
maxWidth
|
323
|
-
maxHeight
|
315
|
+
maxWidth,
|
316
|
+
maxHeight
|
324
317
|
}, true);
|
325
318
|
}
|
326
319
|
|
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 = "0.0.0-next-
|
137
|
+
const hotVersion = "0.0.0-next-f512acf-20240930";
|
138
138
|
let keyValidityDate;
|
139
139
|
let consoleMessageState = 'invalid';
|
140
140
|
let domMessageState = 'invalid';
|
@@ -188,7 +188,7 @@ function _injectProductInfo(key, element) {
|
|
188
188
|
});
|
189
189
|
if (message) {
|
190
190
|
const messageNode = document.createElement('div');
|
191
|
-
messageNode.className = 'hot-display-license-info';
|
191
|
+
messageNode.className = 'handsontable hot-display-license-info';
|
192
192
|
messageNode.innerHTML = domMessages[domMessageState]({
|
193
193
|
keyValidityDate,
|
194
194
|
hotVersion
|
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 = "0.0.0-next-
|
127
|
+
const hotVersion = "0.0.0-next-f512acf-20240930";
|
128
128
|
let keyValidityDate;
|
129
129
|
let consoleMessageState = 'invalid';
|
130
130
|
let domMessageState = 'invalid';
|
@@ -178,7 +178,7 @@ export function _injectProductInfo(key, element) {
|
|
178
178
|
});
|
179
179
|
if (message) {
|
180
180
|
const messageNode = document.createElement('div');
|
181
|
-
messageNode.className = 'hot-display-license-info';
|
181
|
+
messageNode.className = 'handsontable hot-display-license-info';
|
182
182
|
messageNode.innerHTML = domMessages[domMessageState]({
|
183
183
|
keyValidityDate,
|
184
184
|
hotVersion
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.getThemeClassName = getThemeClassName;
|
5
|
+
/**
|
6
|
+
* Get theme class name from rootElement class.
|
7
|
+
*
|
8
|
+
* @param {string} className Class names.
|
9
|
+
* @returns {string}
|
10
|
+
*/
|
11
|
+
function getThemeClassName(className) {
|
12
|
+
if (!className || typeof className !== 'string') {
|
13
|
+
return false;
|
14
|
+
}
|
15
|
+
const [match] = className.match(/ht-theme-[a-zA-Z0-9_-]+/) || [];
|
16
|
+
return match;
|
17
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* Get theme class name from rootElement class.
|
3
|
+
*
|
4
|
+
* @param {string} className Class names.
|
5
|
+
* @returns {string}
|
6
|
+
*/
|
7
|
+
export function getThemeClassName(className) {
|
8
|
+
if (!className || typeof className !== 'string') {
|
9
|
+
return false;
|
10
|
+
}
|
11
|
+
const [match] = className.match(/ht-theme-[a-zA-Z0-9_-]+/) || [];
|
12
|
+
return match;
|
13
|
+
}
|
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": "0.0.0-next-
|
13
|
+
"version": "0.0.0-next-f512acf-20240930",
|
14
14
|
"main": "index",
|
15
15
|
"module": "index.mjs",
|
16
16
|
"jsnext:main": "index.mjs",
|
@@ -50,7 +50,6 @@
|
|
50
50
|
"@babel/register": "^7.8.3",
|
51
51
|
"@babel/runtime": "^7.11.2",
|
52
52
|
"@babel/types": "^7.12.12",
|
53
|
-
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
54
53
|
"babel-jest": "^26.6.3",
|
55
54
|
"babel-loader": "^8.0.4",
|
56
55
|
"babel-plugin-forbidden-imports": "^0.1.2",
|
@@ -94,8 +93,10 @@
|
|
94
93
|
"string-replace-loader": "^3.1.0",
|
95
94
|
"stylelint": "^16.3.1",
|
96
95
|
"typescript": "3.8.2",
|
96
|
+
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
97
97
|
"webpack": "^5.88.1",
|
98
|
-
"webpack-cli": "^5.1.4"
|
98
|
+
"webpack-cli": "^5.1.4",
|
99
|
+
"webpack-remove-empty-scripts": "^1.0.4"
|
99
100
|
},
|
100
101
|
"optionalDependencies": {
|
101
102
|
"hyperformula": "^2.6.2"
|
@@ -767,6 +768,12 @@
|
|
767
768
|
"./dist/languages/zh-CN.min.js": "./dist/languages/zh-CN.min.js",
|
768
769
|
"./dist/languages/zh-TW.js": "./dist/languages/zh-TW.js",
|
769
770
|
"./dist/languages/zh-TW.min.js": "./dist/languages/zh-TW.min.js",
|
771
|
+
"./styles/handsontable.css": "./styles/handsontable.css",
|
772
|
+
"./styles/handsontable.min.css": "./styles/handsontable.min.css",
|
773
|
+
"./styles/ht-theme-gemini.css": "./styles/ht-theme-gemini.css",
|
774
|
+
"./styles/ht-theme-gemini.min.css": "./styles/ht-theme-gemini.min.css",
|
775
|
+
"./styles/ht-theme-main.css": "./styles/ht-theme-main.css",
|
776
|
+
"./styles/ht-theme-main.min.css": "./styles/ht-theme-main.min.css",
|
770
777
|
".": {
|
771
778
|
"types": "./index.d.ts",
|
772
779
|
"import": "./index.mjs",
|
@@ -25,6 +25,7 @@ var _editor = /*#__PURE__*/new WeakMap();
|
|
25
25
|
var _editorStyle = /*#__PURE__*/new WeakMap();
|
26
26
|
var _hidden = /*#__PURE__*/new WeakMap();
|
27
27
|
var _resizeObserver = /*#__PURE__*/new WeakMap();
|
28
|
+
var _themeClassName = /*#__PURE__*/new WeakMap();
|
28
29
|
class CommentEditor {
|
29
30
|
static get CLASS_EDITOR_CONTAINER() {
|
30
31
|
return 'htCommentsContainer';
|
@@ -43,7 +44,7 @@ class CommentEditor {
|
|
43
44
|
* @type {Document}
|
44
45
|
*/
|
45
46
|
|
46
|
-
constructor(rootDocument, isRtl) {
|
47
|
+
constructor(rootDocument, isRtl, themeClassName) {
|
47
48
|
var _this = this;
|
48
49
|
_classPrivateFieldInitSpec(this, _rootDocument, void 0);
|
49
50
|
/**
|
@@ -70,8 +71,13 @@ class CommentEditor {
|
|
70
71
|
* @type {EditorResizeObserver}
|
71
72
|
*/
|
72
73
|
_classPrivateFieldInitSpec(this, _resizeObserver, new _editorResizeObserver.EditorResizeObserver());
|
74
|
+
/**
|
75
|
+
* @type {string}
|
76
|
+
*/
|
77
|
+
_classPrivateFieldInitSpec(this, _themeClassName, void 0);
|
73
78
|
_classPrivateFieldSet(_rootDocument, this, rootDocument);
|
74
79
|
_classPrivateFieldSet(_isRtl, this, isRtl);
|
80
|
+
_classPrivateFieldSet(_themeClassName, this, themeClassName);
|
75
81
|
_classPrivateFieldSet(_editor, this, this.createEditor());
|
76
82
|
_classPrivateFieldSet(_editorStyle, this, _classPrivateFieldGet(_editor, this).style);
|
77
83
|
_classPrivateFieldGet(_resizeObserver, this).setObservedElement(this.getInputElement());
|
@@ -223,6 +229,7 @@ class CommentEditor {
|
|
223
229
|
_classPrivateFieldSet(_container, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
|
224
230
|
_classPrivateFieldGet(_container, this).setAttribute('dir', _classPrivateFieldGet(_isRtl, this) ? 'rtl' : 'ltr');
|
225
231
|
(0, _element.addClass)(_classPrivateFieldGet(_container, this), CommentEditor.CLASS_EDITOR_CONTAINER);
|
232
|
+
(0, _element.addClass)(_classPrivateFieldGet(_container, this), _classPrivateFieldGet(_themeClassName, this));
|
226
233
|
_classPrivateFieldGet(_rootDocument, this).body.appendChild(_classPrivateFieldGet(_container, this));
|
227
234
|
(0, _element.addClass)(editor, CommentEditor.CLASS_EDITOR);
|
228
235
|
(0, _element.addClass)(textarea, CommentEditor.CLASS_INPUT);
|
@@ -21,6 +21,7 @@ var _editor = /*#__PURE__*/new WeakMap();
|
|
21
21
|
var _editorStyle = /*#__PURE__*/new WeakMap();
|
22
22
|
var _hidden = /*#__PURE__*/new WeakMap();
|
23
23
|
var _resizeObserver = /*#__PURE__*/new WeakMap();
|
24
|
+
var _themeClassName = /*#__PURE__*/new WeakMap();
|
24
25
|
class CommentEditor {
|
25
26
|
static get CLASS_EDITOR_CONTAINER() {
|
26
27
|
return 'htCommentsContainer';
|
@@ -39,7 +40,7 @@ class CommentEditor {
|
|
39
40
|
* @type {Document}
|
40
41
|
*/
|
41
42
|
|
42
|
-
constructor(rootDocument, isRtl) {
|
43
|
+
constructor(rootDocument, isRtl, themeClassName) {
|
43
44
|
var _this = this;
|
44
45
|
_classPrivateFieldInitSpec(this, _rootDocument, void 0);
|
45
46
|
/**
|
@@ -66,8 +67,13 @@ class CommentEditor {
|
|
66
67
|
* @type {EditorResizeObserver}
|
67
68
|
*/
|
68
69
|
_classPrivateFieldInitSpec(this, _resizeObserver, new EditorResizeObserver());
|
70
|
+
/**
|
71
|
+
* @type {string}
|
72
|
+
*/
|
73
|
+
_classPrivateFieldInitSpec(this, _themeClassName, void 0);
|
69
74
|
_classPrivateFieldSet(_rootDocument, this, rootDocument);
|
70
75
|
_classPrivateFieldSet(_isRtl, this, isRtl);
|
76
|
+
_classPrivateFieldSet(_themeClassName, this, themeClassName);
|
71
77
|
_classPrivateFieldSet(_editor, this, this.createEditor());
|
72
78
|
_classPrivateFieldSet(_editorStyle, this, _classPrivateFieldGet(_editor, this).style);
|
73
79
|
_classPrivateFieldGet(_resizeObserver, this).setObservedElement(this.getInputElement());
|
@@ -219,6 +225,7 @@ class CommentEditor {
|
|
219
225
|
_classPrivateFieldSet(_container, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
|
220
226
|
_classPrivateFieldGet(_container, this).setAttribute('dir', _classPrivateFieldGet(_isRtl, this) ? 'rtl' : 'ltr');
|
221
227
|
addClass(_classPrivateFieldGet(_container, this), CommentEditor.CLASS_EDITOR_CONTAINER);
|
228
|
+
addClass(_classPrivateFieldGet(_container, this), _classPrivateFieldGet(_themeClassName, this));
|
222
229
|
_classPrivateFieldGet(_rootDocument, this).body.appendChild(_classPrivateFieldGet(_container, this));
|
223
230
|
addClass(editor, CommentEditor.CLASS_EDITOR);
|
224
231
|
addClass(textarea, CommentEditor.CLASS_INPUT);
|
@@ -213,7 +213,7 @@ class Comments extends _base.BasePlugin {
|
|
213
213
|
return;
|
214
214
|
}
|
215
215
|
if (!_classPrivateFieldGet(_editor, this)) {
|
216
|
-
_classPrivateFieldSet(_editor, this, new _commentEditor.default(this.hot.rootDocument, this.hot.isRtl()));
|
216
|
+
_classPrivateFieldSet(_editor, this, new _commentEditor.default(this.hot.rootDocument, this.hot.isRtl(), this.hot.getSettings().themeName));
|
217
217
|
_classPrivateFieldGet(_editor, this).addLocalHook('resize', function () {
|
218
218
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
219
219
|
args[_key] = arguments[_key];
|
@@ -209,7 +209,7 @@ export class Comments extends BasePlugin {
|
|
209
209
|
return;
|
210
210
|
}
|
211
211
|
if (!_classPrivateFieldGet(_editor, this)) {
|
212
|
-
_classPrivateFieldSet(_editor, this, new CommentEditor(this.hot.rootDocument, this.hot.isRtl()));
|
212
|
+
_classPrivateFieldSet(_editor, this, new CommentEditor(this.hot.rootDocument, this.hot.isRtl(), this.hot.getSettings().themeName));
|
213
213
|
_classPrivateFieldGet(_editor, this).addLocalHook('resize', function () {
|
214
214
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
215
215
|
args[_key] = arguments[_key];
|
@@ -579,10 +579,8 @@ class Menu {
|
|
579
579
|
const currentRowHeight = itemCell ? (0, _element.outerHeight)(this.hotMenu.getCell(index, 0)) : 0;
|
580
580
|
return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : currentRowHeight);
|
581
581
|
}, 0);
|
582
|
-
|
583
|
-
|
584
|
-
holderStyle.width = `${currentHiderWidth + 3}px`;
|
585
|
-
holderStyle.height = `${realHeight + 3}px`;
|
582
|
+
holderStyle.width = `${currentHiderWidth}px`;
|
583
|
+
holderStyle.height = `${realHeight}px`;
|
586
584
|
hiderStyle.height = holderStyle.height;
|
587
585
|
}
|
588
586
|
|
@@ -612,8 +610,10 @@ class Menu {
|
|
612
610
|
container = doc.querySelector(`.${this.options.className}.${className}`);
|
613
611
|
}
|
614
612
|
if (!container) {
|
613
|
+
const themeClassName = this.hot.getSettings().themeName;
|
615
614
|
container = doc.createElement('div');
|
616
615
|
(0, _element.addClass)(container, `htMenu ${this.options.className}`);
|
616
|
+
(0, _element.addClass)(container, themeClassName);
|
617
617
|
if (className) {
|
618
618
|
(0, _element.addClass)(container, className);
|
619
619
|
}
|
@@ -575,10 +575,8 @@ export class Menu {
|
|
575
575
|
const currentRowHeight = itemCell ? outerHeight(this.hotMenu.getCell(index, 0)) : 0;
|
576
576
|
return accumulator + (value.name === SEPARATOR ? 1 : currentRowHeight);
|
577
577
|
}, 0);
|
578
|
-
|
579
|
-
|
580
|
-
holderStyle.width = `${currentHiderWidth + 3}px`;
|
581
|
-
holderStyle.height = `${realHeight + 3}px`;
|
578
|
+
holderStyle.width = `${currentHiderWidth}px`;
|
579
|
+
holderStyle.height = `${realHeight}px`;
|
582
580
|
hiderStyle.height = holderStyle.height;
|
583
581
|
}
|
584
582
|
|
@@ -608,8 +606,10 @@ export class Menu {
|
|
608
606
|
container = doc.querySelector(`.${this.options.className}.${className}`);
|
609
607
|
}
|
610
608
|
if (!container) {
|
609
|
+
const themeClassName = this.hot.getSettings().themeName;
|
611
610
|
container = doc.createElement('div');
|
612
611
|
addClass(container, `htMenu ${this.options.className}`);
|
612
|
+
addClass(container, themeClassName);
|
613
613
|
if (className) {
|
614
614
|
addClass(container, className);
|
615
615
|
}
|
@@ -100,7 +100,7 @@ function createKeyboardShortcutsCtrl(menu) {
|
|
100
100
|
/**
|
101
101
|
* Makes the specified context active.
|
102
102
|
*
|
103
|
-
* @param {string} contextName The context name.
|
103
|
+
* @param {string} [contextName] The context name.
|
104
104
|
*/
|
105
105
|
function listen(contextName) {
|
106
106
|
menu.hotMenu.getShortcutManager().setActiveContextName(_getContextName(contextName));
|
@@ -96,7 +96,7 @@ export function createKeyboardShortcutsCtrl(menu) {
|
|
96
96
|
/**
|
97
97
|
* Makes the specified context active.
|
98
98
|
*
|
99
|
-
* @param {string} contextName The context name.
|
99
|
+
* @param {string} [contextName] The context name.
|
100
100
|
*/
|
101
101
|
function listen(contextName) {
|
102
102
|
menu.hotMenu.getShortcutManager().setActiveContextName(_getContextName(contextName));
|
@@ -76,6 +76,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
|
|
76
76
|
* :::
|
77
77
|
*/
|
78
78
|
var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
|
79
|
+
var _dropdownMenuTraces = /*#__PURE__*/new WeakMap();
|
79
80
|
var _Filters_brand = /*#__PURE__*/new WeakSet();
|
80
81
|
class Filters extends _base.BasePlugin {
|
81
82
|
static get PLUGIN_KEY() {
|
@@ -139,6 +140,12 @@ class Filters extends _base.BasePlugin {
|
|
139
140
|
* @type {MenuFocusNavigator|undefined}
|
140
141
|
*/
|
141
142
|
_classPrivateFieldInitSpec(this, _menuFocusNavigator, void 0);
|
143
|
+
/**
|
144
|
+
* Traces the new menu instances to apply the focus navigation to the latest one.
|
145
|
+
*
|
146
|
+
* @type {WeakSet<Menu>}
|
147
|
+
*/
|
148
|
+
_classPrivateFieldInitSpec(this, _dropdownMenuTraces, new WeakSet());
|
142
149
|
this.hot.addHook('afterGetColHeader', (col, TH) => _assertClassBrand(_Filters_brand, this, _onAfterGetColHeader).call(this, col, TH));
|
143
150
|
}
|
144
151
|
|
@@ -157,6 +164,7 @@ class Filters extends _base.BasePlugin {
|
|
157
164
|
* Enables the plugin functionality for this Handsontable instance.
|
158
165
|
*/
|
159
166
|
enablePlugin() {
|
167
|
+
var _this = this;
|
160
168
|
if (this.enabled) {
|
161
169
|
return;
|
162
170
|
}
|
@@ -218,7 +226,13 @@ class Filters extends _base.BasePlugin {
|
|
218
226
|
this.conditionUpdateObserver.addLocalHook('update', conditionState => _assertClassBrand(_Filters_brand, this, _updateComponents).call(this, conditionState));
|
219
227
|
}
|
220
228
|
this.components.forEach(component => component.show());
|
221
|
-
this.addHook('afterDropdownMenuDefaultOptions',
|
229
|
+
this.addHook('afterDropdownMenuDefaultOptions', function () {
|
230
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
231
|
+
args[_key] = arguments[_key];
|
232
|
+
}
|
233
|
+
return _assertClassBrand(_Filters_brand, _this, _onAfterDropdownMenuDefaultOptions).call(_this, ...args);
|
234
|
+
});
|
235
|
+
this.addHook('beforeDropdownMenuShow', () => _assertClassBrand(_Filters_brand, this, _onBeforeDropdownMenuShow).call(this));
|
222
236
|
this.addHook('afterDropdownMenuShow', () => _assertClassBrand(_Filters_brand, this, _onAfterDropdownMenuShow).call(this));
|
223
237
|
this.addHook('afterDropdownMenuHide', () => _assertClassBrand(_Filters_brand, this, _onAfterDropdownMenuHide).call(this));
|
224
238
|
this.addHook('afterChange', changes => _assertClassBrand(_Filters_brand, this, _onAfterChange).call(this, changes));
|
@@ -229,15 +243,15 @@ class Filters extends _base.BasePlugin {
|
|
229
243
|
this.dropdownMenuPlugin.enablePlugin();
|
230
244
|
}
|
231
245
|
if (!_classPrivateFieldGet(_menuFocusNavigator, this) && this.dropdownMenuPlugin.enabled) {
|
232
|
-
const mainMenu = this.dropdownMenuPlugin.menu;
|
233
246
|
const focusableItems = [
|
234
247
|
// A fake menu item that once focused allows escaping from the focus navigation (using Tab keys)
|
235
248
|
// to the menu navigation using arrow keys.
|
236
249
|
{
|
237
250
|
focus: () => {
|
238
|
-
const
|
251
|
+
const menu = _classPrivateFieldGet(_menuFocusNavigator, this).getMenu();
|
252
|
+
const menuNavigator = menu.getNavigator();
|
239
253
|
const lastSelectedMenuItem = _classPrivateFieldGet(_menuFocusNavigator, this).getLastMenuPage();
|
240
|
-
|
254
|
+
menu.focus();
|
241
255
|
if (lastSelectedMenuItem > 0) {
|
242
256
|
menuNavigator.setCurrentPage(lastSelectedMenuItem);
|
243
257
|
} else {
|
@@ -248,7 +262,7 @@ class Filters extends _base.BasePlugin {
|
|
248
262
|
let [, component] = _ref;
|
249
263
|
return component.getElements();
|
250
264
|
}).flat()];
|
251
|
-
_classPrivateFieldSet(_menuFocusNavigator, this, (0, _focusController.createMenuFocusController)(
|
265
|
+
_classPrivateFieldSet(_menuFocusNavigator, this, (0, _focusController.createMenuFocusController)(this.dropdownMenuPlugin.menu, focusableItems));
|
252
266
|
const forwardToFocusNavigation = event => {
|
253
267
|
_classPrivateFieldGet(_menuFocusNavigator, this).listen();
|
254
268
|
event.preventDefault();
|
@@ -706,8 +720,8 @@ class Filters extends _base.BasePlugin {
|
|
706
720
|
return indexes;
|
707
721
|
}
|
708
722
|
const menu = this.dropdownMenuPlugin.menu;
|
709
|
-
for (var
|
710
|
-
components[
|
723
|
+
for (var _len2 = arguments.length, components = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
724
|
+
components[_key2] = arguments[_key2];
|
711
725
|
}
|
712
726
|
(0, _array.arrayEach)(components, component => {
|
713
727
|
(0, _array.arrayEach)(menu.menuItems, (item, index) => {
|
@@ -734,8 +748,8 @@ class Filters extends _base.BasePlugin {
|
|
734
748
|
const menu = this.dropdownMenuPlugin.menu;
|
735
749
|
const hotMenu = menu.hotMenu;
|
736
750
|
const hiddenRows = hotMenu.getPlugin('hiddenRows');
|
737
|
-
for (var
|
738
|
-
components[
|
751
|
+
for (var _len3 = arguments.length, components = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
752
|
+
components[_key3 - 1] = arguments[_key3];
|
739
753
|
}
|
740
754
|
const indexes = this.getIndexesOfComponents(...components);
|
741
755
|
if (visible) {
|
@@ -753,8 +767,8 @@ class Filters extends _base.BasePlugin {
|
|
753
767
|
* @param {...BaseComponent} components List of components.
|
754
768
|
*/
|
755
769
|
hideComponents() {
|
756
|
-
for (var
|
757
|
-
components[
|
770
|
+
for (var _len4 = arguments.length, components = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
771
|
+
components[_key4] = arguments[_key4];
|
758
772
|
}
|
759
773
|
this.changeComponentsVisibility(false, ...components);
|
760
774
|
}
|
@@ -766,8 +780,8 @@ class Filters extends _base.BasePlugin {
|
|
766
780
|
* @param {...BaseComponent} components List of components.
|
767
781
|
*/
|
768
782
|
showComponents() {
|
769
|
-
for (var
|
770
|
-
components[
|
783
|
+
for (var _len5 = arguments.length, components = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
784
|
+
components[_key5] = arguments[_key5];
|
771
785
|
}
|
772
786
|
this.changeComponentsVisibility(true, ...components);
|
773
787
|
}
|
@@ -814,6 +828,16 @@ function _onAfterDropdownMenuHide() {
|
|
814
828
|
this.components.get('filter_by_condition').getSelectElement().closeOptions();
|
815
829
|
this.components.get('filter_by_condition2').getSelectElement().closeOptions();
|
816
830
|
}
|
831
|
+
/**
|
832
|
+
* Hooks applies the new dropdown menu instance to the focus navigator.
|
833
|
+
*/
|
834
|
+
function _onBeforeDropdownMenuShow() {
|
835
|
+
const mainMenu = this.dropdownMenuPlugin.menu;
|
836
|
+
if (!_classPrivateFieldGet(_dropdownMenuTraces, this).has(mainMenu)) {
|
837
|
+
_classPrivateFieldGet(_menuFocusNavigator, this).setMenu(mainMenu);
|
838
|
+
}
|
839
|
+
_classPrivateFieldGet(_dropdownMenuTraces, this).add(mainMenu);
|
840
|
+
}
|
817
841
|
/**
|
818
842
|
* After dropdown menu default options listener.
|
819
843
|
*
|