@shoper/phoenix_design_system 0.24.1 → 0.24.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +45 -29
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/form/color_swatches_control/color_swatches_control.js +6 -2
- package/build/cjs/packages/phoenix/src/components/form/color_swatches_control/color_swatches_control.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/messages/base_message.js +36 -16
- package/build/cjs/packages/phoenix/src/components/messages/base_message.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/messages/base_message_constants.js +2 -0
- package/build/cjs/packages/phoenix/src/components/messages/base_message_constants.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/messages/hints/hint.js +0 -1
- package/build/cjs/packages/phoenix/src/components/messages/hints/hint.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/messages/tooltips/tooltip.js +0 -1
- package/build/cjs/packages/phoenix/src/components/messages/tooltips/tooltip.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/tabs/tabs.js +2 -1
- package/build/cjs/packages/phoenix/src/components/tabs/tabs.js.map +1 -1
- package/build/cjs/packages/phoenix/src/controllers/btn_controller.js +3 -2
- package/build/cjs/packages/phoenix/src/controllers/btn_controller.js.map +1 -1
- package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +66 -22
- package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +4 -2
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +46 -30
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/form/color_swatches_control/color_swatches_control.d.ts +1 -1
- package/build/esm/packages/phoenix/src/components/form/color_swatches_control/color_swatches_control.js +6 -2
- package/build/esm/packages/phoenix/src/components/form/color_swatches_control/color_swatches_control.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/messages/base_message.d.ts +6 -3
- package/build/esm/packages/phoenix/src/components/messages/base_message.js +37 -17
- package/build/esm/packages/phoenix/src/components/messages/base_message.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/messages/base_message_constants.d.ts +1 -0
- package/build/esm/packages/phoenix/src/components/messages/base_message_constants.js +4 -3
- package/build/esm/packages/phoenix/src/components/messages/base_message_constants.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/messages/base_message_types.d.ts +4 -0
- package/build/esm/packages/phoenix/src/components/messages/base_message_types.js +2 -0
- package/build/esm/packages/phoenix/src/components/messages/base_message_types.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/messages/hints/hint.js +0 -1
- package/build/esm/packages/phoenix/src/components/messages/hints/hint.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/messages/tooltips/tooltip.js +0 -1
- package/build/esm/packages/phoenix/src/components/messages/tooltips/tooltip.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/portal/portal_constants.d.ts +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js +2 -1
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/btn_controller.js +3 -2
- package/build/esm/packages/phoenix/src/controllers/btn_controller.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts +11 -4
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +66 -22
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_types.d.ts +2 -1
- package/package.json +1 -1
- package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_constants.js +0 -8
- package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_constants.js.map +0 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_constants.d.ts +0 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_constants.js +0 -4
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_constants.js.map +0 -1
|
@@ -11,6 +11,7 @@ var portal_constants = require('../portal/portal_constants.js');
|
|
|
11
11
|
var litHtml = require('lit-html');
|
|
12
12
|
var backdrop_controller = require('../backdrop/controller/backdrop_controller.js');
|
|
13
13
|
var decorators_js = require('@lit/reactive-element/decorators.js');
|
|
14
|
+
var keystrokes_controller = require('../../controllers/keystrokes_controller/keystrokes_controller.js');
|
|
14
15
|
var global_constants = require('../../global_constants.js');
|
|
15
16
|
var dropdown_constants = require('./dropdown_constants.js');
|
|
16
17
|
var relative_position_controller_constants = require('../../controllers/relative_position_controller/relative_position_controller_constants.js');
|
|
@@ -21,7 +22,7 @@ var relative_position_controller = require('../../controllers/relative_position_
|
|
|
21
22
|
var HDropdown_1;
|
|
22
23
|
exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
23
24
|
constructor() {
|
|
24
|
-
super(
|
|
25
|
+
super();
|
|
25
26
|
this.opened = false;
|
|
26
27
|
this.direction = relative_position_controller_constants.DIRECTIONS.bottomCenter;
|
|
27
28
|
this.toggleOnHover = false;
|
|
@@ -55,13 +56,13 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
55
56
|
}, 0);
|
|
56
57
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
57
58
|
setTimeout(() => {
|
|
58
|
-
var _a, _b
|
|
59
|
+
var _a, _b;
|
|
59
60
|
this._dispatchShowDropdownEvent();
|
|
60
61
|
(_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
|
|
61
62
|
this._toggleScroll();
|
|
62
63
|
if (!this._lastFocusableElement)
|
|
63
64
|
this._lastFocusableElement = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.lastElementChild;
|
|
64
|
-
|
|
65
|
+
utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
|
|
65
66
|
resolve();
|
|
66
67
|
}, transitionDuration);
|
|
67
68
|
});
|
|
@@ -132,20 +133,35 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
132
133
|
return;
|
|
133
134
|
await this.hide();
|
|
134
135
|
};
|
|
135
|
-
this.
|
|
136
|
+
this._handleForwardFocus = async (ev) => {
|
|
137
|
+
const $focusableElementsWithinDropdownContent = utilities.UiDomUtils.getFocusableElements(this.$dropdownContent);
|
|
138
|
+
const doesNotHaveFocusableElementsInsideContent = $focusableElementsWithinDropdownContent.length <= 0 && this.opened;
|
|
139
|
+
const isActiveElementLastFocusableElement = document.activeElement === this._lastFocusableElement;
|
|
140
|
+
if (doesNotHaveFocusableElementsInsideContent || isActiveElementLastFocusableElement)
|
|
141
|
+
this._focusOnNextElementAfterToggler(ev);
|
|
142
|
+
};
|
|
143
|
+
this._focusOnNextElementAfterToggler = async (ev) => {
|
|
144
|
+
ev.preventDefault();
|
|
145
|
+
const $focusableElements = utilities.UiDomUtils.getFocusableElements(document.body);
|
|
146
|
+
const indexOfDropdownToggler = $focusableElements.indexOf(this.$dropdownToggler);
|
|
147
|
+
const $nextElementToFocus = $focusableElements.find((currentElement, index) => {
|
|
148
|
+
if (index > indexOfDropdownToggler && !currentElement.closest(`${dropdown_constants.DROPDOWN_TOGGLER_NAME}[name="${this.name}"]`))
|
|
149
|
+
return currentElement;
|
|
150
|
+
return null;
|
|
151
|
+
});
|
|
152
|
+
if ($nextElementToFocus)
|
|
153
|
+
$nextElementToFocus.focus();
|
|
154
|
+
await this._hideDropdownsSequentially();
|
|
155
|
+
await this.hide();
|
|
156
|
+
};
|
|
157
|
+
this._handleBackwardFocus = async (ev) => {
|
|
136
158
|
var _a;
|
|
137
|
-
const hasTabBeenPressed = ev.key.toLowerCase() === 'tab';
|
|
138
|
-
if (hasTabBeenPressed && document.activeElement === this._lastFocusableElement) {
|
|
139
|
-
ev.preventDefault();
|
|
140
|
-
this._focusOnNextSibling(this.nextElementSibling || this);
|
|
141
|
-
await this._hideDropdownsSequentially();
|
|
142
|
-
}
|
|
143
159
|
const $firstFocusableElement = this.$dropdownContent && utilities.UiDomUtils.getFocusableElement(this.$dropdownContent);
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
160
|
+
if (document.activeElement !== $firstFocusableElement)
|
|
161
|
+
return;
|
|
162
|
+
ev.preventDefault();
|
|
163
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
164
|
+
await this._hideDropdownsSequentially();
|
|
149
165
|
};
|
|
150
166
|
this._hoverToggle = async (ev) => {
|
|
151
167
|
if (window.innerWidth < global_constants.BREAKPOINTS.xs)
|
|
@@ -169,6 +185,18 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
169
185
|
: this._positionController.position();
|
|
170
186
|
});
|
|
171
187
|
};
|
|
188
|
+
new keystrokes_controller.KeystrokesController({
|
|
189
|
+
host: this,
|
|
190
|
+
target: document.body,
|
|
191
|
+
keys: ['tab'],
|
|
192
|
+
callback: this._handleForwardFocus
|
|
193
|
+
});
|
|
194
|
+
new keystrokes_controller.KeystrokesController({
|
|
195
|
+
host: this,
|
|
196
|
+
target: document.body,
|
|
197
|
+
keys: [['shift', 'tab']],
|
|
198
|
+
callback: this._handleBackwardFocus
|
|
199
|
+
});
|
|
172
200
|
}
|
|
173
201
|
connectedCallback() {
|
|
174
202
|
var _a;
|
|
@@ -225,7 +253,6 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
225
253
|
document.addEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
226
254
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
227
255
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
228
|
-
document.addEventListener('keydown', this._handleFocusWithinDropdown);
|
|
229
256
|
if (this.toggleOnHover)
|
|
230
257
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
231
258
|
}
|
|
@@ -245,17 +272,6 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
245
272
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(global_constants.SCROLLABLE_CLASS_NAME);
|
|
246
273
|
}
|
|
247
274
|
}
|
|
248
|
-
_focusOnNextSibling(el) {
|
|
249
|
-
el.focus();
|
|
250
|
-
if (el === document.activeElement)
|
|
251
|
-
return;
|
|
252
|
-
if (el.firstElementChild) {
|
|
253
|
-
this._focusOnNextSibling(el.firstElementChild);
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
if (el.nextElementSibling)
|
|
257
|
-
this._focusOnNextSibling(el.nextElementSibling);
|
|
258
|
-
}
|
|
259
275
|
_isHoveredWithinDropdown(element) {
|
|
260
276
|
var _a;
|
|
261
277
|
if (element === this)
|
|
@@ -287,7 +303,6 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
287
303
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
288
304
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
289
305
|
document.removeEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
290
|
-
document.removeEventListener('keydown', this._handleFocusWithinDropdown);
|
|
291
306
|
if (this.toggleOnHover)
|
|
292
307
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
293
308
|
if (this.opened) {
|
|
@@ -334,6 +349,7 @@ tslib_es6.__decorate([
|
|
|
334
349
|
tslib_es6.__metadata("design:type", Object)
|
|
335
350
|
], exports.HDropdown.prototype, "_lastFocusableElement", void 0);
|
|
336
351
|
exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
|
|
337
|
-
phoenix_custom_element.phoenixCustomElement('h-dropdown')
|
|
352
|
+
phoenix_custom_element.phoenixCustomElement('h-dropdown'),
|
|
353
|
+
tslib_es6.__metadata("design:paramtypes", [])
|
|
338
354
|
], exports.HDropdown);
|
|
339
355
|
//# sourceMappingURL=dropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -37,7 +37,11 @@ exports.HColorSwatchesControl = class HColorSwatchesControl extends phoenix_ligh
|
|
|
37
37
|
}
|
|
38
38
|
render() {
|
|
39
39
|
return lit.html `
|
|
40
|
-
<h-input-control
|
|
40
|
+
<h-input-control
|
|
41
|
+
controlName="${this.controlName}"
|
|
42
|
+
type="${input_constants.INPUT_CONTROL_TYPES.hidden}"
|
|
43
|
+
value="${this.selectedColors}"
|
|
44
|
+
></h-input-control>
|
|
41
45
|
`;
|
|
42
46
|
}
|
|
43
47
|
};
|
|
@@ -48,7 +52,7 @@ tslib_es6.__decorate([
|
|
|
48
52
|
tslib_es6.__decorate([
|
|
49
53
|
decorators.property({ type: String }),
|
|
50
54
|
tslib_es6.__metadata("design:type", String)
|
|
51
|
-
], exports.HColorSwatchesControl.prototype, "
|
|
55
|
+
], exports.HColorSwatchesControl.prototype, "controlName", void 0);
|
|
52
56
|
tslib_es6.__decorate([
|
|
53
57
|
decorators.property({ type: Boolean }),
|
|
54
58
|
tslib_es6.__metadata("design:type", Boolean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA,oBAAoB,0CAA8C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA,oBAAoB,0CAA8C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -21,9 +21,9 @@ class BaseMessage extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
|
21
21
|
this.direction = relative_position_controller_constants.DIRECTIONS.topCenter;
|
|
22
22
|
this.offset = base_message_constants.DEFAULT_MESSAGE_OFFSET;
|
|
23
23
|
this._setupEventListeners = () => {
|
|
24
|
-
this.addEventListener('mouseenter', this.
|
|
25
|
-
this.addEventListener('mouseleave', this.
|
|
26
|
-
this.addEventListener('focus', this.
|
|
24
|
+
this.addEventListener('mouseenter', this.open);
|
|
25
|
+
this.addEventListener('mouseleave', this.close);
|
|
26
|
+
this.addEventListener('focus', this.open);
|
|
27
27
|
};
|
|
28
28
|
this._positionMessage = () => {
|
|
29
29
|
requestAnimationFrame(() => {
|
|
@@ -31,7 +31,7 @@ class BaseMessage extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
|
31
31
|
(_a = this._$messageContent) === null || _a === void 0 ? void 0 : _a.setAttribute('direction', this._positionController.position());
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
|
-
this.
|
|
34
|
+
this.open = () => {
|
|
35
35
|
this._tooltipOpenTime = Date.now();
|
|
36
36
|
clearTimeout(this._closeTimeout);
|
|
37
37
|
this._openTimeout = setTimeout(() => {
|
|
@@ -40,7 +40,7 @@ class BaseMessage extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
|
40
40
|
this.opened = true;
|
|
41
41
|
}, base_message_constants.MESSAGE_SHOW_DELAY_IN_MS);
|
|
42
42
|
};
|
|
43
|
-
this.
|
|
43
|
+
this.close = () => {
|
|
44
44
|
this._shouldDelayClosing = Date.now() - this._tooltipOpenTime > base_message_constants.MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS;
|
|
45
45
|
clearTimeout(this._openTimeout);
|
|
46
46
|
if (!this.opened)
|
|
@@ -62,31 +62,46 @@ class BaseMessage extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
|
62
62
|
this._handleFocusWithinMessage = (ev) => {
|
|
63
63
|
var _a;
|
|
64
64
|
if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest(`.${this._messageComponentName}`)) !== this)
|
|
65
|
-
this.
|
|
66
|
-
if (!document.activeElement)
|
|
65
|
+
this.close();
|
|
66
|
+
if (!document.activeElement || ev.shiftKey)
|
|
67
67
|
return;
|
|
68
68
|
const $focusableElements = utilities.UiDomUtils.getFocusableElements(this);
|
|
69
69
|
const activeElementIndex = $focusableElements.indexOf(document.activeElement);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!isPenultimate)
|
|
70
|
+
const isLastFocusableChild = activeElementIndex === $focusableElements.length - 1;
|
|
71
|
+
if (!isLastFocusableChild)
|
|
73
72
|
return;
|
|
74
|
-
this.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
73
|
+
this.close();
|
|
74
|
+
};
|
|
75
|
+
this._handleReverseTab = () => {
|
|
76
|
+
const $focusableElements = utilities.UiDomUtils.getFocusableElements(document.body);
|
|
77
|
+
const activeElement = document.activeElement;
|
|
78
|
+
const indexOfCurrentlyFocusedElement = $focusableElements.indexOf(activeElement);
|
|
79
|
+
const $previousElement = $focusableElements[indexOfCurrentlyFocusedElement - 1];
|
|
80
|
+
const $previousElementMessageParent = $previousElement === null || $previousElement === void 0 ? void 0 : $previousElement.closest(`h-${this._messageComponentName}`);
|
|
81
|
+
if ($previousElementMessageParent === this)
|
|
82
|
+
return;
|
|
83
|
+
if ($previousElementMessageParent)
|
|
84
|
+
$previousElementMessageParent.open();
|
|
85
|
+
if (this._isBaseMessage(activeElement))
|
|
86
|
+
activeElement.close();
|
|
79
87
|
};
|
|
80
88
|
this._clickOutsideController = new click_outside_controller.ClickOutsideController({
|
|
81
89
|
host: this,
|
|
82
90
|
container: this,
|
|
83
|
-
action: this.
|
|
91
|
+
action: this.close
|
|
84
92
|
});
|
|
85
93
|
new keystrokes_controller.KeystrokesController({
|
|
86
94
|
host: this,
|
|
87
95
|
keys: ['tab'],
|
|
96
|
+
target: this,
|
|
88
97
|
callback: this._handleFocusWithinMessage
|
|
89
98
|
});
|
|
99
|
+
new keystrokes_controller.KeystrokesController({
|
|
100
|
+
host: this,
|
|
101
|
+
keys: [['shift', 'tab']],
|
|
102
|
+
target: document.body,
|
|
103
|
+
callback: this._handleReverseTab
|
|
104
|
+
});
|
|
90
105
|
}
|
|
91
106
|
connectedCallback(messageComponentName = '') {
|
|
92
107
|
super.connectedCallback();
|
|
@@ -113,6 +128,11 @@ class BaseMessage extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
|
113
128
|
$portalTarget.setAttribute(portal_constants.PORTAL_TARGET_NAME_PROP, base_message_constants.DEFAULT_MESSAGE_PORTAL_NAME);
|
|
114
129
|
document.body.appendChild($portalTarget);
|
|
115
130
|
}
|
|
131
|
+
_isBaseMessage($element) {
|
|
132
|
+
if (base_message_constants.MESSAGE_ELEMENTS.includes($element.localName))
|
|
133
|
+
return true;
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
116
136
|
}
|
|
117
137
|
tslib_es6.__decorate([
|
|
118
138
|
decorators.property({ type: Boolean, reflect: true }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -9,6 +9,7 @@ const DEFAULT_MESSAGE_PORTAL_NAME = 'message-portal';
|
|
|
9
9
|
const MESSAGE_CONTENT_SLOT_NAME = 'message-content';
|
|
10
10
|
const MESSAGE_REMOVED_CLASS_NAME = `removed`;
|
|
11
11
|
const DEFAULT_MESSAGE_OFFSET = 10;
|
|
12
|
+
const MESSAGE_ELEMENTS = [tooltip_constants.TOOLTIP_ELEMENT_NAME, hint_constants.HINT_ELEMENT_NAME];
|
|
12
13
|
const MESSAGE_CONTENT_ELEMENTS = [tooltip_constants.TOOLTIP_CONTENT_ELEMENT_NAME, hint_constants.HINT_CONTENT_ELEMENT_NAME];
|
|
13
14
|
const MESSAGE_SHOW_DELAY_IN_MS = 100;
|
|
14
15
|
const MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS = 500;
|
|
@@ -19,6 +20,7 @@ exports.DEFAULT_MESSAGE_PORTAL_NAME = DEFAULT_MESSAGE_PORTAL_NAME;
|
|
|
19
20
|
exports.MESSAGE_CLOSE_DELAY_IN_MS = MESSAGE_CLOSE_DELAY_IN_MS;
|
|
20
21
|
exports.MESSAGE_CONTENT_ELEMENTS = MESSAGE_CONTENT_ELEMENTS;
|
|
21
22
|
exports.MESSAGE_CONTENT_SLOT_NAME = MESSAGE_CONTENT_SLOT_NAME;
|
|
23
|
+
exports.MESSAGE_ELEMENTS = MESSAGE_ELEMENTS;
|
|
22
24
|
exports.MESSAGE_REMOVED_CLASS_NAME = MESSAGE_REMOVED_CLASS_NAME;
|
|
23
25
|
exports.MESSAGE_SHOW_DELAY_IN_MS = MESSAGE_SHOW_DELAY_IN_MS;
|
|
24
26
|
exports.MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS = MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -24,7 +24,6 @@ exports.HHint = class HHint extends base_message.BaseMessage {
|
|
|
24
24
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionMessage}" to="${this.portalTarget}" hidden>
|
|
25
25
|
${this.getSlot(base_message_constants.MESSAGE_CONTENT_SLOT_NAME)}
|
|
26
26
|
</h-portal>
|
|
27
|
-
<div tabindex="0"></div>
|
|
28
27
|
`;
|
|
29
28
|
}
|
|
30
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -20,7 +20,6 @@ exports.HTooltip = class HTooltip extends base_message.BaseMessage {
|
|
|
20
20
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionMessage}" to="${this.portalTarget}" hidden>
|
|
21
21
|
${this.getSlot(base_message_constants.MESSAGE_CONTENT_SLOT_NAME)}
|
|
22
22
|
</h-portal>
|
|
23
|
-
<div tabindex="0"></div>
|
|
24
23
|
`;
|
|
25
24
|
}
|
|
26
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,+CAAmD;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -44,7 +44,8 @@ exports.HTabs = class HTabs extends phoenix_light_lit_element.PhoenixLightLitEle
|
|
|
44
44
|
new keystrokes_controller.KeystrokesController({
|
|
45
45
|
host: this,
|
|
46
46
|
keys: ['ArrowRight', 'ArrowLeft'],
|
|
47
|
-
callback: this._handleArrowNavigation
|
|
47
|
+
callback: this._handleArrowNavigation,
|
|
48
|
+
target: this
|
|
48
49
|
});
|
|
49
50
|
}
|
|
50
51
|
_getFocusedTabIndex() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -12,8 +12,9 @@ class BtnController {
|
|
|
12
12
|
this.host.setAttribute('role', 'button');
|
|
13
13
|
this._keystrokesController = new keystrokes_controller.KeystrokesController({
|
|
14
14
|
host,
|
|
15
|
-
keys: ['
|
|
16
|
-
callback
|
|
15
|
+
keys: ['enter', ' '],
|
|
16
|
+
callback,
|
|
17
|
+
target: host
|
|
17
18
|
});
|
|
18
19
|
}
|
|
19
20
|
hostConnected() { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js
CHANGED
|
@@ -4,47 +4,91 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
|
|
6
6
|
require('lit');
|
|
7
|
-
var keystrokes_controller_constants = require('./keystrokes_controller_constants.js');
|
|
8
7
|
|
|
9
|
-
var _KeystrokesController_host;
|
|
8
|
+
var _KeystrokesController_host, _KeystrokesController_target;
|
|
10
9
|
class KeystrokesController {
|
|
11
|
-
constructor({ host, keys, callback }) {
|
|
10
|
+
constructor({ host, keys, callback, target }) {
|
|
12
11
|
_KeystrokesController_host.set(this, void 0);
|
|
12
|
+
_KeystrokesController_target.set(this, void 0);
|
|
13
13
|
this._buffer = [];
|
|
14
|
-
this.
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
this._clearBuffer = () => {
|
|
15
|
+
this._buffer = [];
|
|
16
|
+
};
|
|
17
|
+
this._saveKey = (ev) => {
|
|
17
18
|
const key = ev.key.toLowerCase();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if (!this._buffer.includes(key))
|
|
20
|
+
this._buffer = [...this._buffer, key];
|
|
21
|
+
this._bindSavedKeysWithCallback(ev, this._buffer);
|
|
22
|
+
};
|
|
23
|
+
this._bindSavedKeysWithCallback = (ev, savedKeys) => {
|
|
24
|
+
if (typeof this._keys === 'string') {
|
|
25
|
+
this._bindWithOneKey(ev, savedKeys);
|
|
26
|
+
return;
|
|
21
27
|
}
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
const areAllKeysPressed = this._isKeySequenceMultiple(this._keys)
|
|
29
|
+
? this._areAllKeysPressedInMultipleSequences(this._keys, savedKeys)
|
|
30
|
+
: this._isOneOfTheKeysPressed(this._keys, savedKeys);
|
|
31
|
+
if (areAllKeysPressed)
|
|
32
|
+
this._callback(ev);
|
|
25
33
|
};
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
return
|
|
34
|
+
this._bindWithOneKey = (ev, savedKeys) => {
|
|
35
|
+
if (!savedKeys.includes(this._keys))
|
|
36
|
+
return;
|
|
37
|
+
this._callback(ev);
|
|
38
|
+
};
|
|
39
|
+
this._isKeySequenceMultiple = (keySequence) => {
|
|
40
|
+
const firstSequence = keySequence[0];
|
|
41
|
+
if (typeof firstSequence === 'object')
|
|
42
|
+
return true;
|
|
43
|
+
return false;
|
|
44
|
+
};
|
|
45
|
+
this._areAllKeysPressedInMultipleSequences = (keySequences, savedKeys) => {
|
|
46
|
+
return !!keySequences.find((keySequence) => {
|
|
47
|
+
return this._areAllKeysPressedInSingleSequence(keySequence, savedKeys);
|
|
29
48
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
49
|
+
};
|
|
50
|
+
this._areAllKeysPressedInSingleSequence = (keySequence, savedKeys) => {
|
|
51
|
+
const indexesInSavedKeys = this._calculateIndexesInSavedKeys(keySequence, savedKeys);
|
|
52
|
+
if (indexesInSavedKeys.includes(-1))
|
|
53
|
+
return false;
|
|
54
|
+
const firstPressedKeyIndex = indexesInSavedKeys[0];
|
|
55
|
+
const lastPressedKeyIndex = indexesInSavedKeys[indexesInSavedKeys.length - 1];
|
|
56
|
+
const areKeysPressedSequentially = lastPressedKeyIndex - firstPressedKeyIndex === indexesInSavedKeys.length - 1;
|
|
57
|
+
return areKeysPressedSequentially;
|
|
58
|
+
};
|
|
59
|
+
this._isOneOfTheKeysPressed = (keys, savedKeys) => {
|
|
60
|
+
const indexesInSavedKeys = this._calculateIndexesInSavedKeys(keys, savedKeys);
|
|
61
|
+
return typeof indexesInSavedKeys.find((index) => index > -1) === 'number';
|
|
62
|
+
};
|
|
63
|
+
this._calculateIndexesInSavedKeys = (keySequence, savedKeys) => {
|
|
64
|
+
return keySequence.reduce((allIndexes, currentKeyInSequence) => {
|
|
65
|
+
return [...allIndexes, savedKeys.indexOf(currentKeyInSequence.toLowerCase())];
|
|
66
|
+
}, []);
|
|
67
|
+
};
|
|
68
|
+
// do ogrania jeszcze string czyli zapięcie się na jeden guzik
|
|
69
|
+
this._removeKey = (ev) => {
|
|
70
|
+
const key = ev.key.toLowerCase();
|
|
71
|
+
if (this._buffer.includes(key))
|
|
72
|
+
this._buffer = this._buffer.filter((currentSavedKey) => currentSavedKey !== key);
|
|
34
73
|
};
|
|
35
74
|
tslib_es6.__classPrivateFieldSet(this, _KeystrokesController_host, host, "f");
|
|
75
|
+
tslib_es6.__classPrivateFieldSet(this, _KeystrokesController_target, target, "f");
|
|
36
76
|
this._keys = keys;
|
|
37
77
|
this._callback = callback;
|
|
38
78
|
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").addController(this);
|
|
79
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keydown', this._saveKey);
|
|
80
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keyup', this._removeKey);
|
|
39
81
|
}
|
|
40
82
|
hostConnected() {
|
|
41
|
-
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").addEventListener('
|
|
83
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").addEventListener('focusout', this._clearBuffer);
|
|
42
84
|
}
|
|
43
85
|
hostDisconnected() {
|
|
44
|
-
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").removeEventListener('
|
|
86
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").removeEventListener('focusout', this._clearBuffer);
|
|
87
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keydown', this._saveKey);
|
|
88
|
+
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keyup', this._removeKey);
|
|
45
89
|
}
|
|
46
90
|
}
|
|
47
|
-
_KeystrokesController_host = new WeakMap();
|
|
91
|
+
_KeystrokesController_host = new WeakMap(), _KeystrokesController_target = new WeakMap();
|
|
48
92
|
|
|
49
93
|
exports.KeystrokesController = KeystrokesController;
|
|
50
94
|
//# sourceMappingURL=keystrokes_controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -20,6 +20,7 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
20
20
|
private _backdropController;
|
|
21
21
|
_lastFocusableElement: HTMLElement | undefined;
|
|
22
22
|
private _rootDropdown?;
|
|
23
|
+
constructor();
|
|
23
24
|
connectedCallback(): void;
|
|
24
25
|
private static _appendDropdownPortal;
|
|
25
26
|
private _findRootDropdown;
|
|
@@ -36,8 +37,9 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
36
37
|
private _observeScrollToggling;
|
|
37
38
|
private _toggleScroll;
|
|
38
39
|
private _closeDropdownOnEscape;
|
|
39
|
-
private
|
|
40
|
-
private
|
|
40
|
+
private _handleForwardFocus;
|
|
41
|
+
private _focusOnNextElementAfterToggler;
|
|
42
|
+
private _handleBackwardFocus;
|
|
41
43
|
private _hoverToggle;
|
|
42
44
|
private _isHoveredWithinDropdown;
|
|
43
45
|
private _setupInitialDropdownProperties;
|
|
@@ -7,8 +7,9 @@ import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal
|
|
|
7
7
|
import { html } from 'lit-html';
|
|
8
8
|
import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
|
|
9
9
|
import { property } from '@lit/reactive-element/decorators.js';
|
|
10
|
+
import { KeystrokesController } from '../../controllers/keystrokes_controller/keystrokes_controller.js';
|
|
10
11
|
import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
|
|
11
|
-
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_HIDE,
|
|
12
|
+
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_HIDE, DROPDOWN_TOGGLER_NAME, DROPDOWN_CONTENT_NAME } from './dropdown_constants.js';
|
|
12
13
|
import { DIRECTIONS, RELATIVE_POSITION_CONTROLLER_EVENTS, DEFAULT_THROTTLE_WAIT_TIME } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
|
|
13
14
|
import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
|
|
14
15
|
import throttle_1 from '../../../../../external/lodash/throttle.js';
|
|
@@ -17,7 +18,7 @@ import { RelativePositionController } from '../../controllers/relative_position_
|
|
|
17
18
|
var HDropdown_1;
|
|
18
19
|
let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
19
20
|
constructor() {
|
|
20
|
-
super(
|
|
21
|
+
super();
|
|
21
22
|
this.opened = false;
|
|
22
23
|
this.direction = DIRECTIONS.bottomCenter;
|
|
23
24
|
this.toggleOnHover = false;
|
|
@@ -51,13 +52,13 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
51
52
|
}, 0);
|
|
52
53
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
53
54
|
setTimeout(() => {
|
|
54
|
-
var _a, _b
|
|
55
|
+
var _a, _b;
|
|
55
56
|
this._dispatchShowDropdownEvent();
|
|
56
57
|
(_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
|
|
57
58
|
this._toggleScroll();
|
|
58
59
|
if (!this._lastFocusableElement)
|
|
59
60
|
this._lastFocusableElement = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.lastElementChild;
|
|
60
|
-
|
|
61
|
+
UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
|
|
61
62
|
resolve();
|
|
62
63
|
}, transitionDuration);
|
|
63
64
|
});
|
|
@@ -128,20 +129,35 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
128
129
|
return;
|
|
129
130
|
await this.hide();
|
|
130
131
|
};
|
|
131
|
-
this.
|
|
132
|
+
this._handleForwardFocus = async (ev) => {
|
|
133
|
+
const $focusableElementsWithinDropdownContent = UiDomUtils.getFocusableElements(this.$dropdownContent);
|
|
134
|
+
const doesNotHaveFocusableElementsInsideContent = $focusableElementsWithinDropdownContent.length <= 0 && this.opened;
|
|
135
|
+
const isActiveElementLastFocusableElement = document.activeElement === this._lastFocusableElement;
|
|
136
|
+
if (doesNotHaveFocusableElementsInsideContent || isActiveElementLastFocusableElement)
|
|
137
|
+
this._focusOnNextElementAfterToggler(ev);
|
|
138
|
+
};
|
|
139
|
+
this._focusOnNextElementAfterToggler = async (ev) => {
|
|
140
|
+
ev.preventDefault();
|
|
141
|
+
const $focusableElements = UiDomUtils.getFocusableElements(document.body);
|
|
142
|
+
const indexOfDropdownToggler = $focusableElements.indexOf(this.$dropdownToggler);
|
|
143
|
+
const $nextElementToFocus = $focusableElements.find((currentElement, index) => {
|
|
144
|
+
if (index > indexOfDropdownToggler && !currentElement.closest(`${DROPDOWN_TOGGLER_NAME}[name="${this.name}"]`))
|
|
145
|
+
return currentElement;
|
|
146
|
+
return null;
|
|
147
|
+
});
|
|
148
|
+
if ($nextElementToFocus)
|
|
149
|
+
$nextElementToFocus.focus();
|
|
150
|
+
await this._hideDropdownsSequentially();
|
|
151
|
+
await this.hide();
|
|
152
|
+
};
|
|
153
|
+
this._handleBackwardFocus = async (ev) => {
|
|
132
154
|
var _a;
|
|
133
|
-
const hasTabBeenPressed = ev.key.toLowerCase() === 'tab';
|
|
134
|
-
if (hasTabBeenPressed && document.activeElement === this._lastFocusableElement) {
|
|
135
|
-
ev.preventDefault();
|
|
136
|
-
this._focusOnNextSibling(this.nextElementSibling || this);
|
|
137
|
-
await this._hideDropdownsSequentially();
|
|
138
|
-
}
|
|
139
155
|
const $firstFocusableElement = this.$dropdownContent && UiDomUtils.getFocusableElement(this.$dropdownContent);
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
156
|
+
if (document.activeElement !== $firstFocusableElement)
|
|
157
|
+
return;
|
|
158
|
+
ev.preventDefault();
|
|
159
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
160
|
+
await this._hideDropdownsSequentially();
|
|
145
161
|
};
|
|
146
162
|
this._hoverToggle = async (ev) => {
|
|
147
163
|
if (window.innerWidth < BREAKPOINTS.xs)
|
|
@@ -165,6 +181,18 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
165
181
|
: this._positionController.position();
|
|
166
182
|
});
|
|
167
183
|
};
|
|
184
|
+
new KeystrokesController({
|
|
185
|
+
host: this,
|
|
186
|
+
target: document.body,
|
|
187
|
+
keys: ['tab'],
|
|
188
|
+
callback: this._handleForwardFocus
|
|
189
|
+
});
|
|
190
|
+
new KeystrokesController({
|
|
191
|
+
host: this,
|
|
192
|
+
target: document.body,
|
|
193
|
+
keys: [['shift', 'tab']],
|
|
194
|
+
callback: this._handleBackwardFocus
|
|
195
|
+
});
|
|
168
196
|
}
|
|
169
197
|
connectedCallback() {
|
|
170
198
|
var _a;
|
|
@@ -221,7 +249,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
221
249
|
document.addEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
222
250
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
223
251
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
224
|
-
document.addEventListener('keydown', this._handleFocusWithinDropdown);
|
|
225
252
|
if (this.toggleOnHover)
|
|
226
253
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
227
254
|
}
|
|
@@ -241,17 +268,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
241
268
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(SCROLLABLE_CLASS_NAME);
|
|
242
269
|
}
|
|
243
270
|
}
|
|
244
|
-
_focusOnNextSibling(el) {
|
|
245
|
-
el.focus();
|
|
246
|
-
if (el === document.activeElement)
|
|
247
|
-
return;
|
|
248
|
-
if (el.firstElementChild) {
|
|
249
|
-
this._focusOnNextSibling(el.firstElementChild);
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
if (el.nextElementSibling)
|
|
253
|
-
this._focusOnNextSibling(el.nextElementSibling);
|
|
254
|
-
}
|
|
255
271
|
_isHoveredWithinDropdown(element) {
|
|
256
272
|
var _a;
|
|
257
273
|
if (element === this)
|
|
@@ -283,7 +299,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
283
299
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
284
300
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
285
301
|
document.removeEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
286
|
-
document.removeEventListener('keydown', this._handleFocusWithinDropdown);
|
|
287
302
|
if (this.toggleOnHover)
|
|
288
303
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
289
304
|
if (this.opened) {
|
|
@@ -330,7 +345,8 @@ __decorate([
|
|
|
330
345
|
__metadata("design:type", Object)
|
|
331
346
|
], HDropdown.prototype, "_lastFocusableElement", void 0);
|
|
332
347
|
HDropdown = HDropdown_1 = __decorate([
|
|
333
|
-
phoenixCustomElement('h-dropdown')
|
|
348
|
+
phoenixCustomElement('h-dropdown'),
|
|
349
|
+
__metadata("design:paramtypes", [])
|
|
334
350
|
], HDropdown);
|
|
335
351
|
|
|
336
352
|
export { HDropdown };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -2,7 +2,7 @@ import { TemplateResult } from 'lit';
|
|
|
2
2
|
import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
3
3
|
export declare class HColorSwatchesControl extends PhoenixLightLitElement {
|
|
4
4
|
controlId: string;
|
|
5
|
-
|
|
5
|
+
controlName: string;
|
|
6
6
|
disabled: boolean;
|
|
7
7
|
required: boolean;
|
|
8
8
|
error: boolean;
|
|
@@ -33,7 +33,11 @@ let HColorSwatchesControl = class HColorSwatchesControl extends PhoenixLightLitE
|
|
|
33
33
|
}
|
|
34
34
|
render() {
|
|
35
35
|
return html `
|
|
36
|
-
<h-input-control
|
|
36
|
+
<h-input-control
|
|
37
|
+
controlName="${this.controlName}"
|
|
38
|
+
type="${INPUT_CONTROL_TYPES.hidden}"
|
|
39
|
+
value="${this.selectedColors}"
|
|
40
|
+
></h-input-control>
|
|
37
41
|
`;
|
|
38
42
|
}
|
|
39
43
|
};
|
|
@@ -44,7 +48,7 @@ __decorate([
|
|
|
44
48
|
__decorate([
|
|
45
49
|
property({ type: String }),
|
|
46
50
|
__metadata("design:type", String)
|
|
47
|
-
], HColorSwatchesControl.prototype, "
|
|
51
|
+
], HColorSwatchesControl.prototype, "controlName", void 0);
|
|
48
52
|
__decorate([
|
|
49
53
|
property({ type: Boolean }),
|
|
50
54
|
__metadata("design:type", Boolean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA,uBAAuB,0CAA8C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA,uBAAuB,0CAA8C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { IBaseMessage } from './base_message_types';
|
|
1
2
|
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
3
|
import type { TDirection } from "../../controllers/relative_position_controller/relative_position_controller_types";
|
|
3
|
-
export declare class BaseMessage extends PhoenixLightLitElement {
|
|
4
|
+
export declare class BaseMessage extends PhoenixLightLitElement implements IBaseMessage {
|
|
4
5
|
opened: boolean;
|
|
5
6
|
portalTarget: string;
|
|
6
7
|
direction: TDirection;
|
|
@@ -18,7 +19,9 @@ export declare class BaseMessage extends PhoenixLightLitElement {
|
|
|
18
19
|
private static _appendMessagePortal;
|
|
19
20
|
private _setupEventListeners;
|
|
20
21
|
protected _positionMessage: () => void;
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
open: () => void;
|
|
23
|
+
close: () => void;
|
|
23
24
|
private _handleFocusWithinMessage;
|
|
25
|
+
private _handleReverseTab;
|
|
26
|
+
private _isBaseMessage;
|
|
24
27
|
}
|
|
@@ -7,7 +7,7 @@ import { KeystrokesController } from '../../controllers/keystrokes_controller/ke
|
|
|
7
7
|
import { DIRECTIONS } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
|
|
8
8
|
import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
|
|
9
9
|
import { RelativePositionController } from '../../controllers/relative_position_controller/relative_position_controller.js';
|
|
10
|
-
import { DEFAULT_MESSAGE_PORTAL_NAME, DEFAULT_MESSAGE_OFFSET, MESSAGE_SHOW_DELAY_IN_MS, MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS, MESSAGE_REMOVED_CLASS_NAME, MESSAGE_CLOSE_DELAY_IN_MS, MESSAGE_CONTENT_ELEMENTS } from './base_message_constants.js';
|
|
10
|
+
import { DEFAULT_MESSAGE_PORTAL_NAME, DEFAULT_MESSAGE_OFFSET, MESSAGE_SHOW_DELAY_IN_MS, MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS, MESSAGE_REMOVED_CLASS_NAME, MESSAGE_CLOSE_DELAY_IN_MS, MESSAGE_CONTENT_ELEMENTS, MESSAGE_ELEMENTS } from './base_message_constants.js';
|
|
11
11
|
|
|
12
12
|
class BaseMessage extends PhoenixLightLitElement {
|
|
13
13
|
constructor() {
|
|
@@ -17,9 +17,9 @@ class BaseMessage extends PhoenixLightLitElement {
|
|
|
17
17
|
this.direction = DIRECTIONS.topCenter;
|
|
18
18
|
this.offset = DEFAULT_MESSAGE_OFFSET;
|
|
19
19
|
this._setupEventListeners = () => {
|
|
20
|
-
this.addEventListener('mouseenter', this.
|
|
21
|
-
this.addEventListener('mouseleave', this.
|
|
22
|
-
this.addEventListener('focus', this.
|
|
20
|
+
this.addEventListener('mouseenter', this.open);
|
|
21
|
+
this.addEventListener('mouseleave', this.close);
|
|
22
|
+
this.addEventListener('focus', this.open);
|
|
23
23
|
};
|
|
24
24
|
this._positionMessage = () => {
|
|
25
25
|
requestAnimationFrame(() => {
|
|
@@ -27,7 +27,7 @@ class BaseMessage extends PhoenixLightLitElement {
|
|
|
27
27
|
(_a = this._$messageContent) === null || _a === void 0 ? void 0 : _a.setAttribute('direction', this._positionController.position());
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
|
-
this.
|
|
30
|
+
this.open = () => {
|
|
31
31
|
this._tooltipOpenTime = Date.now();
|
|
32
32
|
clearTimeout(this._closeTimeout);
|
|
33
33
|
this._openTimeout = setTimeout(() => {
|
|
@@ -36,7 +36,7 @@ class BaseMessage extends PhoenixLightLitElement {
|
|
|
36
36
|
this.opened = true;
|
|
37
37
|
}, MESSAGE_SHOW_DELAY_IN_MS);
|
|
38
38
|
};
|
|
39
|
-
this.
|
|
39
|
+
this.close = () => {
|
|
40
40
|
this._shouldDelayClosing = Date.now() - this._tooltipOpenTime > MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS;
|
|
41
41
|
clearTimeout(this._openTimeout);
|
|
42
42
|
if (!this.opened)
|
|
@@ -58,31 +58,46 @@ class BaseMessage extends PhoenixLightLitElement {
|
|
|
58
58
|
this._handleFocusWithinMessage = (ev) => {
|
|
59
59
|
var _a;
|
|
60
60
|
if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest(`.${this._messageComponentName}`)) !== this)
|
|
61
|
-
this.
|
|
62
|
-
if (!document.activeElement)
|
|
61
|
+
this.close();
|
|
62
|
+
if (!document.activeElement || ev.shiftKey)
|
|
63
63
|
return;
|
|
64
64
|
const $focusableElements = UiDomUtils.getFocusableElements(this);
|
|
65
65
|
const activeElementIndex = $focusableElements.indexOf(document.activeElement);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!isPenultimate)
|
|
66
|
+
const isLastFocusableChild = activeElementIndex === $focusableElements.length - 1;
|
|
67
|
+
if (!isLastFocusableChild)
|
|
69
68
|
return;
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
69
|
+
this.close();
|
|
70
|
+
};
|
|
71
|
+
this._handleReverseTab = () => {
|
|
72
|
+
const $focusableElements = UiDomUtils.getFocusableElements(document.body);
|
|
73
|
+
const activeElement = document.activeElement;
|
|
74
|
+
const indexOfCurrentlyFocusedElement = $focusableElements.indexOf(activeElement);
|
|
75
|
+
const $previousElement = $focusableElements[indexOfCurrentlyFocusedElement - 1];
|
|
76
|
+
const $previousElementMessageParent = $previousElement === null || $previousElement === void 0 ? void 0 : $previousElement.closest(`h-${this._messageComponentName}`);
|
|
77
|
+
if ($previousElementMessageParent === this)
|
|
78
|
+
return;
|
|
79
|
+
if ($previousElementMessageParent)
|
|
80
|
+
$previousElementMessageParent.open();
|
|
81
|
+
if (this._isBaseMessage(activeElement))
|
|
82
|
+
activeElement.close();
|
|
75
83
|
};
|
|
76
84
|
this._clickOutsideController = new ClickOutsideController({
|
|
77
85
|
host: this,
|
|
78
86
|
container: this,
|
|
79
|
-
action: this.
|
|
87
|
+
action: this.close
|
|
80
88
|
});
|
|
81
89
|
new KeystrokesController({
|
|
82
90
|
host: this,
|
|
83
91
|
keys: ['tab'],
|
|
92
|
+
target: this,
|
|
84
93
|
callback: this._handleFocusWithinMessage
|
|
85
94
|
});
|
|
95
|
+
new KeystrokesController({
|
|
96
|
+
host: this,
|
|
97
|
+
keys: [['shift', 'tab']],
|
|
98
|
+
target: document.body,
|
|
99
|
+
callback: this._handleReverseTab
|
|
100
|
+
});
|
|
86
101
|
}
|
|
87
102
|
connectedCallback(messageComponentName = '') {
|
|
88
103
|
super.connectedCallback();
|
|
@@ -109,6 +124,11 @@ class BaseMessage extends PhoenixLightLitElement {
|
|
|
109
124
|
$portalTarget.setAttribute(PORTAL_TARGET_NAME_PROP, DEFAULT_MESSAGE_PORTAL_NAME);
|
|
110
125
|
document.body.appendChild($portalTarget);
|
|
111
126
|
}
|
|
127
|
+
_isBaseMessage($element) {
|
|
128
|
+
if (MESSAGE_ELEMENTS.includes($element.localName))
|
|
129
|
+
return true;
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
112
132
|
}
|
|
113
133
|
__decorate([
|
|
114
134
|
property({ type: Boolean, reflect: true }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -2,6 +2,7 @@ export declare const DEFAULT_MESSAGE_PORTAL_NAME = "message-portal";
|
|
|
2
2
|
export declare const MESSAGE_CONTENT_SLOT_NAME = "message-content";
|
|
3
3
|
export declare const MESSAGE_REMOVED_CLASS_NAME = "removed";
|
|
4
4
|
export declare const DEFAULT_MESSAGE_OFFSET = 10;
|
|
5
|
+
export declare const MESSAGE_ELEMENTS: string[];
|
|
5
6
|
export declare const MESSAGE_CONTENT_ELEMENTS: string[];
|
|
6
7
|
export declare const MESSAGE_SHOW_DELAY_IN_MS = 100;
|
|
7
8
|
export declare const MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS = 500;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { HINT_CONTENT_ELEMENT_NAME } from './hints/hint_constants.js';
|
|
2
|
-
import { TOOLTIP_CONTENT_ELEMENT_NAME } from './tooltips/tooltip_constants.js';
|
|
1
|
+
import { HINT_ELEMENT_NAME, HINT_CONTENT_ELEMENT_NAME } from './hints/hint_constants.js';
|
|
2
|
+
import { TOOLTIP_ELEMENT_NAME, TOOLTIP_CONTENT_ELEMENT_NAME } from './tooltips/tooltip_constants.js';
|
|
3
3
|
|
|
4
4
|
const DEFAULT_MESSAGE_PORTAL_NAME = 'message-portal';
|
|
5
5
|
const MESSAGE_CONTENT_SLOT_NAME = 'message-content';
|
|
6
6
|
const MESSAGE_REMOVED_CLASS_NAME = `removed`;
|
|
7
7
|
const DEFAULT_MESSAGE_OFFSET = 10;
|
|
8
|
+
const MESSAGE_ELEMENTS = [TOOLTIP_ELEMENT_NAME, HINT_ELEMENT_NAME];
|
|
8
9
|
const MESSAGE_CONTENT_ELEMENTS = [TOOLTIP_CONTENT_ELEMENT_NAME, HINT_CONTENT_ELEMENT_NAME];
|
|
9
10
|
const MESSAGE_SHOW_DELAY_IN_MS = 100;
|
|
10
11
|
const MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS = 500;
|
|
11
12
|
const MESSAGE_CLOSE_DELAY_IN_MS = 500;
|
|
12
13
|
|
|
13
|
-
export { DEFAULT_MESSAGE_OFFSET, DEFAULT_MESSAGE_PORTAL_NAME, MESSAGE_CLOSE_DELAY_IN_MS, MESSAGE_CONTENT_ELEMENTS, MESSAGE_CONTENT_SLOT_NAME, MESSAGE_REMOVED_CLASS_NAME, MESSAGE_SHOW_DELAY_IN_MS, MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS };
|
|
14
|
+
export { DEFAULT_MESSAGE_OFFSET, DEFAULT_MESSAGE_PORTAL_NAME, MESSAGE_CLOSE_DELAY_IN_MS, MESSAGE_CONTENT_ELEMENTS, MESSAGE_CONTENT_SLOT_NAME, MESSAGE_ELEMENTS, MESSAGE_REMOVED_CLASS_NAME, MESSAGE_SHOW_DELAY_IN_MS, MESSAGE_TIME_TO_DELAY_CLOSING_IN_MS };
|
|
14
15
|
//# sourceMappingURL=base_message_constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_message_types.js","sourceRoot":"","sources":["../../../../../../../src/components/messages/base_message_types.ts"],"names":[],"mappings":""}
|
|
@@ -20,7 +20,6 @@ let HHint = class HHint extends BaseMessage {
|
|
|
20
20
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionMessage}" to="${this.portalTarget}" hidden>
|
|
21
21
|
${this.getSlot(MESSAGE_CONTENT_SLOT_NAME)}
|
|
22
22
|
</h-portal>
|
|
23
|
-
<div tabindex="0"></div>
|
|
24
23
|
`;
|
|
25
24
|
}
|
|
26
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -16,7 +16,6 @@ let HTooltip = class HTooltip extends BaseMessage {
|
|
|
16
16
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionMessage}" to="${this.portalTarget}" hidden>
|
|
17
17
|
${this.getSlot(MESSAGE_CONTENT_SLOT_NAME)}
|
|
18
18
|
</h-portal>
|
|
19
|
-
<div tabindex="0"></div>
|
|
20
19
|
`;
|
|
21
20
|
}
|
|
22
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,2BAA2B,+CAAmD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,2BAA2B,+CAAmD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -5,6 +5,7 @@ export declare const PORTAL_EVENTS: {
|
|
|
5
5
|
close: string;
|
|
6
6
|
};
|
|
7
7
|
export declare const PORTAL_TARGET_NAME_PROP = "name";
|
|
8
|
+
export declare const PORTAL_COMPONENT_NAME = "h-portal";
|
|
8
9
|
export declare const PORTAL_TARGET_COMPONENT_NAME = "h-portal-target";
|
|
9
10
|
export declare const PORTAL_TARGET_ATTRIBUTE_NAME = "portal-target";
|
|
10
11
|
declare global {
|
|
@@ -40,7 +40,8 @@ let HTabs = class HTabs extends PhoenixLightLitElement {
|
|
|
40
40
|
new KeystrokesController({
|
|
41
41
|
host: this,
|
|
42
42
|
keys: ['ArrowRight', 'ArrowLeft'],
|
|
43
|
-
callback: this._handleArrowNavigation
|
|
43
|
+
callback: this._handleArrowNavigation,
|
|
44
|
+
target: this
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
47
|
_getFocusedTabIndex() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -8,8 +8,9 @@ class BtnController {
|
|
|
8
8
|
this.host.setAttribute('role', 'button');
|
|
9
9
|
this._keystrokesController = new KeystrokesController({
|
|
10
10
|
host,
|
|
11
|
-
keys: ['
|
|
12
|
-
callback
|
|
11
|
+
keys: ['enter', ' '],
|
|
12
|
+
callback,
|
|
13
|
+
target: host
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
16
|
hostConnected() { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts
CHANGED
|
@@ -5,10 +5,17 @@ export declare class KeystrokesController implements ReactiveController {
|
|
|
5
5
|
private _keys;
|
|
6
6
|
private _callback;
|
|
7
7
|
private _buffer;
|
|
8
|
-
|
|
9
|
-
constructor({ host, keys, callback }: TKeystrokesControllerProps);
|
|
8
|
+
constructor({ host, keys, callback, target }: TKeystrokesControllerProps);
|
|
10
9
|
hostConnected(): void;
|
|
11
10
|
hostDisconnected(): void;
|
|
12
|
-
private
|
|
13
|
-
private
|
|
11
|
+
private _clearBuffer;
|
|
12
|
+
private _saveKey;
|
|
13
|
+
private _bindSavedKeysWithCallback;
|
|
14
|
+
private _bindWithOneKey;
|
|
15
|
+
private _isKeySequenceMultiple;
|
|
16
|
+
private _areAllKeysPressedInMultipleSequences;
|
|
17
|
+
private _areAllKeysPressedInSingleSequence;
|
|
18
|
+
private _isOneOfTheKeysPressed;
|
|
19
|
+
private _calculateIndexesInSavedKeys;
|
|
20
|
+
private _removeKey;
|
|
14
21
|
}
|
package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js
CHANGED
|
@@ -1,46 +1,90 @@
|
|
|
1
1
|
import { __classPrivateFieldSet, __classPrivateFieldGet } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import 'lit';
|
|
3
|
-
import { KEYSTROKE_DELAY_IN_MS } from './keystrokes_controller_constants.js';
|
|
4
3
|
|
|
5
|
-
var _KeystrokesController_host;
|
|
4
|
+
var _KeystrokesController_host, _KeystrokesController_target;
|
|
6
5
|
class KeystrokesController {
|
|
7
|
-
constructor({ host, keys, callback }) {
|
|
6
|
+
constructor({ host, keys, callback, target }) {
|
|
8
7
|
_KeystrokesController_host.set(this, void 0);
|
|
8
|
+
_KeystrokesController_target.set(this, void 0);
|
|
9
9
|
this._buffer = [];
|
|
10
|
-
this.
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
this._clearBuffer = () => {
|
|
11
|
+
this._buffer = [];
|
|
12
|
+
};
|
|
13
|
+
this._saveKey = (ev) => {
|
|
13
14
|
const key = ev.key.toLowerCase();
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
if (!this._buffer.includes(key))
|
|
16
|
+
this._buffer = [...this._buffer, key];
|
|
17
|
+
this._bindSavedKeysWithCallback(ev, this._buffer);
|
|
18
|
+
};
|
|
19
|
+
this._bindSavedKeysWithCallback = (ev, savedKeys) => {
|
|
20
|
+
if (typeof this._keys === 'string') {
|
|
21
|
+
this._bindWithOneKey(ev, savedKeys);
|
|
22
|
+
return;
|
|
17
23
|
}
|
|
18
|
-
this.
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
const areAllKeysPressed = this._isKeySequenceMultiple(this._keys)
|
|
25
|
+
? this._areAllKeysPressedInMultipleSequences(this._keys, savedKeys)
|
|
26
|
+
: this._isOneOfTheKeysPressed(this._keys, savedKeys);
|
|
27
|
+
if (areAllKeysPressed)
|
|
28
|
+
this._callback(ev);
|
|
21
29
|
};
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
return
|
|
30
|
+
this._bindWithOneKey = (ev, savedKeys) => {
|
|
31
|
+
if (!savedKeys.includes(this._keys))
|
|
32
|
+
return;
|
|
33
|
+
this._callback(ev);
|
|
34
|
+
};
|
|
35
|
+
this._isKeySequenceMultiple = (keySequence) => {
|
|
36
|
+
const firstSequence = keySequence[0];
|
|
37
|
+
if (typeof firstSequence === 'object')
|
|
38
|
+
return true;
|
|
39
|
+
return false;
|
|
40
|
+
};
|
|
41
|
+
this._areAllKeysPressedInMultipleSequences = (keySequences, savedKeys) => {
|
|
42
|
+
return !!keySequences.find((keySequence) => {
|
|
43
|
+
return this._areAllKeysPressedInSingleSequence(keySequence, savedKeys);
|
|
25
44
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
45
|
+
};
|
|
46
|
+
this._areAllKeysPressedInSingleSequence = (keySequence, savedKeys) => {
|
|
47
|
+
const indexesInSavedKeys = this._calculateIndexesInSavedKeys(keySequence, savedKeys);
|
|
48
|
+
if (indexesInSavedKeys.includes(-1))
|
|
49
|
+
return false;
|
|
50
|
+
const firstPressedKeyIndex = indexesInSavedKeys[0];
|
|
51
|
+
const lastPressedKeyIndex = indexesInSavedKeys[indexesInSavedKeys.length - 1];
|
|
52
|
+
const areKeysPressedSequentially = lastPressedKeyIndex - firstPressedKeyIndex === indexesInSavedKeys.length - 1;
|
|
53
|
+
return areKeysPressedSequentially;
|
|
54
|
+
};
|
|
55
|
+
this._isOneOfTheKeysPressed = (keys, savedKeys) => {
|
|
56
|
+
const indexesInSavedKeys = this._calculateIndexesInSavedKeys(keys, savedKeys);
|
|
57
|
+
return typeof indexesInSavedKeys.find((index) => index > -1) === 'number';
|
|
58
|
+
};
|
|
59
|
+
this._calculateIndexesInSavedKeys = (keySequence, savedKeys) => {
|
|
60
|
+
return keySequence.reduce((allIndexes, currentKeyInSequence) => {
|
|
61
|
+
return [...allIndexes, savedKeys.indexOf(currentKeyInSequence.toLowerCase())];
|
|
62
|
+
}, []);
|
|
63
|
+
};
|
|
64
|
+
// do ogrania jeszcze string czyli zapięcie się na jeden guzik
|
|
65
|
+
this._removeKey = (ev) => {
|
|
66
|
+
const key = ev.key.toLowerCase();
|
|
67
|
+
if (this._buffer.includes(key))
|
|
68
|
+
this._buffer = this._buffer.filter((currentSavedKey) => currentSavedKey !== key);
|
|
30
69
|
};
|
|
31
70
|
__classPrivateFieldSet(this, _KeystrokesController_host, host, "f");
|
|
71
|
+
__classPrivateFieldSet(this, _KeystrokesController_target, target, "f");
|
|
32
72
|
this._keys = keys;
|
|
33
73
|
this._callback = callback;
|
|
34
74
|
__classPrivateFieldGet(this, _KeystrokesController_host, "f").addController(this);
|
|
75
|
+
__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keydown', this._saveKey);
|
|
76
|
+
__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keyup', this._removeKey);
|
|
35
77
|
}
|
|
36
78
|
hostConnected() {
|
|
37
|
-
__classPrivateFieldGet(this, _KeystrokesController_host, "f").addEventListener('
|
|
79
|
+
__classPrivateFieldGet(this, _KeystrokesController_host, "f").addEventListener('focusout', this._clearBuffer);
|
|
38
80
|
}
|
|
39
81
|
hostDisconnected() {
|
|
40
|
-
__classPrivateFieldGet(this, _KeystrokesController_host, "f").removeEventListener('
|
|
82
|
+
__classPrivateFieldGet(this, _KeystrokesController_host, "f").removeEventListener('focusout', this._clearBuffer);
|
|
83
|
+
__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keydown', this._saveKey);
|
|
84
|
+
__classPrivateFieldGet(this, _KeystrokesController_target, "f").addEventListener('keyup', this._removeKey);
|
|
41
85
|
}
|
|
42
86
|
}
|
|
43
|
-
_KeystrokesController_host = new WeakMap();
|
|
87
|
+
_KeystrokesController_host = new WeakMap(), _KeystrokesController_target = new WeakMap();
|
|
44
88
|
|
|
45
89
|
export { KeystrokesController };
|
|
46
90
|
//# sourceMappingURL=keystrokes_controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
1
|
+
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TWebComponentsContextControllerHost } from "../../core/context/context_controller_types";
|
|
2
2
|
export declare type TKeystrokesControllerProps = {
|
|
3
3
|
host: TWebComponentsContextControllerHost;
|
|
4
|
-
keys: string[];
|
|
4
|
+
keys: string[][] | string[] | string;
|
|
5
5
|
callback: (ev: Event) => void;
|
|
6
|
+
target: Element;
|
|
6
7
|
};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const KEYSTROKE_DELAY_IN_MS = 500;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;"}
|