@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.
Files changed (28) hide show
  1. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +114 -37
  2. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_close.js +4 -4
  4. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
  5. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  6. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +13 -24
  7. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  8. package/build/cjs/packages/phoenix/src/components/form/select/select.js +3 -4
  9. package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
  10. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  11. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  12. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +13 -4
  13. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +115 -38
  14. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  15. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_close.js +4 -4
  16. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +1 -2
  17. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +12 -9
  18. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  19. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.d.ts +1 -2
  20. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +14 -25
  21. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  22. package/build/esm/packages/phoenix/src/components/form/select/select.js +3 -4
  23. package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
  24. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts +2 -1
  25. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  26. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  27. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_types.d.ts +1 -0
  28. 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
- utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
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._handleForwardFocus = async (ev) => {
140
- // if (!this.opened) this._handleFocusOnNextElement(ev);
141
- if (!this.opened || ev.shiftKey)
142
+ this._keepFocusWithinDropdownForwards = (ev) => {
143
+ var _a, _b;
144
+ if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
142
145
  return;
143
- const $focusableElementsWithinDropdownContent = utilities.UiDomUtils.getFocusableElements(this.$dropdownContent).filter((element) => element.closest(dropdown_constants.DROPDOWN_CONTENT_NAME) === this.$dropdownContent);
144
- const doesNotHaveFocusableElementsInsideContent = $focusableElementsWithinDropdownContent.length <= 0 && this.opened;
145
- const indexOfCurrentlyFocusedElement = $focusableElementsWithinDropdownContent.indexOf(document.activeElement);
146
- const isActiveElementLastFocusableElement = indexOfCurrentlyFocusedElement === $focusableElementsWithinDropdownContent.length - 1;
147
- if (doesNotHaveFocusableElementsInsideContent || isActiveElementLastFocusableElement)
148
- this._handleFocusOnNextElement(ev);
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
- $elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.focus();
155
+ this._handleFocusFromSentinelEndForwards(ev, $target);
168
156
  };
169
- this._handleBackwardFocus = async (ev) => {
170
- var _a;
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.preventDefault();
175
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
176
- await this._hideDropdownsSequentially();
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
- utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
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._handleForwardFocus
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._handleBackwardFocus
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.setAttribute('role', 'menu');
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
- var utilities = require('@dreamcommerce/utilities');
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._$dropdown = this.closest(dropdown_constants.DROPDOWN_CONTAINER_NAME);
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;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
- !$option.selected
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=${this.controlName}
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;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;"}
@@ -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 _handleForwardFocus;
44
- private _handleFocusOnNextElement;
45
- private _focusOnNextElementAfterToggler;
46
- private _handleBackwardFocus;
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, DROPDOWN_CONTENT_NAME, DROPDOWN_CONTENT_WIDTH, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
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
- UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
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._handleForwardFocus = async (ev) => {
136
- // if (!this.opened) this._handleFocusOnNextElement(ev);
137
- if (!this.opened || ev.shiftKey)
138
+ this._keepFocusWithinDropdownForwards = (ev) => {
139
+ var _a, _b;
140
+ if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
138
141
  return;
139
- const $focusableElementsWithinDropdownContent = UiDomUtils.getFocusableElements(this.$dropdownContent).filter((element) => element.closest(DROPDOWN_CONTENT_NAME) === this.$dropdownContent);
140
- const doesNotHaveFocusableElementsInsideContent = $focusableElementsWithinDropdownContent.length <= 0 && this.opened;
141
- const indexOfCurrentlyFocusedElement = $focusableElementsWithinDropdownContent.indexOf(document.activeElement);
142
- const isActiveElementLastFocusableElement = indexOfCurrentlyFocusedElement === $focusableElementsWithinDropdownContent.length - 1;
143
- if (doesNotHaveFocusableElementsInsideContent || isActiveElementLastFocusableElement)
144
- this._handleFocusOnNextElement(ev);
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
- $elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.focus();
151
+ this._handleFocusFromSentinelEndForwards(ev, $target);
164
152
  };
165
- this._handleBackwardFocus = async (ev) => {
166
- var _a;
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.preventDefault();
171
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
172
- await this._hideDropdownsSequentially();
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
- UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
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._handleForwardFocus
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._handleBackwardFocus
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
- protected render(): TemplateResult;
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.setAttribute('role', 'menu');
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 { UiDomUtils } from '@dreamcommerce/utilities';
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 { DROPDOWN_EVENTS, DROPDOWN_CONTENT_NAME, DROPDOWN_CSS_CLASSES, DROPDOWN_CONTAINER_NAME, DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME } from './dropdown_constants.js';
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._$dropdown = this.closest(DROPDOWN_CONTAINER_NAME);
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;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
- !$option.selected
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=${this.controlName}
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;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;"}
@@ -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;
@@ -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;"}
@@ -4,4 +4,5 @@ export declare type TKeystrokesControllerProps = {
4
4
  keys: string[][] | string[] | string;
5
5
  callback: (ev: Event) => void;
6
6
  target: Element;
7
+ containerSelectors?: string[];
7
8
  };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@shoper/phoenix_design_system",
3
3
  "packageManager": "yarn@3.2.0",
4
4
  "sideEffects": false,
5
- "version": "1.14.0",
5
+ "version": "1.14.1",
6
6
  "description": "phoenix design system",
7
7
  "author": "zefirek",
8
8
  "license": "MIT",