@shoper/phoenix_design_system 1.14.0 → 1.14.1
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 +114 -37
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_close.js +4 -4
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +13 -24
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/form/select/select.js +3 -4
- package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
- package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
- 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 +13 -4
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +115 -38
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_close.js +4 -4
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +1 -2
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.d.ts +1 -2
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +14 -25
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/form/select/select.js +3 -4
- package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts +2 -1
- package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
- 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 +1 -0
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ var litHtml = require('lit-html');
|
|
|
12
12
|
var global_constants = require('../../global_constants.js');
|
|
13
13
|
var dropdown_constants = require('./dropdown_constants.js');
|
|
14
14
|
var relative_position_controller_constants = require('../../controllers/relative_position_controller/relative_position_controller_constants.js');
|
|
15
|
+
var v4 = require('../../../../../external/uuid/dist/esm-browser/v4.js');
|
|
15
16
|
var portal_constants = require('../portal/portal_constants.js');
|
|
16
17
|
var backdrop_controller = require('../backdrop/controller/backdrop_controller.js');
|
|
17
18
|
var click_outside_controller = require('../../controllers/click_outside_controller/click_outside_controller.js');
|
|
@@ -29,6 +30,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
29
30
|
this.transition = 'direction';
|
|
30
31
|
this.offset = 0;
|
|
31
32
|
this.portalTarget = dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME;
|
|
33
|
+
this.id = v4['default']();
|
|
34
|
+
this.preventFocusTrap = false;
|
|
32
35
|
this._backdropController = new backdrop_controller.BackdropController();
|
|
33
36
|
this._handleClickOutside = async (target) => {
|
|
34
37
|
var _a, _b;
|
|
@@ -45,7 +48,7 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
45
48
|
return;
|
|
46
49
|
}
|
|
47
50
|
await this.show();
|
|
48
|
-
|
|
51
|
+
this._focusOnFirstContentElement();
|
|
49
52
|
};
|
|
50
53
|
this.show = async () => {
|
|
51
54
|
if (this.opened)
|
|
@@ -136,44 +139,32 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
136
139
|
return;
|
|
137
140
|
await this.hide();
|
|
138
141
|
};
|
|
139
|
-
this.
|
|
140
|
-
|
|
141
|
-
if (!this
|
|
142
|
+
this._keepFocusWithinDropdownForwards = (ev) => {
|
|
143
|
+
var _a, _b;
|
|
144
|
+
if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
|
|
142
145
|
return;
|
|
143
|
-
const $
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this._handleFocusOnNextElement = async (ev) => {
|
|
151
|
-
var _a;
|
|
152
|
-
ev.preventDefault();
|
|
153
|
-
const $focusableElements = utilities.UiDomUtils.getFocusableElements(document.body);
|
|
154
|
-
const indexOfDropdownToggler = $focusableElements.indexOf(this.$dropdownToggler);
|
|
155
|
-
const $nextElementToFocus = (_a = $focusableElements[indexOfDropdownToggler + 1]) !== null && _a !== void 0 ? _a : $focusableElements[0];
|
|
156
|
-
await this._hideDropdownsSequentially();
|
|
157
|
-
await this.hide();
|
|
158
|
-
this._focusOnNextElementAfterToggler($nextElementToFocus);
|
|
159
|
-
};
|
|
160
|
-
this._focusOnNextElementAfterToggler = ($elementToFocus) => {
|
|
161
|
-
var _a;
|
|
162
|
-
const isTogglerLastChildOfPreviousDropdown = ($elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.closest(dropdown_constants.DROPDOWN_CONTENT_NAME)) === this.$dropdownContent;
|
|
163
|
-
if (isTogglerLastChildOfPreviousDropdown) {
|
|
164
|
-
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
146
|
+
const $target = ev.target;
|
|
147
|
+
if (((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.contains($target)) && this.preventFocusTrap) {
|
|
148
|
+
this._handleFocusOnNextElementAfterDropdown(ev);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if ((_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.contains($target)) {
|
|
152
|
+
this._handleFocusFromTogglerForwards(ev);
|
|
165
153
|
return;
|
|
166
154
|
}
|
|
167
|
-
|
|
155
|
+
this._handleFocusFromSentinelEndForwards(ev, $target);
|
|
168
156
|
};
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
const $firstFocusableElement = this.$dropdownContent && utilities.UiDomUtils.getFocusableElement(this.$dropdownContent);
|
|
172
|
-
if (document.activeElement !== $firstFocusableElement)
|
|
157
|
+
this._keepFocusWithinDropdownBackwards = (ev) => {
|
|
158
|
+
if (!this.opened || !this.$dropdownContent)
|
|
173
159
|
return;
|
|
174
|
-
ev.
|
|
175
|
-
(
|
|
176
|
-
|
|
160
|
+
const $target = ev.target;
|
|
161
|
+
if (this.preventFocusTrap) {
|
|
162
|
+
this._handleDefaultFocusFromDropdownBackwards(ev);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this._handleFocusFromTogglerBackwards(ev, $target);
|
|
166
|
+
this._handleFocusFromSentinelStartBackwards(ev, $target);
|
|
167
|
+
}
|
|
177
168
|
};
|
|
178
169
|
this._hoverToggle = async (ev) => {
|
|
179
170
|
if (window.innerWidth < global_constants.BREAKPOINTS.xs)
|
|
@@ -185,12 +176,19 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
185
176
|
const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
|
|
186
177
|
if (isHoveredWithinDropdown && !this.opened) {
|
|
187
178
|
await this.show();
|
|
188
|
-
|
|
179
|
+
this._focusOnFirstContentElement();
|
|
189
180
|
return;
|
|
190
181
|
}
|
|
191
182
|
if (!isHoveredWithinDropdown && this.opened)
|
|
192
183
|
await this._hideDropdownsSequentially();
|
|
193
184
|
};
|
|
185
|
+
this._focusOnFirstContentElement = () => {
|
|
186
|
+
if (!this.$dropdownContent)
|
|
187
|
+
return;
|
|
188
|
+
const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
|
|
189
|
+
if ($firstFocusableElement)
|
|
190
|
+
$firstFocusableElement.focus();
|
|
191
|
+
};
|
|
194
192
|
this.isOpened = () => this.opened;
|
|
195
193
|
this._positionDropdownContent = () => {
|
|
196
194
|
if (this.contentWidth === dropdown_constants.DROPDOWN_CONTENT_WIDTH.full)
|
|
@@ -216,13 +214,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
216
214
|
host: this,
|
|
217
215
|
target: document.body,
|
|
218
216
|
keys: ['tab'],
|
|
219
|
-
callback: this.
|
|
217
|
+
callback: this._keepFocusWithinDropdownForwards
|
|
220
218
|
});
|
|
221
219
|
new keystrokes_controller.KeystrokesController({
|
|
222
220
|
host: this,
|
|
223
221
|
target: document.body,
|
|
224
222
|
keys: [['shift', 'tab']],
|
|
225
|
-
callback: this.
|
|
223
|
+
callback: this._keepFocusWithinDropdownBackwards,
|
|
224
|
+
containerSelectors: ['h-dropdown', 'h-dropdown-content']
|
|
226
225
|
});
|
|
227
226
|
}
|
|
228
227
|
async connectedCallback() {
|
|
@@ -298,6 +297,74 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
298
297
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(global_constants.SCROLLABLE_CLASS_NAME);
|
|
299
298
|
}
|
|
300
299
|
}
|
|
300
|
+
_handleFocusOnNextElementAfterDropdown(ev) {
|
|
301
|
+
ev.preventDefault();
|
|
302
|
+
this.hide();
|
|
303
|
+
utilities.UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
_handleFocusFromTogglerForwards(ev) {
|
|
307
|
+
if (!this.$dropdownContent)
|
|
308
|
+
return;
|
|
309
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
310
|
+
if (trulyFocusableElements.length === 0)
|
|
311
|
+
return;
|
|
312
|
+
ev.preventDefault();
|
|
313
|
+
trulyFocusableElements[0].focus();
|
|
314
|
+
}
|
|
315
|
+
_handleFocusFromSentinelEndForwards(ev, $target) {
|
|
316
|
+
var _a;
|
|
317
|
+
if (!this.$dropdownContent)
|
|
318
|
+
return;
|
|
319
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
320
|
+
const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
|
|
321
|
+
if ($target !== $lastFocusableElement)
|
|
322
|
+
return;
|
|
323
|
+
ev.preventDefault();
|
|
324
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
325
|
+
}
|
|
326
|
+
_handleDefaultFocusFromDropdownBackwards(ev) {
|
|
327
|
+
ev.preventDefault();
|
|
328
|
+
this.hide();
|
|
329
|
+
utilities.UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
|
|
330
|
+
}
|
|
331
|
+
_handleFocusFromTogglerBackwards(ev, $target) {
|
|
332
|
+
var _a;
|
|
333
|
+
if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.$dropdownContent)
|
|
334
|
+
return;
|
|
335
|
+
ev.preventDefault();
|
|
336
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
337
|
+
if (trulyFocusableElements.length === 0)
|
|
338
|
+
return;
|
|
339
|
+
const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
|
|
340
|
+
$lastFocusableElement.focus();
|
|
341
|
+
}
|
|
342
|
+
_handleFocusFromSentinelStartBackwards(ev, $target) {
|
|
343
|
+
var _a;
|
|
344
|
+
if (!this.$dropdownContent)
|
|
345
|
+
return;
|
|
346
|
+
const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
|
|
347
|
+
if ($target !== $firstFocusableElement)
|
|
348
|
+
return;
|
|
349
|
+
ev.preventDefault();
|
|
350
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
351
|
+
}
|
|
352
|
+
_getTrulyFocusableElements($container) {
|
|
353
|
+
const focusableElements = utilities.UiDomUtils.getFocusableElements($container);
|
|
354
|
+
return focusableElements.filter(($el) => this._isElementTrulyFocusable($el));
|
|
355
|
+
}
|
|
356
|
+
_isElementTrulyFocusable($el) {
|
|
357
|
+
const style = window.getComputedStyle($el);
|
|
358
|
+
if (style.display === 'none' || style.visibility === 'hidden') {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
if ($el.nodeName === 'H-PORTAL')
|
|
362
|
+
return true;
|
|
363
|
+
const $parent = $el.parentElement;
|
|
364
|
+
if (!$parent)
|
|
365
|
+
return true;
|
|
366
|
+
return this._isElementTrulyFocusable($parent);
|
|
367
|
+
}
|
|
301
368
|
_isHoveredWithinDropdown(element) {
|
|
302
369
|
var _a;
|
|
303
370
|
if (element === this)
|
|
@@ -321,6 +388,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
321
388
|
return;
|
|
322
389
|
if (!this._hasScrollableClassInitially)
|
|
323
390
|
this._hasScrollableClassInitially = this.$dropdownContent.classList.contains(global_constants.SCROLLABLE_CLASS_NAME);
|
|
391
|
+
if (!this.preventFocusTrap)
|
|
392
|
+
this.$dropdownContent.setAttribute('aria-modal', 'true');
|
|
324
393
|
}
|
|
325
394
|
_getDropdownContentWidth() {
|
|
326
395
|
const isMobileResolution = document.documentElement.clientWidth < global_constants.BREAKPOINTS.xs;
|
|
@@ -389,6 +458,14 @@ tslib_es6.__decorate([
|
|
|
389
458
|
decorators_js.property({ type: String, attribute: 'mobile-position' }),
|
|
390
459
|
tslib_es6.__metadata("design:type", String)
|
|
391
460
|
], exports.HDropdown.prototype, "mobilePosition", void 0);
|
|
461
|
+
tslib_es6.__decorate([
|
|
462
|
+
decorators_js.property({ type: String, attribute: 'id', reflect: true }),
|
|
463
|
+
tslib_es6.__metadata("design:type", Object)
|
|
464
|
+
], exports.HDropdown.prototype, "id", void 0);
|
|
465
|
+
tslib_es6.__decorate([
|
|
466
|
+
decorators_js.property({ type: Boolean, attribute: 'prevent-focus-trap' }),
|
|
467
|
+
tslib_es6.__metadata("design:type", Object)
|
|
468
|
+
], exports.HDropdown.prototype, "preventFocusTrap", void 0);
|
|
392
469
|
exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
|
|
393
470
|
phoenix_custom_element.phoenixCustomElement('h-dropdown'),
|
|
394
471
|
tslib_es6.__metadata("design:paramtypes", [])
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,iBAAiB,qDAAyD;AAC1E;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -13,6 +13,10 @@ exports.HDropdownClose = class HDropdownClose extends phoenix_light_lit_element.
|
|
|
13
13
|
constructor() {
|
|
14
14
|
super();
|
|
15
15
|
this.name = '';
|
|
16
|
+
this._closeDropdown = () => {
|
|
17
|
+
const dropdown = document.querySelector(`h-dropdown[name="${this.name}"]`);
|
|
18
|
+
dropdown === null || dropdown === void 0 ? void 0 : dropdown.hide();
|
|
19
|
+
};
|
|
16
20
|
this.className = `${dropdown_constants.DROPDOWN_CSS_CLASSES.close} ${this.className}`;
|
|
17
21
|
}
|
|
18
22
|
connectedCallback() {
|
|
@@ -20,10 +24,6 @@ exports.HDropdownClose = class HDropdownClose extends phoenix_light_lit_element.
|
|
|
20
24
|
this._btnController = new btn_controller.BtnController(this, this._closeDropdown);
|
|
21
25
|
this.addEventListener('click', this._closeDropdown);
|
|
22
26
|
}
|
|
23
|
-
async _closeDropdown() {
|
|
24
|
-
const dropdown = document.querySelector(`h-dropdown[name="${this.name}"]`);
|
|
25
|
-
await (dropdown === null || dropdown === void 0 ? void 0 : dropdown.hide());
|
|
26
|
-
}
|
|
27
27
|
};
|
|
28
28
|
tslib_es6.__decorate([
|
|
29
29
|
decorators.property({ type: String }),
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
|
|
6
|
-
var lit = require('lit');
|
|
7
6
|
var decorators = require('lit/decorators');
|
|
7
|
+
var utilities = require('@dreamcommerce/utilities');
|
|
8
8
|
var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
|
|
9
9
|
var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
|
|
10
10
|
var dropdown_constants = require('./dropdown_constants.js');
|
|
@@ -13,19 +13,22 @@ exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_elem
|
|
|
13
13
|
constructor() {
|
|
14
14
|
super();
|
|
15
15
|
this.name = '';
|
|
16
|
+
this._setupRole = () => {
|
|
17
|
+
const $focusableElements = utilities.UiDomUtils.getFocusableElements(this);
|
|
18
|
+
const role = $focusableElements.length < 2 ? 'dialog' : 'menu';
|
|
19
|
+
this.setAttribute('role', role);
|
|
20
|
+
if (role === 'menu') {
|
|
21
|
+
Array.from(this.children).forEach((element) => {
|
|
22
|
+
element.setAttribute('role', 'menuitem');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
16
26
|
this.slot = this.hasAttribute('slot') ? this.slot : 'content';
|
|
17
27
|
}
|
|
18
28
|
connectedCallback() {
|
|
19
29
|
super.connectedCallback();
|
|
20
30
|
this.classList.add(dropdown_constants.DROPDOWN_CSS_CLASSES.content);
|
|
21
|
-
this.
|
|
22
|
-
Array.from(this.children).forEach((element) => {
|
|
23
|
-
element.setAttribute('role', 'menuitem');
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
render() {
|
|
27
|
-
super.render();
|
|
28
|
-
return lit.html ` <div role="dialog">${this.getSlot('content')}</div> `;
|
|
31
|
+
this._setupRole();
|
|
29
32
|
}
|
|
30
33
|
};
|
|
31
34
|
tslib_es6.__decorate([
|
|
@@ -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;"}
|
|
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;"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
|
|
6
6
|
var decorators = require('lit/decorators');
|
|
7
|
-
|
|
7
|
+
require('@dreamcommerce/utilities');
|
|
8
8
|
var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
|
|
9
9
|
var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
|
|
10
10
|
var btn_controller = require('../../controllers/btn_controller/btn_controller.js');
|
|
@@ -16,6 +16,17 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
16
16
|
constructor() {
|
|
17
17
|
super();
|
|
18
18
|
this.name = '';
|
|
19
|
+
this._setupTogglerAria = () => {
|
|
20
|
+
this._$dropdown = this.closest(dropdown_constants.DROPDOWN_CONTAINER_NAME);
|
|
21
|
+
if (this._$dropdown.isOpened)
|
|
22
|
+
this._toggleElementAriaController = new toggle_element_aria_controller.ToggleElementAriaController({
|
|
23
|
+
host: this,
|
|
24
|
+
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
25
|
+
});
|
|
26
|
+
this.setAttribute('aria-haspopup', 'true');
|
|
27
|
+
if (this._$dropdown.id)
|
|
28
|
+
this.setAttribute('aria-controls', this._$dropdown.id);
|
|
29
|
+
};
|
|
19
30
|
this._dispatchToggleDropdownEventWithKeyboard = (ev) => {
|
|
20
31
|
ev.stopImmediatePropagation();
|
|
21
32
|
this._dispatchToggleDropdownEvent(ev);
|
|
@@ -29,18 +40,6 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
29
40
|
ev.preventDefault();
|
|
30
41
|
this.emitCustomEvent(dropdown_constants.DROPDOWN_EVENTS.toggle);
|
|
31
42
|
};
|
|
32
|
-
this._handleFocusToOpenedDropdown = async (ev) => {
|
|
33
|
-
if (ev.target !== this)
|
|
34
|
-
return;
|
|
35
|
-
const isOpened = this._$dropdown.isOpened();
|
|
36
|
-
if (!isOpened)
|
|
37
|
-
return;
|
|
38
|
-
const $dropdownContent = document.querySelector(`${dropdown_constants.DROPDOWN_CONTENT_NAME}[name="${this.name}"]`);
|
|
39
|
-
if (!$dropdownContent)
|
|
40
|
-
return;
|
|
41
|
-
ev.preventDefault();
|
|
42
|
-
utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer($dropdownContent);
|
|
43
|
-
};
|
|
44
43
|
this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
|
|
45
44
|
this.className = `${dropdown_constants.DROPDOWN_CSS_CLASSES.toggler} ${this.className}`;
|
|
46
45
|
}
|
|
@@ -48,13 +47,7 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
48
47
|
var _a;
|
|
49
48
|
super.connectedCallback();
|
|
50
49
|
this._btnController = new btn_controller.BtnController(this, this._dispatchToggleDropdownEventWithKeyboard);
|
|
51
|
-
this.
|
|
52
|
-
if (this._$dropdown.isOpened)
|
|
53
|
-
this._toggleElementAriaController = new toggle_element_aria_controller.ToggleElementAriaController({
|
|
54
|
-
host: this,
|
|
55
|
-
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
56
|
-
});
|
|
57
|
-
document.addEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
50
|
+
this._setupTogglerAria();
|
|
58
51
|
const hasToggleOnHover = (_a = this._$dropdown) === null || _a === void 0 ? void 0 : _a.hasAttribute(dropdown_constants.DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME);
|
|
59
52
|
if (hasToggleOnHover) {
|
|
60
53
|
this.addEventListener('click', this._dispatchToggleDropdownEventOnMobile);
|
|
@@ -62,10 +55,6 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
62
55
|
}
|
|
63
56
|
this.addEventListener('click', this._dispatchToggleDropdownEvent);
|
|
64
57
|
}
|
|
65
|
-
disconnectedCallback() {
|
|
66
|
-
super.disconnectedCallback();
|
|
67
|
-
document.removeEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
68
|
-
}
|
|
69
58
|
};
|
|
70
59
|
tslib_es6.__decorate([
|
|
71
60
|
decorators.property({ type: String, 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;
|
|
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;"}
|
|
@@ -233,9 +233,7 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
233
233
|
select_utils.SelectControlUtils.appendHTMLOption($option, $list, position);
|
|
234
234
|
}
|
|
235
235
|
updateOptionAriaAttribute($option) {
|
|
236
|
-
|
|
237
|
-
? $option.removeAttribute(this.multiple ? 'aria-checked' : 'aria-selected')
|
|
238
|
-
: $option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', 'true');
|
|
236
|
+
$option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', String($option.selected));
|
|
239
237
|
}
|
|
240
238
|
_removeHTMLOptions(optionsValues) {
|
|
241
239
|
this._$options = select_utils.SelectControlUtils.removeHTMLOptions(Array.from(this._$options.values()), optionsValues);
|
|
@@ -300,13 +298,14 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
300
298
|
name="${this.controlName}"
|
|
301
299
|
offset=${this.offset}
|
|
302
300
|
content-width="full"
|
|
301
|
+
prevent-focus-trap
|
|
303
302
|
>
|
|
304
303
|
<h-dropdown-toggler name=${this.controlName}> ${this.getSlot(select_constants.SELECT_SLOT_NAMES.toggler)} </h-dropdown-toggler>
|
|
305
304
|
|
|
306
305
|
<h-dropdown-content
|
|
307
306
|
class="${select_constants.SELECT_CSS_CLASSES.selectContent} ${this.error ? select_constants.SELECT_CSS_CLASSES.selectContentError : ''}"
|
|
308
307
|
${ref_js.ref(this._$dropdownContent)}
|
|
309
|
-
name
|
|
308
|
+
name="${this.controlName}"
|
|
310
309
|
>
|
|
311
310
|
<h-select-close-btn class="${select_constants.SELECT_CSS_CLASSES.selectCloseMobileButton}" @close=${this._closeSelect}></h-select-close-btn>
|
|
312
311
|
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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
|
@@ -7,11 +7,21 @@ require('lit');
|
|
|
7
7
|
|
|
8
8
|
var _KeystrokesController_host, _KeystrokesController_target;
|
|
9
9
|
class KeystrokesController {
|
|
10
|
-
constructor({ host, keys, callback, target }) {
|
|
10
|
+
constructor({ host, keys, callback, target, containerSelectors }) {
|
|
11
11
|
_KeystrokesController_host.set(this, void 0);
|
|
12
12
|
_KeystrokesController_target.set(this, void 0);
|
|
13
13
|
this._buffer = [];
|
|
14
|
-
this._clearBuffer = () => {
|
|
14
|
+
this._clearBuffer = (ev) => {
|
|
15
|
+
if (!this._containerSelectors) {
|
|
16
|
+
this._buffer = [];
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const $newFocusedElement = ev.relatedTarget;
|
|
20
|
+
if ($newFocusedElement instanceof HTMLElement) {
|
|
21
|
+
const isNewFocusedElementAChild = !!this._containerSelectors.find((containerSelector) => !!$newFocusedElement.closest(containerSelector));
|
|
22
|
+
if (isNewFocusedElementAChild)
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
15
25
|
this._buffer = [];
|
|
16
26
|
};
|
|
17
27
|
this._saveKey = (ev) => {
|
|
@@ -79,6 +89,7 @@ class KeystrokesController {
|
|
|
79
89
|
tslib_es6.__classPrivateFieldSet(this, _KeystrokesController_target, target, "f");
|
|
80
90
|
this._keys = keys;
|
|
81
91
|
this._callback = callback;
|
|
92
|
+
this._containerSelectors = containerSelectors;
|
|
82
93
|
tslib_es6.__classPrivateFieldGet(this, _KeystrokesController_host, "f").addController(this);
|
|
83
94
|
}
|
|
84
95
|
hostConnected() {
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -15,6 +15,8 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
15
15
|
contentWidth: TDropdownContentWidth;
|
|
16
16
|
portalTarget: string;
|
|
17
17
|
mobilePosition: TMobileElementPosition;
|
|
18
|
+
id: string;
|
|
19
|
+
preventFocusTrap: boolean;
|
|
18
20
|
$dropdownToggler: HDropdownToggler | null;
|
|
19
21
|
$dropdownContent: HDropdownContent | null;
|
|
20
22
|
$nestedDropdownContentElements?: HDropdownContent[];
|
|
@@ -40,12 +42,19 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
40
42
|
private _observeScrollToggling;
|
|
41
43
|
private _toggleScroll;
|
|
42
44
|
private _closeDropdownOnEscape;
|
|
43
|
-
private
|
|
44
|
-
private
|
|
45
|
-
private
|
|
46
|
-
private
|
|
45
|
+
private _keepFocusWithinDropdownForwards;
|
|
46
|
+
private _handleFocusOnNextElementAfterDropdown;
|
|
47
|
+
private _handleFocusFromTogglerForwards;
|
|
48
|
+
private _handleFocusFromSentinelEndForwards;
|
|
49
|
+
private _keepFocusWithinDropdownBackwards;
|
|
50
|
+
private _handleDefaultFocusFromDropdownBackwards;
|
|
51
|
+
private _handleFocusFromTogglerBackwards;
|
|
52
|
+
private _handleFocusFromSentinelStartBackwards;
|
|
53
|
+
private _getTrulyFocusableElements;
|
|
54
|
+
private _isElementTrulyFocusable;
|
|
47
55
|
private _hoverToggle;
|
|
48
56
|
private _isHoveredWithinDropdown;
|
|
57
|
+
private _focusOnFirstContentElement;
|
|
49
58
|
private _setupInitialDropdownProperties;
|
|
50
59
|
isOpened: () => boolean;
|
|
51
60
|
private _positionDropdownContent;
|
|
@@ -6,8 +6,9 @@ import { property } from '@lit/reactive-element/decorators.js';
|
|
|
6
6
|
import { KeystrokesController } from '../../controllers/keystrokes_controller/keystrokes_controller.js';
|
|
7
7
|
import { html } from 'lit-html';
|
|
8
8
|
import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
|
|
9
|
-
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_CSS_CLASSES, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME,
|
|
9
|
+
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_CSS_CLASSES, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_WIDTH, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
|
|
10
10
|
import { RELATIVE_POSITION_CONTROLLER_EVENTS, DEFAULT_THROTTLE_WAIT_TIME } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
|
|
11
|
+
import v4 from '../../../../../external/uuid/dist/esm-browser/v4.js';
|
|
11
12
|
import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
|
|
12
13
|
import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
|
|
13
14
|
import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
|
|
@@ -25,6 +26,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
25
26
|
this.transition = 'direction';
|
|
26
27
|
this.offset = 0;
|
|
27
28
|
this.portalTarget = DEFAULT_DROPDOWN_PORTAL_NAME;
|
|
29
|
+
this.id = v4();
|
|
30
|
+
this.preventFocusTrap = false;
|
|
28
31
|
this._backdropController = new BackdropController();
|
|
29
32
|
this._handleClickOutside = async (target) => {
|
|
30
33
|
var _a, _b;
|
|
@@ -41,7 +44,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
41
44
|
return;
|
|
42
45
|
}
|
|
43
46
|
await this.show();
|
|
44
|
-
|
|
47
|
+
this._focusOnFirstContentElement();
|
|
45
48
|
};
|
|
46
49
|
this.show = async () => {
|
|
47
50
|
if (this.opened)
|
|
@@ -132,44 +135,32 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
132
135
|
return;
|
|
133
136
|
await this.hide();
|
|
134
137
|
};
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
if (!this
|
|
138
|
+
this._keepFocusWithinDropdownForwards = (ev) => {
|
|
139
|
+
var _a, _b;
|
|
140
|
+
if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
|
|
138
141
|
return;
|
|
139
|
-
const $
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this._handleFocusOnNextElement = async (ev) => {
|
|
147
|
-
var _a;
|
|
148
|
-
ev.preventDefault();
|
|
149
|
-
const $focusableElements = UiDomUtils.getFocusableElements(document.body);
|
|
150
|
-
const indexOfDropdownToggler = $focusableElements.indexOf(this.$dropdownToggler);
|
|
151
|
-
const $nextElementToFocus = (_a = $focusableElements[indexOfDropdownToggler + 1]) !== null && _a !== void 0 ? _a : $focusableElements[0];
|
|
152
|
-
await this._hideDropdownsSequentially();
|
|
153
|
-
await this.hide();
|
|
154
|
-
this._focusOnNextElementAfterToggler($nextElementToFocus);
|
|
155
|
-
};
|
|
156
|
-
this._focusOnNextElementAfterToggler = ($elementToFocus) => {
|
|
157
|
-
var _a;
|
|
158
|
-
const isTogglerLastChildOfPreviousDropdown = ($elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.closest(DROPDOWN_CONTENT_NAME)) === this.$dropdownContent;
|
|
159
|
-
if (isTogglerLastChildOfPreviousDropdown) {
|
|
160
|
-
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
142
|
+
const $target = ev.target;
|
|
143
|
+
if (((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.contains($target)) && this.preventFocusTrap) {
|
|
144
|
+
this._handleFocusOnNextElementAfterDropdown(ev);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if ((_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.contains($target)) {
|
|
148
|
+
this._handleFocusFromTogglerForwards(ev);
|
|
161
149
|
return;
|
|
162
150
|
}
|
|
163
|
-
|
|
151
|
+
this._handleFocusFromSentinelEndForwards(ev, $target);
|
|
164
152
|
};
|
|
165
|
-
this.
|
|
166
|
-
|
|
167
|
-
const $firstFocusableElement = this.$dropdownContent && UiDomUtils.getFocusableElement(this.$dropdownContent);
|
|
168
|
-
if (document.activeElement !== $firstFocusableElement)
|
|
153
|
+
this._keepFocusWithinDropdownBackwards = (ev) => {
|
|
154
|
+
if (!this.opened || !this.$dropdownContent)
|
|
169
155
|
return;
|
|
170
|
-
ev.
|
|
171
|
-
(
|
|
172
|
-
|
|
156
|
+
const $target = ev.target;
|
|
157
|
+
if (this.preventFocusTrap) {
|
|
158
|
+
this._handleDefaultFocusFromDropdownBackwards(ev);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this._handleFocusFromTogglerBackwards(ev, $target);
|
|
162
|
+
this._handleFocusFromSentinelStartBackwards(ev, $target);
|
|
163
|
+
}
|
|
173
164
|
};
|
|
174
165
|
this._hoverToggle = async (ev) => {
|
|
175
166
|
if (window.innerWidth < BREAKPOINTS.xs)
|
|
@@ -181,12 +172,19 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
181
172
|
const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
|
|
182
173
|
if (isHoveredWithinDropdown && !this.opened) {
|
|
183
174
|
await this.show();
|
|
184
|
-
|
|
175
|
+
this._focusOnFirstContentElement();
|
|
185
176
|
return;
|
|
186
177
|
}
|
|
187
178
|
if (!isHoveredWithinDropdown && this.opened)
|
|
188
179
|
await this._hideDropdownsSequentially();
|
|
189
180
|
};
|
|
181
|
+
this._focusOnFirstContentElement = () => {
|
|
182
|
+
if (!this.$dropdownContent)
|
|
183
|
+
return;
|
|
184
|
+
const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
|
|
185
|
+
if ($firstFocusableElement)
|
|
186
|
+
$firstFocusableElement.focus();
|
|
187
|
+
};
|
|
190
188
|
this.isOpened = () => this.opened;
|
|
191
189
|
this._positionDropdownContent = () => {
|
|
192
190
|
if (this.contentWidth === DROPDOWN_CONTENT_WIDTH.full)
|
|
@@ -212,13 +210,14 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
212
210
|
host: this,
|
|
213
211
|
target: document.body,
|
|
214
212
|
keys: ['tab'],
|
|
215
|
-
callback: this.
|
|
213
|
+
callback: this._keepFocusWithinDropdownForwards
|
|
216
214
|
});
|
|
217
215
|
new KeystrokesController({
|
|
218
216
|
host: this,
|
|
219
217
|
target: document.body,
|
|
220
218
|
keys: [['shift', 'tab']],
|
|
221
|
-
callback: this.
|
|
219
|
+
callback: this._keepFocusWithinDropdownBackwards,
|
|
220
|
+
containerSelectors: ['h-dropdown', 'h-dropdown-content']
|
|
222
221
|
});
|
|
223
222
|
}
|
|
224
223
|
async connectedCallback() {
|
|
@@ -294,6 +293,74 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
294
293
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(SCROLLABLE_CLASS_NAME);
|
|
295
294
|
}
|
|
296
295
|
}
|
|
296
|
+
_handleFocusOnNextElementAfterDropdown(ev) {
|
|
297
|
+
ev.preventDefault();
|
|
298
|
+
this.hide();
|
|
299
|
+
UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
_handleFocusFromTogglerForwards(ev) {
|
|
303
|
+
if (!this.$dropdownContent)
|
|
304
|
+
return;
|
|
305
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
306
|
+
if (trulyFocusableElements.length === 0)
|
|
307
|
+
return;
|
|
308
|
+
ev.preventDefault();
|
|
309
|
+
trulyFocusableElements[0].focus();
|
|
310
|
+
}
|
|
311
|
+
_handleFocusFromSentinelEndForwards(ev, $target) {
|
|
312
|
+
var _a;
|
|
313
|
+
if (!this.$dropdownContent)
|
|
314
|
+
return;
|
|
315
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
316
|
+
const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
|
|
317
|
+
if ($target !== $lastFocusableElement)
|
|
318
|
+
return;
|
|
319
|
+
ev.preventDefault();
|
|
320
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
321
|
+
}
|
|
322
|
+
_handleDefaultFocusFromDropdownBackwards(ev) {
|
|
323
|
+
ev.preventDefault();
|
|
324
|
+
this.hide();
|
|
325
|
+
UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
|
|
326
|
+
}
|
|
327
|
+
_handleFocusFromTogglerBackwards(ev, $target) {
|
|
328
|
+
var _a;
|
|
329
|
+
if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.$dropdownContent)
|
|
330
|
+
return;
|
|
331
|
+
ev.preventDefault();
|
|
332
|
+
const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
|
|
333
|
+
if (trulyFocusableElements.length === 0)
|
|
334
|
+
return;
|
|
335
|
+
const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
|
|
336
|
+
$lastFocusableElement.focus();
|
|
337
|
+
}
|
|
338
|
+
_handleFocusFromSentinelStartBackwards(ev, $target) {
|
|
339
|
+
var _a;
|
|
340
|
+
if (!this.$dropdownContent)
|
|
341
|
+
return;
|
|
342
|
+
const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
|
|
343
|
+
if ($target !== $firstFocusableElement)
|
|
344
|
+
return;
|
|
345
|
+
ev.preventDefault();
|
|
346
|
+
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
|
|
347
|
+
}
|
|
348
|
+
_getTrulyFocusableElements($container) {
|
|
349
|
+
const focusableElements = UiDomUtils.getFocusableElements($container);
|
|
350
|
+
return focusableElements.filter(($el) => this._isElementTrulyFocusable($el));
|
|
351
|
+
}
|
|
352
|
+
_isElementTrulyFocusable($el) {
|
|
353
|
+
const style = window.getComputedStyle($el);
|
|
354
|
+
if (style.display === 'none' || style.visibility === 'hidden') {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
if ($el.nodeName === 'H-PORTAL')
|
|
358
|
+
return true;
|
|
359
|
+
const $parent = $el.parentElement;
|
|
360
|
+
if (!$parent)
|
|
361
|
+
return true;
|
|
362
|
+
return this._isElementTrulyFocusable($parent);
|
|
363
|
+
}
|
|
297
364
|
_isHoveredWithinDropdown(element) {
|
|
298
365
|
var _a;
|
|
299
366
|
if (element === this)
|
|
@@ -317,6 +384,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
317
384
|
return;
|
|
318
385
|
if (!this._hasScrollableClassInitially)
|
|
319
386
|
this._hasScrollableClassInitially = this.$dropdownContent.classList.contains(SCROLLABLE_CLASS_NAME);
|
|
387
|
+
if (!this.preventFocusTrap)
|
|
388
|
+
this.$dropdownContent.setAttribute('aria-modal', 'true');
|
|
320
389
|
}
|
|
321
390
|
_getDropdownContentWidth() {
|
|
322
391
|
const isMobileResolution = document.documentElement.clientWidth < BREAKPOINTS.xs;
|
|
@@ -385,6 +454,14 @@ __decorate([
|
|
|
385
454
|
property({ type: String, attribute: 'mobile-position' }),
|
|
386
455
|
__metadata("design:type", String)
|
|
387
456
|
], HDropdown.prototype, "mobilePosition", void 0);
|
|
457
|
+
__decorate([
|
|
458
|
+
property({ type: String, attribute: 'id', reflect: true }),
|
|
459
|
+
__metadata("design:type", Object)
|
|
460
|
+
], HDropdown.prototype, "id", void 0);
|
|
461
|
+
__decorate([
|
|
462
|
+
property({ type: Boolean, attribute: 'prevent-focus-trap' }),
|
|
463
|
+
__metadata("design:type", Object)
|
|
464
|
+
], HDropdown.prototype, "preventFocusTrap", void 0);
|
|
388
465
|
HDropdown = HDropdown_1 = __decorate([
|
|
389
466
|
phoenixCustomElement('h-dropdown'),
|
|
390
467
|
__metadata("design:paramtypes", [])
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,eAAe,qDAAyD;AACxE;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,10 @@ let HDropdownClose = class HDropdownClose extends PhoenixLightLitElement {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
super();
|
|
11
11
|
this.name = '';
|
|
12
|
+
this._closeDropdown = () => {
|
|
13
|
+
const dropdown = document.querySelector(`h-dropdown[name="${this.name}"]`);
|
|
14
|
+
dropdown === null || dropdown === void 0 ? void 0 : dropdown.hide();
|
|
15
|
+
};
|
|
12
16
|
this.className = `${DROPDOWN_CSS_CLASSES.close} ${this.className}`;
|
|
13
17
|
}
|
|
14
18
|
connectedCallback() {
|
|
@@ -16,10 +20,6 @@ let HDropdownClose = class HDropdownClose extends PhoenixLightLitElement {
|
|
|
16
20
|
this._btnController = new BtnController(this, this._closeDropdown);
|
|
17
21
|
this.addEventListener('click', this._closeDropdown);
|
|
18
22
|
}
|
|
19
|
-
async _closeDropdown() {
|
|
20
|
-
const dropdown = document.querySelector(`h-dropdown[name="${this.name}"]`);
|
|
21
|
-
await (dropdown === null || dropdown === void 0 ? void 0 : dropdown.hide());
|
|
22
|
-
}
|
|
23
23
|
};
|
|
24
24
|
__decorate([
|
|
25
25
|
property({ type: String }),
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { TemplateResult } from 'lit';
|
|
2
1
|
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
3
2
|
export declare class HDropdownContent extends PhoenixLightLitElement {
|
|
4
3
|
name: string;
|
|
5
4
|
constructor();
|
|
6
5
|
connectedCallback(): void;
|
|
7
|
-
|
|
6
|
+
private _setupRole;
|
|
8
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
|
-
import { html } from 'lit';
|
|
3
2
|
import { property } from 'lit/decorators';
|
|
3
|
+
import { UiDomUtils } from '@dreamcommerce/utilities';
|
|
4
4
|
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
5
|
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
6
6
|
import { DROPDOWN_CSS_CLASSES } from './dropdown_constants.js';
|
|
@@ -9,19 +9,22 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
super();
|
|
11
11
|
this.name = '';
|
|
12
|
+
this._setupRole = () => {
|
|
13
|
+
const $focusableElements = UiDomUtils.getFocusableElements(this);
|
|
14
|
+
const role = $focusableElements.length < 2 ? 'dialog' : 'menu';
|
|
15
|
+
this.setAttribute('role', role);
|
|
16
|
+
if (role === 'menu') {
|
|
17
|
+
Array.from(this.children).forEach((element) => {
|
|
18
|
+
element.setAttribute('role', 'menuitem');
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
12
22
|
this.slot = this.hasAttribute('slot') ? this.slot : 'content';
|
|
13
23
|
}
|
|
14
24
|
connectedCallback() {
|
|
15
25
|
super.connectedCallback();
|
|
16
26
|
this.classList.add(DROPDOWN_CSS_CLASSES.content);
|
|
17
|
-
this.
|
|
18
|
-
Array.from(this.children).forEach((element) => {
|
|
19
|
-
element.setAttribute('role', 'menuitem');
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
render() {
|
|
23
|
-
super.render();
|
|
24
|
-
return html ` <div role="dialog">${this.getSlot('content')}</div> `;
|
|
27
|
+
this._setupRole();
|
|
25
28
|
}
|
|
26
29
|
};
|
|
27
30
|
__decorate([
|
|
@@ -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;"}
|
|
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;"}
|
|
@@ -6,9 +6,8 @@ export declare class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
6
6
|
private _$dropdown;
|
|
7
7
|
constructor();
|
|
8
8
|
connectedCallback(): void;
|
|
9
|
+
private _setupTogglerAria;
|
|
9
10
|
private _dispatchToggleDropdownEventWithKeyboard;
|
|
10
11
|
private _dispatchToggleDropdownEventOnMobile;
|
|
11
12
|
private _dispatchToggleDropdownEvent;
|
|
12
|
-
private _handleFocusToOpenedDropdown;
|
|
13
|
-
disconnectedCallback(): void;
|
|
14
13
|
}
|
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
2
|
import { property } from 'lit/decorators';
|
|
3
|
-
import
|
|
3
|
+
import '@dreamcommerce/utilities';
|
|
4
4
|
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
5
5
|
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
6
6
|
import { BtnController } from '../../controllers/btn_controller/btn_controller.js';
|
|
7
7
|
import { BREAKPOINTS } from '../../global_constants.js';
|
|
8
|
-
import {
|
|
8
|
+
import { DROPDOWN_CONTAINER_NAME, DROPDOWN_EVENTS, DROPDOWN_CSS_CLASSES, DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME } from './dropdown_constants.js';
|
|
9
9
|
import { ToggleElementAriaController } from '../../controllers/toggle_element_aria_controller/toggle_element_aria_controller.js';
|
|
10
10
|
|
|
11
11
|
let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
12
12
|
constructor() {
|
|
13
13
|
super();
|
|
14
14
|
this.name = '';
|
|
15
|
+
this._setupTogglerAria = () => {
|
|
16
|
+
this._$dropdown = this.closest(DROPDOWN_CONTAINER_NAME);
|
|
17
|
+
if (this._$dropdown.isOpened)
|
|
18
|
+
this._toggleElementAriaController = new ToggleElementAriaController({
|
|
19
|
+
host: this,
|
|
20
|
+
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
21
|
+
});
|
|
22
|
+
this.setAttribute('aria-haspopup', 'true');
|
|
23
|
+
if (this._$dropdown.id)
|
|
24
|
+
this.setAttribute('aria-controls', this._$dropdown.id);
|
|
25
|
+
};
|
|
15
26
|
this._dispatchToggleDropdownEventWithKeyboard = (ev) => {
|
|
16
27
|
ev.stopImmediatePropagation();
|
|
17
28
|
this._dispatchToggleDropdownEvent(ev);
|
|
@@ -25,18 +36,6 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
25
36
|
ev.preventDefault();
|
|
26
37
|
this.emitCustomEvent(DROPDOWN_EVENTS.toggle);
|
|
27
38
|
};
|
|
28
|
-
this._handleFocusToOpenedDropdown = async (ev) => {
|
|
29
|
-
if (ev.target !== this)
|
|
30
|
-
return;
|
|
31
|
-
const isOpened = this._$dropdown.isOpened();
|
|
32
|
-
if (!isOpened)
|
|
33
|
-
return;
|
|
34
|
-
const $dropdownContent = document.querySelector(`${DROPDOWN_CONTENT_NAME}[name="${this.name}"]`);
|
|
35
|
-
if (!$dropdownContent)
|
|
36
|
-
return;
|
|
37
|
-
ev.preventDefault();
|
|
38
|
-
UiDomUtils.setFocusToFirstFocusableElementInContainer($dropdownContent);
|
|
39
|
-
};
|
|
40
39
|
this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
|
|
41
40
|
this.className = `${DROPDOWN_CSS_CLASSES.toggler} ${this.className}`;
|
|
42
41
|
}
|
|
@@ -44,13 +43,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
44
43
|
var _a;
|
|
45
44
|
super.connectedCallback();
|
|
46
45
|
this._btnController = new BtnController(this, this._dispatchToggleDropdownEventWithKeyboard);
|
|
47
|
-
this.
|
|
48
|
-
if (this._$dropdown.isOpened)
|
|
49
|
-
this._toggleElementAriaController = new ToggleElementAriaController({
|
|
50
|
-
host: this,
|
|
51
|
-
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
52
|
-
});
|
|
53
|
-
document.addEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
46
|
+
this._setupTogglerAria();
|
|
54
47
|
const hasToggleOnHover = (_a = this._$dropdown) === null || _a === void 0 ? void 0 : _a.hasAttribute(DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME);
|
|
55
48
|
if (hasToggleOnHover) {
|
|
56
49
|
this.addEventListener('click', this._dispatchToggleDropdownEventOnMobile);
|
|
@@ -58,10 +51,6 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
58
51
|
}
|
|
59
52
|
this.addEventListener('click', this._dispatchToggleDropdownEvent);
|
|
60
53
|
}
|
|
61
|
-
disconnectedCallback() {
|
|
62
|
-
super.disconnectedCallback();
|
|
63
|
-
document.removeEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
64
|
-
}
|
|
65
54
|
};
|
|
66
55
|
__decorate([
|
|
67
56
|
property({ type: String, 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;
|
|
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;"}
|
|
@@ -229,9 +229,7 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
229
229
|
SelectControlUtils.appendHTMLOption($option, $list, position);
|
|
230
230
|
}
|
|
231
231
|
updateOptionAriaAttribute($option) {
|
|
232
|
-
|
|
233
|
-
? $option.removeAttribute(this.multiple ? 'aria-checked' : 'aria-selected')
|
|
234
|
-
: $option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', 'true');
|
|
232
|
+
$option.setAttribute(this.multiple ? 'aria-checked' : 'aria-selected', String($option.selected));
|
|
235
233
|
}
|
|
236
234
|
_removeHTMLOptions(optionsValues) {
|
|
237
235
|
this._$options = SelectControlUtils.removeHTMLOptions(Array.from(this._$options.values()), optionsValues);
|
|
@@ -296,13 +294,14 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
|
|
|
296
294
|
name="${this.controlName}"
|
|
297
295
|
offset=${this.offset}
|
|
298
296
|
content-width="full"
|
|
297
|
+
prevent-focus-trap
|
|
299
298
|
>
|
|
300
299
|
<h-dropdown-toggler name=${this.controlName}> ${this.getSlot(SELECT_SLOT_NAMES.toggler)} </h-dropdown-toggler>
|
|
301
300
|
|
|
302
301
|
<h-dropdown-content
|
|
303
302
|
class="${SELECT_CSS_CLASSES.selectContent} ${this.error ? SELECT_CSS_CLASSES.selectContentError : ''}"
|
|
304
303
|
${ref(this._$dropdownContent)}
|
|
305
|
-
name
|
|
304
|
+
name="${this.controlName}"
|
|
306
305
|
>
|
|
307
306
|
<h-select-close-btn class="${SELECT_CSS_CLASSES.selectCloseMobileButton}" @close=${this._closeSelect}></h-select-close-btn>
|
|
308
307
|
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts
CHANGED
|
@@ -4,8 +4,9 @@ export declare class KeystrokesController implements ReactiveController {
|
|
|
4
4
|
#private;
|
|
5
5
|
private _keys;
|
|
6
6
|
private _callback;
|
|
7
|
+
private _containerSelectors?;
|
|
7
8
|
private _buffer;
|
|
8
|
-
constructor({ host, keys, callback, target }: TKeystrokesControllerProps);
|
|
9
|
+
constructor({ host, keys, callback, target, containerSelectors }: TKeystrokesControllerProps);
|
|
9
10
|
hostConnected(): void;
|
|
10
11
|
hostDisconnected(): void;
|
|
11
12
|
private _clearBuffer;
|
package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js
CHANGED
|
@@ -3,11 +3,21 @@ import 'lit';
|
|
|
3
3
|
|
|
4
4
|
var _KeystrokesController_host, _KeystrokesController_target;
|
|
5
5
|
class KeystrokesController {
|
|
6
|
-
constructor({ host, keys, callback, target }) {
|
|
6
|
+
constructor({ host, keys, callback, target, containerSelectors }) {
|
|
7
7
|
_KeystrokesController_host.set(this, void 0);
|
|
8
8
|
_KeystrokesController_target.set(this, void 0);
|
|
9
9
|
this._buffer = [];
|
|
10
|
-
this._clearBuffer = () => {
|
|
10
|
+
this._clearBuffer = (ev) => {
|
|
11
|
+
if (!this._containerSelectors) {
|
|
12
|
+
this._buffer = [];
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const $newFocusedElement = ev.relatedTarget;
|
|
16
|
+
if ($newFocusedElement instanceof HTMLElement) {
|
|
17
|
+
const isNewFocusedElementAChild = !!this._containerSelectors.find((containerSelector) => !!$newFocusedElement.closest(containerSelector));
|
|
18
|
+
if (isNewFocusedElementAChild)
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
11
21
|
this._buffer = [];
|
|
12
22
|
};
|
|
13
23
|
this._saveKey = (ev) => {
|
|
@@ -75,6 +85,7 @@ class KeystrokesController {
|
|
|
75
85
|
__classPrivateFieldSet(this, _KeystrokesController_target, target, "f");
|
|
76
86
|
this._keys = keys;
|
|
77
87
|
this._callback = callback;
|
|
88
|
+
this._containerSelectors = containerSelectors;
|
|
78
89
|
__classPrivateFieldGet(this, _KeystrokesController_host, "f").addController(this);
|
|
79
90
|
}
|
|
80
91
|
hostConnected() {
|
|
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|