@shoper/phoenix_design_system 0.19.1 → 0.19.3-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +84 -20
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +0 -1
- package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +14 -4
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +85 -21
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +0 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
- package/build/esm/packages/phoenix/src/components/dropdown/dropdown_types.d.ts +5 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.d.ts +14 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js +70 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.d.ts +4 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js +5 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab_panel.d.ts +9 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js +33 -0
- package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.d.ts +15 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js +103 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.d.ts +3 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js +4 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js.map +1 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.d.ts +7 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js +2 -0
- package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js.map +1 -0
- package/package.json +2 -2
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
|
|
6
|
+
require('lit');
|
|
7
|
+
var decorators = require('lit/decorators');
|
|
6
8
|
var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element/phoenix_light_lit_element.js');
|
|
7
9
|
var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
|
|
8
10
|
var portal_constants = require('../portal/portal_constants.js');
|
|
9
11
|
var litHtml = require('lit-html');
|
|
10
12
|
var backdrop_controller = require('../backdrop/controller/backdrop_controller.js');
|
|
11
13
|
var decorators_js = require('@lit/reactive-element/decorators.js');
|
|
14
|
+
var ref_js = require('lit-html/directives/ref.js');
|
|
12
15
|
var global_constants = require('../../global_constants.js');
|
|
13
16
|
var dropdown_constants = require('./dropdown_constants.js');
|
|
14
17
|
var relative_position_controller_constants = require('../../controllers/relative_position_controller/relative_position_controller_constants.js');
|
|
@@ -27,17 +30,21 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
27
30
|
this.transition = 'direction';
|
|
28
31
|
this.portalTarget = dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME;
|
|
29
32
|
this._backdropController = new backdrop_controller.BackdropController();
|
|
30
|
-
this.
|
|
33
|
+
this._firstFocusableElement = undefined;
|
|
34
|
+
this._lastFocusableElement = undefined;
|
|
35
|
+
this._focusSentinelStart = ref_js.createRef();
|
|
36
|
+
this._focusSentinelEnd = ref_js.createRef();
|
|
37
|
+
this._handleClickOutside = async (target) => {
|
|
31
38
|
var _a, _b;
|
|
32
39
|
if (!this.opened)
|
|
33
40
|
return;
|
|
34
41
|
const clickedWithinNestedDropdown = (_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((element) => element.contains(target));
|
|
35
42
|
const shouldHideElements = !((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.contains(target)) && !this.contains(target) && !clickedWithinNestedDropdown;
|
|
36
43
|
if (shouldHideElements)
|
|
37
|
-
this.
|
|
44
|
+
await this._hideDropdownsSequentially();
|
|
38
45
|
};
|
|
39
|
-
this.toggle = () => {
|
|
40
|
-
this.opened ? this.
|
|
46
|
+
this.toggle = async () => {
|
|
47
|
+
this.opened ? await this._hideDropdownsSequentially() : await this.show();
|
|
41
48
|
};
|
|
42
49
|
this.show = async () => {
|
|
43
50
|
return new Promise((resolve) => {
|
|
@@ -52,10 +59,11 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
52
59
|
}, 0);
|
|
53
60
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
54
61
|
setTimeout(() => {
|
|
55
|
-
var _a;
|
|
62
|
+
var _a, _b;
|
|
56
63
|
this._dispatchShowDropdownEvent();
|
|
57
64
|
(_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
|
|
58
65
|
this._toggleScroll();
|
|
66
|
+
(_b = this._firstFocusableElement) === null || _b === void 0 ? void 0 : _b.focus();
|
|
59
67
|
resolve();
|
|
60
68
|
}, transitionDuration);
|
|
61
69
|
});
|
|
@@ -70,8 +78,22 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
70
78
|
return;
|
|
71
79
|
this._backdropController.show();
|
|
72
80
|
};
|
|
73
|
-
this.
|
|
81
|
+
this._hideDropdownsSequentially = async () => {
|
|
82
|
+
if (!this.$nestedDropdownContentElements) {
|
|
83
|
+
await this.hide();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
for (const { name: dropdownName } of this.$nestedDropdownContentElements.slice().reverse()) {
|
|
87
|
+
const $currentDropdown = document.querySelector(`${dropdown_constants.DROPDOWN_CONTAINER_NAME}[name="${dropdownName}"]`);
|
|
88
|
+
if ($currentDropdown && $currentDropdown.opened)
|
|
89
|
+
await $currentDropdown.hide();
|
|
90
|
+
}
|
|
91
|
+
await this.hide();
|
|
92
|
+
};
|
|
93
|
+
this.hide = async (ev) => new Promise((resolve) => {
|
|
74
94
|
var _a;
|
|
95
|
+
if (ev && ev.detail.name !== this.name)
|
|
96
|
+
return;
|
|
75
97
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
|
|
76
98
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
77
99
|
window.requestAnimationFrame(() => {
|
|
@@ -112,6 +134,23 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
112
134
|
return;
|
|
113
135
|
await this.hide();
|
|
114
136
|
};
|
|
137
|
+
this._handleFocusWithinDropdown = async (ev) => {
|
|
138
|
+
var _a;
|
|
139
|
+
const hasTabBeenPressed = ev.key.toLowerCase() === 'tab';
|
|
140
|
+
if (hasTabBeenPressed) {
|
|
141
|
+
if (ev.shiftKey) {
|
|
142
|
+
if (document.activeElement === this._firstFocusableElement) {
|
|
143
|
+
(_a = this._lastFocusableElement) === null || _a === void 0 ? void 0 : _a.focus();
|
|
144
|
+
ev.preventDefault();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (document.activeElement === this._lastFocusableElement) {
|
|
148
|
+
ev.preventDefault();
|
|
149
|
+
this._focusOnNextSibling(this);
|
|
150
|
+
await this._hideDropdownsSequentially();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
115
154
|
this._hoverToggle = async (ev) => {
|
|
116
155
|
if (window.innerWidth < global_constants.BREAKPOINTS.xs)
|
|
117
156
|
return;
|
|
@@ -124,16 +163,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
124
163
|
await this.show();
|
|
125
164
|
return;
|
|
126
165
|
}
|
|
127
|
-
if (!isHoveredWithinDropdown && this.opened)
|
|
128
|
-
|
|
129
|
-
await this.hide();
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.$hoverableDropdownContentElements.forEach(async ({ name: dropdownName }) => {
|
|
133
|
-
const dropdown = document.querySelector(`${dropdown_constants.DROPDOWN_CONTAINER_NAME}[name="${dropdownName}"]`);
|
|
134
|
-
await dropdown.hide();
|
|
135
|
-
});
|
|
136
|
-
}
|
|
166
|
+
if (!isHoveredWithinDropdown && this.opened)
|
|
167
|
+
await this._hideDropdownsSequentially();
|
|
137
168
|
};
|
|
138
169
|
this._positionDropdownContent = () => {
|
|
139
170
|
requestAnimationFrame(() => {
|
|
@@ -144,8 +175,12 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
144
175
|
};
|
|
145
176
|
}
|
|
146
177
|
connectedCallback() {
|
|
178
|
+
var _a;
|
|
147
179
|
super.connectedCallback();
|
|
148
180
|
HDropdown_1._appendDropdownPortal();
|
|
181
|
+
if (!this._rootDropdown)
|
|
182
|
+
this._rootDropdown =
|
|
183
|
+
((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === 'h-dropdown-content' ? this._findRootDropdown(this.parentElement) : this;
|
|
149
184
|
if (!this.$dropdownContent)
|
|
150
185
|
this.$dropdownContent = this.querySelector(dropdown_constants.DROPDOWN_CONTENT_NAME);
|
|
151
186
|
if (!this.$dropdownToggler)
|
|
@@ -169,12 +204,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
169
204
|
name: this.name,
|
|
170
205
|
action: this._handleClickOutside
|
|
171
206
|
});
|
|
172
|
-
if (this.toggleOnHover && !this.$hoverableDropdownContentElements) {
|
|
173
|
-
this.$hoverableDropdownContentElements = [...this.querySelectorAll(dropdown_constants.DROPDOWN_CONTENT_NAME)];
|
|
174
|
-
}
|
|
175
207
|
this._setupListeners();
|
|
176
208
|
this._setupInitialDropdownProperties();
|
|
177
209
|
}
|
|
210
|
+
firstUpdated(props) {
|
|
211
|
+
super.firstUpdated(props);
|
|
212
|
+
this._firstFocusableElement = this._focusSentinelStart.value;
|
|
213
|
+
this._lastFocusableElement = this._focusSentinelEnd.value;
|
|
214
|
+
}
|
|
178
215
|
static _appendDropdownPortal() {
|
|
179
216
|
const $dropdownPortalTarget = document.querySelector(`[name="${dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
|
|
180
217
|
if (!$dropdownPortalTarget) {
|
|
@@ -183,13 +220,21 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
183
220
|
document.body.appendChild($portalTarget);
|
|
184
221
|
}
|
|
185
222
|
}
|
|
223
|
+
_findRootDropdown(element) {
|
|
224
|
+
var _a;
|
|
225
|
+
if (((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) !== dropdown_constants.DROPDOWN_CONTENT_NAME && element.tagName.toLowerCase() === dropdown_constants.DROPDOWN_CONTAINER_NAME)
|
|
226
|
+
return element;
|
|
227
|
+
return this._findRootDropdown(element.parentElement || document.body);
|
|
228
|
+
}
|
|
186
229
|
_setupListeners() {
|
|
187
230
|
var _a;
|
|
188
231
|
this.addEventListener(relative_position_controller_constants.RELATIVE_POSITION_CONTROLLER_EVENTS.disabledPositioning, this._handleDisabledPositioning);
|
|
189
232
|
this.addEventListener(relative_position_controller_constants.RELATIVE_POSITION_CONTROLLER_EVENTS.enabledPositioning, this._handleEnabledPositioning);
|
|
190
233
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener(dropdown_constants.DROPDOWN_EVENTS.toggle, this.toggle);
|
|
234
|
+
document.addEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
191
235
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
192
236
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
237
|
+
document.addEventListener('keydown', this._handleFocusWithinDropdown);
|
|
193
238
|
if (this.toggleOnHover)
|
|
194
239
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
195
240
|
}
|
|
@@ -209,7 +254,14 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
209
254
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(global_constants.SCROLLABLE_CLASS_NAME);
|
|
210
255
|
}
|
|
211
256
|
}
|
|
257
|
+
_focusOnNextSibling(el) {
|
|
258
|
+
el.focus();
|
|
259
|
+
if (el === document.activeElement)
|
|
260
|
+
return;
|
|
261
|
+
this._focusOnNextSibling(el.nextElementSibling);
|
|
262
|
+
}
|
|
212
263
|
_isHoveredWithinDropdown(element) {
|
|
264
|
+
var _a;
|
|
213
265
|
if (element === this)
|
|
214
266
|
return true;
|
|
215
267
|
if (element === this.$dropdownContent)
|
|
@@ -220,7 +272,7 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
220
272
|
const $closestDropdownContent = element.closest(dropdown_constants.DROPDOWN_CONTENT_NAME);
|
|
221
273
|
const isDescendantOfContent = this.$dropdownContent &&
|
|
222
274
|
$closestDropdownContent !== null &&
|
|
223
|
-
!!this.$
|
|
275
|
+
!!((_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((content) => content.name === $closestDropdownContent.name));
|
|
224
276
|
if (isDescendantOfContent)
|
|
225
277
|
return true;
|
|
226
278
|
return false;
|
|
@@ -237,6 +289,8 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
237
289
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.removeEventListener(dropdown_constants.DROPDOWN_EVENTS.toggle, this.toggle);
|
|
238
290
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
239
291
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
292
|
+
document.removeEventListener(dropdown_constants.DROPDOWN_EVENTS.hide, this.hide);
|
|
293
|
+
document.removeEventListener('keydown', this._handleFocusWithinDropdown);
|
|
240
294
|
if (this.toggleOnHover)
|
|
241
295
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
242
296
|
if (this.opened) {
|
|
@@ -249,7 +303,9 @@ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_elem
|
|
|
249
303
|
return litHtml.html `
|
|
250
304
|
${this.getSlot('toggler')}
|
|
251
305
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionDropdownContent}" to="${this.portalTarget}" hidden>
|
|
306
|
+
<div tabindex="0" ${ref_js.ref(this._focusSentinelStart)}></div>
|
|
252
307
|
${this.getSlot('content')}
|
|
308
|
+
<div tabindex="0" ${ref_js.ref(this._focusSentinelEnd)}></div>
|
|
253
309
|
</h-portal>
|
|
254
310
|
`;
|
|
255
311
|
}
|
|
@@ -278,6 +334,14 @@ tslib_es6.__decorate([
|
|
|
278
334
|
decorators_js.property({ type: String }),
|
|
279
335
|
tslib_es6.__metadata("design:type", Object)
|
|
280
336
|
], exports.HDropdown.prototype, "portalTarget", void 0);
|
|
337
|
+
tslib_es6.__decorate([
|
|
338
|
+
decorators.state(),
|
|
339
|
+
tslib_es6.__metadata("design:type", Object)
|
|
340
|
+
], exports.HDropdown.prototype, "_firstFocusableElement", void 0);
|
|
341
|
+
tslib_es6.__decorate([
|
|
342
|
+
decorators.state(),
|
|
343
|
+
tslib_es6.__metadata("design:type", Object)
|
|
344
|
+
], exports.HDropdown.prototype, "_lastFocusableElement", void 0);
|
|
281
345
|
exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
|
|
282
346
|
phoenix_custom_element.phoenixCustomElement('h-dropdown')
|
|
283
347
|
], exports.HDropdown);
|
|
@@ -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,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;"}
|
|
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,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;"}
|
|
@@ -22,7 +22,6 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
|
|
|
22
22
|
bubbles: true
|
|
23
23
|
});
|
|
24
24
|
this.dispatchEvent(toggleDropdownEvent);
|
|
25
|
-
this._toggleElementAriaController.toggleAriaExpandedAttribute();
|
|
26
25
|
};
|
|
27
26
|
this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
|
|
28
27
|
this.className = `${dropdown_constants.DROPDOWN_TOGGLER_CSS_CLASS} ${this.className}`;
|
|
@@ -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;
|
|
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;"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { IDropdown } from "./dropdown_types";
|
|
1
2
|
import { TemplateResult } from 'lit-html';
|
|
2
3
|
import { HDropdownContent } from './dropdown_content';
|
|
3
4
|
import { HDropdownToggler } from './dropdown_toggler';
|
|
4
|
-
import { IDropdown } from "./dropdown_types";
|
|
5
5
|
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
6
|
+
import { PropertyValues } from 'lit';
|
|
6
7
|
export declare class HDropdown extends PhoenixLightLitElement implements IDropdown {
|
|
7
8
|
opened: boolean;
|
|
8
9
|
direction: "bottom-center";
|
|
@@ -13,26 +14,35 @@ export declare class HDropdown extends PhoenixLightLitElement implements IDropdo
|
|
|
13
14
|
$dropdownToggler: HDropdownToggler | null;
|
|
14
15
|
$dropdownContent: HDropdownContent | null;
|
|
15
16
|
$nestedDropdownContentElements?: HDropdownContent[];
|
|
16
|
-
$hoverableDropdownContentElements: HDropdownContent[];
|
|
17
17
|
private _positionController;
|
|
18
18
|
private _clickOutsideController;
|
|
19
19
|
private _dropdownContentChildrenHeight;
|
|
20
20
|
private _hasScrollableClassInitially;
|
|
21
21
|
private _backdropController;
|
|
22
|
+
_firstFocusableElement: HTMLElement | undefined;
|
|
23
|
+
_lastFocusableElement: HTMLElement | undefined;
|
|
24
|
+
private _focusSentinelStart;
|
|
25
|
+
private _focusSentinelEnd;
|
|
26
|
+
private _rootDropdown?;
|
|
22
27
|
connectedCallback(): void;
|
|
28
|
+
firstUpdated(props: PropertyValues): void;
|
|
23
29
|
private static _appendDropdownPortal;
|
|
30
|
+
private _findRootDropdown;
|
|
24
31
|
private _setupListeners;
|
|
25
32
|
private _handleClickOutside;
|
|
26
|
-
toggle: () => void
|
|
33
|
+
toggle: () => Promise<void>;
|
|
27
34
|
show: () => Promise<void>;
|
|
28
35
|
private _dispatchShowDropdownEvent;
|
|
29
|
-
|
|
36
|
+
private _hideDropdownsSequentially;
|
|
37
|
+
hide: (ev?: Event) => Promise<void>;
|
|
30
38
|
private _dispatchHideDropdownEvent;
|
|
31
39
|
private _handleDisabledPositioning;
|
|
32
40
|
private _handleEnabledPositioning;
|
|
33
41
|
private _observeScrollToggling;
|
|
34
42
|
private _toggleScroll;
|
|
35
43
|
private _closeDropdownOnEscape;
|
|
44
|
+
private _handleFocusWithinDropdown;
|
|
45
|
+
private _focusOnNextSibling;
|
|
36
46
|
private _hoverToggle;
|
|
37
47
|
private _isHoveredWithinDropdown;
|
|
38
48
|
private _setupInitialDropdownProperties;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import 'lit';
|
|
3
|
+
import { state } from 'lit/decorators';
|
|
2
4
|
import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
|
|
3
5
|
import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
|
|
4
6
|
import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
|
|
5
7
|
import { html } from 'lit-html';
|
|
6
8
|
import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
|
|
7
9
|
import { property } from '@lit/reactive-element/decorators.js';
|
|
10
|
+
import { createRef, ref } from 'lit-html/directives/ref.js';
|
|
8
11
|
import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
|
|
9
|
-
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS,
|
|
12
|
+
import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_HIDE, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
|
|
10
13
|
import { DIRECTIONS, RELATIVE_POSITION_CONTROLLER_EVENTS, DEFAULT_THROTTLE_WAIT_TIME } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
|
|
11
14
|
import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
|
|
12
15
|
import throttle_1 from '../../../../../external/lodash/throttle.js';
|
|
@@ -23,17 +26,21 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
23
26
|
this.transition = 'direction';
|
|
24
27
|
this.portalTarget = DEFAULT_DROPDOWN_PORTAL_NAME;
|
|
25
28
|
this._backdropController = new BackdropController();
|
|
26
|
-
this.
|
|
29
|
+
this._firstFocusableElement = undefined;
|
|
30
|
+
this._lastFocusableElement = undefined;
|
|
31
|
+
this._focusSentinelStart = createRef();
|
|
32
|
+
this._focusSentinelEnd = createRef();
|
|
33
|
+
this._handleClickOutside = async (target) => {
|
|
27
34
|
var _a, _b;
|
|
28
35
|
if (!this.opened)
|
|
29
36
|
return;
|
|
30
37
|
const clickedWithinNestedDropdown = (_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((element) => element.contains(target));
|
|
31
38
|
const shouldHideElements = !((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.contains(target)) && !this.contains(target) && !clickedWithinNestedDropdown;
|
|
32
39
|
if (shouldHideElements)
|
|
33
|
-
this.
|
|
40
|
+
await this._hideDropdownsSequentially();
|
|
34
41
|
};
|
|
35
|
-
this.toggle = () => {
|
|
36
|
-
this.opened ? this.
|
|
42
|
+
this.toggle = async () => {
|
|
43
|
+
this.opened ? await this._hideDropdownsSequentially() : await this.show();
|
|
37
44
|
};
|
|
38
45
|
this.show = async () => {
|
|
39
46
|
return new Promise((resolve) => {
|
|
@@ -48,10 +55,11 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
48
55
|
}, 0);
|
|
49
56
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
50
57
|
setTimeout(() => {
|
|
51
|
-
var _a;
|
|
58
|
+
var _a, _b;
|
|
52
59
|
this._dispatchShowDropdownEvent();
|
|
53
60
|
(_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
|
|
54
61
|
this._toggleScroll();
|
|
62
|
+
(_b = this._firstFocusableElement) === null || _b === void 0 ? void 0 : _b.focus();
|
|
55
63
|
resolve();
|
|
56
64
|
}, transitionDuration);
|
|
57
65
|
});
|
|
@@ -66,8 +74,22 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
66
74
|
return;
|
|
67
75
|
this._backdropController.show();
|
|
68
76
|
};
|
|
69
|
-
this.
|
|
77
|
+
this._hideDropdownsSequentially = async () => {
|
|
78
|
+
if (!this.$nestedDropdownContentElements) {
|
|
79
|
+
await this.hide();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const { name: dropdownName } of this.$nestedDropdownContentElements.slice().reverse()) {
|
|
83
|
+
const $currentDropdown = document.querySelector(`${DROPDOWN_CONTAINER_NAME}[name="${dropdownName}"]`);
|
|
84
|
+
if ($currentDropdown && $currentDropdown.opened)
|
|
85
|
+
await $currentDropdown.hide();
|
|
86
|
+
}
|
|
87
|
+
await this.hide();
|
|
88
|
+
};
|
|
89
|
+
this.hide = async (ev) => new Promise((resolve) => {
|
|
70
90
|
var _a;
|
|
91
|
+
if (ev && ev.detail.name !== this.name)
|
|
92
|
+
return;
|
|
71
93
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
|
|
72
94
|
const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
|
|
73
95
|
window.requestAnimationFrame(() => {
|
|
@@ -108,6 +130,23 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
108
130
|
return;
|
|
109
131
|
await this.hide();
|
|
110
132
|
};
|
|
133
|
+
this._handleFocusWithinDropdown = async (ev) => {
|
|
134
|
+
var _a;
|
|
135
|
+
const hasTabBeenPressed = ev.key.toLowerCase() === 'tab';
|
|
136
|
+
if (hasTabBeenPressed) {
|
|
137
|
+
if (ev.shiftKey) {
|
|
138
|
+
if (document.activeElement === this._firstFocusableElement) {
|
|
139
|
+
(_a = this._lastFocusableElement) === null || _a === void 0 ? void 0 : _a.focus();
|
|
140
|
+
ev.preventDefault();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (document.activeElement === this._lastFocusableElement) {
|
|
144
|
+
ev.preventDefault();
|
|
145
|
+
this._focusOnNextSibling(this);
|
|
146
|
+
await this._hideDropdownsSequentially();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
111
150
|
this._hoverToggle = async (ev) => {
|
|
112
151
|
if (window.innerWidth < BREAKPOINTS.xs)
|
|
113
152
|
return;
|
|
@@ -120,16 +159,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
120
159
|
await this.show();
|
|
121
160
|
return;
|
|
122
161
|
}
|
|
123
|
-
if (!isHoveredWithinDropdown && this.opened)
|
|
124
|
-
|
|
125
|
-
await this.hide();
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
this.$hoverableDropdownContentElements.forEach(async ({ name: dropdownName }) => {
|
|
129
|
-
const dropdown = document.querySelector(`${DROPDOWN_CONTAINER_NAME}[name="${dropdownName}"]`);
|
|
130
|
-
await dropdown.hide();
|
|
131
|
-
});
|
|
132
|
-
}
|
|
162
|
+
if (!isHoveredWithinDropdown && this.opened)
|
|
163
|
+
await this._hideDropdownsSequentially();
|
|
133
164
|
};
|
|
134
165
|
this._positionDropdownContent = () => {
|
|
135
166
|
requestAnimationFrame(() => {
|
|
@@ -140,8 +171,12 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
140
171
|
};
|
|
141
172
|
}
|
|
142
173
|
connectedCallback() {
|
|
174
|
+
var _a;
|
|
143
175
|
super.connectedCallback();
|
|
144
176
|
HDropdown_1._appendDropdownPortal();
|
|
177
|
+
if (!this._rootDropdown)
|
|
178
|
+
this._rootDropdown =
|
|
179
|
+
((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === 'h-dropdown-content' ? this._findRootDropdown(this.parentElement) : this;
|
|
145
180
|
if (!this.$dropdownContent)
|
|
146
181
|
this.$dropdownContent = this.querySelector(DROPDOWN_CONTENT_NAME);
|
|
147
182
|
if (!this.$dropdownToggler)
|
|
@@ -165,12 +200,14 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
165
200
|
name: this.name,
|
|
166
201
|
action: this._handleClickOutside
|
|
167
202
|
});
|
|
168
|
-
if (this.toggleOnHover && !this.$hoverableDropdownContentElements) {
|
|
169
|
-
this.$hoverableDropdownContentElements = [...this.querySelectorAll(DROPDOWN_CONTENT_NAME)];
|
|
170
|
-
}
|
|
171
203
|
this._setupListeners();
|
|
172
204
|
this._setupInitialDropdownProperties();
|
|
173
205
|
}
|
|
206
|
+
firstUpdated(props) {
|
|
207
|
+
super.firstUpdated(props);
|
|
208
|
+
this._firstFocusableElement = this._focusSentinelStart.value;
|
|
209
|
+
this._lastFocusableElement = this._focusSentinelEnd.value;
|
|
210
|
+
}
|
|
174
211
|
static _appendDropdownPortal() {
|
|
175
212
|
const $dropdownPortalTarget = document.querySelector(`[name="${DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
|
|
176
213
|
if (!$dropdownPortalTarget) {
|
|
@@ -179,13 +216,21 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
179
216
|
document.body.appendChild($portalTarget);
|
|
180
217
|
}
|
|
181
218
|
}
|
|
219
|
+
_findRootDropdown(element) {
|
|
220
|
+
var _a;
|
|
221
|
+
if (((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) !== DROPDOWN_CONTENT_NAME && element.tagName.toLowerCase() === DROPDOWN_CONTAINER_NAME)
|
|
222
|
+
return element;
|
|
223
|
+
return this._findRootDropdown(element.parentElement || document.body);
|
|
224
|
+
}
|
|
182
225
|
_setupListeners() {
|
|
183
226
|
var _a;
|
|
184
227
|
this.addEventListener(RELATIVE_POSITION_CONTROLLER_EVENTS.disabledPositioning, this._handleDisabledPositioning);
|
|
185
228
|
this.addEventListener(RELATIVE_POSITION_CONTROLLER_EVENTS.enabledPositioning, this._handleEnabledPositioning);
|
|
186
229
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener(DROPDOWN_EVENTS.toggle, this.toggle);
|
|
230
|
+
document.addEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
187
231
|
window.addEventListener('resize', this._observeScrollToggling);
|
|
188
232
|
document.addEventListener('keydown', this._closeDropdownOnEscape);
|
|
233
|
+
document.addEventListener('keydown', this._handleFocusWithinDropdown);
|
|
189
234
|
if (this.toggleOnHover)
|
|
190
235
|
document.addEventListener('mouseover', this._hoverToggle);
|
|
191
236
|
}
|
|
@@ -205,7 +250,14 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
205
250
|
(_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(SCROLLABLE_CLASS_NAME);
|
|
206
251
|
}
|
|
207
252
|
}
|
|
253
|
+
_focusOnNextSibling(el) {
|
|
254
|
+
el.focus();
|
|
255
|
+
if (el === document.activeElement)
|
|
256
|
+
return;
|
|
257
|
+
this._focusOnNextSibling(el.nextElementSibling);
|
|
258
|
+
}
|
|
208
259
|
_isHoveredWithinDropdown(element) {
|
|
260
|
+
var _a;
|
|
209
261
|
if (element === this)
|
|
210
262
|
return true;
|
|
211
263
|
if (element === this.$dropdownContent)
|
|
@@ -216,7 +268,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
216
268
|
const $closestDropdownContent = element.closest(DROPDOWN_CONTENT_NAME);
|
|
217
269
|
const isDescendantOfContent = this.$dropdownContent &&
|
|
218
270
|
$closestDropdownContent !== null &&
|
|
219
|
-
!!this.$
|
|
271
|
+
!!((_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((content) => content.name === $closestDropdownContent.name));
|
|
220
272
|
if (isDescendantOfContent)
|
|
221
273
|
return true;
|
|
222
274
|
return false;
|
|
@@ -233,6 +285,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
233
285
|
(_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.removeEventListener(DROPDOWN_EVENTS.toggle, this.toggle);
|
|
234
286
|
window.removeEventListener('resize', this._observeScrollToggling);
|
|
235
287
|
document.removeEventListener('keydown', this._closeDropdownOnEscape);
|
|
288
|
+
document.removeEventListener(DROPDOWN_EVENTS.hide, this.hide);
|
|
289
|
+
document.removeEventListener('keydown', this._handleFocusWithinDropdown);
|
|
236
290
|
if (this.toggleOnHover)
|
|
237
291
|
document.removeEventListener('mouseover', this._hoverToggle);
|
|
238
292
|
if (this.opened) {
|
|
@@ -245,7 +299,9 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
|
|
|
245
299
|
return html `
|
|
246
300
|
${this.getSlot('toggler')}
|
|
247
301
|
<h-portal ?disabled="${!this.opened}" @portal.open="${this._positionDropdownContent}" to="${this.portalTarget}" hidden>
|
|
302
|
+
<div tabindex="0" ${ref(this._focusSentinelStart)}></div>
|
|
248
303
|
${this.getSlot('content')}
|
|
304
|
+
<div tabindex="0" ${ref(this._focusSentinelEnd)}></div>
|
|
249
305
|
</h-portal>
|
|
250
306
|
`;
|
|
251
307
|
}
|
|
@@ -274,6 +330,14 @@ __decorate([
|
|
|
274
330
|
property({ type: String }),
|
|
275
331
|
__metadata("design:type", Object)
|
|
276
332
|
], HDropdown.prototype, "portalTarget", void 0);
|
|
333
|
+
__decorate([
|
|
334
|
+
state(),
|
|
335
|
+
__metadata("design:type", Object)
|
|
336
|
+
], HDropdown.prototype, "_firstFocusableElement", void 0);
|
|
337
|
+
__decorate([
|
|
338
|
+
state(),
|
|
339
|
+
__metadata("design:type", Object)
|
|
340
|
+
], HDropdown.prototype, "_lastFocusableElement", void 0);
|
|
277
341
|
HDropdown = HDropdown_1 = __decorate([
|
|
278
342
|
phoenixCustomElement('h-dropdown')
|
|
279
343
|
], HDropdown);
|
|
@@ -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,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;"}
|
|
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,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;"}
|
|
@@ -18,7 +18,6 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
|
|
|
18
18
|
bubbles: true
|
|
19
19
|
});
|
|
20
20
|
this.dispatchEvent(toggleDropdownEvent);
|
|
21
|
-
this._toggleElementAriaController.toggleAriaExpandedAttribute();
|
|
22
21
|
};
|
|
23
22
|
this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
|
|
24
23
|
this.className = `${DROPDOWN_TOGGLER_CSS_CLASS} ${this.className}`;
|
|
@@ -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;
|
|
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;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class Tab extends PhoenixLightLitElement {
|
|
3
|
+
panelName: string;
|
|
4
|
+
get selected(): boolean;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
set selected(selected: boolean);
|
|
7
|
+
private _btnController;
|
|
8
|
+
attributeChangedCallback(name: string, value: string | null, newValue: string | null): void;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
private _setupAttributes;
|
|
11
|
+
private _bindEvents;
|
|
12
|
+
private _handleTabClicked;
|
|
13
|
+
_dispatchSelectedEvent: () => void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { phoenixCustomElement } from '@phoenixRoot/core/decorators/phoenix_custom_element';
|
|
3
|
+
import { PhoenixLightLitElement } from '@phoenixRoot/core/phoenix_light_lit_element/phoenix_light_lit_element';
|
|
4
|
+
import { BtnController } from '@phoenixRoot/controllers/btn_controller';
|
|
5
|
+
import { property } from 'lit/decorators';
|
|
6
|
+
import { TAB_EVENT_NAMES, TAB_SELECTED_ATTRIBUTE_NAME } from '@phoenixRoot/components/tabs/tab/tab_constants';
|
|
7
|
+
import { UiDomUtils } from '@dreamcommerce/utilities/build/esm/ui_dom_utils';
|
|
8
|
+
let Tab = class Tab extends PhoenixLightLitElement {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this._handleTabClicked = () => {
|
|
12
|
+
if (this.disabled)
|
|
13
|
+
return;
|
|
14
|
+
this._dispatchSelectedEvent();
|
|
15
|
+
};
|
|
16
|
+
this._dispatchSelectedEvent = () => {
|
|
17
|
+
this.dispatchEvent(new CustomEvent(TAB_EVENT_NAMES.selected, {
|
|
18
|
+
detail: {
|
|
19
|
+
$el: this
|
|
20
|
+
},
|
|
21
|
+
bubbles: true
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
get selected() {
|
|
26
|
+
return this.hasAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
|
|
27
|
+
}
|
|
28
|
+
set selected(selected) {
|
|
29
|
+
selected ? this.setAttribute(TAB_SELECTED_ATTRIBUTE_NAME, '') : this.removeAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
|
|
30
|
+
this.setAttribute('aria-selected', String(selected));
|
|
31
|
+
selected ? UiDomUtils.makeNavigable(this) : UiDomUtils.makeUnnavigable(this);
|
|
32
|
+
}
|
|
33
|
+
attributeChangedCallback(name, value, newValue) {
|
|
34
|
+
super.attributeChangedCallback(name, value, newValue);
|
|
35
|
+
switch (name) {
|
|
36
|
+
case TAB_SELECTED_ATTRIBUTE_NAME: {
|
|
37
|
+
this.selected = Boolean(newValue);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
connectedCallback() {
|
|
43
|
+
super.connectedCallback();
|
|
44
|
+
this._btnController = new BtnController(this, this._dispatchSelectedEvent);
|
|
45
|
+
this._setupAttributes();
|
|
46
|
+
this._bindEvents();
|
|
47
|
+
this.tabIndex = this.selected ? 0 : -1;
|
|
48
|
+
}
|
|
49
|
+
_setupAttributes() {
|
|
50
|
+
this.setAttribute('role', 'tab');
|
|
51
|
+
this.setAttribute('aria-controls', this.panelName);
|
|
52
|
+
this.setAttribute('aria-selected', String(this.selected));
|
|
53
|
+
}
|
|
54
|
+
_bindEvents() {
|
|
55
|
+
this.addEventListener('click', this._handleTabClicked);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
__decorate([
|
|
59
|
+
property({ type: String, reflect: true, attribute: 'panel-name' }),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], Tab.prototype, "panelName", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
property({ type: Boolean, reflect: true }),
|
|
64
|
+
__metadata("design:type", Boolean)
|
|
65
|
+
], Tab.prototype, "disabled", void 0);
|
|
66
|
+
Tab = __decorate([
|
|
67
|
+
phoenixCustomElement('h-tab')
|
|
68
|
+
], Tab);
|
|
69
|
+
export { Tab };
|
|
70
|
+
//# sourceMappingURL=tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../../../../../../src/components/tabs/tab/tab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab_constants.js","sourceRoot":"","sources":["../../../../../../../../src/components/tabs/tab/tab_constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,QAAQ,EAAE,UAAU;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class TabPanel extends PhoenixLightLitElement {
|
|
3
|
+
name: string;
|
|
4
|
+
hidden: boolean;
|
|
5
|
+
private _visibilityController;
|
|
6
|
+
constructor();
|
|
7
|
+
show(): void;
|
|
8
|
+
hide(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { phoenixCustomElement } from '@phoenixRoot/core/decorators/phoenix_custom_element';
|
|
3
|
+
import { PhoenixLightLitElement } from '@phoenixRoot/core/phoenix_light_lit_element/phoenix_light_lit_element';
|
|
4
|
+
import { property } from 'lit/decorators';
|
|
5
|
+
import '@phoenixRoot/controllers/visibility_controller/visibility_controller_types';
|
|
6
|
+
import { VisibilityController } from '@phoenixRoot/controllers/visibility_controller/visibility_controller';
|
|
7
|
+
let TabPanel = class TabPanel extends PhoenixLightLitElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this.hidden = true;
|
|
11
|
+
this._visibilityController = new VisibilityController(this);
|
|
12
|
+
}
|
|
13
|
+
show() {
|
|
14
|
+
this._visibilityController.show();
|
|
15
|
+
}
|
|
16
|
+
hide() {
|
|
17
|
+
this._visibilityController.hide();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
__decorate([
|
|
21
|
+
property({ type: String, reflect: true }),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], TabPanel.prototype, "name", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
property({ type: Boolean, reflect: true }),
|
|
26
|
+
__metadata("design:type", Object)
|
|
27
|
+
], TabPanel.prototype, "hidden", void 0);
|
|
28
|
+
TabPanel = __decorate([
|
|
29
|
+
phoenixCustomElement('h-tab-panel'),
|
|
30
|
+
__metadata("design:paramtypes", [])
|
|
31
|
+
], TabPanel);
|
|
32
|
+
export { TabPanel };
|
|
33
|
+
//# sourceMappingURL=tab_panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab_panel.js","sourceRoot":"","sources":["../../../../../../../src/components/tabs/tab_panel.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAC/G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAsC,4EAA4E,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sEAAsE,CAAC;AAG5G,IAAa,QAAQ,GAArB,MAAa,QAAS,SAAQ,sBAAsB;IAShD;QACI,KAAK,EAAE,CAAC;QALL,WAAM,GAAG,IAAI,CAAC;QAOjB,IAAI,CAAC,qBAAqB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACJ,CAAA;AApBG;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sCAC7B;AAGb;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wCACtB;AALZ,QAAQ;IADpB,oBAAoB,CAAC,aAAa,CAAC;;GACvB,QAAQ,CAsBpB;SAtBY,QAAQ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
|
|
2
|
+
export declare class Tabs extends PhoenixLightLitElement {
|
|
3
|
+
private _$selectedTab;
|
|
4
|
+
private _$tabs;
|
|
5
|
+
connectedCallback(): void;
|
|
6
|
+
private _handleArrowNavigation;
|
|
7
|
+
private _getFocusedTabIndex;
|
|
8
|
+
private _getNextTabIndex;
|
|
9
|
+
private _getPrevTabIndex;
|
|
10
|
+
private _setupEvents;
|
|
11
|
+
private _handleTabSelected;
|
|
12
|
+
private _handleTabConnected;
|
|
13
|
+
switchPanel(newPanelName: string): void;
|
|
14
|
+
private _dispatchChangedEvent;
|
|
15
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { PhoenixLightLitElement } from '@phoenixRoot/core/phoenix_light_lit_element/phoenix_light_lit_element';
|
|
3
|
+
import { phoenixCustomElement } from '@phoenixRoot/core/decorators/phoenix_custom_element';
|
|
4
|
+
import { Tab } from '@phoenixRoot/components/tabs/tab/tab';
|
|
5
|
+
import { state } from 'lit/decorators';
|
|
6
|
+
import '@phoenixRoot/components/tabs/tab_panel';
|
|
7
|
+
import { PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES } from '@phoenixRoot/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants';
|
|
8
|
+
import { TABS_EVENT_NAMES } from '@phoenixRoot/components/tabs/tabs_constants';
|
|
9
|
+
import { TAB_EVENT_NAMES } from '@phoenixRoot/components/tabs/tab/tab_constants';
|
|
10
|
+
import '@phoenixRoot/components/tabs/tabs_types';
|
|
11
|
+
import { KeystrokesController } from '@phoenixRoot/controllers/keystrokes_controller/keystrokes_controller';
|
|
12
|
+
import { UiDomUtils } from '@dreamcommerce/utilities/build/esm/ui_dom_utils';
|
|
13
|
+
let Tabs = class Tabs extends PhoenixLightLitElement {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this._handleArrowNavigation = ({ key }) => {
|
|
17
|
+
const currentTabIndex = this._getFocusedTabIndex();
|
|
18
|
+
// console.log('currentTabIndex ', currentTabIndex, ' key', key);
|
|
19
|
+
if (currentTabIndex === undefined)
|
|
20
|
+
return;
|
|
21
|
+
const newTabIndex = key === 'ArrowLeft' ? this._getPrevTabIndex(currentTabIndex) : this._getNextTabIndex(currentTabIndex);
|
|
22
|
+
// console.log('newTabIndex ', newTabIndex);
|
|
23
|
+
if (newTabIndex === undefined)
|
|
24
|
+
return;
|
|
25
|
+
UiDomUtils.makeUnnavigable(this._$tabs[currentTabIndex]);
|
|
26
|
+
UiDomUtils.makeNavigable(this._$tabs[newTabIndex]);
|
|
27
|
+
this._$tabs[newTabIndex].focus();
|
|
28
|
+
};
|
|
29
|
+
this._handleTabSelected = (event) => {
|
|
30
|
+
const $newlySelectedTab = event.detail.$el;
|
|
31
|
+
this.switchPanel($newlySelectedTab.panelName);
|
|
32
|
+
if (this._$selectedTab)
|
|
33
|
+
this._$selectedTab.selected = false;
|
|
34
|
+
$newlySelectedTab.selected = true;
|
|
35
|
+
this._dispatchChangedEvent(this._$selectedTab, $newlySelectedTab);
|
|
36
|
+
this._$selectedTab = $newlySelectedTab;
|
|
37
|
+
};
|
|
38
|
+
this._handleTabConnected = (event) => {
|
|
39
|
+
const $connectedTab = event.detail.$el;
|
|
40
|
+
if (!$connectedTab.selected)
|
|
41
|
+
return;
|
|
42
|
+
this._$selectedTab = event.detail.$el;
|
|
43
|
+
this.switchPanel(this._$selectedTab.panelName);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
connectedCallback() {
|
|
47
|
+
super.connectedCallback();
|
|
48
|
+
this._setupEvents();
|
|
49
|
+
this.setAttribute('role', 'tablist');
|
|
50
|
+
this._$tabs = [...this.querySelectorAll('h-tab')];
|
|
51
|
+
new KeystrokesController({
|
|
52
|
+
host: this,
|
|
53
|
+
keys: ['ArrowRight', 'ArrowLeft'],
|
|
54
|
+
callback: this._handleArrowNavigation
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
_getFocusedTabIndex() {
|
|
58
|
+
const focusedElement = document.activeElement;
|
|
59
|
+
if ((focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.tagName) !== 'H-TAB')
|
|
60
|
+
return;
|
|
61
|
+
return this._$tabs.findIndex(($tab) => $tab === focusedElement);
|
|
62
|
+
}
|
|
63
|
+
_getNextTabIndex(currentTabIndex) {
|
|
64
|
+
if (currentTabIndex >= this._$tabs.length - 1)
|
|
65
|
+
return;
|
|
66
|
+
return currentTabIndex + 1;
|
|
67
|
+
}
|
|
68
|
+
_getPrevTabIndex(currentTabIndex) {
|
|
69
|
+
if (currentTabIndex <= 0)
|
|
70
|
+
return;
|
|
71
|
+
return currentTabIndex - 1;
|
|
72
|
+
}
|
|
73
|
+
_setupEvents() {
|
|
74
|
+
this.addEventListener(TAB_EVENT_NAMES.selected, this._handleTabSelected);
|
|
75
|
+
this.addEventListener(PHOENIX_LIGHT_LIT_ELEMENTS_EVENT_NAMES.connected, this._handleTabConnected);
|
|
76
|
+
}
|
|
77
|
+
switchPanel(newPanelName) {
|
|
78
|
+
const $currentPanel = document.querySelectorAll(`[name="${this._$selectedTab.panelName}"]`);
|
|
79
|
+
const $newPanel = document.querySelectorAll(`[name="${newPanelName}"]`);
|
|
80
|
+
if ($currentPanel)
|
|
81
|
+
$currentPanel.forEach(($panel) => $panel.hide());
|
|
82
|
+
if ($newPanel)
|
|
83
|
+
$newPanel.forEach(($panel) => $panel.show());
|
|
84
|
+
}
|
|
85
|
+
_dispatchChangedEvent($previousTab, $newTab) {
|
|
86
|
+
this.dispatchEvent(new CustomEvent(TABS_EVENT_NAMES.changed, {
|
|
87
|
+
detail: {
|
|
88
|
+
$previousTab,
|
|
89
|
+
$newTab
|
|
90
|
+
},
|
|
91
|
+
bubbles: true
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
__decorate([
|
|
96
|
+
state(),
|
|
97
|
+
__metadata("design:type", Tab)
|
|
98
|
+
], Tabs.prototype, "_$selectedTab", void 0);
|
|
99
|
+
Tabs = __decorate([
|
|
100
|
+
phoenixCustomElement('h-tabs')
|
|
101
|
+
], Tabs);
|
|
102
|
+
export { Tabs };
|
|
103
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../../../../../src/components/tabs/tabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs_constants.js","sourceRoot":"","sources":["../../../../../../../src/components/tabs/tabs_constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,OAAO,EAAE,SAAS;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs_types.js","sourceRoot":"","sources":["../../../../../../../src/components/tabs/tabs_types.ts"],"names":[],"mappings":"AAAA,OAAoB,sCAAsC,CAAC"}
|
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": "0.19.1",
|
|
5
|
+
"version": "0.19.3-1",
|
|
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": "^0.
|
|
33
|
+
"@dreamcommerce/utilities": "^0.10.1",
|
|
34
34
|
"@shoper/jest_config": "^0.0.0",
|
|
35
35
|
"@shoper/tsconfig": "^0.0.0",
|
|
36
36
|
"@splidejs/splide": "4.0.7",
|