@shoper/phoenix_design_system 1.11.7-7 → 1.11.7-9

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 (40) hide show
  1. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +81 -38
  2. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +19 -1
  4. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  5. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +13 -24
  6. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  7. package/build/cjs/packages/phoenix/src/components/form/search/search_constants.js +1 -2
  8. package/build/cjs/packages/phoenix/src/components/form/search/search_constants.js.map +1 -1
  9. package/build/cjs/packages/phoenix/src/components/form/search/subcomponents/buttons/search_clear.js +0 -8
  10. package/build/cjs/packages/phoenix/src/components/form/search/subcomponents/buttons/search_clear.js.map +1 -1
  11. package/build/cjs/packages/phoenix/src/components/form/search/subcomponents/input/search_input.js +0 -9
  12. package/build/cjs/packages/phoenix/src/components/form/search/subcomponents/input/search_input.js.map +1 -1
  13. package/build/cjs/packages/phoenix/src/components/form/select/select.js +1 -0
  14. package/build/cjs/packages/phoenix/src/components/form/select/select.js.map +1 -1
  15. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  16. package/build/cjs/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  17. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +10 -4
  18. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +82 -39
  19. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  20. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +7 -1
  21. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +19 -1
  22. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  23. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.d.ts +1 -2
  24. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +14 -25
  25. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  26. package/build/esm/packages/phoenix/src/components/form/search/search_constants.d.ts +0 -1
  27. package/build/esm/packages/phoenix/src/components/form/search/search_constants.js +1 -2
  28. package/build/esm/packages/phoenix/src/components/form/search/search_constants.js.map +1 -1
  29. package/build/esm/packages/phoenix/src/components/form/search/subcomponents/buttons/search_clear.d.ts +0 -2
  30. package/build/esm/packages/phoenix/src/components/form/search/subcomponents/buttons/search_clear.js +0 -8
  31. package/build/esm/packages/phoenix/src/components/form/search/subcomponents/buttons/search_clear.js.map +1 -1
  32. package/build/esm/packages/phoenix/src/components/form/search/subcomponents/input/search_input.js +0 -9
  33. package/build/esm/packages/phoenix/src/components/form/search/subcomponents/input/search_input.js.map +1 -1
  34. package/build/esm/packages/phoenix/src/components/form/select/select.js +1 -0
  35. package/build/esm/packages/phoenix/src/components/form/select/select.js.map +1 -1
  36. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.d.ts +2 -1
  37. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js +13 -2
  38. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller.js.map +1 -1
  39. package/build/esm/packages/phoenix/src/controllers/keystrokes_controller/keystrokes_controller_types.d.ts +1 -0
  40. package/package.json +2 -2
@@ -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,24 @@ 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
+ if (ev.shiftKey === true || !this.$dropdownContent)
142
144
  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);
145
+ const $target = ev.target;
146
+ this._handleFocusFromTogglerForwards(ev, $target);
147
+ this._handleFocusFromSentinelEndForwards(ev, $target);
149
148
  };
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();
149
+ this._keepFocusWithinDropdownBackwards = (ev) => {
150
+ if (!this.opened || !this.$dropdownContent)
165
151
  return;
152
+ const $target = ev.target;
153
+ if (this.preventFocusTrap) {
154
+ this._handleDefaultFocusFromDropdownBackwards(ev);
155
+ }
156
+ else {
157
+ this._handleFocusFromTogglerBackwards(ev, $target);
158
+ this._handleFocusFromSentinelStartBackwards(ev, $target);
166
159
  }
167
- $elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.focus();
168
- };
169
- this._handleBackwardFocus = async (ev) => {
170
- var _a;
171
- const $firstFocusableElement = this.$dropdownContent && utilities.UiDomUtils.getFocusableElement(this.$dropdownContent);
172
- if (document.activeElement !== $firstFocusableElement)
173
- return;
174
- ev.preventDefault();
175
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
176
- await this._hideDropdownsSequentially();
177
160
  };
178
161
  this._hoverToggle = async (ev) => {
179
162
  if (window.innerWidth < global_constants.BREAKPOINTS.xs)
@@ -185,12 +168,20 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
185
168
  const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
186
169
  if (isHoveredWithinDropdown && !this.opened) {
187
170
  await this.show();
188
- utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
171
+ this._focusOnFirstContentElement();
189
172
  return;
190
173
  }
191
174
  if (!isHoveredWithinDropdown && this.opened)
192
175
  await this._hideDropdownsSequentially();
193
176
  };
177
+ this._focusOnFirstContentElement = () => {
178
+ if (!this.$dropdownContent)
179
+ return;
180
+ const focusableElements = utilities.UiDomUtils.getFocusableElements(this.$dropdownContent);
181
+ // pierwszy jest zawsze sentinel, drugi to pierwszy element faktycznego contentu
182
+ const $firstRealFocusableContentElement = focusableElements[1];
183
+ $firstRealFocusableContentElement.focus();
184
+ };
194
185
  this.isOpened = () => this.opened;
195
186
  this._positionDropdownContent = () => {
196
187
  if (this.contentWidth === dropdown_constants.DROPDOWN_CONTENT_WIDTH.full)
@@ -216,13 +207,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
216
207
  host: this,
217
208
  target: document.body,
218
209
  keys: ['tab'],
219
- callback: this._handleForwardFocus
210
+ callback: this._keepFocusWithinDropdownForwards
220
211
  });
221
212
  new keystrokes_controller.KeystrokesController({
222
213
  host: this,
223
214
  target: document.body,
224
215
  keys: [['shift', 'tab']],
225
- callback: this._handleBackwardFocus
216
+ callback: this._keepFocusWithinDropdownBackwards,
217
+ containerSelectors: ['h-dropdown', 'h-dropdown-content']
226
218
  });
227
219
  }
228
220
  async connectedCallback() {
@@ -298,6 +290,47 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
298
290
  (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(global_constants.SCROLLABLE_CLASS_NAME);
299
291
  }
300
292
  }
293
+ _handleFocusFromTogglerForwards(ev, $target) {
294
+ var _a, _b, _c;
295
+ if (!((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.opened)
296
+ return;
297
+ ev.preventDefault();
298
+ (_c = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelStart.value) === null || _c === void 0 ? void 0 : _c.focus();
299
+ }
300
+ _handleFocusFromSentinelEndForwards(ev, $target) {
301
+ var _a, _b, _c;
302
+ if (this.preventFocusTrap && document.activeElement) {
303
+ const $nextFocusableElement = utilities.UiDomUtils.getNextFocusableElement(document.activeElement);
304
+ if ($nextFocusableElement === ((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.focusSentinelEnd.value)) {
305
+ this.hide();
306
+ utilities.UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
307
+ }
308
+ return;
309
+ }
310
+ if ($target !== ((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelEnd.value))
311
+ return;
312
+ ev.preventDefault();
313
+ (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
314
+ }
315
+ _handleDefaultFocusFromDropdownBackwards(ev) {
316
+ ev.preventDefault();
317
+ this.hide();
318
+ utilities.UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
319
+ }
320
+ _handleFocusFromTogglerBackwards(ev, $target) {
321
+ var _a, _b, _c;
322
+ if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)))
323
+ return;
324
+ ev.preventDefault();
325
+ (_c = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelEnd.value) === null || _c === void 0 ? void 0 : _c.focus();
326
+ }
327
+ _handleFocusFromSentinelStartBackwards(ev, $target) {
328
+ var _a, _b;
329
+ if ($target !== ((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.focusSentinelStart.value))
330
+ return;
331
+ ev.preventDefault();
332
+ (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.focus();
333
+ }
301
334
  _isHoveredWithinDropdown(element) {
302
335
  var _a;
303
336
  if (element === this)
@@ -321,6 +354,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
321
354
  return;
322
355
  if (!this._hasScrollableClassInitially)
323
356
  this._hasScrollableClassInitially = this.$dropdownContent.classList.contains(global_constants.SCROLLABLE_CLASS_NAME);
357
+ if (!this.preventFocusTrap)
358
+ this.$dropdownContent.setAttribute('aria-modal', 'true');
324
359
  }
325
360
  _getDropdownContentWidth() {
326
361
  const isMobileResolution = document.documentElement.clientWidth < global_constants.BREAKPOINTS.xs;
@@ -389,6 +424,14 @@ tslib_es6.__decorate([
389
424
  decorators_js.property({ type: String, attribute: 'mobile-position' }),
390
425
  tslib_es6.__metadata("design:type", String)
391
426
  ], exports.HDropdown.prototype, "mobilePosition", void 0);
427
+ tslib_es6.__decorate([
428
+ decorators_js.property({ type: String, attribute: 'id', reflect: true }),
429
+ tslib_es6.__metadata("design:type", Object)
430
+ ], exports.HDropdown.prototype, "id", void 0);
431
+ tslib_es6.__decorate([
432
+ decorators_js.property({ type: Boolean, attribute: 'prevent-focus-trap' }),
433
+ tslib_es6.__metadata("design:type", Object)
434
+ ], exports.HDropdown.prototype, "preventFocusTrap", void 0);
392
435
  exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
393
436
  phoenix_custom_element.phoenixCustomElement('h-dropdown'),
394
437
  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;"}
@@ -7,13 +7,18 @@ var lit = require('lit');
7
7
  var decorators = require('lit/decorators');
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
+ var ref_js = require('lit-html/directives/ref.js');
10
11
  var dropdown_constants = require('./dropdown_constants.js');
11
12
 
12
13
  exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_element.PhoenixLightLitElement {
13
14
  constructor() {
14
15
  super();
15
16
  this.name = '';
17
+ this.focusSentinelStart = ref_js.createRef();
18
+ this.focusSentinelEnd = ref_js.createRef();
19
+ this._contentContainer = ref_js.createRef();
16
20
  this.slot = this.hasAttribute('slot') ? this.slot : 'content';
21
+ this._initialChildren = Array.from(this.childNodes);
17
22
  }
18
23
  connectedCallback() {
19
24
  super.connectedCallback();
@@ -23,9 +28,22 @@ exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_elem
23
28
  element.setAttribute('role', 'menuitem');
24
29
  });
25
30
  }
31
+ firstUpdated(_changedProperties) {
32
+ super.firstUpdated(_changedProperties);
33
+ if (this._contentContainer.value) {
34
+ this._initialChildren.forEach((child) => {
35
+ var _a;
36
+ (_a = this._contentContainer.value) === null || _a === void 0 ? void 0 : _a.appendChild(child);
37
+ });
38
+ }
39
+ }
26
40
  render() {
27
41
  super.render();
28
- return lit.html ` <div role="dialog">${this.getSlot('content')}</div> `;
42
+ return lit.html `
43
+ <div tabindex="0" ${ref_js.ref(this.focusSentinelStart)}></div>
44
+ <div ${ref_js.ref(this._contentContainer)}></div>
45
+ <div tabindex="0" ${ref_js.ref(this.focusSentinelEnd)}></div>
46
+ `;
29
47
  }
30
48
  };
31
49
  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;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;"}
@@ -30,8 +30,7 @@ const SEARCH_CUSTOM_EVENT_NAMES = {
30
30
  search: 'search',
31
31
  updateSearchPhrase: 'updateSearchPhrase',
32
32
  focusin: 'searchFocusIn',
33
- keydown: 'searchKeyDown',
34
- keyup: 'searchKeyUp'
33
+ keydown: 'searchKeyDown'
35
34
  };
36
35
  const baseSearchCssClass = 'search';
37
36
  const SEARCH_CLASS_NAMES = {
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -18,9 +18,6 @@ exports.HSearchClear = class HSearchClear extends phoenix_light_lit_element.Phoe
18
18
  super();
19
19
  this._shouldShow = false;
20
20
  this._isRequestPending = false;
21
- this._handleClearButtonOnPhraseEnter = (ev) => {
22
- this._shouldShow = ev.detail.searchPhrase !== '';
23
- };
24
21
  this._dispatchClearEvent = () => {
25
22
  this.emitCustomEvent(search_constants.SEARCH_CUSTOM_EVENT_NAMES.clear, {
26
23
  detail: {
@@ -34,7 +31,6 @@ exports.HSearchClear = class HSearchClear extends phoenix_light_lit_element.Phoe
34
31
  super.connectedCallback();
35
32
  this._searchContextSetup();
36
33
  this.addEventListener('click', this._dispatchClearEvent);
37
- document.addEventListener(search_constants.SEARCH_CUSTOM_EVENT_NAMES.keyup, this._handleClearButtonOnPhraseEnter);
38
34
  }
39
35
  async _searchContextSetup() {
40
36
  try {
@@ -51,10 +47,6 @@ exports.HSearchClear = class HSearchClear extends phoenix_light_lit_element.Phoe
51
47
  console.error('Search context is not provided');
52
48
  }
53
49
  }
54
- disconnectedCallback() {
55
- super.disconnectedCallback();
56
- document.removeEventListener(search_constants.SEARCH_CUSTOM_EVENT_NAMES.keydown, this._handleClearButtonOnPhraseEnter);
57
- }
58
50
  render() {
59
51
  return lit.html ` ${when.when(this._shouldShow, () => lit.html `
60
52
  ${when.when(this._isRequestPending, () => lit.html `<div class="${search_constants.SEARCH_CLASS_NAMES.loader}">
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,qDAAyD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2EAAmF;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,qDAAyD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2EAAmF;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -74,15 +74,6 @@ exports.HSearchInput = class HSearchInput extends phoenix_light_lit_element.Phoe
74
74
  }
75
75
  });
76
76
  });
77
- this._input.addEventListener('keyup', (ev) => {
78
- if (ev.key === 'ArrowUp' || ev.key === 'ArrowDown' || ev.key === 'Escape' || ev.key === 'Enter')
79
- return;
80
- this.emitCustomEvent(search_constants.SEARCH_CUSTOM_EVENT_NAMES.keyup, {
81
- detail: {
82
- searchPhrase: ev.target.value
83
- }
84
- });
85
- });
86
77
  this._input.addEventListener('search', (ev) => {
87
78
  if (this._input.value !== '') {
88
79
  return;
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,qDAAyD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,qDAAyD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -300,6 +300,7 @@ exports.HSelect = class HSelect extends phoenix_light_lit_element.PhoenixLightLi
300
300
  name="${this.controlName}"
301
301
  offset=${this.offset}
302
302
  content-width="full"
303
+ prevent-focus-trap
303
304
  >
304
305
  <h-dropdown-toggler name=${this.controlName}> ${this.getSlot(select_constants.SELECT_SLOT_NAMES.toggler)} </h-dropdown-toggler>
305
306
 
@@ -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;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) {
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,16 @@ 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 _handleFocusFromTogglerForwards;
47
+ private _handleFocusFromSentinelEndForwards;
48
+ private _keepFocusWithinDropdownBackwards;
49
+ private _handleDefaultFocusFromDropdownBackwards;
50
+ private _handleFocusFromTogglerBackwards;
51
+ private _handleFocusFromSentinelStartBackwards;
47
52
  private _hoverToggle;
48
53
  private _isHoveredWithinDropdown;
54
+ private _focusOnFirstContentElement;
49
55
  private _setupInitialDropdownProperties;
50
56
  isOpened: () => boolean;
51
57
  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,24 @@ 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
+ if (ev.shiftKey === true || !this.$dropdownContent)
138
140
  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);
141
+ const $target = ev.target;
142
+ this._handleFocusFromTogglerForwards(ev, $target);
143
+ this._handleFocusFromSentinelEndForwards(ev, $target);
145
144
  };
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();
145
+ this._keepFocusWithinDropdownBackwards = (ev) => {
146
+ if (!this.opened || !this.$dropdownContent)
161
147
  return;
148
+ const $target = ev.target;
149
+ if (this.preventFocusTrap) {
150
+ this._handleDefaultFocusFromDropdownBackwards(ev);
151
+ }
152
+ else {
153
+ this._handleFocusFromTogglerBackwards(ev, $target);
154
+ this._handleFocusFromSentinelStartBackwards(ev, $target);
162
155
  }
163
- $elementToFocus === null || $elementToFocus === void 0 ? void 0 : $elementToFocus.focus();
164
- };
165
- this._handleBackwardFocus = async (ev) => {
166
- var _a;
167
- const $firstFocusableElement = this.$dropdownContent && UiDomUtils.getFocusableElement(this.$dropdownContent);
168
- if (document.activeElement !== $firstFocusableElement)
169
- return;
170
- ev.preventDefault();
171
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
172
- await this._hideDropdownsSequentially();
173
156
  };
174
157
  this._hoverToggle = async (ev) => {
175
158
  if (window.innerWidth < BREAKPOINTS.xs)
@@ -181,12 +164,20 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
181
164
  const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
182
165
  if (isHoveredWithinDropdown && !this.opened) {
183
166
  await this.show();
184
- UiDomUtils.setFocusToFirstFocusableElementInContainer(this.$dropdownContent);
167
+ this._focusOnFirstContentElement();
185
168
  return;
186
169
  }
187
170
  if (!isHoveredWithinDropdown && this.opened)
188
171
  await this._hideDropdownsSequentially();
189
172
  };
173
+ this._focusOnFirstContentElement = () => {
174
+ if (!this.$dropdownContent)
175
+ return;
176
+ const focusableElements = UiDomUtils.getFocusableElements(this.$dropdownContent);
177
+ // pierwszy jest zawsze sentinel, drugi to pierwszy element faktycznego contentu
178
+ const $firstRealFocusableContentElement = focusableElements[1];
179
+ $firstRealFocusableContentElement.focus();
180
+ };
190
181
  this.isOpened = () => this.opened;
191
182
  this._positionDropdownContent = () => {
192
183
  if (this.contentWidth === DROPDOWN_CONTENT_WIDTH.full)
@@ -212,13 +203,14 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
212
203
  host: this,
213
204
  target: document.body,
214
205
  keys: ['tab'],
215
- callback: this._handleForwardFocus
206
+ callback: this._keepFocusWithinDropdownForwards
216
207
  });
217
208
  new KeystrokesController({
218
209
  host: this,
219
210
  target: document.body,
220
211
  keys: [['shift', 'tab']],
221
- callback: this._handleBackwardFocus
212
+ callback: this._keepFocusWithinDropdownBackwards,
213
+ containerSelectors: ['h-dropdown', 'h-dropdown-content']
222
214
  });
223
215
  }
224
216
  async connectedCallback() {
@@ -294,6 +286,47 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
294
286
  (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(SCROLLABLE_CLASS_NAME);
295
287
  }
296
288
  }
289
+ _handleFocusFromTogglerForwards(ev, $target) {
290
+ var _a, _b, _c;
291
+ if (!((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.opened)
292
+ return;
293
+ ev.preventDefault();
294
+ (_c = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelStart.value) === null || _c === void 0 ? void 0 : _c.focus();
295
+ }
296
+ _handleFocusFromSentinelEndForwards(ev, $target) {
297
+ var _a, _b, _c;
298
+ if (this.preventFocusTrap && document.activeElement) {
299
+ const $nextFocusableElement = UiDomUtils.getNextFocusableElement(document.activeElement);
300
+ if ($nextFocusableElement === ((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.focusSentinelEnd.value)) {
301
+ this.hide();
302
+ UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
303
+ }
304
+ return;
305
+ }
306
+ if ($target !== ((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelEnd.value))
307
+ return;
308
+ ev.preventDefault();
309
+ (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
310
+ }
311
+ _handleDefaultFocusFromDropdownBackwards(ev) {
312
+ ev.preventDefault();
313
+ this.hide();
314
+ UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
315
+ }
316
+ _handleFocusFromTogglerBackwards(ev, $target) {
317
+ var _a, _b, _c;
318
+ if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)))
319
+ return;
320
+ ev.preventDefault();
321
+ (_c = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.focusSentinelEnd.value) === null || _c === void 0 ? void 0 : _c.focus();
322
+ }
323
+ _handleFocusFromSentinelStartBackwards(ev, $target) {
324
+ var _a, _b;
325
+ if ($target !== ((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.focusSentinelStart.value))
326
+ return;
327
+ ev.preventDefault();
328
+ (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.focus();
329
+ }
297
330
  _isHoveredWithinDropdown(element) {
298
331
  var _a;
299
332
  if (element === this)
@@ -317,6 +350,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
317
350
  return;
318
351
  if (!this._hasScrollableClassInitially)
319
352
  this._hasScrollableClassInitially = this.$dropdownContent.classList.contains(SCROLLABLE_CLASS_NAME);
353
+ if (!this.preventFocusTrap)
354
+ this.$dropdownContent.setAttribute('aria-modal', 'true');
320
355
  }
321
356
  _getDropdownContentWidth() {
322
357
  const isMobileResolution = document.documentElement.clientWidth < BREAKPOINTS.xs;
@@ -385,6 +420,14 @@ __decorate([
385
420
  property({ type: String, attribute: 'mobile-position' }),
386
421
  __metadata("design:type", String)
387
422
  ], HDropdown.prototype, "mobilePosition", void 0);
423
+ __decorate([
424
+ property({ type: String, attribute: 'id', reflect: true }),
425
+ __metadata("design:type", Object)
426
+ ], HDropdown.prototype, "id", void 0);
427
+ __decorate([
428
+ property({ type: Boolean, attribute: 'prevent-focus-trap' }),
429
+ __metadata("design:type", Object)
430
+ ], HDropdown.prototype, "preventFocusTrap", void 0);
388
431
  HDropdown = HDropdown_1 = __decorate([
389
432
  phoenixCustomElement('h-dropdown'),
390
433
  __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;"}
@@ -1,8 +1,14 @@
1
- import { TemplateResult } from 'lit';
1
+ import { PropertyValues, TemplateResult } from 'lit';
2
2
  import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
3
+ import { Ref } from 'lit-html/directives/ref.js';
3
4
  export declare class HDropdownContent extends PhoenixLightLitElement {
4
5
  name: string;
6
+ focusSentinelStart: Ref<HTMLElement>;
7
+ focusSentinelEnd: Ref<HTMLElement>;
8
+ private _contentContainer;
9
+ private _initialChildren;
5
10
  constructor();
6
11
  connectedCallback(): void;
12
+ firstUpdated(_changedProperties: PropertyValues): void;
7
13
  protected render(): TemplateResult;
8
14
  }
@@ -3,13 +3,18 @@ import { html } from 'lit';
3
3
  import { property } from 'lit/decorators';
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
+ import { createRef, ref } from 'lit-html/directives/ref.js';
6
7
  import { DROPDOWN_CSS_CLASSES } from './dropdown_constants.js';
7
8
 
8
9
  let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
9
10
  constructor() {
10
11
  super();
11
12
  this.name = '';
13
+ this.focusSentinelStart = createRef();
14
+ this.focusSentinelEnd = createRef();
15
+ this._contentContainer = createRef();
12
16
  this.slot = this.hasAttribute('slot') ? this.slot : 'content';
17
+ this._initialChildren = Array.from(this.childNodes);
13
18
  }
14
19
  connectedCallback() {
15
20
  super.connectedCallback();
@@ -19,9 +24,22 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
19
24
  element.setAttribute('role', 'menuitem');
20
25
  });
21
26
  }
27
+ firstUpdated(_changedProperties) {
28
+ super.firstUpdated(_changedProperties);
29
+ if (this._contentContainer.value) {
30
+ this._initialChildren.forEach((child) => {
31
+ var _a;
32
+ (_a = this._contentContainer.value) === null || _a === void 0 ? void 0 : _a.appendChild(child);
33
+ });
34
+ }
35
+ }
22
36
  render() {
23
37
  super.render();
24
- return html ` <div role="dialog">${this.getSlot('content')}</div> `;
38
+ return html `
39
+ <div tabindex="0" ${ref(this.focusSentinelStart)}></div>
40
+ <div ${ref(this._contentContainer)}></div>
41
+ <div tabindex="0" ${ref(this.focusSentinelEnd)}></div>
42
+ `;
25
43
  }
26
44
  };
27
45
  __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;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;"}
@@ -28,7 +28,6 @@ export declare const SEARCH_CUSTOM_EVENT_NAMES: {
28
28
  readonly updateSearchPhrase: "updateSearchPhrase";
29
29
  readonly focusin: "searchFocusIn";
30
30
  readonly keydown: "searchKeyDown";
31
- readonly keyup: "searchKeyUp";
32
31
  };
33
32
  export declare const SEARCH_CLASS_NAMES: {
34
33
  readonly searchBar: "search__bar";
@@ -26,8 +26,7 @@ const SEARCH_CUSTOM_EVENT_NAMES = {
26
26
  search: 'search',
27
27
  updateSearchPhrase: 'updateSearchPhrase',
28
28
  focusin: 'searchFocusIn',
29
- keydown: 'searchKeyDown',
30
- keyup: 'searchKeyUp'
29
+ keydown: 'searchKeyDown'
31
30
  };
32
31
  const baseSearchCssClass = 'search';
33
32
  const SEARCH_CLASS_NAMES = {
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -10,9 +10,7 @@ export declare class HSearchClear extends PhoenixLightLitElement {
10
10
  private _searchContextObserver;
11
11
  constructor();
12
12
  connectedCallback(): void;
13
- private _handleClearButtonOnPhraseEnter;
14
13
  private _dispatchClearEvent;
15
14
  private _searchContextSetup;
16
- disconnectedCallback(): void;
17
15
  protected render(): TemplateResult;
18
16
  }
@@ -14,9 +14,6 @@ let HSearchClear = class HSearchClear extends PhoenixLightLitElement {
14
14
  super();
15
15
  this._shouldShow = false;
16
16
  this._isRequestPending = false;
17
- this._handleClearButtonOnPhraseEnter = (ev) => {
18
- this._shouldShow = ev.detail.searchPhrase !== '';
19
- };
20
17
  this._dispatchClearEvent = () => {
21
18
  this.emitCustomEvent(SEARCH_CUSTOM_EVENT_NAMES.clear, {
22
19
  detail: {
@@ -30,7 +27,6 @@ let HSearchClear = class HSearchClear extends PhoenixLightLitElement {
30
27
  super.connectedCallback();
31
28
  this._searchContextSetup();
32
29
  this.addEventListener('click', this._dispatchClearEvent);
33
- document.addEventListener(SEARCH_CUSTOM_EVENT_NAMES.keyup, this._handleClearButtonOnPhraseEnter);
34
30
  }
35
31
  async _searchContextSetup() {
36
32
  try {
@@ -47,10 +43,6 @@ let HSearchClear = class HSearchClear extends PhoenixLightLitElement {
47
43
  console.error('Search context is not provided');
48
44
  }
49
45
  }
50
- disconnectedCallback() {
51
- super.disconnectedCallback();
52
- document.removeEventListener(SEARCH_CUSTOM_EVENT_NAMES.keydown, this._handleClearButtonOnPhraseEnter);
53
- }
54
46
  render() {
55
47
  return html ` ${n(this._shouldShow, () => html `
56
48
  ${n(this._isRequestPending, () => html `<div class="${SEARCH_CLASS_NAMES.loader}">
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2EAAmF;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2EAAmF;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -70,15 +70,6 @@ let HSearchInput = class HSearchInput extends PhoenixLightLitElement {
70
70
  }
71
71
  });
72
72
  });
73
- this._input.addEventListener('keyup', (ev) => {
74
- if (ev.key === 'ArrowUp' || ev.key === 'ArrowDown' || ev.key === 'Escape' || ev.key === 'Enter')
75
- return;
76
- this.emitCustomEvent(SEARCH_CUSTOM_EVENT_NAMES.keyup, {
77
- detail: {
78
- searchPhrase: ev.target.value
79
- }
80
- });
81
- });
82
73
  this._input.addEventListener('search', (ev) => {
83
74
  if (this._input.value !== '') {
84
75
  return;
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,qDAAyD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -296,6 +296,7 @@ let HSelect = class HSelect extends PhoenixLightLitElement {
296
296
  name="${this.controlName}"
297
297
  offset=${this.offset}
298
298
  content-width="full"
299
+ prevent-focus-trap
299
300
  >
300
301
  <h-dropdown-toggler name=${this.controlName}> ${this.getSlot(SELECT_SLOT_NAMES.toggler)} </h-dropdown-toggler>
301
302
 
@@ -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;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) {
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.11.7-7",
5
+ "version": "1.11.7-9",
6
6
  "description": "phoenix design system",
7
7
  "author": "zefirek",
8
8
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  "@splidejs/splide": "^4.0.7"
31
31
  },
32
32
  "devDependencies": {
33
- "@dreamcommerce/utilities": "^1.18.1",
33
+ "@dreamcommerce/utilities": "^1.18.1-5",
34
34
  "@shoper/jest_config": "^0.0.0",
35
35
  "@shoper/tsconfig": "^0.0.0",
36
36
  "@splidejs/splide": "4.0.7",