@shoper/phoenix_design_system 0.11.3-2 → 0.11.3-3

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 (61) hide show
  1. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop.js +88 -0
  2. package/build/cjs/packages/phoenix/src/components/{modal/modal_backdrop.js.map → backdrop/backdrop.js.map} +1 -1
  3. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop_constants.js +17 -0
  4. package/build/cjs/packages/phoenix/src/components/backdrop/backdrop_constants.js.map +1 -0
  5. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js +134 -27
  6. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  7. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_constants.js +15 -7
  8. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_constants.js.map +1 -1
  9. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js +7 -1
  10. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  11. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js +1 -0
  12. package/build/cjs/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  13. package/build/cjs/packages/phoenix/src/components/modal/modal.js +11 -10
  14. package/build/cjs/packages/phoenix/src/components/modal/modal.js.map +1 -1
  15. package/build/cjs/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js +4 -2
  16. package/build/cjs/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js.map +1 -1
  17. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +4 -4
  18. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +29 -9
  19. package/build/cjs/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  20. package/build/cjs/packages/phoenix/src/core/context/context_provider_controller.js +1 -1
  21. package/build/cjs/packages/phoenix/src/global_constants.js +15 -0
  22. package/build/cjs/packages/phoenix/src/global_constants.js.map +1 -0
  23. package/build/cjs/packages/phoenix/src/index.js +10 -10
  24. package/build/esm/packages/phoenix/src/components/backdrop/backdrop.d.ts +16 -0
  25. package/build/esm/packages/phoenix/src/components/backdrop/backdrop.js +86 -0
  26. package/build/esm/packages/phoenix/src/components/{modal/modal_backdrop.js.map → backdrop/backdrop.js.map} +1 -1
  27. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.d.ts +7 -0
  28. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.js +11 -0
  29. package/build/esm/packages/phoenix/src/components/backdrop/backdrop_constants.js.map +1 -0
  30. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.d.ts +11 -3
  31. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js +135 -28
  32. package/build/esm/packages/phoenix/src/components/dropdown/dropdown.js.map +1 -1
  33. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.d.ts +6 -2
  34. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.js +10 -6
  35. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_constants.js.map +1 -1
  36. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.d.ts +2 -1
  37. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js +8 -2
  38. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_content.js.map +1 -1
  39. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js +2 -1
  40. package/build/esm/packages/phoenix/src/components/dropdown/dropdown_toggler.js.map +1 -1
  41. package/build/esm/packages/phoenix/src/components/modal/modal.d.ts +1 -2
  42. package/build/esm/packages/phoenix/src/components/modal/modal.js +11 -10
  43. package/build/esm/packages/phoenix/src/components/modal/modal.js.map +1 -1
  44. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js +4 -2
  45. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller.js.map +1 -1
  46. package/build/esm/packages/phoenix/src/controllers/click_outside_controller/click_outside_controller_types.d.ts +4 -0
  47. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_calculator.js +4 -4
  48. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.d.ts +2 -1
  49. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js +30 -10
  50. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller.js.map +1 -1
  51. package/build/esm/packages/phoenix/src/controllers/relative_position_controller/relative_position_controller_types.d.ts +2 -0
  52. package/build/esm/packages/phoenix/src/core/context/context_provider_controller.js +1 -1
  53. package/build/esm/packages/phoenix/src/global_constants.d.ts +8 -0
  54. package/build/esm/packages/phoenix/src/global_constants.js +11 -0
  55. package/build/esm/packages/phoenix/src/global_constants.js.map +1 -0
  56. package/build/esm/packages/phoenix/src/index.d.ts +1 -1
  57. package/build/esm/packages/phoenix/src/index.js +2 -2
  58. package/package.json +1 -1
  59. package/build/cjs/packages/phoenix/src/components/modal/modal_backdrop.js +0 -66
  60. package/build/esm/packages/phoenix/src/components/modal/modal_backdrop.d.ts +0 -12
  61. package/build/esm/packages/phoenix/src/components/modal/modal_backdrop.js +0 -64
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
6
+ var lit = require('lit');
7
+ var decorators = require('lit/decorators');
8
+ var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element.js');
9
+ var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
10
+ var backdrop_constants = require('./backdrop_constants.js');
11
+
12
+ exports.HBackdrop = class HBackdrop extends phoenix_light_lit_element.PhoenixLightLitElement {
13
+ constructor() {
14
+ super();
15
+ this.visible = false;
16
+ this._backdropLayerCounter = 0;
17
+ this._appendBackdrop = () => {
18
+ const $backdrop = document.querySelector(backdrop_constants.BACKDROP_NAME);
19
+ if (!$backdrop) {
20
+ const $newBackdrop = document.createElement(backdrop_constants.BACKDROP_NAME);
21
+ document.body.appendChild($newBackdrop);
22
+ }
23
+ };
24
+ this._show = () => {
25
+ this._backdropLayerCounter += 1;
26
+ this.visible = true;
27
+ };
28
+ this._hide = () => {
29
+ this._backdropLayerCounter -= 1;
30
+ if (this._backdropLayerCounter > 0)
31
+ return;
32
+ if (this._backdropLayerCounter < 0)
33
+ this._backdropLayerCounter = 0;
34
+ this.visible = false;
35
+ };
36
+ this._dispatchBackdropClickedEvent = () => {
37
+ const backdropClickedEvent = new CustomEvent(backdrop_constants.BACKDROP_EVENTS.clicked, {
38
+ bubbles: true
39
+ });
40
+ document.dispatchEvent(backdropClickedEvent);
41
+ };
42
+ this._appendBackdrop();
43
+ document.addEventListener(backdrop_constants.BACKDROP_EVENTS.show, this._show);
44
+ document.addEventListener(backdrop_constants.BACKDROP_EVENTS.hide, this._hide);
45
+ }
46
+ disconnectedCallback() {
47
+ super.disconnectedCallback();
48
+ document.removeEventListener(backdrop_constants.BACKDROP_EVENTS.show, this._show);
49
+ document.removeEventListener(backdrop_constants.BACKDROP_EVENTS.hide, this._hide);
50
+ }
51
+ updated() {
52
+ if (this.visible) {
53
+ this._disableScrolling();
54
+ }
55
+ else {
56
+ this._enableScrolling();
57
+ }
58
+ }
59
+ _disableScrolling() {
60
+ document.body.style.overflow = 'hidden';
61
+ document.body.style.paddingRight = '15px';
62
+ }
63
+ _enableScrolling() {
64
+ document.body.style.removeProperty('overflow');
65
+ document.body.style.removeProperty('padding-right');
66
+ }
67
+ render() {
68
+ return lit.html ` <div
69
+ aria-hidden="true"
70
+ ?hidden="${!this.visible}"
71
+ @click="${this._dispatchBackdropClickedEvent}"
72
+ class="${backdrop_constants.BACKDROP_CSS_CLASS}"
73
+ ></div>`;
74
+ }
75
+ };
76
+ tslib_es6.__decorate([
77
+ decorators.property({ type: Boolean }),
78
+ tslib_es6.__metadata("design:type", Object)
79
+ ], exports.HBackdrop.prototype, "visible", void 0);
80
+ tslib_es6.__decorate([
81
+ decorators.state(),
82
+ tslib_es6.__metadata("design:type", Object)
83
+ ], exports.HBackdrop.prototype, "_backdropLayerCounter", void 0);
84
+ exports.HBackdrop = tslib_es6.__decorate([
85
+ phoenix_custom_element.phoenixCustomElement('h-backdrop'),
86
+ tslib_es6.__metadata("design:paramtypes", [])
87
+ ], exports.HBackdrop);
88
+ //# sourceMappingURL=backdrop.js.map
@@ -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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const BACKDROP_NAME = 'h-backdrop';
6
+ const BACKDROP_CSS_CLASS = 'backdrop';
7
+ const BACKDROP_EVENT_NAME = 'backdrop';
8
+ const BACKDROP_EVENTS = {
9
+ show: `${BACKDROP_EVENT_NAME}.show`,
10
+ hide: `${BACKDROP_EVENT_NAME}.hide`,
11
+ clicked: `${BACKDROP_EVENT_NAME}.clicked`
12
+ };
13
+
14
+ exports.BACKDROP_CSS_CLASS = BACKDROP_CSS_CLASS;
15
+ exports.BACKDROP_EVENTS = BACKDROP_EVENTS;
16
+ exports.BACKDROP_NAME = BACKDROP_NAME;
17
+ //# sourceMappingURL=backdrop_constants.js.map
@@ -0,0 +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;"}
@@ -8,56 +8,138 @@ var decorators = require('lit/decorators');
8
8
  var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element.js');
9
9
  var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
10
10
  var portal_constants = require('../portal/portal_constants.js');
11
+ var backdrop_constants = require('../backdrop/backdrop_constants.js');
11
12
  var dropdown_constants = require('./dropdown_constants.js');
13
+ var global_constants = require('../../global_constants.js');
12
14
  var click_outside_controller_messages = require('../../controllers/click_outside_controller/click_outside_controller_messages.js');
13
15
  var click_outside_controller = require('../../controllers/click_outside_controller/click_outside_controller.js');
14
16
  var relative_position_controller_constants = require('../../controllers/relative_position_controller/relative_position_controller_constants.js');
15
17
  var relative_position_controller = require('../../controllers/relative_position_controller/relative_position_controller.js');
16
18
 
17
- exports.HDropdown = class HDropdown extends phoenix_light_lit_element.PhoenixLightLitElement {
19
+ var HDropdown_1;
20
+ exports.HDropdown = HDropdown_1 = class HDropdown extends phoenix_light_lit_element.PhoenixLightLitElement {
18
21
  constructor() {
19
22
  super(...arguments);
20
23
  this.opened = false;
21
24
  this.direction = relative_position_controller_constants.DIRECTIONS.bottomCenter;
22
25
  this.toggleOnHover = false;
23
26
  this.name = '';
27
+ this.transition = 'direction';
24
28
  this.portalTarget = dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME;
25
29
  this.toggle = () => {
26
30
  this.opened ? this.hide() : this.show();
27
31
  };
28
- this.show = () => {
29
- this.opened = true;
32
+ this.show = async () => {
33
+ return new Promise((resolve) => {
34
+ var _a, _b;
35
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true');
36
+ (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(dropdown_constants.DROPDOWN_CONTENT_VISIBLE_CLASS, `${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-start`);
37
+ this.opened = true;
38
+ window.requestAnimationFrame(() => {
39
+ setTimeout(() => {
40
+ var _a;
41
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.add(`${dropdown_constants.DROPDOWN_CONTENT_SHOW}-${this.transition}-end`);
42
+ }, 0);
43
+ const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
44
+ setTimeout(() => {
45
+ var _a;
46
+ this._dispatchShowDropdownEvent();
47
+ (_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`);
48
+ resolve();
49
+ }, transitionDuration);
50
+ });
51
+ });
52
+ };
53
+ this._dispatchShowDropdownEvent = () => {
30
54
  const showDropdownEvent = new Event(dropdown_constants.DROPDOWN_EVENTS.show, {
31
55
  bubbles: true
32
56
  });
33
57
  this.dispatchEvent(showDropdownEvent);
58
+ if (window.innerWidth >= global_constants.BREAKPOINTS.xs)
59
+ return;
60
+ const showBackdropEvent = new Event(backdrop_constants.BACKDROP_EVENTS.show, {
61
+ bubbles: true
62
+ });
63
+ document.dispatchEvent(showBackdropEvent);
34
64
  };
35
- this.hide = () => {
36
- this.opened = false;
65
+ this.hide = async () => new Promise((resolve) => {
66
+ var _a;
67
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
68
+ const transitionDuration = parseFloat(getComputedStyle(this.$dropdownContent || this).transitionDuration) * 1000;
69
+ window.requestAnimationFrame(() => {
70
+ var _a, _b;
71
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${dropdown_constants.DROPDOWN_CONTENT_HIDE}-${this.transition}-start`);
72
+ (_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.classList.add(`${dropdown_constants.DROPDOWN_CONTENT_HIDE}-${this.transition}-end`);
73
+ setTimeout(() => {
74
+ var _a;
75
+ (_a = this.$dropdownContent) === null || _a === void 0 ? void 0 : _a.classList.remove(`${dropdown_constants.DROPDOWN_CONTENT_HIDE}-${this.transition}-start`, `${dropdown_constants.DROPDOWN_CONTENT_HIDE}-${this.transition}-end`);
76
+ this.opened = false;
77
+ this._dispatchHideDropdownEvent();
78
+ resolve();
79
+ }, transitionDuration);
80
+ });
81
+ });
82
+ this._dispatchHideDropdownEvent = () => {
37
83
  const hideDropdownEvent = new Event(dropdown_constants.DROPDOWN_EVENTS.hide, {
38
84
  bubbles: true
39
85
  });
40
86
  this.dispatchEvent(hideDropdownEvent);
87
+ if (window.innerWidth >= global_constants.BREAKPOINTS.xs)
88
+ return;
89
+ const hideBackdropEvent = new Event(backdrop_constants.BACKDROP_EVENTS.hide, {
90
+ bubbles: true
91
+ });
92
+ document.dispatchEvent(hideBackdropEvent);
93
+ };
94
+ this._hoverToggle = async (ev) => {
95
+ if (window.innerWidth < global_constants.BREAKPOINTS.xs)
96
+ return;
97
+ if (!ev.target) {
98
+ await this.hide();
99
+ return;
100
+ }
101
+ const isHoveredWithinDropdown = this._isHoveredWithinDropdown(ev.target);
102
+ if (isHoveredWithinDropdown && !this.opened) {
103
+ await this.show();
104
+ return;
105
+ }
106
+ if (!isHoveredWithinDropdown && this.opened) {
107
+ if (!this.$hoverableDropdownContentElements) {
108
+ await this.hide();
109
+ return;
110
+ }
111
+ this.$hoverableDropdownContentElements.forEach(async ({ name: dropdownName }) => {
112
+ const dropdown = document.querySelector(`${dropdown_constants.DROPDOWN_CONTAINER_NAME}[name="${dropdownName}"]`);
113
+ await dropdown.hide();
114
+ });
115
+ }
41
116
  };
42
117
  this._positionDropdownContent = () => {
43
118
  requestAnimationFrame(() => {
44
- this.opened && this._positionController.position();
119
+ this.opened && window.innerWidth < global_constants.BREAKPOINTS.xs
120
+ ? this._positionController.disableRelativePositioning()
121
+ : this._positionController.position();
45
122
  });
46
123
  };
47
124
  }
48
125
  connectedCallback() {
49
126
  super.connectedCallback();
50
- this._appendDropdownPortal();
127
+ HDropdown_1._appendDropdownPortal();
51
128
  if (!this.$dropdownContent)
52
129
  this.$dropdownContent = this.querySelector(dropdown_constants.DROPDOWN_CONTENT_NAME);
53
130
  if (!this.$dropdownToggler)
54
131
  this.$dropdownToggler = this.querySelector(dropdown_constants.DROPDOWN_TOGGLER_NAME);
132
+ const $nestedDropdown = this.$dropdownContent.querySelector(dropdown_constants.DROPDOWN_CONTAINER_NAME);
133
+ if ($nestedDropdown && !this.$nestedDropdownContentElements)
134
+ this.$nestedDropdownContentElements = [...$nestedDropdown.querySelectorAll(dropdown_constants.DROPDOWN_CONTENT_NAME)];
55
135
  if (!this._positionController)
56
136
  this._positionController = new relative_position_controller.RelativePositionController({
57
137
  host: this,
58
138
  direction: this.direction,
59
139
  relativeElement: this.$dropdownToggler,
60
- elementToPosition: this.$dropdownContent
140
+ elementToPosition: this.$dropdownContent,
141
+ shouldDisablePositioning: () => window.innerWidth < global_constants.BREAKPOINTS.xs,
142
+ portalElementsNames: [dropdown_constants.DROPDOWN_CONTENT_NAME]
61
143
  });
62
144
  if (!this._clickOutsideController)
63
145
  this._clickOutsideController = new click_outside_controller.ClickOutsideController({
@@ -65,18 +147,12 @@ exports.HDropdown = class HDropdown extends phoenix_light_lit_element.PhoenixLig
65
147
  container: this,
66
148
  name: this.name
67
149
  });
68
- this._setupListeners();
69
- }
70
- _setupListeners() {
71
- var _a, _b, _c;
72
- this.addEventListener(click_outside_controller_messages.CLICK_OUTSIDE_CONTROLLER_MESSAGES.clickedOutside, this._handleClickOutside);
73
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener('toggle', this.toggle);
74
- if (this.toggleOnHover) {
75
- (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.addEventListener('mouseenter', this.show);
76
- (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.addEventListener('mouseleave', this.hide);
150
+ if (this.toggleOnHover && !this.$hoverableDropdownContentElements) {
151
+ this.$hoverableDropdownContentElements = [...this.querySelectorAll(dropdown_constants.DROPDOWN_CONTENT_NAME)];
77
152
  }
153
+ this._setupListeners();
78
154
  }
79
- _appendDropdownPortal() {
155
+ static _appendDropdownPortal() {
80
156
  const $dropdownPortalTarget = document.querySelector(`[name="${dropdown_constants.DEFAULT_DROPDOWN_PORTAL_NAME}"]`);
81
157
  if (!$dropdownPortalTarget) {
82
158
  const $portalTarget = document.createElement(portal_constants.PORTAL_TARGET_COMPONENT_NAME);
@@ -84,22 +160,49 @@ exports.HDropdown = class HDropdown extends phoenix_light_lit_element.PhoenixLig
84
160
  document.body.appendChild($portalTarget);
85
161
  }
86
162
  }
87
- _handleClickOutside() {
163
+ _setupListeners() {
88
164
  var _a;
165
+ this.addEventListener(click_outside_controller_messages.CLICK_OUTSIDE_CONTROLLER_MESSAGES.clickedOutside, this._handleClickOutside);
166
+ (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.addEventListener('toggle', this.toggle);
167
+ if (this.toggleOnHover)
168
+ document.addEventListener('mouseover', this._hoverToggle);
169
+ }
170
+ _handleClickOutside(ev) {
171
+ var _a, _b;
89
172
  if (!this.opened)
90
173
  return;
91
- this.hide();
92
- (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
174
+ const target = ev.detail.target;
175
+ const clickedWithinNestedDropdown = (_a = this.$nestedDropdownContentElements) === null || _a === void 0 ? void 0 : _a.find((element) => element.contains(target));
176
+ const shouldHideElements = !((_b = this.$dropdownContent) === null || _b === void 0 ? void 0 : _b.contains(target)) && !this.contains(target) && !clickedWithinNestedDropdown;
177
+ if (shouldHideElements)
178
+ this.hide();
179
+ }
180
+ _isHoveredWithinDropdown(element) {
181
+ if (element === this)
182
+ return true;
183
+ if (element === this.$dropdownContent)
184
+ return true;
185
+ const isDescendantOfDropdown = element.closest(`${dropdown_constants.DROPDOWN_CONTAINER_NAME}[name="${this.name}"]`) !== null;
186
+ if (isDescendantOfDropdown)
187
+ return true;
188
+ const $closestDropdownContent = element.closest(dropdown_constants.DROPDOWN_CONTENT_NAME);
189
+ const isDescendantOfContent = this.$dropdownContent &&
190
+ $closestDropdownContent !== null &&
191
+ !!this.$hoverableDropdownContentElements.find((content) => content.name === $closestDropdownContent.name);
192
+ if (isDescendantOfContent)
193
+ return true;
194
+ return false;
93
195
  }
94
196
  disconnectedCallback() {
95
- var _a, _b, _c;
197
+ var _a;
96
198
  super.disconnectedCallback();
97
199
  (_a = this.$dropdownToggler) === null || _a === void 0 ? void 0 : _a.removeEventListener('toggle', this.toggle);
98
- if (this.toggleOnHover) {
99
- (_b = this.$dropdownToggler) === null || _b === void 0 ? void 0 : _b.removeEventListener('mouseenter', this.show);
100
- (_c = this.$dropdownToggler) === null || _c === void 0 ? void 0 : _c.removeEventListener('mouseleave', this.hide);
200
+ if (this.toggleOnHover)
201
+ document.removeEventListener('mouseover', this._hoverToggle);
202
+ if (this.opened) {
203
+ this.opened = false;
204
+ this._dispatchHideDropdownEvent();
101
205
  }
102
- this.opened = false;
103
206
  }
104
207
  render() {
105
208
  super.render();
@@ -127,11 +230,15 @@ tslib_es6.__decorate([
127
230
  decorators.property({ type: String }),
128
231
  tslib_es6.__metadata("design:type", Object)
129
232
  ], exports.HDropdown.prototype, "name", void 0);
233
+ tslib_es6.__decorate([
234
+ decorators.property({ type: String }),
235
+ tslib_es6.__metadata("design:type", Object)
236
+ ], exports.HDropdown.prototype, "transition", void 0);
130
237
  tslib_es6.__decorate([
131
238
  decorators.property({ type: String }),
132
239
  tslib_es6.__metadata("design:type", Object)
133
240
  ], exports.HDropdown.prototype, "portalTarget", void 0);
134
- exports.HDropdown = tslib_es6.__decorate([
241
+ exports.HDropdown = HDropdown_1 = tslib_es6.__decorate([
135
242
  phoenix_custom_element.phoenixCustomElement('h-dropdown')
136
243
  ], exports.HDropdown);
137
244
  //# sourceMappingURL=dropdown.js.map
@@ -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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -7,22 +7,30 @@ const DROPDOWN_CONTAINER_NAME = `h-${DROPDOWN_NAME}`;
7
7
  const DROPDOWN_TOGGLER_NAME = `${DROPDOWN_CONTAINER_NAME}-toggler`;
8
8
  const DROPDOWN_CONTENT_NAME = `${DROPDOWN_CONTAINER_NAME}-content`;
9
9
  const DEFAULT_DROPDOWN_PORTAL_NAME = 'dropdown-portal';
10
- const DROPDOWN_EVENT = 'dropdown';
10
+ const DROPDOWN_EVENT_NAME = 'dropdown';
11
11
  const DROPDOWN_EVENTS = {
12
- show: `${DROPDOWN_EVENT}.show`,
13
- hide: `${DROPDOWN_EVENT}.hide`
12
+ show: `${DROPDOWN_EVENT_NAME}.show`,
13
+ hide: `${DROPDOWN_EVENT_NAME}.hide`
14
14
  };
15
15
  const DROPDOWN_OPENED_ATTRIBUTE_NAME = 'opened';
16
- const DROPDOWN_CLASS = 'dropdown';
17
- const DROPDOWN_CONTENT_CLASS = `${DROPDOWN_CLASS}__content`;
16
+ const DROPDOWN_CSS_CLASS = 'dropdown';
17
+ const DROPDOWN_CONTENT_CSS_CLASS = `${DROPDOWN_CSS_CLASS}__content`;
18
+ const DROPDOWN_TOGGLER_CSS_CLASS = `${DROPDOWN_CSS_CLASS}__toggler`;
19
+ const DROPDOWN_CONTENT_VISIBLE_CLASS = `${DROPDOWN_CONTENT_CSS_CLASS}_visible`;
20
+ const DROPDOWN_CONTENT_SHOW = `${DROPDOWN_CONTENT_CSS_CLASS}_show`;
21
+ const DROPDOWN_CONTENT_HIDE = `${DROPDOWN_CONTENT_CSS_CLASS}_hide`;
18
22
 
19
23
  exports.DEFAULT_DROPDOWN_PORTAL_NAME = DEFAULT_DROPDOWN_PORTAL_NAME;
20
- exports.DROPDOWN_CLASS = DROPDOWN_CLASS;
21
24
  exports.DROPDOWN_CONTAINER_NAME = DROPDOWN_CONTAINER_NAME;
22
- exports.DROPDOWN_CONTENT_CLASS = DROPDOWN_CONTENT_CLASS;
25
+ exports.DROPDOWN_CONTENT_CSS_CLASS = DROPDOWN_CONTENT_CSS_CLASS;
26
+ exports.DROPDOWN_CONTENT_HIDE = DROPDOWN_CONTENT_HIDE;
23
27
  exports.DROPDOWN_CONTENT_NAME = DROPDOWN_CONTENT_NAME;
28
+ exports.DROPDOWN_CONTENT_SHOW = DROPDOWN_CONTENT_SHOW;
29
+ exports.DROPDOWN_CONTENT_VISIBLE_CLASS = DROPDOWN_CONTENT_VISIBLE_CLASS;
30
+ exports.DROPDOWN_CSS_CLASS = DROPDOWN_CSS_CLASS;
24
31
  exports.DROPDOWN_EVENTS = DROPDOWN_EVENTS;
25
32
  exports.DROPDOWN_NAME = DROPDOWN_NAME;
26
33
  exports.DROPDOWN_OPENED_ATTRIBUTE_NAME = DROPDOWN_OPENED_ATTRIBUTE_NAME;
34
+ exports.DROPDOWN_TOGGLER_CSS_CLASS = DROPDOWN_TOGGLER_CSS_CLASS;
27
35
  exports.DROPDOWN_TOGGLER_NAME = DROPDOWN_TOGGLER_NAME;
28
36
  //# 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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
6
6
  var lit = require('lit');
7
+ var decorators = require('lit/decorators');
7
8
  var phoenix_light_lit_element = require('../../core/phoenix_light_lit_element.js');
8
9
  var phoenix_custom_element = require('../../core/decorators/phoenix_custom_element.js');
9
10
  var dropdown_constants = require('./dropdown_constants.js');
@@ -11,9 +12,10 @@ var dropdown_constants = require('./dropdown_constants.js');
11
12
  exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_element.PhoenixLightLitElement {
12
13
  constructor() {
13
14
  super();
15
+ this.name = '';
14
16
  this.setAttribute('role', 'menu');
15
17
  this.slot = this.hasAttribute('slot') ? this.slot : 'content';
16
- this.className = `${dropdown_constants.DROPDOWN_CONTENT_CLASS} ${this.className}`;
18
+ this.className = `${dropdown_constants.DROPDOWN_CONTENT_CSS_CLASS} ${this.className}`;
17
19
  Array.from(this.children).forEach((element) => {
18
20
  element.setAttribute('role', 'menuitem');
19
21
  });
@@ -23,6 +25,10 @@ exports.HDropdownContent = class HDropdownContent extends phoenix_light_lit_elem
23
25
  return lit.html ` <div role="dialog">${this.getSlot('content')}</div> `;
24
26
  }
25
27
  };
28
+ tslib_es6.__decorate([
29
+ decorators.property({ type: String }),
30
+ tslib_es6.__metadata("design:type", Object)
31
+ ], exports.HDropdownContent.prototype, "name", void 0);
26
32
  exports.HDropdownContent = tslib_es6.__decorate([
27
33
  phoenix_custom_element.phoenixCustomElement('h-dropdown-content'),
28
34
  tslib_es6.__metadata("design:paramtypes", [])
@@ -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;"}
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;"}
@@ -23,6 +23,7 @@ exports.HDropdownToggler = class HDropdownToggler extends phoenix_light_lit_elem
23
23
  this._toggleElementAriaController.toggleAriaExpandedAttribute();
24
24
  };
25
25
  this.slot = this.hasAttribute('slot') ? this.slot : 'toggler';
26
+ this.className = `${dropdown_constants.DROPDOWN_TOGGLER_CSS_CLASS} ${this.className}`;
26
27
  }
27
28
  connectedCallback() {
28
29
  super.connectedCallback();
@@ -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;"}
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;"}
@@ -10,6 +10,7 @@ var phoenix_custom_element = require('../../core/decorators/phoenix_custom_eleme
10
10
  var portal_constants = require('../portal/portal_constants.js');
11
11
  var modal_constants = require('./modal_constants.js');
12
12
  var ref = require('../../../../../external/lit-html/directives/ref.js');
13
+ var backdrop_constants = require('../backdrop/backdrop_constants.js');
13
14
 
14
15
  var HModal_1;
15
16
  exports.HModal = HModal_1 = class HModal extends phoenix_light_lit_element.PhoenixLightLitElement {
@@ -93,26 +94,19 @@ exports.HModal = HModal_1 = class HModal extends phoenix_light_lit_element.Phoen
93
94
  document.body.appendChild($portalTarget);
94
95
  }
95
96
  }
96
- static _appendModalsBackdrop() {
97
- const $modalsBackdrop = document.querySelector('h-modal-backdrop');
98
- if (!$modalsBackdrop) {
99
- const $backdrop = document.createElement('h-modal-backdrop');
100
- document.body.appendChild($backdrop);
101
- }
102
- }
103
97
  static isSomeModalOpen() {
104
98
  return HModal_1.openModals.some((modal) => modal.opened);
105
99
  }
106
100
  connectedCallback() {
107
101
  super.connectedCallback();
108
102
  HModal_1._appendModalsPortal();
109
- HModal_1._appendModalsBackdrop();
110
103
  document.addEventListener('keydown', this._keepFocusWithinModal);
111
104
  document.addEventListener(modal_constants.MODAL_EVENTS.close, this._handleCloseFromCloseComponent);
112
105
  }
113
106
  disconnectedCallback() {
114
107
  super.disconnectedCallback();
115
- this[modal_constants.MODAL_OPENED_PROP] = false;
108
+ if (this[modal_constants.MODAL_OPENED_PROP])
109
+ this.close();
116
110
  document.removeEventListener(modal_constants.MODAL_EVENTS.close, this._handleCloseFromCloseComponent);
117
111
  document.removeEventListener('keydown', this._bindCloseOnEsc);
118
112
  }
@@ -139,7 +133,6 @@ exports.HModal = HModal_1 = class HModal extends phoenix_light_lit_element.Phoen
139
133
  setTimeout(() => {
140
134
  var _a;
141
135
  this[modal_constants.MODAL_OPENED_PROP] = true;
142
- this._dispatchModalOpenedEvent();
143
136
  (_a = this._contentRef.value) === null || _a === void 0 ? void 0 : _a.classList.remove(`modal_show-${this.transition}-start`, `modal_show-${this.transition}-end`);
144
137
  resolve();
145
138
  }, transitionDuration);
@@ -151,6 +144,10 @@ exports.HModal = HModal_1 = class HModal extends phoenix_light_lit_element.Phoen
151
144
  bubbles: true
152
145
  });
153
146
  this.dispatchEvent(openModalEvent);
147
+ const openBackdropEvent = new CustomEvent(backdrop_constants.BACKDROP_EVENTS.show, {
148
+ bubbles: true
149
+ });
150
+ document.dispatchEvent(openBackdropEvent);
154
151
  }
155
152
  async close() {
156
153
  return new Promise((resolve) => {
@@ -174,6 +171,10 @@ exports.HModal = HModal_1 = class HModal extends phoenix_light_lit_element.Phoen
174
171
  bubbles: true
175
172
  });
176
173
  this.dispatchEvent(closeModalEvent);
174
+ const closeBackdropEvent = new CustomEvent(backdrop_constants.BACKDROP_EVENTS.hide, {
175
+ bubbles: true
176
+ });
177
+ document.dispatchEvent(closeBackdropEvent);
177
178
  }
178
179
  render() {
179
180
  return lit.html `
@@ -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,kBAAkB,oDAAwD;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,kBAAkB,oDAAwD;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -19,8 +19,10 @@ class ClickOutsideController {
19
19
  name: this._name
20
20
  }
21
21
  });
22
- const { target } = ev;
23
- if (target.contains(tslib_es6.__classPrivateFieldGet(this, _ClickOutsideController_container, "f"))) {
22
+ const target = ev.target;
23
+ const isContainerWithinTarget = target.contains(tslib_es6.__classPrivateFieldGet(this, _ClickOutsideController_container, "f")) && target !== tslib_es6.__classPrivateFieldGet(this, _ClickOutsideController_container, "f");
24
+ const isTargetWithinContainer = tslib_es6.__classPrivateFieldGet(this, _ClickOutsideController_container, "f").contains(target);
25
+ if (isContainerWithinTarget || !isTargetWithinContainer) {
24
26
  tslib_es6.__classPrivateFieldGet(this, _ClickOutsideController_host, "f").dispatchEvent(clickedOutsideEvent);
25
27
  }
26
28
  };
@@ -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;"}
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;"}
@@ -29,12 +29,12 @@ class PositionCalculator {
29
29
  };
30
30
  }
31
31
  _canFitTopSide() {
32
- const elementTop = tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").top - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_nearestNonStaticElementFromElementToPositionRect, "f").top - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
33
- return elementTop > tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").top && elementTop > 0;
32
+ const elementPositionTop = tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").top - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
33
+ return elementPositionTop > tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").top && elementPositionTop > 0;
34
34
  }
35
35
  _canFitBottomSide() {
36
- const elementBottom = tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").bottom - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_nearestNonStaticElementFromElementToPositionRect, "f").top + tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
37
- return elementBottom < tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").bottom && elementBottom < window.innerHeight;
36
+ const elementPositionBottom = tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").bottom + tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;
37
+ return elementPositionBottom < tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_containerRect, "f").bottom && elementPositionBottom < window.innerHeight;
38
38
  }
39
39
  _calculateSidePosition(side) {
40
40
  const topSideOfRelativeElement = tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_relativeElementRect, "f").top - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_nearestNonStaticElementFromElementToPositionRect, "f").top - tslib_es6.__classPrivateFieldGet(this, _PositionCalculator_positionElementRect, "f").height;