@shoper/phoenix_design_system 1.11.2-0 → 1.11.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.
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +41 -32
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +1 -18
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +2 -2
- package/build/cjs/packages/phoenix/src/components/slider/slider.js +1 -4
- package/build/cjs/packages/phoenix/src/components/slider/slider.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +4 -2
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +42 -33
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +1 -6
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +1 -18
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +2 -2
- package/build/esm/packages/phoenix/src/components/slider/slider.js +1 -4
- package/build/esm/packages/phoenix/src/components/slider/slider.js.map +1 -1
- package/package.json +1 -1
|
@@ -136,33 +136,44 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
136
136
|
return;
|
|
137
137
|
await this.hide();
|
|
138
138
|
};
|
|
139
|
-
this.
|
|
140
|
-
|
|
141
|
-
if (
|
|
139
|
+
this._handleForwardFocus = async (ev) => {
|
|
140
|
+
// if (!this.opened) this._handleFocusOnNextElement(ev);
|
|
141
|
+
if (!this.opened || ev.shiftKey)
|
|
142
142
|
return;
|
|
143
|
-
const $
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
(_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
|
|
150
|
-
}
|
|
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);
|
|
151
149
|
};
|
|
152
|
-
this.
|
|
153
|
-
var _a
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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();
|
|
157
165
|
return;
|
|
158
|
-
const $target = ev.target;
|
|
159
|
-
if (($target === this.$dropdownToggler || ((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)))) {
|
|
160
|
-
(_b = this.$dropdownContent.focusSentinelEnd.value) === null || _b === void 0 ? void 0 : _b.focus();
|
|
161
|
-
}
|
|
162
|
-
if ($target === this.$dropdownContent.focusSentinelStart.value) {
|
|
163
|
-
ev.preventDefault();
|
|
164
|
-
(_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
|
|
165
166
|
}
|
|
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();
|
|
166
177
|
};
|
|
167
178
|
this._hoverToggle = async (ev) => {
|
|
168
179
|
if (window.innerWidth < global_constants.BREAKPOINTS.xs)
|
|
@@ -205,14 +216,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
205
216
|
host: this,
|
|
206
217
|
target: document.body,
|
|
207
218
|
keys: ['tab'],
|
|
208
|
-
callback: this.
|
|
219
|
+
callback: this._handleForwardFocus
|
|
220
|
+
});
|
|
221
|
+
new keystrokes_controller.KeystrokesController({
|
|
222
|
+
host: this,
|
|
223
|
+
target: document.body,
|
|
224
|
+
keys: [['shift', 'tab']],
|
|
225
|
+
callback: this._handleBackwardFocus
|
|
209
226
|
});
|
|
210
|
-
// new KeystrokesController({
|
|
211
|
-
// host: this,
|
|
212
|
-
// target: document.body,
|
|
213
|
-
// keys: [['shift', 'tab']],
|
|
214
|
-
// callback: this._keepFocusWithinDropdownBackwards
|
|
215
|
-
// });
|
|
216
227
|
}
|
|
217
228
|
async connectedCallback() {
|
|
218
229
|
super.connectedCallback();
|
|
@@ -268,7 +279,6 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
268
279
|
document.addEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
269
280
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
270
281
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
271
|
-
document.body.addEventListener('keydown', this._keepFocusWithinDropdownBackwards);
|
|
272
282
|
if (this.toggleOnHover)
|
|
273
283
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
274
284
|
}
|
|
@@ -326,7 +336,6 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
326
336
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
327
337
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
328
338
|
document.removeEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
329
|
-
document.body.removeEventListener('keydown', this._keepFocusWithinDropdownBackwards);
|
|
330
339
|
if (this.toggleOnHover)
|
|
331
340
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
332
341
|
if (this.opened) {
|
|
@@ -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;"}
|
|
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;"}
|
|
@@ -7,17 +7,13 @@ 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');
|
|
11
10
|
var dropdown_constants = require('./dropdown_constants.js');
|
|
12
11
|
|
|
13
12
|
exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_element.PhoenixLightLitElement {
|
|
14
13
|
constructor() {
|
|
15
14
|
super();
|
|
16
15
|
this.name = '';
|
|
17
|
-
this.focusSentinelStart = ref_js.createRef();
|
|
18
|
-
this.focusSentinelEnd = ref_js.createRef();
|
|
19
16
|
this.slot = this.hasAttribute('slot') ? this.slot : 'content';
|
|
20
|
-
this._initialChildren = Array.from(this.childNodes);
|
|
21
17
|
}
|
|
22
18
|
connectedCallback() {
|
|
23
19
|
super.connectedCallback();
|
|
@@ -27,22 +23,9 @@ exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_elem
|
|
|
27
23
|
element.setAttribute('role', 'menuitem');
|
|
28
24
|
});
|
|
29
25
|
}
|
|
30
|
-
firstUpdated(_changedProperties) {
|
|
31
|
-
super.firstUpdated(_changedProperties);
|
|
32
|
-
const targetContainer = this.querySelector('[role="dialog"]');
|
|
33
|
-
if (targetContainer) {
|
|
34
|
-
this._initialChildren.forEach((child) => {
|
|
35
|
-
targetContainer.appendChild(child);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
26
|
render() {
|
|
40
27
|
super.render();
|
|
41
|
-
return lit.html `
|
|
42
|
-
<div tabindex="0" ${ref_js.ref(this.focusSentinelStart)}></div>
|
|
43
|
-
<div role="dialog"></div>
|
|
44
|
-
<div tabindex="0" ${ref_js.ref(this.focusSentinelEnd)}></div>
|
|
45
|
-
`;
|
|
28
|
+
return lit.html ` <div role="dialog">${this.getSlot('content')}</div> `;
|
|
46
29
|
}
|
|
47
30
|
};
|
|
48
31
|
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;"}
|
|
@@ -54,7 +54,7 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
54
54
|
host: this,
|
|
55
55
|
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
56
56
|
});
|
|
57
|
-
|
|
57
|
+
document.addEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
58
58
|
const hasToggleOnHover = (_a = this._$dropdown) === null || _a === void 0 ? void 0 : _a.hasAttribute(dropdown_constants.DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME);
|
|
59
59
|
if (hasToggleOnHover) {
|
|
60
60
|
this.addEventListener('click', this._dispatchToggleDropdownEventOnMobile);
|
|
@@ -64,7 +64,7 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
64
64
|
}
|
|
65
65
|
disconnectedCallback() {
|
|
66
66
|
super.disconnectedCallback();
|
|
67
|
-
|
|
67
|
+
document.removeEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
tslib_es6.__decorate([
|
|
@@ -18,10 +18,7 @@ exports.HSlider = class HSlider extends phoenix_light_lit_element.PhoenixLightLi
|
|
|
18
18
|
mountOnConnectedCallback: true,
|
|
19
19
|
type: 'loop',
|
|
20
20
|
perPage: 3,
|
|
21
|
-
focus: 'center'
|
|
22
|
-
i18n: {
|
|
23
|
-
// zedytowane frazy
|
|
24
|
-
}
|
|
21
|
+
focus: 'center'
|
|
25
22
|
};
|
|
26
23
|
this._slider = null;
|
|
27
24
|
}
|
|
@@ -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,yBAAyB,gEAAoE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,yBAAyB,gEAAoE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|
|
@@ -40,8 +40,10 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
40
40
|
private _observeScrollToggling;
|
|
41
41
|
private _toggleScroll;
|
|
42
42
|
private _closeDropdownOnEscape;
|
|
43
|
-
private
|
|
44
|
-
private
|
|
43
|
+
private _handleForwardFocus;
|
|
44
|
+
private _handleFocusOnNextElement;
|
|
45
|
+
private _focusOnNextElementAfterToggler;
|
|
46
|
+
private _handleBackwardFocus;
|
|
45
47
|
private _hoverToggle;
|
|
46
48
|
private _isHoveredWithinDropdown;
|
|
47
49
|
private _setupInitialDropdownProperties;
|
|
@@ -6,7 +6,7 @@ import { property } from '@lit/reactive-element/decorators.js';
|
|
|
6
6
|
import { KeystrokesController } from '../../controllers/keystrokes_controller/keystrokes_controller.js';
|
|
7
7
|
import { html } from 'lit-html';
|
|
8
8
|
import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
|
|
9
|
-
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_CSS_CLASSES, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME,
|
|
9
|
+
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_CSS_CLASSES, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_NAME, DROPDOWN_CONTENT_WIDTH, 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
11
|
import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
|
|
12
12
|
import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
|
|
@@ -132,33 +132,44 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
132
132
|
return;
|
|
133
133
|
await this.hide();
|
|
134
134
|
};
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
if (
|
|
135
|
+
this._handleForwardFocus = async (ev) => {
|
|
136
|
+
// if (!this.opened) this._handleFocusOnNextElement(ev);
|
|
137
|
+
if (!this.opened || ev.shiftKey)
|
|
138
138
|
return;
|
|
139
|
-
const $
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
(_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
|
|
146
|
-
}
|
|
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);
|
|
147
145
|
};
|
|
148
|
-
this.
|
|
149
|
-
var _a
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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();
|
|
153
161
|
return;
|
|
154
|
-
const $target = ev.target;
|
|
155
|
-
if (($target === this.$dropdownToggler || ((_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.contains($target)))) {
|
|
156
|
-
(_b = this.$dropdownContent.focusSentinelEnd.value) === null || _b === void 0 ? void 0 : _b.focus();
|
|
157
|
-
}
|
|
158
|
-
if ($target === this.$dropdownContent.focusSentinelStart.value) {
|
|
159
|
-
ev.preventDefault();
|
|
160
|
-
(_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.focus();
|
|
161
162
|
}
|
|
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();
|
|
162
173
|
};
|
|
163
174
|
this._hoverToggle = async (ev) => {
|
|
164
175
|
if (window.innerWidth < BREAKPOINTS.xs)
|
|
@@ -201,14 +212,14 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
201
212
|
host: this,
|
|
202
213
|
target: document.body,
|
|
203
214
|
keys: ['tab'],
|
|
204
|
-
callback: this.
|
|
215
|
+
callback: this._handleForwardFocus
|
|
216
|
+
});
|
|
217
|
+
new KeystrokesController({
|
|
218
|
+
host: this,
|
|
219
|
+
target: document.body,
|
|
220
|
+
keys: [['shift', 'tab']],
|
|
221
|
+
callback: this._handleBackwardFocus
|
|
205
222
|
});
|
|
206
|
-
// new KeystrokesController({
|
|
207
|
-
// host: this,
|
|
208
|
-
// target: document.body,
|
|
209
|
-
// keys: [['shift', 'tab']],
|
|
210
|
-
// callback: this._keepFocusWithinDropdownBackwards
|
|
211
|
-
// });
|
|
212
223
|
}
|
|
213
224
|
async connectedCallback() {
|
|
214
225
|
super.connectedCallback();
|
|
@@ -264,7 +275,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
264
275
|
document.addEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
265
276
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
266
277
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
267
|
-
document.body.addEventListener('keydown', this._keepFocusWithinDropdownBackwards);
|
|
268
278
|
if (this.toggleOnHover)
|
|
269
279
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
270
280
|
}
|
|
@@ -322,7 +332,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
322
332
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
323
333
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
324
334
|
document.removeEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
325
|
-
document.body.removeEventListener('keydown', this._keepFocusWithinDropdownBackwards);
|
|
326
335
|
if (this.toggleOnHover)
|
|
327
336
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
328
337
|
if (this.opened) {
|
|
@@ -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;"}
|
|
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,13 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { 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';
|
|
4
3
|
export declare class HDropdownContent extends PhoenixLightLitElement {
|
|
5
4
|
name: string;
|
|
6
|
-
focusSentinelStart: Ref<HTMLElement>;
|
|
7
|
-
focusSentinelEnd: Ref<HTMLElement>;
|
|
8
|
-
private _initialChildren;
|
|
9
5
|
constructor();
|
|
10
6
|
connectedCallback(): void;
|
|
11
|
-
firstUpdated(_changedProperties: PropertyValues): void;
|
|
12
7
|
protected render(): TemplateResult;
|
|
13
8
|
}
|
|
@@ -3,17 +3,13 @@ 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';
|
|
7
6
|
import { DROPDOWN_CSS_CLASSES } from './dropdown_constants.js';
|
|
8
7
|
|
|
9
8
|
let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
|
|
10
9
|
constructor() {
|
|
11
10
|
super();
|
|
12
11
|
this.name = '';
|
|
13
|
-
this.focusSentinelStart = createRef();
|
|
14
|
-
this.focusSentinelEnd = createRef();
|
|
15
12
|
this.slot = this.hasAttribute('slot') ? this.slot : 'content';
|
|
16
|
-
this._initialChildren = Array.from(this.childNodes);
|
|
17
13
|
}
|
|
18
14
|
connectedCallback() {
|
|
19
15
|
super.connectedCallback();
|
|
@@ -23,22 +19,9 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
|
|
|
23
19
|
element.setAttribute('role', 'menuitem');
|
|
24
20
|
});
|
|
25
21
|
}
|
|
26
|
-
firstUpdated(_changedProperties) {
|
|
27
|
-
super.firstUpdated(_changedProperties);
|
|
28
|
-
const targetContainer = this.querySelector('[role="dialog"]');
|
|
29
|
-
if (targetContainer) {
|
|
30
|
-
this._initialChildren.forEach((child) => {
|
|
31
|
-
targetContainer.appendChild(child);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
22
|
render() {
|
|
36
23
|
super.render();
|
|
37
|
-
return html `
|
|
38
|
-
<div tabindex="0" ${ref(this.focusSentinelStart)}></div>
|
|
39
|
-
<div role="dialog"></div>
|
|
40
|
-
<div tabindex="0" ${ref(this.focusSentinelEnd)}></div>
|
|
41
|
-
`;
|
|
24
|
+
return html ` <div role="dialog">${this.getSlot('content')}</div> `;
|
|
42
25
|
}
|
|
43
26
|
};
|
|
44
27
|
__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;"}
|
|
@@ -50,7 +50,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
50
50
|
host: this,
|
|
51
51
|
initialAriaExpandedValue: this._$dropdown.isOpened()
|
|
52
52
|
});
|
|
53
|
-
|
|
53
|
+
document.addEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
54
54
|
const hasToggleOnHover = (_a = this._$dropdown) === null || _a === void 0 ? void 0 : _a.hasAttribute(DROPDOWN_TOGGLE_ON_HOVER_ATTRIBUTE_NAME);
|
|
55
55
|
if (hasToggleOnHover) {
|
|
56
56
|
this.addEventListener('click', this._dispatchToggleDropdownEventOnMobile);
|
|
@@ -60,7 +60,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
60
60
|
}
|
|
61
61
|
disconnectedCallback() {
|
|
62
62
|
super.disconnectedCallback();
|
|
63
|
-
|
|
63
|
+
document.removeEventListener('keydown', this._handleFocusToOpenedDropdown);
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
66
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA,uBAAuB,gEAAoE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,uBAAuB,gEAAoE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
|