@shoper/phoenix_design_system 1.18.23-0 → 1.18.23-2

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 (37) hide show
  1. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +14 -77
  2. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/form/search/search.js +27 -0
  4. package/build/cjs/packages/phoenix/src/components/form/search/search.js.map +1 -1
  5. package/build/cjs/packages/phoenix/src/components/modal/modal.js +13 -59
  6. package/build/cjs/packages/phoenix/src/components/modal/modal.js.map +1 -1
  7. package/build/cjs/packages/phoenix/src/components/modal/modal_constants.js +1 -3
  8. package/build/cjs/packages/phoenix/src/components/modal/modal_constants.js.map +1 -1
  9. package/build/cjs/packages/phoenix/src/components/sheet/sheet.js +9 -55
  10. package/build/cjs/packages/phoenix/src/components/sheet/sheet.js.map +1 -1
  11. package/build/cjs/packages/phoenix/src/components/sheet/sheet_constants.js +1 -3
  12. package/build/cjs/packages/phoenix/src/components/sheet/sheet_constants.js.map +1 -1
  13. package/build/cjs/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller.js +200 -0
  14. package/build/cjs/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller.js.map +1 -0
  15. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +1 -6
  16. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +14 -77
  17. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  18. package/build/esm/packages/phoenix/src/components/form/search/search.d.ts +4 -0
  19. package/build/esm/packages/phoenix/src/components/form/search/search.js +27 -0
  20. package/build/esm/packages/phoenix/src/components/form/search/search.js.map +1 -1
  21. package/build/esm/packages/phoenix/src/components/modal/modal.d.ts +1 -5
  22. package/build/esm/packages/phoenix/src/components/modal/modal.js +15 -61
  23. package/build/esm/packages/phoenix/src/components/modal/modal.js.map +1 -1
  24. package/build/esm/packages/phoenix/src/components/modal/modal_constants.js +2 -3
  25. package/build/esm/packages/phoenix/src/components/modal/modal_constants.js.map +1 -1
  26. package/build/esm/packages/phoenix/src/components/sheet/sheet.d.ts +1 -5
  27. package/build/esm/packages/phoenix/src/components/sheet/sheet.js +11 -57
  28. package/build/esm/packages/phoenix/src/components/sheet/sheet.js.map +1 -1
  29. package/build/esm/packages/phoenix/src/components/sheet/sheet_constants.js +2 -3
  30. package/build/esm/packages/phoenix/src/components/sheet/sheet_constants.js.map +1 -1
  31. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller.d.ts +24 -0
  32. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller.js +196 -0
  33. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller.js.map +1 -0
  34. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller_types.d.ts +14 -0
  35. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller_types.js +2 -0
  36. package/build/esm/packages/phoenix/src/controllers/focus_trap_controller/focus_trap_controller_types.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,200 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
6
+ require('lit');
7
+ var utilities = require('@dreamcommerce/utilities');
8
+
9
+ var _FocusTrapController_getContainer, _FocusTrapController_getToggler, _FocusTrapController_cyclicKeydown, _FocusTrapController_active, _FocusTrapController_sentinelStart, _FocusTrapController_sentinelEnd;
10
+ class FocusTrapController {
11
+ constructor({ host, getContainer, noAutofocus = false, getToggler, cyclicKeydown = false }) {
12
+ _FocusTrapController_getContainer.set(this, void 0);
13
+ _FocusTrapController_getToggler.set(this, void 0);
14
+ _FocusTrapController_cyclicKeydown.set(this, void 0);
15
+ _FocusTrapController_active.set(this, false);
16
+ _FocusTrapController_sentinelStart.set(this, void 0);
17
+ _FocusTrapController_sentinelEnd.set(this, void 0);
18
+ // ─── Sentinel mode ───────────────────────────────────────────────────────
19
+ this._handleSentinelModeKeyUp = (ev) => {
20
+ var _a;
21
+ if (!tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_active, "f") || ev.code !== 'Tab')
22
+ return;
23
+ const container = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getContainer, "f").call(this);
24
+ if (!container)
25
+ return;
26
+ if (ev.shiftKey) {
27
+ if (document.activeElement === tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_sentinelStart, "f")) {
28
+ const focusableElements = this._getFocusableElements(container);
29
+ (_a = focusableElements[focusableElements.length - 1]) === null || _a === void 0 ? void 0 : _a.focus();
30
+ ev.preventDefault();
31
+ }
32
+ }
33
+ else if (document.activeElement === tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_sentinelEnd, "f")) {
34
+ utilities.UiDomUtils.setFocusToFirstFocusableElementInContainer(container);
35
+ ev.preventDefault();
36
+ }
37
+ };
38
+ // ─── Cyclic keydown mode ─────────────────────────────────────────────────
39
+ //
40
+ // No sentinel elements. Tab past the last focusable element wraps to the
41
+ // first; Shift+Tab past the first wraps to the last. Uses keydown +
42
+ // preventDefault so the browser never moves focus outside the container.
43
+ this._handleCyclicKeyDown = (ev) => {
44
+ if (!tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_active, "f") || ev.code !== 'Tab')
45
+ return;
46
+ const container = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getContainer, "f").call(this);
47
+ if (!container)
48
+ return;
49
+ const focusableElements = this._getFocusableElements(container);
50
+ if (focusableElements.length === 0)
51
+ return;
52
+ const $target = ev.target;
53
+ if (ev.shiftKey) {
54
+ if ($target === focusableElements[0]) {
55
+ ev.preventDefault();
56
+ focusableElements[focusableElements.length - 1].focus();
57
+ }
58
+ }
59
+ else {
60
+ if ($target === focusableElements[focusableElements.length - 1]) {
61
+ ev.preventDefault();
62
+ focusableElements[0].focus();
63
+ }
64
+ }
65
+ };
66
+ // ─── Toggler mode ────────────────────────────────────────────────────────
67
+ //
68
+ // Cycle: toggler → content[0] → … → content[last] → toggler (and reverse).
69
+ // Uses keydown + preventDefault so the browser never moves focus on its own.
70
+ this._handleTogglerModeKeyDown = (ev) => {
71
+ var _a;
72
+ if (!tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_active, "f") || ev.code !== 'Tab')
73
+ return;
74
+ const container = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getContainer, "f").call(this);
75
+ const toggler = (_a = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getToggler, "f")) === null || _a === void 0 ? void 0 : _a.call(this);
76
+ if (!container || !toggler)
77
+ return;
78
+ const $target = ev.target;
79
+ const focusableElements = this._getFocusableElements(container);
80
+ if (ev.shiftKey) {
81
+ // Shift+Tab on toggler → last content element
82
+ if (toggler.contains($target)) {
83
+ const last = focusableElements[focusableElements.length - 1];
84
+ if (!last)
85
+ return;
86
+ ev.preventDefault();
87
+ last.focus();
88
+ return;
89
+ }
90
+ // Shift+Tab on first content element → toggler
91
+ if ($target === focusableElements[0]) {
92
+ ev.preventDefault();
93
+ toggler.focus();
94
+ }
95
+ }
96
+ else {
97
+ // Tab on toggler → first content element
98
+ if (toggler.contains($target)) {
99
+ const first = focusableElements[0];
100
+ if (!first)
101
+ return;
102
+ ev.preventDefault();
103
+ first.focus();
104
+ return;
105
+ }
106
+ // Tab on last content element → toggler
107
+ if ($target === focusableElements[focusableElements.length - 1]) {
108
+ ev.preventDefault();
109
+ toggler.focus();
110
+ }
111
+ }
112
+ };
113
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_getContainer, getContainer, "f");
114
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_getToggler, getToggler, "f");
115
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_cyclicKeydown, cyclicKeydown, "f");
116
+ this.noAutofocus = noAutofocus;
117
+ host.addController(this);
118
+ }
119
+ hostConnected() {
120
+ if (tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_cyclicKeydown, "f")) {
121
+ document.addEventListener('keydown', this._handleCyclicKeyDown);
122
+ }
123
+ else if (tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getToggler, "f")) {
124
+ document.addEventListener('keydown', this._handleTogglerModeKeyDown);
125
+ }
126
+ else {
127
+ document.addEventListener('keyup', this._handleSentinelModeKeyUp);
128
+ }
129
+ }
130
+ hostDisconnected() {
131
+ if (tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_cyclicKeydown, "f")) {
132
+ document.removeEventListener('keydown', this._handleCyclicKeyDown);
133
+ }
134
+ else if (tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getToggler, "f")) {
135
+ document.removeEventListener('keydown', this._handleTogglerModeKeyDown);
136
+ }
137
+ else {
138
+ document.removeEventListener('keyup', this._handleSentinelModeKeyUp);
139
+ }
140
+ }
141
+ /** Sentinel mode only: call once in firstUpdated with the two bookend elements. */
142
+ setSentinels(start, end) {
143
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_sentinelStart, start, "f");
144
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_sentinelEnd, end, "f");
145
+ }
146
+ activate() {
147
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_active, true, "f");
148
+ // Sentinel mode: move focus to sentinelStart to prime the trap.
149
+ if (!tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getToggler, "f") && !this.noAutofocus) {
150
+ const scrollY = window.scrollY;
151
+ setTimeout(() => {
152
+ var _a;
153
+ (_a = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_sentinelStart, "f")) === null || _a === void 0 ? void 0 : _a.focus();
154
+ window.scrollTo(0, scrollY);
155
+ }, 0);
156
+ }
157
+ }
158
+ deactivate() {
159
+ tslib_es6.__classPrivateFieldSet(this, _FocusTrapController_active, false, "f");
160
+ }
161
+ /**
162
+ * Sentinel mode: move focus to the first real interactive element after the
163
+ * open transition completes (skips sentinelStart at index 0).
164
+ */
165
+ focusFirst() {
166
+ if (this.noAutofocus)
167
+ return;
168
+ requestAnimationFrame(() => {
169
+ const container = tslib_es6.__classPrivateFieldGet(this, _FocusTrapController_getContainer, "f").call(this);
170
+ if (!container)
171
+ return;
172
+ const focusableElements = this._getFocusableElements(container);
173
+ if (focusableElements.length > 0) {
174
+ focusableElements.length > 1 ? focusableElements[1].focus() : focusableElements[0].focus();
175
+ }
176
+ });
177
+ }
178
+ _getFocusableElements(container) {
179
+ return utilities.UiDomUtils.getFocusableElements(container).filter(($el) => this._isElementTrulyFocusable($el));
180
+ }
181
+ getFocusableElements(container) {
182
+ return this._getFocusableElements(container);
183
+ }
184
+ _isElementTrulyFocusable($el) {
185
+ const style = window.getComputedStyle($el);
186
+ if (style.display === 'none' || style.visibility === 'hidden') {
187
+ return false;
188
+ }
189
+ if ($el.nodeName === 'H-PORTAL')
190
+ return true;
191
+ const $parent = $el.parentElement;
192
+ if (!$parent)
193
+ return true;
194
+ return this._isElementTrulyFocusable($parent);
195
+ }
196
+ }
197
+ _FocusTrapController_getContainer = new WeakMap(), _FocusTrapController_getToggler = new WeakMap(), _FocusTrapController_cyclicKeydown = new WeakMap(), _FocusTrapController_active = new WeakMap(), _FocusTrapController_sentinelStart = new WeakMap(), _FocusTrapController_sentinelEnd = new WeakMap();
198
+
199
+ exports.FocusTrapController = FocusTrapController;
200
+ //# sourceMappingURL=focus_trap_controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA,wBAAwB,4CAAgD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -26,6 +26,7 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
26
26
  private _dropdownContentChildrenHeight;
27
27
  private _hasScrollableClassInitially;
28
28
  private _backdropController;
29
+ private _focusTrapController;
29
30
  constructor();
30
31
  connectedCallback(): Promise<void>;
31
32
  private static _appendDropdownPortal;
@@ -45,14 +46,8 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
45
46
  private _closeDropdownOnEscape;
46
47
  private _keepFocusWithinDropdownForwards;
47
48
  private _handleFocusOnNextElementAfterDropdown;
48
- private _handleFocusFromTogglerForwards;
49
- private _handleFocusFromSentinelEndForwards;
50
49
  private _keepFocusWithinDropdownBackwards;
51
50
  private _handleDefaultFocusFromDropdownBackwards;
52
- private _handleFocusFromTogglerBackwards;
53
- private _handleFocusFromSentinelStartBackwards;
54
- private _getTrulyFocusableElements;
55
- private _isElementTrulyFocusable;
56
51
  private _hoverToggle;
57
52
  private _isHoveredWithinDropdown;
58
53
  private _focusOnFirstContentElement;
@@ -12,6 +12,7 @@ import v4 from '../../../../../external/uuid/dist/esm-browser/v4.js';
12
12
  import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
13
13
  import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
14
14
  import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
15
+ import { FocusTrapController } from '../../controllers/focus_trap_controller/focus_trap_controller.js';
15
16
  import throttle_1 from '../../../../../external/lodash/throttle.js';
16
17
  import { RelativePositionController } from '../../controllers/relative_position_controller/relative_position_controller.js';
17
18
 
@@ -30,6 +31,11 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
30
31
  this.preventFocusTrap = false;
31
32
  this.noAutoFocus = false;
32
33
  this._backdropController = new BackdropController();
34
+ this._focusTrapController = new FocusTrapController({
35
+ host: this,
36
+ getContainer: () => { var _a; return (_a = this.$dropdownContent) !== null && _a !== void 0 ? _a : undefined; },
37
+ getToggler: () => this.$dropdownToggler
38
+ });
33
39
  this._handleClickOutside = async (target) => {
34
40
  var _a, _b;
35
41
  if (!this.opened)
@@ -67,6 +73,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
67
73
  this._dispatchShowDropdownEvent();
68
74
  (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_CSS_CLASSES.show}-${this.transition}-start`, `${DROPDOWN_CONTENT_CSS_CLASSES.show}-${this.transition}-end`);
69
75
  this._toggleScroll();
76
+ if (!this.preventFocusTrap)
77
+ this._focusTrapController.activate();
70
78
  resolve();
71
79
  }, transitionDuration);
72
80
  });
@@ -107,6 +115,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
107
115
  var _a;
108
116
  (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_CSS_CLASSES.hide}-${this.transition}-start`, `${DROPDOWN_CONTENT_CSS_CLASSES.hide}-${this.transition}-end`);
109
117
  this.opened = false;
118
+ this._focusTrapController.deactivate();
110
119
  this._dispatchHideDropdownEvent();
111
120
  resolve();
112
121
  }, transitionDuration);
@@ -138,31 +147,16 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
138
147
  await this.hide();
139
148
  };
140
149
  this._keepFocusWithinDropdownForwards = (ev) => {
141
- var _a, _b;
142
- if (ev.shiftKey === true || !this.$dropdownContent || !this.opened)
150
+ if (ev.shiftKey || !this.$dropdownContent || !this.opened || !this.preventFocusTrap)
143
151
  return;
144
- const $target = ev.target;
145
- if (((_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.contains($target)) && this.preventFocusTrap) {
152
+ if (this.$dropdownContent.contains(ev.target)) {
146
153
  this._handleFocusOnNextElementAfterDropdown(ev);
147
- return;
148
154
  }
149
- if ((_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.contains($target)) {
150
- this._handleFocusFromTogglerForwards(ev);
151
- return;
152
- }
153
- this._handleFocusFromSentinelEndForwards(ev, $target);
154
155
  };
155
156
  this._keepFocusWithinDropdownBackwards = (ev) => {
156
- if (!this.opened || !this.$dropdownContent)
157
+ if (!this.opened || !this.$dropdownContent || !this.preventFocusTrap)
157
158
  return;
158
- const $target = ev.target;
159
- if (this.preventFocusTrap) {
160
- this._handleDefaultFocusFromDropdownBackwards(ev);
161
- }
162
- else {
163
- this._handleFocusFromTogglerBackwards(ev, $target);
164
- this._handleFocusFromSentinelStartBackwards(ev, $target);
165
- }
159
+ this._handleDefaultFocusFromDropdownBackwards(ev);
166
160
  };
167
161
  this._hoverToggle = async (ev) => {
168
162
  if (window.innerWidth < BREAKPOINTS.xs)
@@ -184,7 +178,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
184
178
  this._focusOnFirstContentElement = () => {
185
179
  if (!this.$dropdownContent)
186
180
  return;
187
- const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
181
+ const $firstFocusableElement = this._focusTrapController.getFocusableElements(this.$dropdownContent)[0];
188
182
  if ($firstFocusableElement)
189
183
  $firstFocusableElement.focus();
190
184
  };
@@ -302,68 +296,11 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
302
296
  UiDomUtils.getNextFocusableElement(this.$dropdownToggler || this).focus();
303
297
  return;
304
298
  }
305
- _handleFocusFromTogglerForwards(ev) {
306
- if (!this.$dropdownContent)
307
- return;
308
- const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
309
- if (trulyFocusableElements.length === 0)
310
- return;
311
- ev.preventDefault();
312
- trulyFocusableElements[0].focus();
313
- }
314
- _handleFocusFromSentinelEndForwards(ev, $target) {
315
- var _a;
316
- if (!this.$dropdownContent)
317
- return;
318
- const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
319
- const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
320
- if ($target !== $lastFocusableElement)
321
- return;
322
- ev.preventDefault();
323
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
324
- }
325
299
  _handleDefaultFocusFromDropdownBackwards(ev) {
326
300
  ev.preventDefault();
327
301
  this.hide();
328
302
  UiDomUtils.getPreviousFocusableElement(this.$dropdownToggler || this).focus();
329
303
  }
330
- _handleFocusFromTogglerBackwards(ev, $target) {
331
- var _a;
332
- if ($target !== this.$dropdownToggler && !((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)) || !this.$dropdownContent)
333
- return;
334
- ev.preventDefault();
335
- const trulyFocusableElements = this._getTrulyFocusableElements(this.$dropdownContent);
336
- if (trulyFocusableElements.length === 0)
337
- return;
338
- const $lastFocusableElement = trulyFocusableElements.slice(-1)[0];
339
- $lastFocusableElement.focus();
340
- }
341
- _handleFocusFromSentinelStartBackwards(ev, $target) {
342
- var _a;
343
- if (!this.$dropdownContent)
344
- return;
345
- const $firstFocusableElement = this._getTrulyFocusableElements(this.$dropdownContent)[0];
346
- if ($target !== $firstFocusableElement)
347
- return;
348
- ev.preventDefault();
349
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
350
- }
351
- _getTrulyFocusableElements($container) {
352
- const focusableElements = UiDomUtils.getFocusableElements($container);
353
- return focusableElements.filter(($el) => this._isElementTrulyFocusable($el));
354
- }
355
- _isElementTrulyFocusable($el) {
356
- const style = window.getComputedStyle($el);
357
- if (style.display === 'none' || style.visibility === 'hidden') {
358
- return false;
359
- }
360
- if ($el.nodeName === 'H-PORTAL')
361
- return true;
362
- const $parent = $el.parentElement;
363
- if (!$parent)
364
- return true;
365
- return this._isElementTrulyFocusable($parent);
366
- }
367
304
  _isHoveredWithinDropdown(element) {
368
305
  var _a;
369
306
  if (element === this)
@@ -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,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;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;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;"}
@@ -19,7 +19,9 @@ export declare class HSearch extends PhoenixLightLitElement {
19
19
  private _togglerElement;
20
20
  private _id;
21
21
  private _openSearchButtonAriaLabelId;
22
+ private _searchIconId;
22
23
  private _searchContentContainerId;
24
+ private _mobileFocusTrapController;
23
25
  private _searchResultsRef;
24
26
  private _searchHistoryRef;
25
27
  private _searchMessageRef;
@@ -81,6 +83,8 @@ export declare class HSearch extends PhoenixLightLitElement {
81
83
  private _isSuggesterLayerVisible;
82
84
  private _preventSubmitOnSearchClear;
83
85
  private _resetSearchOnFocusOutside;
86
+ private _activateMobileDialog;
87
+ private _deactivateMobileDialog;
84
88
  private _setupAriaAttributes;
85
89
  private _handleOpenSearch;
86
90
  private _handleOpenSearchWithKeyboard;
@@ -12,6 +12,7 @@ import { createRef, ref } from 'lit-html/directives/ref.js';
12
12
  import { ContextProviderController } from '../../../core/context/context_provider_controller.js';
13
13
  import { BREAKPOINTS } from '../../../global_constants.js';
14
14
  import v4 from '../../../../../../external/uuid/dist/esm-browser/v4.js';
15
+ import { FocusTrapController } from '../../../controllers/focus_trap_controller/focus_trap_controller.js';
15
16
  import { MODAL_EVENTS } from '../../modal/modal_constants.js';
16
17
  import { SHEET_EVENTS } from '../../sheet/sheet_constants.js';
17
18
  import { when as n } from '../../../../../../external/lit-html/directives/when.js';
@@ -27,7 +28,14 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
27
28
  this._togglerElement = null;
28
29
  this._id = v4();
29
30
  this._openSearchButtonAriaLabelId = `${this._id}-open-search-button-aria-label`;
31
+ this._searchIconId = `${this._id}-search-icon`;
30
32
  this._searchContentContainerId = v4();
33
+ this._mobileFocusTrapController = new FocusTrapController({
34
+ host: this,
35
+ getContainer: () => this,
36
+ noAutofocus: true,
37
+ cyclicKeydown: true
38
+ });
31
39
  this._searchResultsRef = createRef();
32
40
  this._searchHistoryRef = createRef();
33
41
  this._searchMessageRef = createRef();
@@ -323,6 +331,7 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
323
331
  if (window.innerWidth > BREAKPOINTS.sm) {
324
332
  const hasBeenOpened = this.classList.contains(SEARCH_CLASS_NAMES.mobileOpened);
325
333
  this.classList.remove(SEARCH_CLASS_NAMES.mobileOpened);
334
+ this._deactivateMobileDialog();
326
335
  if (hasBeenOpened && this.displayMode !== 'dropdown') {
327
336
  const $storefrontSearch = document.querySelector(`h-storefront-search[module-instance-id="${this.moduleInstanceId}"]`);
328
337
  const searchOverlayTriggerName = (_a = $storefrontSearch === null || $storefrontSearch === void 0 ? void 0 : $storefrontSearch.querySelector('[aria-haspopup="dialog"]')) === null || _a === void 0 ? void 0 : _a.getAttribute('name');
@@ -338,6 +347,7 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
338
347
  };
339
348
  this._openMobileView = () => {
340
349
  this.classList.add(SEARCH_CLASS_NAMES.mobileOpened);
350
+ this._activateMobileDialog();
341
351
  };
342
352
  this._isSuggesterLayerVisible = () => {
343
353
  var _a;
@@ -358,6 +368,20 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
358
368
  document.removeEventListener('focusin', this._resetSearchOnFocusOutside);
359
369
  }
360
370
  };
371
+ this._activateMobileDialog = () => {
372
+ if (this.displayMode !== 'dropdown')
373
+ return;
374
+ this.setAttribute('role', 'dialog');
375
+ this.setAttribute('aria-modal', 'true');
376
+ this.setAttribute('aria-labelledby', this._searchIconId);
377
+ this._mobileFocusTrapController.activate();
378
+ };
379
+ this._deactivateMobileDialog = () => {
380
+ this.removeAttribute('role');
381
+ this.removeAttribute('aria-modal');
382
+ this.removeAttribute('aria-labelledby');
383
+ this._mobileFocusTrapController.deactivate();
384
+ };
361
385
  this._setupAriaAttributes = () => {
362
386
  var _a;
363
387
  if (this._translations.openSearchButtonAriaLabel) {
@@ -366,6 +390,7 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
366
390
  };
367
391
  this._handleOpenSearch = () => {
368
392
  this.classList.add(SEARCH_CLASS_NAMES.mobileOpened);
393
+ this._activateMobileDialog();
369
394
  const shouldShowMessage = this._searchPhrase !== '';
370
395
  this._updateSearchView(this._searchPhrase, shouldShowMessage, false);
371
396
  const $searchInput = this.querySelector(`
@@ -486,6 +511,7 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
486
511
  this.addEventListener(SEARCH_CUSTOM_EVENT_NAMES.submit, this._handleSubmitForm);
487
512
  this.addEventListener(SEARCH_CUSTOM_EVENT_NAMES.close, () => {
488
513
  this.classList.remove(SEARCH_CLASS_NAMES.mobileOpened);
514
+ this._deactivateMobileDialog();
489
515
  this._resetSearchView();
490
516
  this.isSearchUxFixesFlagEnabled && this._removeSearchKeyboardNavigation();
491
517
  });
@@ -618,6 +644,7 @@ let HSearch = class HSearch extends PhoenixLightLitElement {
618
644
  super.render();
619
645
  return html `
620
646
  ${n(!this.isSearchIconFixEnabled, () => html ` <div
647
+ id="${this._searchIconId}"
621
648
  class="${SEARCH_CLASS_NAMES.icon} labeled-icon hidden-md-only hidden-lg-only hidden-xl-only hidden-xxl-only hidden-xxxl-only"
622
649
  tabindex="0"
623
650
  aria-haspopup="dialog"
@@ -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,eAAe,wDAA4D;AAC3E;AACA;AACA,0BAA0B,wDAA4D;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,eAAe,wDAA4D;AAC3E;AACA;AACA;AACA,0BAA0B,wDAA4D;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,9 +7,6 @@ export declare class HModal extends PhoenixLightLitElement {
7
7
  transition: string;
8
8
  modalLabel: string;
9
9
  noAutofocus: boolean;
10
- _firstFocusableElement: HTMLElement | undefined;
11
- _focusableElements: HTMLElement[] | null;
12
- _lastFocusableElement: HTMLElement | undefined;
13
10
  private _focusedToggler;
14
11
  private _contentRef;
15
12
  private _focusSentinelStart;
@@ -17,6 +14,7 @@ export declare class HModal extends PhoenixLightLitElement {
17
14
  private _propsChangeStrategies;
18
15
  private static openModals;
19
16
  private _backdropController;
17
+ private _focusTrapController;
20
18
  private static _appendModalsPortal;
21
19
  static isSomeModalOpen(): boolean;
22
20
  constructor();
@@ -24,8 +22,6 @@ export declare class HModal extends PhoenixLightLitElement {
24
22
  disconnectedCallback(): void;
25
23
  firstUpdated(props: PropertyValues): void;
26
24
  updated(changedProps: Map<string, any>): void;
27
- private _setFocusToFirstFocusableElementInModalOrCloseBtn;
28
- private _keepFocusWithinModal;
29
25
  private _handleCloseFromCloseComponent;
30
26
  private _bindCloseOnEsc;
31
27
  open(): Promise<void>;