@shoper/phoenix_design_system 0.22.3 → 0.22.4-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 (85) hide show
  1. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +23 -32
  2. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  3. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +4 -1
  4. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  5. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -1
  6. package/build/cjs/packages/phoenix/src/components/slider/slider.js +2 -2
  7. package/build/cjs/packages/phoenix/src/components/tabs/tab/tab.js +74 -0
  8. package/build/cjs/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
  9. package/build/cjs/packages/phoenix/src/components/tabs/tab/tab_constants.js +12 -0
  10. package/build/{esm/packages/utilities/build/esm/web_components_utils.js.map → cjs/packages/phoenix/src/components/tabs/tab/tab_constants.js.map} +1 -1
  11. package/build/cjs/packages/phoenix/src/components/tabs/tab_panel.js +31 -0
  12. package/build/cjs/packages/phoenix/src/components/tabs/tab_panel.js.map +1 -0
  13. package/build/cjs/packages/phoenix/src/components/tabs/tabs.js +108 -0
  14. package/build/cjs/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
  15. package/build/cjs/packages/phoenix/src/components/tabs/tabs_constants.js +10 -0
  16. package/build/cjs/packages/{utilities/build/esm/web_components_utils.js.map → phoenix/src/components/tabs/tabs_constants.js.map} +1 -1
  17. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +170 -46
  18. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js.map +1 -1
  19. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +10 -6
  20. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  21. package/build/cjs/packages/phoenix/src/controllers/visibility_controller/visibility_controller.js +1 -1
  22. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js +47 -13
  23. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js.map +1 -1
  24. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js +10 -4
  25. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js.map +1 -1
  26. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js +3 -1
  27. package/build/cjs/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js.map +1 -1
  28. package/build/cjs/packages/phoenix/src/index.js +23 -0
  29. package/build/cjs/packages/phoenix/src/index.js.map +1 -1
  30. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +0 -5
  31. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +23 -32
  32. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  33. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +4 -1
  34. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  35. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -1
  36. package/build/esm/packages/phoenix/src/components/slider/slider.js +1 -1
  37. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.d.ts +14 -0
  38. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js +72 -0
  39. package/build/esm/packages/phoenix/src/components/tabs/tab/tab.js.map +1 -0
  40. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.d.ts +4 -0
  41. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js +7 -0
  42. package/build/esm/packages/phoenix/src/components/tabs/tab/tab_constants.js.map +1 -0
  43. package/build/esm/packages/phoenix/src/components/tabs/tab_panel.d.ts +8 -0
  44. package/build/esm/packages/phoenix/src/components/tabs/tab_panel.js +29 -0
  45. package/build/{cjs/packages/utilities/build/esm/json_utils.js.map → esm/packages/phoenix/src/components/tabs/tab_panel.js.map} +1 -1
  46. package/build/esm/packages/phoenix/src/components/tabs/tabs.d.ts +16 -0
  47. package/build/esm/packages/phoenix/src/components/tabs/tabs.js +106 -0
  48. package/build/esm/packages/phoenix/src/components/tabs/tabs.js.map +1 -0
  49. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.d.ts +3 -0
  50. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js +6 -0
  51. package/build/esm/packages/phoenix/src/components/tabs/tabs_constants.js.map +1 -0
  52. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.d.ts +4 -0
  53. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js +2 -0
  54. package/build/esm/packages/phoenix/src/components/tabs/tabs_types.js.map +1 -0
  55. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.d.ts +15 -2
  56. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +170 -46
  57. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js.map +1 -1
  58. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.d.ts +45 -0
  59. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.js +4 -0
  60. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator_types.js.map +1 -0
  61. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.d.ts +3 -3
  62. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +10 -6
  63. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  64. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.d.ts +4 -11
  65. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.js +2 -1
  66. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.js.map +1 -1
  67. package/build/esm/packages/phoenix/src/controllers/visibility_controller/visibility_controller.js +1 -1
  68. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.d.ts +8 -1
  69. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js +47 -13
  70. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element.js.map +1 -1
  71. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.d.ts +1 -0
  72. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js +7 -1
  73. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_element_utils.js.map +1 -1
  74. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.d.ts +2 -1
  75. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js +3 -1
  76. package/build/esm/packages/phoenix/src/core/phoenix_light_lit_element/phoenix_light_lit_elements_constants.js.map +1 -1
  77. package/build/esm/packages/phoenix/src/index.d.ts +4 -0
  78. package/build/esm/packages/phoenix/src/index.js +4 -0
  79. package/build/esm/packages/phoenix/src/index.js.map +1 -1
  80. package/package.json +1 -1
  81. package/build/cjs/packages/utilities/build/esm/json_utils.js +0 -25
  82. package/build/cjs/packages/utilities/build/esm/web_components_utils.js +0 -18
  83. package/build/esm/packages/utilities/build/esm/json_utils.js +0 -21
  84. package/build/esm/packages/utilities/build/esm/json_utils.js.map +0 -1
  85. package/build/esm/packages/utilities/build/esm/web_components_utils.js +0 -14
@@ -1,13 +1,12 @@
1
1
  import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
2
- import 'lit';
3
2
  import { state } from 'lit/decorators';
3
+ import { UiDomUtils } from '@dreamcommerce/utilities';
4
4
  import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
5
5
  import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
6
6
  import { PORTAL_TARGET_COMPONENT_NAME, PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
7
7
  import { html } from 'lit-html';
8
8
  import { BackdropController } from '../backdrop/controller/backdrop_controller.js';
9
9
  import { property } from '@lit/reactive-element/decorators.js';
10
- import { createRef, ref } from 'lit-html/directives/ref.js';
11
10
  import { BREAKPOINTS, SCROLLABLE_CLASS_NAME } from '../../global_constants.js';
12
11
  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';
13
12
  import { DIRECTIONS, RELATIVE_POSITION_CONTROLLER_EVENTS, DEFAULT_THROTTLE_WAIT_TIME } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
@@ -26,10 +25,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
26
25
  this.transition = 'direction';
27
26
  this.portalTarget = DEFAULT_DROPDOWN_PORTAL_NAME;
28
27
  this._backdropController = new BackdropController();
29
- this._firstFocusableElement = undefined;
30
28
  this._lastFocusableElement = undefined;
31
- this._focusSentinelStart = createRef();
32
- this._focusSentinelEnd = createRef();
33
29
  this._handleClickOutside = async (target) => {
34
30
  var _a, _b;
35
31
  if (!this.opened)
@@ -55,11 +51,13 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
55
51
  }, 0);
56
52
  const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
57
53
  setTimeout(() => {
58
- var _a, _b;
54
+ var _a, _b, _c;
59
55
  this._dispatchShowDropdownEvent();
60
56
  (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
61
57
  this._toggleScroll();
62
- (_b = this._firstFocusableElement) === null || _b === void 0 ? void 0 : _b.focus();
58
+ if (!this._lastFocusableElement)
59
+ this._lastFocusableElement = (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.lastElementChild;
60
+ this._focusOnNextSibling((_c = this.$dropdownContent) === null || _c === void 0 ? void 0 : _c.firstElementChild);
63
61
  resolve();
64
62
  }, transitionDuration);
65
63
  });
@@ -133,18 +131,16 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
133
131
  this._handleFocusWithinDropdown = async (ev) => {
134
132
  var _a;
135
133
  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
- }
134
+ if (hasTabBeenPressed && document.activeElement === this._lastFocusableElement) {
135
+ ev.preventDefault();
136
+ this._focusOnNextSibling(this.nextElementSibling || this);
137
+ await this._hideDropdownsSequentially();
138
+ }
139
+ const $firstFocusableElement = this.$dropdownContent && UiDomUtils.getFocusableElement(this.$dropdownContent);
140
+ if (hasTabBeenPressed && ev.shiftKey && document.activeElement === $firstFocusableElement) {
141
+ ev.preventDefault();
142
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.focus();
143
+ await this._hideDropdownsSequentially();
148
144
  }
149
145
  };
150
146
  this._hoverToggle = async (ev) => {
@@ -203,11 +199,6 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
203
199
  this._setupListeners();
204
200
  this._setupInitialDropdownProperties();
205
201
  }
206
- firstUpdated(props) {
207
- super.firstUpdated(props);
208
- this._firstFocusableElement = this._focusSentinelStart.value;
209
- this._lastFocusableElement = this._focusSentinelEnd.value;
210
- }
211
202
  static _appendDropdownPortal() {
212
203
  const $dropdownPortalTarget = document.querySelector(`[name="${DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
213
204
  if (!$dropdownPortalTarget) {
@@ -254,7 +245,12 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
254
245
  el.focus();
255
246
  if (el === document.activeElement)
256
247
  return;
257
- this._focusOnNextSibling(el.nextElementSibling);
248
+ if (el.firstElementChild) {
249
+ this._focusOnNextSibling(el.firstElementChild);
250
+ return;
251
+ }
252
+ if (el.nextElementSibling)
253
+ this._focusOnNextSibling(el.nextElementSibling);
258
254
  }
259
255
  _isHoveredWithinDropdown(element) {
260
256
  var _a;
@@ -262,7 +258,8 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
262
258
  return true;
263
259
  if (element === this.$dropdownContent)
264
260
  return true;
265
- const isDescendantOfDropdown = element.closest(`${DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null;
261
+ const isDescendantOfDropdown = element.closest(`${DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null ||
262
+ element.closest(`${DROPDOWN_CONTENT_NAME}[name="${this.name}"]`) !== null;
266
263
  if (isDescendantOfDropdown)
267
264
  return true;
268
265
  const $closestDropdownContent = element.closest(DROPDOWN_CONTENT_NAME);
@@ -299,9 +296,7 @@ let HDropdown = HDropdown_1 = class HDropdown extends PhoenixLightLitElement {
299
296
  return html `
300
297
  ${this.getSlot('toggler')}
301
298
  <h-portal ?disabled="${!this.opened}" @portal.open="${this._positionDropdownContent}" to="${this.portalTarget}" hidden>
302
- <div tabindex="0" ${ref(this._focusSentinelStart)}></div>
303
299
  ${this.getSlot('content')}
304
- <div tabindex="0" ${ref(this._focusSentinelEnd)}></div>
305
300
  </h-portal>
306
301
  `;
307
302
  }
@@ -330,10 +325,6 @@ __decorate([
330
325
  property({ type: String }),
331
326
  __metadata("design:type", Object)
332
327
  ], HDropdown.prototype, "portalTarget", void 0);
333
- __decorate([
334
- state(),
335
- __metadata("design:type", Object)
336
- ], HDropdown.prototype, "_firstFocusableElement", void 0);
337
328
  __decorate([
338
329
  state(),
339
330
  __metadata("design:type", Object)
@@ -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,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;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAgD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -18,7 +18,10 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
18
18
  }
19
19
  render() {
20
20
  super.render();
21
- return html ` <div role="dialog">${this.getSlot('content')}</div> `;
21
+ return html `
22
+ <div role="dialog">${this.getSlot('content')}</div>
23
+ <div tabindex="0" aria-hidden="true"></div>
24
+ `;
22
25
  }
23
26
  };
24
27
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
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;"}
@@ -14,7 +14,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
14
14
  this._dispatchToggleDropdownEvent = (ev) => {
15
15
  ev.preventDefault();
16
16
  ev.stopImmediatePropagation();
17
- const toggleDropdownEvent = new Event(DROPDOWN_EVENTS.toggle, {
17
+ const toggleDropdownEvent = new CustomEvent(DROPDOWN_EVENTS.toggle, {
18
18
  bubbles: true
19
19
  });
20
20
  this.dispatchEvent(toggleDropdownEvent);
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
2
2
  import { property } from 'lit/decorators';
3
- import { JsonUtils } from '../../../../utilities/build/esm/json_utils.js';
3
+ import { JsonUtils } from '@dreamcommerce/utilities';
4
4
  import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
5
5
  import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
6
6
  import { Splide } from '../../../../../external/@splidejs/splide/dist/js/splide.esm.js';
@@ -0,0 +1,14 @@
1
+ import { PhoenixLightLitElement } from "../../../core/phoenix_light_lit_element/phoenix_light_lit_element";
2
+ export declare class HTab 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,72 @@
1
+ import { __decorate, __metadata } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { property } from 'lit/decorators';
3
+ import { UiDomUtils } from '@dreamcommerce/utilities';
4
+ import { PhoenixLightLitElement } from '../../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
5
+ import { phoenixCustomElement } from '../../../core/decorators/phoenix_custom_element.js';
6
+ import { BtnController } from '../../../controllers/btn_controller.js';
7
+ import { TAB_EVENT_NAMES, TAB_SELECTED_ATTRIBUTE_NAME } from './tab_constants.js';
8
+
9
+ let HTab = class HTab extends PhoenixLightLitElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this._handleTabClicked = () => {
13
+ if (this.disabled)
14
+ return;
15
+ this._dispatchSelectedEvent();
16
+ };
17
+ this._dispatchSelectedEvent = () => {
18
+ this.dispatchEvent(new CustomEvent(TAB_EVENT_NAMES.selected, {
19
+ detail: {
20
+ $el: this
21
+ },
22
+ bubbles: true
23
+ }));
24
+ };
25
+ }
26
+ get selected() {
27
+ return this.hasAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
28
+ }
29
+ set selected(selected) {
30
+ selected ? this.setAttribute(TAB_SELECTED_ATTRIBUTE_NAME, '') : this.removeAttribute(TAB_SELECTED_ATTRIBUTE_NAME);
31
+ this.setAttribute('aria-selected', String(selected));
32
+ selected ? UiDomUtils.makeNavigable(this) : UiDomUtils.makeUnnavigable(this);
33
+ }
34
+ attributeChangedCallback(name, value, newValue) {
35
+ super.attributeChangedCallback(name, value, newValue);
36
+ switch (name) {
37
+ case TAB_SELECTED_ATTRIBUTE_NAME: {
38
+ this.selected = Boolean(newValue);
39
+ break;
40
+ }
41
+ }
42
+ }
43
+ connectedCallback() {
44
+ super.connectedCallback();
45
+ this._btnController = new BtnController(this, this._handleTabClicked);
46
+ this._setupAttributes();
47
+ this._bindEvents();
48
+ this.selected ? UiDomUtils.makeNavigable(this) : UiDomUtils.makeUnnavigable(this);
49
+ }
50
+ _setupAttributes() {
51
+ this.setAttribute('role', 'tab');
52
+ this.setAttribute('aria-controls', this.panelName);
53
+ this.setAttribute('aria-selected', String(this.selected));
54
+ }
55
+ _bindEvents() {
56
+ this.addEventListener('click', this._handleTabClicked);
57
+ }
58
+ };
59
+ __decorate([
60
+ property({ type: String, reflect: true, attribute: 'panel-name' }),
61
+ __metadata("design:type", String)
62
+ ], HTab.prototype, "panelName", void 0);
63
+ __decorate([
64
+ property({ type: Boolean, reflect: true }),
65
+ __metadata("design:type", Boolean)
66
+ ], HTab.prototype, "disabled", void 0);
67
+ HTab = __decorate([
68
+ phoenixCustomElement('h-tab')
69
+ ], HTab);
70
+
71
+ export { HTab };
72
+ //# sourceMappingURL=tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,+CAAmD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -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,7 @@
1
+ const TAB_EVENT_NAMES = {
2
+ selected: 'selected'
3
+ };
4
+ const TAB_SELECTED_ATTRIBUTE_NAME = 'selected';
5
+
6
+ export { TAB_EVENT_NAMES, TAB_SELECTED_ATTRIBUTE_NAME };
7
+ //# sourceMappingURL=tab_constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,8 @@
1
+ import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
2
+ export declare class HTabPanel extends PhoenixLightLitElement {
3
+ name: string;
4
+ private _visibilityController;
5
+ constructor();
6
+ show(): void;
7
+ hide(): void;
8
+ }
@@ -0,0 +1,29 @@
1
+ import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
2
+ import { property } from 'lit/decorators';
3
+ import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
4
+ import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
5
+ import { VisibilityController } from '../../controllers/visibility_controller/visibility_controller.js';
6
+
7
+ let HTabPanel = class HTabPanel extends PhoenixLightLitElement {
8
+ constructor() {
9
+ super();
10
+ this._visibilityController = new VisibilityController(this);
11
+ }
12
+ show() {
13
+ this._visibilityController.show();
14
+ }
15
+ hide() {
16
+ this._visibilityController.hide();
17
+ }
18
+ };
19
+ __decorate([
20
+ property({ type: String, reflect: true }),
21
+ __metadata("design:type", String)
22
+ ], HTabPanel.prototype, "name", void 0);
23
+ HTabPanel = __decorate([
24
+ phoenixCustomElement('h-tab-panel'),
25
+ __metadata("design:paramtypes", [])
26
+ ], HTabPanel);
27
+
28
+ export { HTabPanel };
29
+ //# sourceMappingURL=tab_panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
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;"}
@@ -0,0 +1,16 @@
1
+ import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element/phoenix_light_lit_element";
2
+ export declare class HTabs 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
+ allChildrenRendered(): void;
13
+ private _hideNotSelectedAndVisiblePanels;
14
+ switchPanel(newPanelName: string): void;
15
+ private _dispatchChangedEvent;
16
+ }
@@ -0,0 +1,106 @@
1
+ import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
2
+ import { state } from 'lit/decorators';
3
+ import { UiDomUtils } from '@dreamcommerce/utilities';
4
+ import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element/phoenix_light_lit_element.js';
5
+ import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
6
+ import { KeystrokesController } from '../../controllers/keystrokes_controller/keystrokes_controller.js';
7
+ import { TAB_EVENT_NAMES } from './tab/tab_constants.js';
8
+ import { HTab } from './tab/tab.js';
9
+ import { TABS_EVENT_NAMES } from './tabs_constants.js';
10
+
11
+ let HTabs = class HTabs extends PhoenixLightLitElement {
12
+ constructor() {
13
+ super(...arguments);
14
+ this._handleArrowNavigation = ({ key }) => {
15
+ const currentTabIndex = this._getFocusedTabIndex();
16
+ if (currentTabIndex === undefined)
17
+ return;
18
+ const newTabIndex = key === 'ArrowLeft' ? this._getPrevTabIndex(currentTabIndex) : this._getNextTabIndex(currentTabIndex);
19
+ if (newTabIndex === undefined)
20
+ return;
21
+ UiDomUtils.makeUnnavigable(this._$tabs[currentTabIndex]);
22
+ UiDomUtils.makeNavigable(this._$tabs[newTabIndex]);
23
+ this._$tabs[newTabIndex].focus();
24
+ };
25
+ this._handleTabSelected = (event) => {
26
+ const $newlySelectedTab = event.detail.$el;
27
+ this.switchPanel($newlySelectedTab.panelName);
28
+ if (this._$selectedTab)
29
+ this._$selectedTab.selected = false;
30
+ $newlySelectedTab.selected = true;
31
+ this._dispatchChangedEvent(this._$selectedTab, $newlySelectedTab);
32
+ this._$selectedTab = $newlySelectedTab;
33
+ };
34
+ }
35
+ connectedCallback() {
36
+ super.connectedCallback();
37
+ this._setupEvents();
38
+ this.setAttribute('role', 'tablist');
39
+ this._$tabs = [...this.querySelectorAll('h-tab')];
40
+ new KeystrokesController({
41
+ host: this,
42
+ keys: ['ArrowRight', 'ArrowLeft'],
43
+ callback: this._handleArrowNavigation
44
+ });
45
+ }
46
+ _getFocusedTabIndex() {
47
+ const focusedElement = document.activeElement;
48
+ if ((focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.tagName) !== 'H-TAB')
49
+ return;
50
+ return this._$tabs.findIndex(($tab) => $tab === focusedElement);
51
+ }
52
+ _getNextTabIndex(currentTabIndex) {
53
+ if (currentTabIndex >= this._$tabs.length - 1)
54
+ return;
55
+ return currentTabIndex + 1;
56
+ }
57
+ _getPrevTabIndex(currentTabIndex) {
58
+ if (currentTabIndex <= 0)
59
+ return;
60
+ return currentTabIndex - 1;
61
+ }
62
+ _setupEvents() {
63
+ this.addEventListener(TAB_EVENT_NAMES.selected, this._handleTabSelected);
64
+ }
65
+ allChildrenRendered() {
66
+ const $selectedTab = this.querySelector('h-tab[selected]');
67
+ this._hideNotSelectedAndVisiblePanels();
68
+ if (!$selectedTab)
69
+ return;
70
+ this._$selectedTab = $selectedTab;
71
+ this.switchPanel(this._$selectedTab.panelName);
72
+ }
73
+ _hideNotSelectedAndVisiblePanels() {
74
+ const $notSelectedTabs = [...this.querySelectorAll('h-tab:not([selected])')];
75
+ $notSelectedTabs
76
+ .map(($tab) => $tab.panelName)
77
+ .forEach((panelName) => document.querySelectorAll(`[name="${panelName}"]`).forEach(($panel) => $panel.hide()));
78
+ }
79
+ switchPanel(newPanelName) {
80
+ const $currentPanel = this._$selectedTab && document.querySelectorAll(`[name="${this._$selectedTab.panelName}"]`);
81
+ const $newPanel = document.querySelectorAll(`[name="${newPanelName}"]`);
82
+ if ($currentPanel)
83
+ $currentPanel.forEach(($panel) => $panel.hide());
84
+ if ($newPanel)
85
+ $newPanel.forEach(($panel) => $panel.show());
86
+ }
87
+ _dispatchChangedEvent($previousTab, $newTab) {
88
+ this.dispatchEvent(new CustomEvent(TABS_EVENT_NAMES.changed, {
89
+ detail: {
90
+ $previousTab,
91
+ $newTab
92
+ },
93
+ bubbles: true
94
+ }));
95
+ }
96
+ };
97
+ __decorate([
98
+ state(),
99
+ __metadata("design:type", HTab)
100
+ ], HTabs.prototype, "_$selectedTab", void 0);
101
+ HTabs = __decorate([
102
+ phoenixCustomElement('h-tabs')
103
+ ], HTabs);
104
+
105
+ export { HTabs };
106
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,3 @@
1
+ export declare const TABS_EVENT_NAMES: {
2
+ readonly changed: "changed";
3
+ };
@@ -0,0 +1,6 @@
1
+ const TABS_EVENT_NAMES = {
2
+ changed: 'changed'
3
+ };
4
+
5
+ export { TABS_EVENT_NAMES };
6
+ //# sourceMappingURL=tabs_constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;"}
@@ -0,0 +1,4 @@
1
+ import { HTab } from "./tab/tab";
2
+ export declare type TTabSelectedEvent = CustomEvent<{
3
+ $el: HTab;
4
+ }>;
@@ -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,OAAqB,sCAAsC,CAAC"}
@@ -1,11 +1,24 @@
1
- import { TRelativePositionCalculatorConstructorOptions, TRelativePositionControllerPositionData } from "./relative_position_controller_types";
1
+ import { TRelativePositionCalculatorConstructorOptions } from './relative_position_calculator_types';
2
+ import { TRelativePositionControllerPositionData } from "./relative_position_controller_types";
2
3
  export declare class PositionCalculator {
3
4
  #private;
4
- constructor({ direction, relativeElementRect, positionElementRect, container, nearestNonStaticElementFromElementToPositionRect, shouldNotReposition }: TRelativePositionCalculatorConstructorOptions);
5
+ constructor({ direction, relativeElementRect, positionElementRect, container, nearestNonStaticElementFromElementToPositionRect, offset, shouldNotReposition }: TRelativePositionCalculatorConstructorOptions);
5
6
  calculatePosition(): TRelativePositionControllerPositionData;
6
7
  private _canFitTopSide;
7
8
  private _canFitBottomSide;
8
9
  private _canFitCenter;
10
+ private _canFitLeftSide;
11
+ private _canFitRightSide;
9
12
  private _calculateSidePosition;
13
+ private _calculateTopSide;
14
+ private _calculateBottomSide;
15
+ private _calculateCenterSide;
16
+ private _calculateLeftSide;
17
+ private _calculateRightSide;
10
18
  private calculateAlignmentPosition;
19
+ private _calculateTopAlignment;
20
+ private _calculateBottomAlignment;
21
+ private _calculateLeftAlignment;
22
+ private _calculateRightAlignment;
23
+ private _calculateCenterAlignment;
11
24
  }