@shoper/phoenix_design_system 0.9.1 → 0.10.1-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 (118) hide show
  1. package/build/cjs/packages/phoenix/src/components/accordion/accordion.js +47 -0
  2. package/build/cjs/packages/phoenix/src/components/accordion/accordion.js.map +1 -0
  3. package/build/cjs/packages/phoenix/src/components/accordion/accordion_constants.js +15 -0
  4. package/build/cjs/packages/phoenix/src/components/accordion/accordion_constants.js.map +1 -0
  5. package/build/cjs/packages/phoenix/src/components/accordion/accordion_content.js +65 -0
  6. package/build/cjs/packages/phoenix/src/components/{modal/modal_backdrop.js.map → accordion/accordion_content.js.map} +1 -1
  7. package/build/cjs/packages/phoenix/src/components/accordion/accordion_group.js +118 -0
  8. package/build/cjs/packages/phoenix/src/components/accordion/accordion_group.js.map +1 -0
  9. package/build/cjs/packages/phoenix/src/components/accordion/accordion_toggler.js +46 -0
  10. package/build/cjs/packages/phoenix/src/components/accordion/accordion_toggler.js.map +1 -0
  11. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop.js +91 -0
  12. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop.js.map +1 -0
  13. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop_constants.js +17 -0
  14. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop_constants.js.map +1 -0
  15. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +114 -23
  16. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  17. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_constants.js +9 -1
  18. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_constants.js.map +1 -1
  19. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +6 -0
  20. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  21. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -0
  22. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  23. package/build/cjs/packages/phoenix/src/components/modal/modal.js +13 -10
  24. package/build/cjs/packages/phoenix/src/components/modal/modal.js.map +1 -1
  25. package/build/cjs/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js +4 -2
  26. package/build/cjs/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js.map +1 -1
  27. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +2 -2
  28. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +29 -9
  29. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  30. package/build/cjs/packages/phoenix/src/controllers/transition_controller/transition_controller.js +40 -0
  31. package/build/cjs/packages/phoenix/src/controllers/transition_controller/transition_controller.js.map +1 -0
  32. package/build/cjs/packages/phoenix/src/controllers/transition_controller/transition_controller_constants.js +11 -0
  33. package/build/cjs/packages/phoenix/src/controllers/transition_controller/transition_controller_constants.js.map +1 -0
  34. package/build/cjs/packages/phoenix/src/core/context/context_provider_controller.js +1 -1
  35. package/build/cjs/packages/phoenix/src/core/observer/observable.js +24 -0
  36. package/build/cjs/packages/phoenix/src/core/observer/observable.js.map +1 -0
  37. package/build/cjs/packages/phoenix/src/core/observer/observer.js +15 -0
  38. package/build/cjs/packages/phoenix/src/core/observer/observer.js.map +1 -0
  39. package/build/cjs/packages/phoenix/src/global_constants.js +15 -0
  40. package/build/cjs/packages/phoenix/src/global_constants.js.map +1 -0
  41. package/build/cjs/packages/phoenix/src/index.js +41 -10
  42. package/build/cjs/packages/phoenix/src/index.js.map +1 -1
  43. package/build/esm/packages/phoenix/src/components/accordion/accordion.d.ts +13 -0
  44. package/build/esm/packages/phoenix/src/components/accordion/accordion.js +45 -0
  45. package/build/esm/packages/phoenix/src/components/accordion/accordion.js.map +1 -0
  46. package/build/esm/packages/phoenix/src/components/accordion/accordion_constants.d.ts +7 -0
  47. package/build/esm/packages/phoenix/src/components/accordion/accordion_constants.js +10 -0
  48. package/build/esm/packages/phoenix/src/components/accordion/accordion_constants.js.map +1 -0
  49. package/build/esm/packages/phoenix/src/components/accordion/accordion_content.d.ts +18 -0
  50. package/build/esm/packages/phoenix/src/components/accordion/accordion_content.js +63 -0
  51. package/build/esm/packages/phoenix/src/components/{modal/modal_backdrop.js.map → accordion/accordion_content.js.map} +1 -1
  52. package/build/esm/packages/phoenix/src/components/accordion/accordion_group.d.ts +26 -0
  53. package/build/esm/packages/phoenix/src/components/accordion/accordion_group.js +116 -0
  54. package/build/esm/packages/phoenix/src/components/accordion/accordion_group.js.map +1 -0
  55. package/build/esm/packages/phoenix/src/components/accordion/accordion_toggler.d.ts +12 -0
  56. package/build/esm/packages/phoenix/src/components/accordion/accordion_toggler.js +44 -0
  57. package/build/esm/packages/phoenix/src/components/accordion/accordion_toggler.js.map +1 -0
  58. package/build/esm/packages/phoenix/src/components/accordion/accordion_types.d.ts +31 -0
  59. package/build/esm/packages/phoenix/src/components/accordion/accordion_types.js +5 -0
  60. package/build/esm/packages/phoenix/src/components/accordion/accordion_types.js.map +1 -0
  61. package/build/esm/packages/phoenix/src/components/backdrop/backdrop.d.ts +17 -0
  62. package/build/esm/packages/phoenix/src/components/backdrop/backdrop.js +89 -0
  63. package/build/esm/packages/phoenix/src/components/backdrop/backdrop.js.map +1 -0
  64. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.d.ts +7 -0
  65. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.js +11 -0
  66. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.js.map +1 -0
  67. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_types.d.ts +3 -0
  68. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_types.js +2 -0
  69. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_types.js.map +1 -0
  70. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +11 -3
  71. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +115 -24
  72. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  73. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.d.ts +5 -0
  74. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.js +6 -2
  75. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.js.map +1 -1
  76. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +2 -1
  77. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +6 -0
  78. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  79. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +2 -1
  80. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  81. package/build/esm/packages/phoenix/src/components/modal/modal.d.ts +1 -2
  82. package/build/esm/packages/phoenix/src/components/modal/modal.js +13 -10
  83. package/build/esm/packages/phoenix/src/components/modal/modal.js.map +1 -1
  84. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js +4 -2
  85. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js.map +1 -1
  86. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller_types.d.ts +4 -0
  87. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +2 -2
  88. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.d.ts +2 -1
  89. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +30 -10
  90. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  91. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.d.ts +2 -0
  92. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller.d.ts +11 -0
  93. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller.js +36 -0
  94. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller.js.map +1 -0
  95. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller_constants.d.ts +4 -0
  96. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller_constants.js +7 -0
  97. package/build/esm/packages/phoenix/src/controllers/transition_controller/transition_controller_constants.js.map +1 -0
  98. package/build/esm/packages/phoenix/src/core/context/context_provider_controller.d.ts +1 -1
  99. package/build/esm/packages/phoenix/src/core/context/context_provider_controller.js +1 -1
  100. package/build/esm/packages/phoenix/src/core/observer/observable.d.ts +9 -0
  101. package/build/esm/packages/phoenix/src/core/observer/observable.js +20 -0
  102. package/build/esm/packages/phoenix/src/core/observer/observable.js.map +1 -0
  103. package/build/esm/packages/phoenix/src/core/observer/observer.d.ts +6 -0
  104. package/build/esm/packages/phoenix/src/core/observer/observer.js +11 -0
  105. package/build/esm/packages/phoenix/src/core/observer/observer.js.map +1 -0
  106. package/build/esm/packages/phoenix/src/core/observer/observer_types.d.ts +8 -0
  107. package/build/esm/packages/phoenix/src/core/observer/observer_types.js +2 -0
  108. package/build/esm/packages/phoenix/src/core/observer/observer_types.js.map +1 -0
  109. package/build/esm/packages/phoenix/src/global_constants.d.ts +8 -0
  110. package/build/esm/packages/phoenix/src/global_constants.js +11 -0
  111. package/build/esm/packages/phoenix/src/global_constants.js.map +1 -0
  112. package/build/esm/packages/phoenix/src/index.d.ts +6 -1
  113. package/build/esm/packages/phoenix/src/index.js +7 -2
  114. package/build/esm/packages/phoenix/src/index.js.map +1 -1
  115. package/package.json +1 -1
  116. package/build/cjs/packages/phoenix/src/components/modal/modal_backdrop.js +0 -66
  117. package/build/esm/packages/phoenix/src/components/modal/modal_backdrop.d.ts +0 -12
  118. package/build/esm/packages/phoenix/src/components/modal/modal_backdrop.js +0 -64
@@ -4,7 +4,9 @@ import { property } from 'lit/decorators';
4
4
  import { PhoenixLightLitElement } from '../../core/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
- import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_EVENTS, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME } from './dropdown_constants.js';
7
+ import { BACKDROP_EVENTS } from '../backdrop/backdrop_constants.js';
8
+ import { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_CONTENT_SHOW, DROPDOWN_EVENTS, DROPDOWN_CONTENT_HIDE, DROPDOWN_CONTENT_NAME, DROPDOWN_TOGGLER_NAME, DROPDOWN_CONTAINER_NAME } from './dropdown_constants.js';
9
+ import { BREAKPOINTS } from '../../global_constants.js';
8
10
  import { CLICK_OUTSIDE_CONTROLLER_MESSAGES } from '../../controllers/click_outside_controller/click_outside_controller_messages.js';
9
11
  import { ClickOutsideController } from '../../controllers/click_outside_controller/click_outside_controller.js';
10
12
  import { DIRECTIONS } from '../../controllers/relative_position_controller/relative_position_controller_constants.js';
@@ -17,27 +19,92 @@ let HDropdown = class HDropdown extends PhoenixLightLitElement {
17
19
  this.direction = DIRECTIONS.bottomCenter;
18
20
  this.toggleOnHover = false;
19
21
  this.name = '';
22
+ this.transition = 'direction';
20
23
  this.portalTarget = DEFAULT_DROPDOWN_PORTAL_NAME;
21
24
  this.toggle = () => {
22
25
  this.opened ? this.hide() : this.show();
23
26
  };
24
- this.show = () => {
25
- this.opened = true;
27
+ this.show = async () => {
28
+ return new Promise((resolve) => {
29
+ var _a;
30
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.add(DROPDOWN_CONTENT_VISIBLE_CLASS, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`);
31
+ this.opened = true;
32
+ window.requestAnimationFrame(() => {
33
+ setTimeout(() => {
34
+ var _a;
35
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.add(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
36
+ }, 0);
37
+ const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
38
+ setTimeout(() => {
39
+ var _a;
40
+ this._dispatchShowDropdownEvent();
41
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_SHOW}-${this.transition}-start`, `${DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
42
+ resolve();
43
+ }, transitionDuration);
44
+ });
45
+ });
46
+ };
47
+ this._dispatchShowDropdownEvent = () => {
26
48
  const showDropdownEvent = new Event(DROPDOWN_EVENTS.show, {
27
49
  bubbles: true
28
50
  });
29
51
  this.dispatchEvent(showDropdownEvent);
52
+ if (window.innerWidth >= BREAKPOINTS.xs)
53
+ return;
54
+ const showBackdropEvent = new Event(BACKDROP_EVENTS.show, {
55
+ bubbles: true
56
+ });
57
+ document.dispatchEvent(showBackdropEvent);
30
58
  };
31
- this.hide = () => {
32
- this.opened = false;
59
+ this.hide = async () => new Promise((resolve) => {
60
+ const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
61
+ window.requestAnimationFrame(() => {
62
+ var _a, _b;
63
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_HIDE}-${this.transition}-start`);
64
+ (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(`${DROPDOWN_CONTENT_HIDE}-${this.transition}-end`);
65
+ setTimeout(() => {
66
+ var _a;
67
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${DROPDOWN_CONTENT_HIDE}-${this.transition}-start`, `${DROPDOWN_CONTENT_HIDE}-${this.transition}-end`);
68
+ this.opened = false;
69
+ this._dispatchHideDropdownEvent();
70
+ resolve();
71
+ }, transitionDuration);
72
+ });
73
+ });
74
+ this._dispatchHideDropdownEvent = () => {
33
75
  const hideDropdownEvent = new Event(DROPDOWN_EVENTS.hide, {
34
76
  bubbles: true
35
77
  });
36
78
  this.dispatchEvent(hideDropdownEvent);
79
+ if (window.innerWidth >= BREAKPOINTS.xs)
80
+ return;
81
+ const hideBackdropEvent = new Event(BACKDROP_EVENTS.hide, {
82
+ bubbles: true
83
+ });
84
+ document.dispatchEvent(hideBackdropEvent);
85
+ };
86
+ this._hoverToggle = async (ev) => {
87
+ if (window.innerWidth < BREAKPOINTS.xs)
88
+ return;
89
+ if (!ev.target) {
90
+ await this.hide();
91
+ return;
92
+ }
93
+ const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
94
+ if (isHoveredWithinDropdown && !this.opened) {
95
+ await this.show();
96
+ return;
97
+ }
98
+ if (!isHoveredWithinDropdown && this.opened) {
99
+ await this.hide();
100
+ return;
101
+ }
37
102
  };
38
103
  this._positionDropdownContent = () => {
39
104
  requestAnimationFrame(() => {
40
- this.opened && this._positionController.position();
105
+ this.opened && window.innerWidth < BREAKPOINTS.xs
106
+ ? this._positionController.disableRelativePositioning()
107
+ : this._positionController.position();
41
108
  });
42
109
  };
43
110
  }
@@ -48,12 +115,17 @@ let HDropdown = class HDropdown extends PhoenixLightLitElement {
48
115
  this.$dropdownContent = this.querySelector(DROPDOWN_CONTENT_NAME);
49
116
  if (!this.$dropdownToggler)
50
117
  this.$dropdownToggler = this.querySelector(DROPDOWN_TOGGLER_NAME);
118
+ const $nestedDropdown = this.$dropdownContent.querySelector(DROPDOWN_CONTAINER_NAME);
119
+ if ($nestedDropdown && !this.$nestedDropdownContentElements)
120
+ this.$nestedDropdownContentElements = [...$nestedDropdown.querySelectorAll(DROPDOWN_CONTENT_NAME)];
51
121
  if (!this._positionController)
52
122
  this._positionController = new RelativePositionController({
53
123
  host: this,
54
124
  direction: this.direction,
55
125
  relativeElement: this.$dropdownToggler,
56
- elementToPosition: this.$dropdownContent
126
+ elementToPosition: this.$dropdownContent,
127
+ shouldDisablePositioning: () => window.innerWidth < BREAKPOINTS.xs,
128
+ portalElementsNames: [DROPDOWN_CONTENT_NAME]
57
129
  });
58
130
  if (!this._clickOutsideController)
59
131
  this._clickOutsideController = new ClickOutsideController({
@@ -61,16 +133,10 @@ let HDropdown = class HDropdown extends PhoenixLightLitElement {
61
133
  container: this,
62
134
  name: this.name
63
135
  });
64
- this._setupListeners();
65
- }
66
- _setupListeners() {
67
- var _a, _b, _c;
68
- this.addEventListener(CLICK_OUTSIDE_CONTROLLER_MESSAGES.clickedOutside, this._handleClickOutside);
69
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener('toggle', this.toggle);
70
- if (this.toggleOnHover) {
71
- (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.addEventListener('mouseenter', this.show);
72
- (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.addEventListener('mouseleave', this.hide);
136
+ if (this.toggleOnHover && !this.$hoverableDropdownContentElements) {
137
+ this.$hoverableDropdownContentElements = [...this.querySelectorAll(DROPDOWN_CONTENT_NAME)];
73
138
  }
139
+ this._setupListeners();
74
140
  }
75
141
  _appendDropdownPortal() {
76
142
  const $dropdownPortalTarget = document.querySelector(`[name="${DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
@@ -80,22 +146,43 @@ let HDropdown = class HDropdown extends PhoenixLightLitElement {
80
146
  document.body.appendChild($portalTarget);
81
147
  }
82
148
  }
83
- _handleClickOutside() {
149
+ _setupListeners() {
84
150
  var _a;
151
+ this.addEventListener(CLICK_OUTSIDE_CONTROLLER_MESSAGES.clickedOutside, this._handleClickOutside);
152
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener('toggle', this.toggle);
153
+ if (this.toggleOnHover)
154
+ document.addEventListener('mouseover', this._hoverToggle);
155
+ }
156
+ _handleClickOutside(ev) {
157
+ var _a, _b, _c;
85
158
  if (!this.opened)
86
159
  return;
87
- this.hide();
88
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
160
+ const target = ev.detail.target;
161
+ const clickedWithinNestedDropdown = (_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((element) => element.contains(target));
162
+ const shouldHideElements = !((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.contains(target)) && !this.contains(target) && !clickedWithinNestedDropdown;
163
+ if (shouldHideElements) {
164
+ this.hide();
165
+ (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-expanded', 'false');
166
+ }
167
+ }
168
+ _isHoveredWithinDropdown(element) {
169
+ const $closestDropdownContent = element.closest(DROPDOWN_CONTENT_NAME);
170
+ const isDescendantOfDropdown = element.closest(`${DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null;
171
+ const isDescendantOfContent = this.$dropdownContent &&
172
+ $closestDropdownContent !== null &&
173
+ !!this.$hoverableDropdownContentElements.find((content) => content.name === $closestDropdownContent.name);
174
+ return isDescendantOfDropdown || isDescendantOfContent || element === this || element === this.$dropdownContent;
89
175
  }
90
176
  disconnectedCallback() {
91
- var _a, _b, _c;
177
+ var _a;
92
178
  super.disconnectedCallback();
93
179
  (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.removeEventListener('toggle', this.toggle);
94
- if (this.toggleOnHover) {
95
- (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.removeEventListener('mouseenter', this.show);
96
- (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.removeEventListener('mouseleave', this.hide);
180
+ if (this.toggleOnHover)
181
+ document.removeEventListener('mouseover', this._hoverToggle);
182
+ if (this.opened) {
183
+ this.opened = false;
184
+ this._dispatchHideDropdownEvent();
97
185
  }
98
- this.opened = false;
99
186
  }
100
187
  render() {
101
188
  super.render();
@@ -123,6 +210,10 @@ __decorate([
123
210
  property({ type: String }),
124
211
  __metadata("design:type", Object)
125
212
  ], HDropdown.prototype, "name", void 0);
213
+ __decorate([
214
+ property({ type: String }),
215
+ __metadata("design:type", Object)
216
+ ], HDropdown.prototype, "transition", void 0);
126
217
  __decorate([
127
218
  property({ type: String }),
128
219
  __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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -10,3 +10,8 @@ export declare const DROPDOWN_EVENTS: {
10
10
  export declare const DROPDOWN_OPENED_ATTRIBUTE_NAME = "opened";
11
11
  export declare const DROPDOWN_CLASS = "dropdown";
12
12
  export declare const DROPDOWN_CONTENT_CLASS: string;
13
+ export declare const DROPDOWN_TOGGLER_CLASS: string;
14
+ export declare const DROPDOWN_BACKDROP_CLASS: string;
15
+ export declare const DROPDOWN_CONTENT_VISIBLE_CLASS: string;
16
+ export declare const DROPDOWN_CONTENT_SHOW: string;
17
+ export declare const DROPDOWN_CONTENT_HIDE: string;
@@ -10,7 +10,11 @@ const DROPDOWN_EVENTS = {
10
10
  };
11
11
  const DROPDOWN_OPENED_ATTRIBUTE_NAME = 'opened';
12
12
  const DROPDOWN_CLASS = 'dropdown';
13
- const DROPDOWN_CONTENT_CLASS = `${DROPDOWN_CLASS}__content`;
13
+ const DROPDOWN_CONTENT_CLASS = `${DROPDOWN_CLASS}__content`;
14
+ const DROPDOWN_TOGGLER_CLASS = `${DROPDOWN_CLASS}__toggler`;
15
+ const DROPDOWN_CONTENT_VISIBLE_CLASS = `${DROPDOWN_CONTENT_CLASS}_visible`;
16
+ const DROPDOWN_CONTENT_SHOW = `${DROPDOWN_CONTENT_CLASS}_show`;
17
+ const DROPDOWN_CONTENT_HIDE = `${DROPDOWN_CONTENT_CLASS}_hide`;
14
18
 
15
- export { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CLASS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_CLASS, DROPDOWN_CONTENT_NAME, DROPDOWN_EVENTS, DROPDOWN_NAME, DROPDOWN_OPENED_ATTRIBUTE_NAME, DROPDOWN_TOGGLER_NAME };
19
+ export { DEFAULT_DROPDOWN_PORTAL_NAME, DROPDOWN_CLASS, DROPDOWN_CONTAINER_NAME, DROPDOWN_CONTENT_CLASS, DROPDOWN_CONTENT_HIDE, DROPDOWN_CONTENT_NAME, DROPDOWN_CONTENT_SHOW, DROPDOWN_CONTENT_VISIBLE_CLASS, DROPDOWN_EVENTS, DROPDOWN_NAME, DROPDOWN_OPENED_ATTRIBUTE_NAME, DROPDOWN_TOGGLER_CLASS, DROPDOWN_TOGGLER_NAME };
16
20
  //# sourceMappingURL=dropdown_constants.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;"}
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;"}
@@ -1,6 +1,7 @@
1
- import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element";
2
1
  import { TemplateResult } from 'lit';
2
+ import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element";
3
3
  export declare class HDropdownContent extends PhoenixLightLitElement {
4
+ name: string;
4
5
  constructor();
5
6
  protected render(): TemplateResult;
6
7
  }
@@ -1,5 +1,6 @@
1
1
  import { __decorate, __metadata } from '../../../../../external/tslib/tslib.es6.js';
2
2
  import { html } from 'lit';
3
+ import { property } from 'lit/decorators';
3
4
  import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element.js';
4
5
  import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
5
6
  import { DROPDOWN_CONTENT_CLASS } from './dropdown_constants.js';
@@ -7,6 +8,7 @@ import { DROPDOWN_CONTENT_CLASS } from './dropdown_constants.js';
7
8
  let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
8
9
  constructor() {
9
10
  super();
11
+ this.name = '';
10
12
  this.setAttribute('role', 'menu');
11
13
  this.slot = this.hasAttribute('slot') ? this.slot : 'content';
12
14
  this.className = `${DROPDOWN_CONTENT_CLASS} ${this.className}`;
@@ -19,6 +21,10 @@ let HDropdownContent = class HDropdownContent extends PhoenixLightLitElement {
19
21
  return html ` <div role="dialog">${this.getSlot('content')}</div> `;
20
22
  }
21
23
  };
24
+ __decorate([
25
+ property({ type: String }),
26
+ __metadata("design:type", Object)
27
+ ], HDropdownContent.prototype, "name", void 0);
22
28
  HDropdownContent = __decorate([
23
29
  phoenixCustomElement('h-dropdown-content'),
24
30
  __metadata("design:paramtypes", [])
@@ -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;"}
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;"}
@@ -3,7 +3,7 @@ import { property, state } from 'lit/decorators';
3
3
  import { PhoenixLightLitElement } from '../../core/phoenix_light_lit_element.js';
4
4
  import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_element.js';
5
5
  import { BtnController } from '../../controllers/btn_controller.js';
6
- import { DROPDOWN_OPENED_ATTRIBUTE_NAME } from './dropdown_constants.js';
6
+ import { DROPDOWN_TOGGLER_CLASS, DROPDOWN_OPENED_ATTRIBUTE_NAME } from './dropdown_constants.js';
7
7
  import { ToggleElementAriaController } from '../../controllers/toggle_element_aria_controller/toggle_element_aria_controller.js';
8
8
 
9
9
  let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
@@ -19,6 +19,7 @@ let HDropdownToggler = class HDropdownToggler extends PhoenixLightLitElement {
19
19
  this._toggleElementAriaController.toggleAriaExpandedAttribute();
20
20
  };
21
21
  this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
22
+ this.className = `${DROPDOWN_TOGGLER_CLASS} ${this.className}`;
22
23
  }
23
24
  connectedCallback() {
24
25
  super.connectedCallback();
@@ -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;"}
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;"}
@@ -1,4 +1,4 @@
1
- import { TemplateResult, PropertyValues } from 'lit';
1
+ import { PropertyValues, TemplateResult } from 'lit';
2
2
  import { PhoenixLightLitElement } from "../../core/phoenix_light_lit_element";
3
3
  export declare class HModal extends PhoenixLightLitElement {
4
4
  opened: boolean;
@@ -13,7 +13,6 @@ export declare class HModal extends PhoenixLightLitElement {
13
13
  private _propsChangeStrategies;
14
14
  private static openModals;
15
15
  private static _appendModalsPortal;
16
- private static _appendModalsBackdrop;
17
16
  static isSomeModalOpen(): boolean;
18
17
  constructor();
19
18
  connectedCallback(): void;
@@ -6,6 +6,7 @@ import { phoenixCustomElement } from '../../core/decorators/phoenix_custom_eleme
6
6
  import { PORTAL_TARGET_NAME_PROP } from '../portal/portal_constants.js';
7
7
  import { MODAL_OPENED_PROP, FOCUSABLE_ELEMENTS_WITHIN_MODAL, MODALS_PORTAL_NAME, MODAL_EVENTS } from './modal_constants.js';
8
8
  import { createRef as e, ref as n } from '../../../../../external/lit-html/directives/ref.js';
9
+ import { BACKDROP_EVENTS } from '../backdrop/backdrop_constants.js';
9
10
 
10
11
  var HModal_1;
11
12
  let HModal = HModal_1 = class HModal extends PhoenixLightLitElement {
@@ -89,26 +90,21 @@ let HModal = HModal_1 = class HModal extends PhoenixLightLitElement {
89
90
  document.body.appendChild($portalTarget);
90
91
  }
91
92
  }
92
- static _appendModalsBackdrop() {
93
- const $modalsBackdrop = document.querySelector('h-modal-backdrop');
94
- if (!$modalsBackdrop) {
95
- const $backdrop = document.createElement('h-modal-backdrop');
96
- document.body.appendChild($backdrop);
97
- }
98
- }
99
93
  static isSomeModalOpen() {
100
94
  return HModal_1.openModals.some((modal) => modal.opened);
101
95
  }
102
96
  connectedCallback() {
103
97
  super.connectedCallback();
104
98
  HModal_1._appendModalsPortal();
105
- HModal_1._appendModalsBackdrop();
106
99
  document.addEventListener('keydown', this._keepFocusWithinModal);
107
100
  document.addEventListener(MODAL_EVENTS.close, this._handleCloseFromCloseComponent);
108
101
  }
109
102
  disconnectedCallback() {
110
103
  super.disconnectedCallback();
111
- this[MODAL_OPENED_PROP] = false;
104
+ if (this[MODAL_OPENED_PROP]) {
105
+ this[MODAL_OPENED_PROP] = false;
106
+ this._dispatchModalClosedEvent();
107
+ }
112
108
  document.removeEventListener(MODAL_EVENTS.close, this._handleCloseFromCloseComponent);
113
109
  document.removeEventListener('keydown', this._bindCloseOnEsc);
114
110
  }
@@ -135,7 +131,6 @@ let HModal = HModal_1 = class HModal extends PhoenixLightLitElement {
135
131
  setTimeout(() => {
136
132
  var _a;
137
133
  this[MODAL_OPENED_PROP] = true;
138
- this._dispatchModalOpenedEvent();
139
134
  (_a = this._contentRef.value) === null || _a === void 0 ? void 0 : _a.classList.remove(`modal_show-${this.transition}-start`, `modal_show-${this.transition}-end`);
140
135
  resolve();
141
136
  }, transitionDuration);
@@ -147,6 +142,10 @@ let HModal = HModal_1 = class HModal extends PhoenixLightLitElement {
147
142
  bubbles: true
148
143
  });
149
144
  this.dispatchEvent(openModalEvent);
145
+ const openBackdropEvent = new CustomEvent(BACKDROP_EVENTS.show, {
146
+ bubbles: true
147
+ });
148
+ document.dispatchEvent(openBackdropEvent);
150
149
  }
151
150
  async close() {
152
151
  return new Promise((resolve) => {
@@ -170,6 +169,10 @@ let HModal = HModal_1 = class HModal extends PhoenixLightLitElement {
170
169
  bubbles: true
171
170
  });
172
171
  this.dispatchEvent(closeModalEvent);
172
+ const closeBackdropEvent = new CustomEvent(BACKDROP_EVENTS.hide, {
173
+ bubbles: true
174
+ });
175
+ document.dispatchEvent(closeBackdropEvent);
173
176
  }
174
177
  render() {
175
178
  return html `
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,uCAAuC,4CAAgD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oDAAwD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,yCAAyC,oDAAwD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -15,8 +15,10 @@ class ClickOutsideController {
15
15
  name: this._name
16
16
  }
17
17
  });
18
- const { target } = ev;
19
- if (target.contains(__classPrivateFieldGet(this, _ClickOutsideController_container, "f"))) {
18
+ const target = ev.target;
19
+ const isContainerWithinTarget = target.contains(__classPrivateFieldGet(this, _ClickOutsideController_container, "f")) && target !== __classPrivateFieldGet(this, _ClickOutsideController_container, "f");
20
+ const isTargetWithinContainer = __classPrivateFieldGet(this, _ClickOutsideController_container, "f").contains(target);
21
+ if (isContainerWithinTarget || !isTargetWithinContainer) {
20
22
  __classPrivateFieldGet(this, _ClickOutsideController_host, "f").dispatchEvent(clickedOutsideEvent);
21
23
  }
22
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -4,3 +4,7 @@ export declare type TClickOutsideControllerProps = {
4
4
  container: HTMLElement;
5
5
  name?: string;
6
6
  };
7
+ export declare type TClickOutsideEvent = {
8
+ target: EventTarget | null;
9
+ name?: string;
10
+ };
@@ -25,11 +25,11 @@ class PositionCalculator {
25
25
  };
26
26
  }
27
27
  _canFitTopSide() {
28
- const elementTop = __classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").top - __classPrivateFieldGet(this, _PositionCalculator_nearestNonStaticElementFromElementToPositionRect, "f").top - __classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
28
+ const elementTop = __classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").top - __classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
29
29
  return elementTop > __classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").top && elementTop > 0;
30
30
  }
31
31
  _canFitBottomSide() {
32
- const elementBottom = __classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").bottom - __classPrivateFieldGet(this, _PositionCalculator_nearestNonStaticElementFromElementToPositionRect, "f").top + __classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
32
+ const elementBottom = __classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").bottom + __classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
33
33
  return elementBottom < __classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").bottom && elementBottom < window.innerHeight;
34
34
  }
35
35
  _calculateSidePosition(side) {
@@ -1,7 +1,7 @@
1
1
  import { IRelativePositionController, TRelativePositionControllerConstructorOptions } from "./relative_position_controller_types";
2
2
  export declare class RelativePositionController implements IRelativePositionController {
3
3
  #private;
4
- constructor({ host, container, direction, relativeElement, elementToPosition }: TRelativePositionControllerConstructorOptions);
4
+ constructor({ host, container, direction, relativeElement, elementToPosition, shouldDisablePositioning, portalElementsNames }: TRelativePositionControllerConstructorOptions);
5
5
  hostConnected(): void;
6
6
  hostDisconnected(): void;
7
7
  position(): void;
@@ -9,4 +9,5 @@ export declare class RelativePositionController implements IRelativePositionCont
9
9
  private _findContainer;
10
10
  private _findParentBasedOnStyle;
11
11
  private _setElementPosition;
12
+ disableRelativePositioning(): void;
12
13
  }
@@ -1,12 +1,12 @@
1
- import { __classPrivateFieldSet, __classPrivateFieldGet } from '../../../../../external/tslib/tslib.es6.js';
1
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from '../../../../../external/tslib/tslib.es6.js';
2
2
  import 'lit';
3
3
  import { DEFAULT_THROTTLE_WAIT_TIME, DEFAULT_SCROLL_THROTTLE_WAIT_TIME, OVERFLOW_SCROLL, OVERFLOW_AUTO, NON_STATIC_POSITIONS } from './relative_position_controller_constants.js';
4
4
  import { PositionCalculator } from './relative_position_calculator.js';
5
5
  import lodash from '../../../../../external/lodash/lodash.js';
6
6
 
7
- var _RelativePositionController_host, _RelativePositionController_container, _RelativePositionController_nearestNonStaticElementFromElementToPosition, _RelativePositionController_direction, _RelativePositionController_nearestScrollableElement, _RelativePositionController_relativeElement, _RelativePositionController_elementToPosition, _RelativePositionController_throttledReposition, _RelativePositionController_throttledRepositionForScroll;
7
+ var _RelativePositionController_host, _RelativePositionController_container, _RelativePositionController_nearestNonStaticElementFromElementToPosition, _RelativePositionController_direction, _RelativePositionController_nearestScrollableElement, _RelativePositionController_relativeElement, _RelativePositionController_elementToPosition, _RelativePositionController_shouldDisablePositioning, _RelativePositionController_portalElementsNames, _RelativePositionController_throttledReposition, _RelativePositionController_throttledRepositionForScroll;
8
8
  class RelativePositionController {
9
- constructor({ host, container, direction, relativeElement, elementToPosition }) {
9
+ constructor({ host, container, direction, relativeElement, elementToPosition, shouldDisablePositioning, portalElementsNames = [] }) {
10
10
  _RelativePositionController_host.set(this, void 0);
11
11
  _RelativePositionController_container.set(this, void 0);
12
12
  _RelativePositionController_nearestNonStaticElementFromElementToPosition.set(this, void 0);
@@ -14,30 +14,42 @@ class RelativePositionController {
14
14
  _RelativePositionController_nearestScrollableElement.set(this, void 0);
15
15
  _RelativePositionController_relativeElement.set(this, void 0);
16
16
  _RelativePositionController_elementToPosition.set(this, void 0);
17
+ _RelativePositionController_shouldDisablePositioning.set(this, void 0);
18
+ _RelativePositionController_portalElementsNames.set(this, void 0);
17
19
  _RelativePositionController_throttledReposition.set(this, lodash.throttle(() => {
18
- this.position();
20
+ if (!__classPrivateFieldGet(this, _RelativePositionController_shouldDisablePositioning, "f")) {
21
+ this.position();
22
+ return;
23
+ }
24
+ __classPrivateFieldGet(this, _RelativePositionController_shouldDisablePositioning, "f").call(this) ? this.disableRelativePositioning() : this.position();
19
25
  }, DEFAULT_THROTTLE_WAIT_TIME));
20
26
  _RelativePositionController_throttledRepositionForScroll.set(this, lodash.throttle(() => {
21
- this.position();
27
+ if (!__classPrivateFieldGet(this, _RelativePositionController_shouldDisablePositioning, "f")) {
28
+ this.position();
29
+ return;
30
+ }
31
+ __classPrivateFieldGet(this, _RelativePositionController_shouldDisablePositioning, "f").call(this) ? this.disableRelativePositioning() : this.position();
22
32
  }, DEFAULT_SCROLL_THROTTLE_WAIT_TIME));
23
33
  __classPrivateFieldSet(this, _RelativePositionController_host, host, "f");
24
34
  __classPrivateFieldSet(this, _RelativePositionController_container, container, "f");
25
35
  __classPrivateFieldSet(this, _RelativePositionController_direction, direction, "f");
26
36
  __classPrivateFieldSet(this, _RelativePositionController_relativeElement, relativeElement, "f");
27
37
  __classPrivateFieldSet(this, _RelativePositionController_elementToPosition, elementToPosition, "f");
38
+ __classPrivateFieldSet(this, _RelativePositionController_shouldDisablePositioning, shouldDisablePositioning, "f");
39
+ __classPrivateFieldSet(this, _RelativePositionController_portalElementsNames, portalElementsNames, "f");
28
40
  __classPrivateFieldGet(this, _RelativePositionController_host, "f").addController(this);
29
41
  }
30
42
  hostConnected() {
31
- __classPrivateFieldGet(this, _RelativePositionController_host, "f").addEventListener('resize', __classPrivateFieldGet(this, _RelativePositionController_throttledReposition, "f"));
32
43
  if (!__classPrivateFieldGet(this, _RelativePositionController_relativeElement, "f"))
33
44
  return;
34
45
  if (!__classPrivateFieldGet(this, _RelativePositionController_nearestScrollableElement, "f")) {
35
46
  __classPrivateFieldSet(this, _RelativePositionController_nearestScrollableElement, this._findNearestScrollableElement(__classPrivateFieldGet(this, _RelativePositionController_relativeElement, "f")), "f");
36
47
  }
48
+ window.addEventListener('resize', __classPrivateFieldGet(this, _RelativePositionController_throttledReposition, "f"));
37
49
  __classPrivateFieldGet(this, _RelativePositionController_nearestScrollableElement, "f").addEventListener('scroll', __classPrivateFieldGet(this, _RelativePositionController_throttledRepositionForScroll, "f"));
38
50
  }
39
51
  hostDisconnected() {
40
- __classPrivateFieldGet(this, _RelativePositionController_host, "f").removeEventListener('resize', __classPrivateFieldGet(this, _RelativePositionController_throttledReposition, "f"));
52
+ window.removeEventListener('resize', __classPrivateFieldGet(this, _RelativePositionController_throttledReposition, "f"));
41
53
  if (__classPrivateFieldGet(this, _RelativePositionController_nearestScrollableElement, "f"))
42
54
  __classPrivateFieldGet(this, _RelativePositionController_nearestScrollableElement, "f").removeEventListener('scroll', __classPrivateFieldGet(this, _RelativePositionController_throttledRepositionForScroll, "f"));
43
55
  }
@@ -58,7 +70,8 @@ class RelativePositionController {
58
70
  }
59
71
  _findNearestScrollableElement(element) {
60
72
  const overflowArray = ['overflow', 'overflowY', 'overflowX'];
61
- return this._findParentBasedOnStyle(element, overflowArray, (overflowArray) => overflowArray.includes(OVERFLOW_SCROLL) || overflowArray.includes(OVERFLOW_AUTO));
73
+ const scrollableElement = this._findParentBasedOnStyle(element, overflowArray, (overflowArray) => overflowArray.includes(OVERFLOW_SCROLL) || overflowArray.includes(OVERFLOW_AUTO));
74
+ return scrollableElement !== document.body ? scrollableElement : window;
62
75
  }
63
76
  _findContainer(element) {
64
77
  return this._findParentBasedOnStyle(element, ['position'], ([position]) => NON_STATIC_POSITIONS.includes(position));
@@ -70,7 +83,7 @@ class RelativePositionController {
70
83
  const parentStyles = styles.reduce((styles, currentStyle) => {
71
84
  return [...styles, window.getComputedStyle(parent)[currentStyle]];
72
85
  }, []);
73
- if (callback(parentStyles) || parent === document.body)
86
+ if ((callback(parentStyles) || parent === document.body) && !__classPrivateFieldGet(this, _RelativePositionController_portalElementsNames, "f").includes(parent.localName))
74
87
  return parent;
75
88
  return this._findParentBasedOnStyle(parent, styles, callback);
76
89
  }
@@ -86,8 +99,15 @@ class RelativePositionController {
86
99
  elementStyle.left = '0';
87
100
  __classPrivateFieldGet(this, _RelativePositionController_elementToPosition, "f").style.transform = `translate3d(${position.left}px, ${position.top}px, 0)`;
88
101
  }
102
+ disableRelativePositioning() {
103
+ if (!__classPrivateFieldGet(this, _RelativePositionController_elementToPosition, "f"))
104
+ return;
105
+ const { style: elementStyle } = __classPrivateFieldGet(this, _RelativePositionController_elementToPosition, "f");
106
+ elementStyle.position = '';
107
+ elementStyle.transform = '';
108
+ }
89
109
  }
90
- _RelativePositionController_host = new WeakMap(), _RelativePositionController_container = new WeakMap(), _RelativePositionController_nearestNonStaticElementFromElementToPosition = new WeakMap(), _RelativePositionController_direction = new WeakMap(), _RelativePositionController_nearestScrollableElement = new WeakMap(), _RelativePositionController_relativeElement = new WeakMap(), _RelativePositionController_elementToPosition = new WeakMap(), _RelativePositionController_throttledReposition = new WeakMap(), _RelativePositionController_throttledRepositionForScroll = new WeakMap();
110
+ _RelativePositionController_host = new WeakMap(), _RelativePositionController_container = new WeakMap(), _RelativePositionController_nearestNonStaticElementFromElementToPosition = new WeakMap(), _RelativePositionController_direction = new WeakMap(), _RelativePositionController_nearestScrollableElement = new WeakMap(), _RelativePositionController_relativeElement = new WeakMap(), _RelativePositionController_elementToPosition = new WeakMap(), _RelativePositionController_shouldDisablePositioning = new WeakMap(), _RelativePositionController_portalElementsNames = new WeakMap(), _RelativePositionController_throttledReposition = new WeakMap(), _RelativePositionController_throttledRepositionForScroll = new WeakMap();
91
111
 
92
112
  export { RelativePositionController };
93
113
  //# sourceMappingURL=relative_position_controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA,mBAAmB,0CAA8C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,+DAA+D,4CAAgD;AAC/G;AACA;AACA;AACA,mBAAmB,0CAA8C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -10,6 +10,8 @@ export declare type TRelativePositionControllerConstructorOptions = {
10
10
  container?: HTMLElement;
11
11
  relativeElement: HTMLElement;
12
12
  elementToPosition: HTMLElement;
13
+ shouldDisablePositioning?: () => boolean;
14
+ portalElementsNames?: string[];
13
15
  };
14
16
  export interface IRelativePositionController extends ReactiveController {
15
17
  position(): void;
@@ -0,0 +1,11 @@
1
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
2
+ export declare class TransitionController implements ReactiveController {
3
+ private host;
4
+ private _transitionDuration;
5
+ private _transitionName;
6
+ constructor(host: ReactiveControllerHost & HTMLElement, transitionName: string);
7
+ hostConnected(): void;
8
+ hostDisconnected(): void;
9
+ show(callback?: () => void): void;
10
+ hide(callback?: () => void): void;
11
+ }