@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.
Files changed (29) hide show
  1. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +84 -20
  2. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +0 -1
  4. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  5. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +14 -4
  6. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +85 -21
  7. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  8. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +0 -1
  9. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  10. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_types.d.ts +5 -0
  11. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.d.ts +14 -0
  12. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js +70 -0
  13. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
  14. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.d.ts +4 -0
  15. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js +5 -0
  16. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js.map +1 -0
  17. package/build/esm/packages/phoenix/src/components/tabs/tab_panel.d.ts +9 -0
  18. package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js +33 -0
  19. package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js.map +1 -0
  20. package/build/esm/packages/phoenix/src/components/tabs/tabs.d.ts +15 -0
  21. package/build/esm/packages/phoenix/src/components/tabs/tabs.js +103 -0
  22. package/build/esm/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
  23. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.d.ts +3 -0
  24. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js +4 -0
  25. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js.map +1 -0
  26. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.d.ts +7 -0
  27. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js +2 -0
  28. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js.map +1 -0
  29. 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._handleClickOutside = (target) => {
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.hide();
44
+ await this._hideDropdownsSequentially();
38
45
  };
39
- this.toggle = () => {
40
- this.opened ? this.hide() : this.show();
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.hide = async () => new Promise((resolve) => {
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
- if (!this.$hoverableDropdownContentElements) {
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.$hoverableDropdownContentElements.find((content) => content.name === $closestDropdownContent.name);
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;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
- hide: () => Promise<void>;
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, DROPDOWN_CONTENT_HIDE, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
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._handleClickOutside = (target) => {
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.hide();
40
+ await this._hideDropdownsSequentially();
34
41
  };
35
- this.toggle = () => {
36
- this.opened ? this.hide() : this.show();
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.hide = async () => new Promise((resolve) => {
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
- if (!this.$hoverableDropdownContentElements) {
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.$hoverableDropdownContentElements.find((content) => content.name === $closestDropdownContent.name);
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;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;"}
@@ -8,3 +8,8 @@ export interface IDropdown {
8
8
  hide(): void;
9
9
  toggle(): void;
10
10
  }
11
+ export declare type TDropdownHideEvent = Event & {
12
+ detail: {
13
+ name: string;
14
+ };
15
+ };
@@ -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":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAG7E,IAAa,GAAG,GAAhB,MAAa,GAAI,SAAQ,sBAAsB;IAA/C;;QAsDY,sBAAiB,GAAG,GAAS,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClC,CAAC,CAAC;QAEK,2BAAsB,GAAG,GAAS,EAAE;YACvC,IAAI,CAAC,aAAa,CACd,IAAI,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE;gBACtC,MAAM,EAAE;oBACJ,GAAG,EAAE,IAAI;iBACZ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAC,CACL,CAAC;QACN,CAAC,CAAC;IACN,CAAC;IAlEG,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;IAC1D,CAAC;IAKD,IAAW,QAAQ,CAAC,QAAiB;QACjC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC;QAElH,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAErD,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAIM,wBAAwB,CAAC,IAAY,EAAE,KAAoB,EAAE,QAAuB;QACvF,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEtD,QAAQ,IAAI,EAAE;YACV,KAAK,2BAA2B,CAAC,CAAC;gBAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAElC,MAAM;aACT;SACJ;IACL,CAAC;IAEM,iBAAiB;QACpB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE3E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;CAkBJ,CAAA;AApEG;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;;sCAC1C;AAOzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;qCAClB;AAThB,GAAG;IADf,oBAAoB,CAAC,OAAO,CAAC;GACjB,GAAG,CAsEf;SAtEY,GAAG"}
@@ -0,0 +1,4 @@
1
+ export declare const TAB_EVENT_NAMES: {
2
+ readonly selected: "selected";
3
+ };
4
+ export declare const TAB_SELECTED_ATTRIBUTE_NAME = "selected";
@@ -0,0 +1,5 @@
1
+ export const TAB_EVENT_NAMES = {
2
+ selected: 'selected'
3
+ };
4
+ export const TAB_SELECTED_ATTRIBUTE_NAME = 'selected';
5
+ //# sourceMappingURL=tab_constants.js.map
@@ -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,3 @@
1
+ export declare const TABS_EVENT_NAMES: {
2
+ readonly changed: "changed";
3
+ };
@@ -0,0 +1,4 @@
1
+ export const TABS_EVENT_NAMES = {
2
+ changed: 'changed'
3
+ };
4
+ //# sourceMappingURL=tabs_constants.js.map
@@ -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,7 @@
1
+ import { Tab } from "./tab/tab";
2
+ export declare type TTabConnectedEvent = CustomEvent<{
3
+ $el: Tab;
4
+ }>;
5
+ export declare type TTabSelectedEvent = CustomEvent<{
6
+ $el: Tab;
7
+ }>;
@@ -0,0 +1,2 @@
1
+ import '@phoenixRoot/components/tabs/tab/tab';
2
+ //# sourceMappingURL=tabs_types.js.map
@@ -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.9.1",
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",