le-kit 0.1.5 → 0.1.6

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 (199) hide show
  1. package/dist/cjs/index-WzJ78D5H.js +1803 -0
  2. package/dist/cjs/index-WzJ78D5H.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +117 -0
  4. package/dist/cjs/index.cjs.js.map +1 -0
  5. package/dist/cjs/le-box.cjs.entry.js +184 -0
  6. package/dist/cjs/le-box.entry.cjs.js.map +1 -0
  7. package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +1 -0
  8. package/dist/cjs/le-button_6.cjs.entry.js +1202 -0
  9. package/dist/cjs/le-card.cjs.entry.js +29 -0
  10. package/dist/cjs/le-card.entry.cjs.js.map +1 -0
  11. package/dist/cjs/le-kit.cjs.js +25 -0
  12. package/dist/cjs/le-kit.cjs.js.map +1 -0
  13. package/dist/cjs/le-number-input.cjs.entry.js +202 -0
  14. package/dist/cjs/le-number-input.entry.cjs.js.map +1 -0
  15. package/dist/cjs/le-popup.cjs.entry.js +212 -0
  16. package/dist/cjs/le-popup.entry.cjs.js.map +1 -0
  17. package/dist/cjs/le-round-progress.cjs.entry.js +106 -0
  18. package/dist/cjs/le-round-progress.entry.cjs.js.map +1 -0
  19. package/dist/cjs/le-stack.cjs.entry.js +135 -0
  20. package/dist/cjs/le-stack.entry.cjs.js.map +1 -0
  21. package/dist/cjs/le-text.cjs.entry.js +335 -0
  22. package/dist/cjs/le-text.entry.cjs.js.map +1 -0
  23. package/dist/cjs/le-turntable.cjs.entry.js +139 -0
  24. package/dist/cjs/le-turntable.entry.cjs.js.map +1 -0
  25. package/dist/cjs/loader.cjs.js +13 -0
  26. package/dist/cjs/loader.cjs.js.map +1 -0
  27. package/dist/cjs/utils-CBjH2E8A.js +152 -0
  28. package/dist/cjs/utils-CBjH2E8A.js.map +1 -0
  29. package/dist/collection/assets/.gitkeep +1 -0
  30. package/dist/collection/assets/custom-elements.json +4305 -0
  31. package/dist/collection/collection-manifest.json +26 -0
  32. package/dist/collection/components/le-box/le-box.default.css +37 -0
  33. package/dist/collection/components/le-box/le-box.js +614 -0
  34. package/dist/collection/components/le-box/le-box.js.map +1 -0
  35. package/dist/collection/components/le-button/le-button.default.css +263 -0
  36. package/dist/collection/components/le-button/le-button.js +368 -0
  37. package/dist/collection/components/le-button/le-button.js.map +1 -0
  38. package/dist/collection/components/le-card/le-card.default.css +74 -0
  39. package/dist/collection/components/le-card/le-card.js +102 -0
  40. package/dist/collection/components/le-card/le-card.js.map +1 -0
  41. package/dist/collection/components/le-checkbox/le-checkbox.css +93 -0
  42. package/dist/collection/components/le-checkbox/le-checkbox.js +192 -0
  43. package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -0
  44. package/dist/collection/components/le-component/le-component.css +189 -0
  45. package/dist/{le-kit/le-component.entry.js → collection/components/le-component/le-component.js} +137 -20
  46. package/dist/collection/components/le-component/le-component.js.map +1 -0
  47. package/dist/collection/components/le-number-input/le-number-input.css +135 -0
  48. package/dist/collection/components/le-number-input/le-number-input.js +515 -0
  49. package/dist/collection/components/le-number-input/le-number-input.js.map +1 -0
  50. package/dist/collection/components/le-popover/le-popover.css +143 -0
  51. package/dist/collection/components/le-popover/le-popover.js +693 -0
  52. package/dist/collection/components/le-popover/le-popover.js.map +1 -0
  53. package/dist/collection/components/le-popup/le-popup.api.js +101 -0
  54. package/dist/collection/components/le-popup/le-popup.api.js.map +1 -0
  55. package/dist/collection/components/le-popup/le-popup.css +222 -0
  56. package/dist/collection/components/le-popup/le-popup.js +596 -0
  57. package/dist/collection/components/le-popup/le-popup.js.map +1 -0
  58. package/dist/collection/components/le-round-progress/le-round-progress.css +34 -0
  59. package/dist/collection/components/le-round-progress/le-round-progress.js +184 -0
  60. package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -0
  61. package/dist/collection/components/le-slot/le-slot.default.css +222 -0
  62. package/dist/{le-kit/le-slot.entry.js → collection/components/le-slot/le-slot.js} +266 -16
  63. package/dist/collection/components/le-slot/le-slot.js.map +1 -0
  64. package/dist/collection/components/le-stack/le-stack.default.css +37 -0
  65. package/dist/collection/components/le-stack/le-stack.js +389 -0
  66. package/dist/collection/components/le-stack/le-stack.js.map +1 -0
  67. package/dist/collection/components/le-string-input/le-string-input.css +83 -0
  68. package/dist/collection/components/le-string-input/le-string-input.js +359 -0
  69. package/dist/collection/components/le-string-input/le-string-input.js.map +1 -0
  70. package/dist/collection/components/le-text/le-text.default.css +169 -0
  71. package/dist/collection/components/le-text/le-text.js +475 -0
  72. package/dist/collection/components/le-text/le-text.js.map +1 -0
  73. package/dist/collection/components/le-turntable/le-turntable.css +10 -0
  74. package/dist/collection/components/le-turntable/le-turntable.js +210 -0
  75. package/dist/collection/components/le-turntable/le-turntable.js.map +1 -0
  76. package/dist/collection/global/app.js +130 -0
  77. package/dist/collection/global/app.js.map +1 -0
  78. package/dist/collection/index.js +15 -0
  79. package/dist/collection/index.js.map +1 -0
  80. package/dist/collection/types/blocks.js +115 -0
  81. package/dist/collection/types/blocks.js.map +1 -0
  82. package/dist/collection/types/options.js +2 -0
  83. package/dist/collection/types/options.js.map +1 -0
  84. package/dist/collection/utils/utils.js +141 -0
  85. package/dist/collection/utils/utils.js.map +1 -0
  86. package/dist/components/index.js +127 -0
  87. package/dist/components/index.js.map +1 -0
  88. package/dist/components/le-box.js +256 -0
  89. package/dist/components/le-box.js.map +1 -0
  90. package/dist/components/le-button.js +9 -0
  91. package/dist/components/le-button.js.map +1 -0
  92. package/dist/components/le-button2.js +1411 -0
  93. package/dist/components/le-button2.js.map +1 -0
  94. package/dist/components/le-card.js +83 -0
  95. package/dist/components/le-card.js.map +1 -0
  96. package/dist/components/le-checkbox.js +9 -0
  97. package/dist/components/le-checkbox.js.map +1 -0
  98. package/dist/components/le-component.js +9 -0
  99. package/dist/components/le-component.js.map +1 -0
  100. package/dist/components/le-number-input.js +271 -0
  101. package/dist/components/le-number-input.js.map +1 -0
  102. package/dist/components/le-popover.js +9 -0
  103. package/dist/components/le-popover.js.map +1 -0
  104. package/dist/{le-kit/le-popover.entry.js → components/le-popover2.js} +45 -9
  105. package/dist/components/le-popover2.js.map +1 -0
  106. package/dist/components/le-popup.js +279 -0
  107. package/dist/components/le-popup.js.map +1 -0
  108. package/dist/components/le-round-progress.js +135 -0
  109. package/dist/components/le-round-progress.js.map +1 -0
  110. package/dist/components/le-slot.js +9 -0
  111. package/dist/components/le-slot.js.map +1 -0
  112. package/dist/components/le-stack.js +198 -0
  113. package/dist/components/le-stack.js.map +1 -0
  114. package/dist/components/le-string-input.js +9 -0
  115. package/dist/components/le-string-input.js.map +1 -0
  116. package/dist/components/le-text.js +398 -0
  117. package/dist/components/le-text.js.map +1 -0
  118. package/dist/components/le-turntable.js +164 -0
  119. package/dist/components/le-turntable.js.map +1 -0
  120. package/dist/docs.d.ts +443 -0
  121. package/dist/docs.json +5185 -0
  122. package/dist/esm/index-CdjJ98OT.js +1787 -0
  123. package/dist/esm/index-CdjJ98OT.js.map +1 -0
  124. package/dist/esm/index.js +106 -0
  125. package/dist/esm/index.js.map +1 -0
  126. package/dist/{le-kit → esm}/le-box.entry.js +3 -3
  127. package/dist/esm/le-box.entry.js.map +1 -0
  128. package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +1 -0
  129. package/dist/esm/le-button_6.entry.js +1195 -0
  130. package/dist/{le-kit → esm}/le-card.entry.js +3 -3
  131. package/dist/esm/le-card.entry.js.map +1 -0
  132. package/dist/esm/le-kit.js +21 -0
  133. package/dist/esm/le-kit.js.map +1 -0
  134. package/dist/{le-kit → esm}/le-number-input.entry.js +5 -5
  135. package/dist/esm/le-number-input.entry.js.map +1 -0
  136. package/dist/{le-kit → esm}/le-popup.entry.js +6 -6
  137. package/dist/esm/le-popup.entry.js.map +1 -0
  138. package/dist/{le-kit → esm}/le-round-progress.entry.js +2 -2
  139. package/dist/esm/le-round-progress.entry.js.map +1 -0
  140. package/dist/{le-kit → esm}/le-stack.entry.js +3 -3
  141. package/dist/esm/le-stack.entry.js.map +1 -0
  142. package/dist/{le-kit → esm}/le-text.entry.js +3 -3
  143. package/dist/esm/le-text.entry.js.map +1 -0
  144. package/dist/{le-kit → esm}/le-turntable.entry.js +2 -2
  145. package/dist/esm/le-turntable.entry.js.map +1 -0
  146. package/dist/esm/loader.js +11 -0
  147. package/dist/esm/loader.js.map +1 -0
  148. package/dist/{le-kit/utils-FDOApZ53.js → esm/utils-CzfSUhYB.js} +3 -3
  149. package/dist/{le-kit/utils-FDOApZ53.js.map → esm/utils-CzfSUhYB.js.map} +1 -1
  150. package/dist/index.cjs.js +1 -0
  151. package/dist/index.js +1 -0
  152. package/dist/le-kit/index.esm.js +2 -116
  153. package/dist/le-kit/index.esm.js.map +1 -1
  154. package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +1 -0
  155. package/dist/le-kit/le-kit.css +1 -1010
  156. package/dist/le-kit/le-kit.esm.js +2 -48
  157. package/dist/le-kit/le-kit.esm.js.map +1 -1
  158. package/dist/le-kit/p-0633b3ab.entry.js +2 -0
  159. package/dist/le-kit/p-0633b3ab.entry.js.map +1 -0
  160. package/dist/le-kit/p-1452a995.entry.js +2 -0
  161. package/dist/le-kit/p-1452a995.entry.js.map +1 -0
  162. package/dist/le-kit/p-220528ee.entry.js +2 -0
  163. package/dist/le-kit/p-220528ee.entry.js.map +1 -0
  164. package/dist/le-kit/p-32ff3dbe.entry.js +2 -0
  165. package/dist/le-kit/p-32ff3dbe.entry.js.map +1 -0
  166. package/dist/le-kit/p-3551598e.entry.js +2 -0
  167. package/dist/le-kit/p-3551598e.entry.js.map +1 -0
  168. package/dist/le-kit/p-722899f0.entry.js +2 -0
  169. package/dist/le-kit/p-722899f0.entry.js.map +1 -0
  170. package/dist/le-kit/p-95764888.entry.js +2 -0
  171. package/dist/le-kit/p-95764888.entry.js.map +1 -0
  172. package/dist/le-kit/p-CdjJ98OT.js +3 -0
  173. package/dist/le-kit/p-CdjJ98OT.js.map +1 -0
  174. package/dist/le-kit/p-CvDc0yWN.js +2 -0
  175. package/dist/le-kit/p-CvDc0yWN.js.map +1 -0
  176. package/dist/le-kit/p-bc20e30d.entry.js +2 -0
  177. package/dist/le-kit/p-bc20e30d.entry.js.map +1 -0
  178. package/dist/le-kit/p-d32eddad.entry.js +2 -0
  179. package/dist/le-kit/p-d32eddad.entry.js.map +1 -0
  180. package/dist/themes/base.css +89 -0
  181. package/dist/themes/dark.css +100 -0
  182. package/dist/themes/default.css +108 -0
  183. package/dist/themes/gradient.css +100 -0
  184. package/dist/themes/index.css +413 -0
  185. package/dist/themes/minimal.css +100 -0
  186. package/dist/themes/warm.css +100 -0
  187. package/dist/types/components.d.ts +4 -4
  188. package/package.json +1 -1
  189. package/dist/le-kit/index-Da-89pOc.js +0 -4522
  190. package/dist/le-kit/index-Da-89pOc.js.map +0 -1
  191. package/dist/le-kit/le-button.entry.esm.js.map +0 -1
  192. package/dist/le-kit/le-button.entry.js +0 -90
  193. package/dist/le-kit/le-checkbox.entry.esm.js.map +0 -1
  194. package/dist/le-kit/le-checkbox.entry.js +0 -59
  195. package/dist/le-kit/le-component.entry.esm.js.map +0 -1
  196. package/dist/le-kit/le-popover.entry.esm.js.map +0 -1
  197. package/dist/le-kit/le-slot.entry.esm.js.map +0 -1
  198. package/dist/le-kit/le-string-input.entry.esm.js.map +0 -1
  199. package/dist/le-kit/le-string-input.entry.js +0 -93
@@ -0,0 +1,693 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A popover component for displaying floating content.
4
+ *
5
+ * Uses the native HTML Popover API for proper layering with dialogs
6
+ * and other top-layer elements. Falls back gracefully in older browsers.
7
+ *
8
+ * @slot - Content to display inside the popover
9
+ * @slot trigger - Element that triggers the popover (optional)
10
+ *
11
+ * @cmsInternal true
12
+ * @cmsCategory System
13
+ */
14
+ export class LePopover {
15
+ el;
16
+ /**
17
+ * Mode of the popover should be 'default' for internal use
18
+ */
19
+ mode;
20
+ /**
21
+ * Whether the popover is currently open
22
+ */
23
+ open = false;
24
+ /**
25
+ * Position of the popover relative to its trigger
26
+ */
27
+ position = 'bottom';
28
+ /**
29
+ * Alignment of the popover
30
+ */
31
+ align = 'start';
32
+ /**
33
+ * Optional title for the popover header
34
+ */
35
+ popoverTitle;
36
+ /**
37
+ * Whether to show a close button in the header
38
+ */
39
+ showClose = true;
40
+ /**
41
+ * Whether clicking outside closes the popover
42
+ */
43
+ closeOnClickOutside = true;
44
+ /**
45
+ * Whether pressing Escape closes the popover
46
+ */
47
+ closeOnEscape = true;
48
+ /**
49
+ * Offset from the trigger element (in pixels)
50
+ */
51
+ offset = 8;
52
+ /**
53
+ * Fixed width for the popover (e.g., '300px', '20rem')
54
+ */
55
+ width;
56
+ /**
57
+ * Minimum width for the popover (e.g., '200px', '15rem')
58
+ */
59
+ minWidth = '200px';
60
+ /**
61
+ * Maximum width for the popover (e.g., '400px', '25rem')
62
+ */
63
+ maxWidth;
64
+ /**
65
+ * Emitted when the popover opens
66
+ */
67
+ lePopoverOpen;
68
+ /**
69
+ * Emitted when the popover closes
70
+ */
71
+ lePopoverClose;
72
+ isPositioned = false;
73
+ triggerEl;
74
+ popoverEl;
75
+ uniqueId = `le-popover-${Math.random().toString(36).substr(2, 9)}`;
76
+ scrollParents = [];
77
+ componentDidLoad() {
78
+ // Listen for toggle events from the native popover API
79
+ this.popoverEl?.addEventListener('toggle', this.handlePopoverToggle);
80
+ // Listen for other popovers opening to close this one
81
+ document.addEventListener('le-popover-will-open', this.handleOtherPopoverOpen);
82
+ }
83
+ disconnectedCallback() {
84
+ this.popoverEl?.removeEventListener('toggle', this.handlePopoverToggle);
85
+ document.removeEventListener('le-popover-will-open', this.handleOtherPopoverOpen);
86
+ this.removeScrollListeners();
87
+ }
88
+ /**
89
+ * Find all scrollable parent elements
90
+ */
91
+ getScrollParents(element) {
92
+ const scrollParents = [];
93
+ let parent = element.parentElement;
94
+ while (parent) {
95
+ const style = getComputedStyle(parent);
96
+ const overflow = style.overflow + style.overflowY + style.overflowX;
97
+ if (/(auto|scroll)/.test(overflow)) {
98
+ scrollParents.push(parent);
99
+ }
100
+ parent = parent.parentElement;
101
+ }
102
+ // Always include window for page scroll
103
+ return scrollParents;
104
+ }
105
+ /**
106
+ * Add scroll listeners to all scrollable parents
107
+ */
108
+ addScrollListeners() {
109
+ if (!this.triggerEl)
110
+ return;
111
+ this.scrollParents = this.getScrollParents(this.triggerEl);
112
+ // Listen to each scroll parent
113
+ this.scrollParents.forEach(parent => {
114
+ parent.addEventListener('scroll', this.handleScroll, { passive: true });
115
+ });
116
+ // Also listen to window scroll and resize
117
+ window.addEventListener('scroll', this.handleScroll, { passive: true });
118
+ window.addEventListener('resize', this.handleScroll, { passive: true });
119
+ }
120
+ /**
121
+ * Remove scroll listeners
122
+ */
123
+ removeScrollListeners() {
124
+ this.scrollParents.forEach(parent => {
125
+ parent.removeEventListener('scroll', this.handleScroll);
126
+ });
127
+ window.removeEventListener('scroll', this.handleScroll);
128
+ window.removeEventListener('resize', this.handleScroll);
129
+ this.scrollParents = [];
130
+ }
131
+ handleScroll = () => {
132
+ if (this.open) {
133
+ this.updatePosition();
134
+ }
135
+ };
136
+ handlePopoverToggle = (event) => {
137
+ if (event.newState === 'open') {
138
+ this.open = true;
139
+ this.addScrollListeners();
140
+ this.updatePosition();
141
+ this.lePopoverOpen.emit();
142
+ }
143
+ else {
144
+ this.open = false;
145
+ this.isPositioned = false;
146
+ this.removeScrollListeners();
147
+ this.lePopoverClose.emit();
148
+ }
149
+ };
150
+ handleOtherPopoverOpen = (event) => {
151
+ const customEvent = event;
152
+ if (customEvent.detail?.popover === this.el)
153
+ return;
154
+ if (this.open) {
155
+ this.hide();
156
+ }
157
+ };
158
+ /**
159
+ * Opens the popover
160
+ */
161
+ async show() {
162
+ document.dispatchEvent(new CustomEvent('le-popover-will-open', {
163
+ detail: { popover: this.el }
164
+ }));
165
+ this.popoverEl?.showPopover();
166
+ }
167
+ /**
168
+ * Closes the popover
169
+ */
170
+ async hide() {
171
+ this.popoverEl?.hidePopover();
172
+ }
173
+ /**
174
+ * Toggles the popover
175
+ */
176
+ async toggle() {
177
+ if (this.open) {
178
+ await this.hide();
179
+ }
180
+ else {
181
+ await this.show();
182
+ }
183
+ }
184
+ handleTriggerClick = (event) => {
185
+ event.stopPropagation();
186
+ this.toggle();
187
+ };
188
+ updatePosition() {
189
+ if (!this.triggerEl || !this.popoverEl)
190
+ return;
191
+ const triggerRect = this.triggerEl.getBoundingClientRect();
192
+ const popoverRect = this.popoverEl.getBoundingClientRect();
193
+ const viewportWidth = window.innerWidth;
194
+ const viewportHeight = window.innerHeight;
195
+ const viewportPadding = 8;
196
+ let position = this.position;
197
+ let align = this.align;
198
+ // Auto-position logic
199
+ const spaceBelow = viewportHeight - triggerRect.bottom - viewportPadding;
200
+ const spaceAbove = triggerRect.top - viewportPadding;
201
+ const spaceRight = viewportWidth - triggerRect.right - viewportPadding;
202
+ const spaceLeft = triggerRect.left - viewportPadding;
203
+ if (position === 'auto') {
204
+ if (spaceBelow >= popoverRect.height + this.offset) {
205
+ position = 'bottom';
206
+ }
207
+ else if (spaceAbove >= popoverRect.height + this.offset) {
208
+ position = 'top';
209
+ }
210
+ else if (spaceRight >= popoverRect.width + this.offset) {
211
+ position = 'right';
212
+ }
213
+ else if (spaceLeft >= popoverRect.width + this.offset) {
214
+ position = 'left';
215
+ }
216
+ else {
217
+ const maxSpace = Math.max(spaceBelow, spaceAbove, spaceRight, spaceLeft);
218
+ if (maxSpace === spaceBelow)
219
+ position = 'bottom';
220
+ else if (maxSpace === spaceAbove)
221
+ position = 'top';
222
+ else if (maxSpace === spaceRight)
223
+ position = 'right';
224
+ else
225
+ position = 'left';
226
+ }
227
+ }
228
+ // Adjust alignment for horizontal overflow
229
+ if (position === 'top' || position === 'bottom') {
230
+ if (align === 'start' && triggerRect.left + popoverRect.width > viewportWidth - viewportPadding) {
231
+ align = 'end';
232
+ }
233
+ else if (align === 'end' && triggerRect.right - popoverRect.width < viewportPadding) {
234
+ align = 'start';
235
+ }
236
+ else if (align === 'center') {
237
+ const triggerCenter = triggerRect.left + triggerRect.width / 2;
238
+ if (triggerCenter - popoverRect.width / 2 < viewportPadding) {
239
+ align = 'start';
240
+ }
241
+ else if (triggerCenter + popoverRect.width / 2 > viewportWidth - viewportPadding) {
242
+ align = 'end';
243
+ }
244
+ }
245
+ }
246
+ // Calculate position
247
+ let top = 0;
248
+ let left = 0;
249
+ let maxHeight = null;
250
+ switch (position) {
251
+ case 'top':
252
+ top = triggerRect.top - popoverRect.height - this.offset;
253
+ if (top < viewportPadding) {
254
+ maxHeight = triggerRect.top - this.offset - viewportPadding * 2;
255
+ top = viewportPadding;
256
+ }
257
+ break;
258
+ case 'bottom':
259
+ top = triggerRect.bottom + this.offset;
260
+ if (top + popoverRect.height > viewportHeight - viewportPadding) {
261
+ maxHeight = viewportHeight - top - viewportPadding;
262
+ }
263
+ break;
264
+ case 'left':
265
+ left = triggerRect.left - popoverRect.width - this.offset;
266
+ top = triggerRect.top;
267
+ if (left < viewportPadding)
268
+ left = viewportPadding;
269
+ break;
270
+ case 'right':
271
+ left = triggerRect.right + this.offset;
272
+ top = triggerRect.top;
273
+ if (left + popoverRect.width > viewportWidth - viewportPadding) {
274
+ left = viewportWidth - popoverRect.width - viewportPadding;
275
+ }
276
+ break;
277
+ }
278
+ // Calculate horizontal alignment for top/bottom
279
+ if (position === 'top' || position === 'bottom') {
280
+ switch (align) {
281
+ case 'start':
282
+ left = triggerRect.left;
283
+ break;
284
+ case 'center':
285
+ left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;
286
+ break;
287
+ case 'end':
288
+ left = triggerRect.right - popoverRect.width;
289
+ break;
290
+ }
291
+ // Constrain to viewport
292
+ if (left < viewportPadding) {
293
+ left = viewportPadding;
294
+ }
295
+ else if (left + popoverRect.width > viewportWidth - viewportPadding) {
296
+ left = viewportWidth - popoverRect.width - viewportPadding;
297
+ }
298
+ }
299
+ // Calculate vertical alignment for left/right
300
+ if (position === 'left' || position === 'right') {
301
+ switch (align) {
302
+ case 'start':
303
+ top = triggerRect.top;
304
+ break;
305
+ case 'center':
306
+ top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;
307
+ break;
308
+ case 'end':
309
+ top = triggerRect.bottom - popoverRect.height;
310
+ break;
311
+ }
312
+ if (top < viewportPadding)
313
+ top = viewportPadding;
314
+ if (top + popoverRect.height > viewportHeight - viewportPadding) {
315
+ maxHeight = viewportHeight - top - viewportPadding;
316
+ }
317
+ }
318
+ // Apply styles
319
+ this.popoverEl.style.top = `${top}px`;
320
+ this.popoverEl.style.left = `${left}px`;
321
+ if (maxHeight !== null && maxHeight > 100) {
322
+ this.popoverEl.style.maxHeight = `${maxHeight}px`;
323
+ this.popoverEl.style.overflowY = 'auto';
324
+ }
325
+ else {
326
+ this.popoverEl.style.maxHeight = '';
327
+ this.popoverEl.style.overflowY = '';
328
+ }
329
+ this.isPositioned = true;
330
+ }
331
+ render() {
332
+ const popoverStyles = {
333
+ visibility: this.isPositioned ? 'visible' : 'hidden',
334
+ };
335
+ if (this.width)
336
+ popoverStyles.width = this.width;
337
+ if (this.minWidth)
338
+ popoverStyles.minWidth = this.minWidth;
339
+ if (this.maxWidth)
340
+ popoverStyles.maxWidth = this.maxWidth;
341
+ return [
342
+ h("div", { key: '3d2a3b86ddb3be577bd0e976a5a00f25396a97fb', class: "le-popover-trigger", ref: (el) => (this.triggerEl = el), onClick: this.handleTriggerClick }, h("slot", { key: '9db2e9e2b0bdb25c5a2361115d2094292fe692ec', name: "trigger" }, h("button", { key: '88d78b192f72731f00d6131b92b8d6a4b445d7f9', type: "button", class: "le-popover-default-trigger" }, h("span", { key: '0f2913f160cda5dcbeb20c714219d587196e230b' }, "\u2295")))),
343
+ h("div", { key: 'b65d2de900ff6e67a62d92d7452db34afde9f257', id: this.uniqueId, class: "le-popover-content", popover: this.closeOnClickOutside ? 'auto' : 'manual', ref: (el) => (this.popoverEl = el), style: popoverStyles }, (this.popoverTitle || this.showClose) && (h("div", { key: '323061fc49c8e0fc9ae541dfc576e551b0a83818', class: "le-popover-header" }, this.popoverTitle && h("span", { key: 'b1d9f4203966ae6a0bb14186824596643954d6f8', class: "le-popover-title" }, this.popoverTitle), this.showClose && (h("button", { key: 'd0d335d8c9897ed9ba7bd0370572a8cafa72b044', type: "button", class: "le-popover-close", onClick: () => this.hide(), "aria-label": "Close" }, "\u00D7")))), h("div", { key: '52d3294394b0e1fd49f8c361414e228feed68ea9', class: "le-popover-body" }, h("slot", { key: '16d8691545f2eaa44f136bfea33a1f1d71d18cd7' })))
344
+ ];
345
+ }
346
+ static get is() { return "le-popover"; }
347
+ static get encapsulation() { return "shadow"; }
348
+ static get originalStyleUrls() {
349
+ return {
350
+ "$": ["le-popover.css"]
351
+ };
352
+ }
353
+ static get styleUrls() {
354
+ return {
355
+ "$": ["le-popover.css"]
356
+ };
357
+ }
358
+ static get properties() {
359
+ return {
360
+ "mode": {
361
+ "type": "string",
362
+ "mutable": true,
363
+ "complexType": {
364
+ "original": "'default' | 'admin'",
365
+ "resolved": "\"admin\" | \"default\"",
366
+ "references": {}
367
+ },
368
+ "required": false,
369
+ "optional": false,
370
+ "docs": {
371
+ "tags": [],
372
+ "text": "Mode of the popover should be 'default' for internal use"
373
+ },
374
+ "getter": false,
375
+ "setter": false,
376
+ "reflect": true,
377
+ "attribute": "mode"
378
+ },
379
+ "open": {
380
+ "type": "boolean",
381
+ "mutable": true,
382
+ "complexType": {
383
+ "original": "boolean",
384
+ "resolved": "boolean",
385
+ "references": {}
386
+ },
387
+ "required": false,
388
+ "optional": false,
389
+ "docs": {
390
+ "tags": [],
391
+ "text": "Whether the popover is currently open"
392
+ },
393
+ "getter": false,
394
+ "setter": false,
395
+ "reflect": true,
396
+ "attribute": "open",
397
+ "defaultValue": "false"
398
+ },
399
+ "position": {
400
+ "type": "string",
401
+ "mutable": false,
402
+ "complexType": {
403
+ "original": "'top' | 'bottom' | 'left' | 'right' | 'auto'",
404
+ "resolved": "\"auto\" | \"bottom\" | \"left\" | \"right\" | \"top\"",
405
+ "references": {}
406
+ },
407
+ "required": false,
408
+ "optional": false,
409
+ "docs": {
410
+ "tags": [],
411
+ "text": "Position of the popover relative to its trigger"
412
+ },
413
+ "getter": false,
414
+ "setter": false,
415
+ "reflect": false,
416
+ "attribute": "position",
417
+ "defaultValue": "'bottom'"
418
+ },
419
+ "align": {
420
+ "type": "string",
421
+ "mutable": false,
422
+ "complexType": {
423
+ "original": "'start' | 'center' | 'end'",
424
+ "resolved": "\"center\" | \"end\" | \"start\"",
425
+ "references": {}
426
+ },
427
+ "required": false,
428
+ "optional": false,
429
+ "docs": {
430
+ "tags": [],
431
+ "text": "Alignment of the popover"
432
+ },
433
+ "getter": false,
434
+ "setter": false,
435
+ "reflect": false,
436
+ "attribute": "align",
437
+ "defaultValue": "'start'"
438
+ },
439
+ "popoverTitle": {
440
+ "type": "string",
441
+ "mutable": false,
442
+ "complexType": {
443
+ "original": "string",
444
+ "resolved": "string",
445
+ "references": {}
446
+ },
447
+ "required": false,
448
+ "optional": true,
449
+ "docs": {
450
+ "tags": [],
451
+ "text": "Optional title for the popover header"
452
+ },
453
+ "getter": false,
454
+ "setter": false,
455
+ "reflect": false,
456
+ "attribute": "popover-title"
457
+ },
458
+ "showClose": {
459
+ "type": "boolean",
460
+ "mutable": false,
461
+ "complexType": {
462
+ "original": "boolean",
463
+ "resolved": "boolean",
464
+ "references": {}
465
+ },
466
+ "required": false,
467
+ "optional": false,
468
+ "docs": {
469
+ "tags": [],
470
+ "text": "Whether to show a close button in the header"
471
+ },
472
+ "getter": false,
473
+ "setter": false,
474
+ "reflect": false,
475
+ "attribute": "show-close",
476
+ "defaultValue": "true"
477
+ },
478
+ "closeOnClickOutside": {
479
+ "type": "boolean",
480
+ "mutable": false,
481
+ "complexType": {
482
+ "original": "boolean",
483
+ "resolved": "boolean",
484
+ "references": {}
485
+ },
486
+ "required": false,
487
+ "optional": false,
488
+ "docs": {
489
+ "tags": [],
490
+ "text": "Whether clicking outside closes the popover"
491
+ },
492
+ "getter": false,
493
+ "setter": false,
494
+ "reflect": false,
495
+ "attribute": "close-on-click-outside",
496
+ "defaultValue": "true"
497
+ },
498
+ "closeOnEscape": {
499
+ "type": "boolean",
500
+ "mutable": false,
501
+ "complexType": {
502
+ "original": "boolean",
503
+ "resolved": "boolean",
504
+ "references": {}
505
+ },
506
+ "required": false,
507
+ "optional": false,
508
+ "docs": {
509
+ "tags": [],
510
+ "text": "Whether pressing Escape closes the popover"
511
+ },
512
+ "getter": false,
513
+ "setter": false,
514
+ "reflect": false,
515
+ "attribute": "close-on-escape",
516
+ "defaultValue": "true"
517
+ },
518
+ "offset": {
519
+ "type": "number",
520
+ "mutable": false,
521
+ "complexType": {
522
+ "original": "number",
523
+ "resolved": "number",
524
+ "references": {}
525
+ },
526
+ "required": false,
527
+ "optional": false,
528
+ "docs": {
529
+ "tags": [],
530
+ "text": "Offset from the trigger element (in pixels)"
531
+ },
532
+ "getter": false,
533
+ "setter": false,
534
+ "reflect": false,
535
+ "attribute": "offset",
536
+ "defaultValue": "8"
537
+ },
538
+ "width": {
539
+ "type": "string",
540
+ "mutable": false,
541
+ "complexType": {
542
+ "original": "string",
543
+ "resolved": "string",
544
+ "references": {}
545
+ },
546
+ "required": false,
547
+ "optional": true,
548
+ "docs": {
549
+ "tags": [],
550
+ "text": "Fixed width for the popover (e.g., '300px', '20rem')"
551
+ },
552
+ "getter": false,
553
+ "setter": false,
554
+ "reflect": false,
555
+ "attribute": "width"
556
+ },
557
+ "minWidth": {
558
+ "type": "string",
559
+ "mutable": false,
560
+ "complexType": {
561
+ "original": "string",
562
+ "resolved": "string",
563
+ "references": {}
564
+ },
565
+ "required": false,
566
+ "optional": true,
567
+ "docs": {
568
+ "tags": [],
569
+ "text": "Minimum width for the popover (e.g., '200px', '15rem')"
570
+ },
571
+ "getter": false,
572
+ "setter": false,
573
+ "reflect": false,
574
+ "attribute": "min-width",
575
+ "defaultValue": "'200px'"
576
+ },
577
+ "maxWidth": {
578
+ "type": "string",
579
+ "mutable": false,
580
+ "complexType": {
581
+ "original": "string",
582
+ "resolved": "string",
583
+ "references": {}
584
+ },
585
+ "required": false,
586
+ "optional": true,
587
+ "docs": {
588
+ "tags": [],
589
+ "text": "Maximum width for the popover (e.g., '400px', '25rem')"
590
+ },
591
+ "getter": false,
592
+ "setter": false,
593
+ "reflect": false,
594
+ "attribute": "max-width"
595
+ }
596
+ };
597
+ }
598
+ static get states() {
599
+ return {
600
+ "isPositioned": {}
601
+ };
602
+ }
603
+ static get events() {
604
+ return [{
605
+ "method": "lePopoverOpen",
606
+ "name": "lePopoverOpen",
607
+ "bubbles": true,
608
+ "cancelable": true,
609
+ "composed": true,
610
+ "docs": {
611
+ "tags": [],
612
+ "text": "Emitted when the popover opens"
613
+ },
614
+ "complexType": {
615
+ "original": "void",
616
+ "resolved": "void",
617
+ "references": {}
618
+ }
619
+ }, {
620
+ "method": "lePopoverClose",
621
+ "name": "lePopoverClose",
622
+ "bubbles": true,
623
+ "cancelable": true,
624
+ "composed": true,
625
+ "docs": {
626
+ "tags": [],
627
+ "text": "Emitted when the popover closes"
628
+ },
629
+ "complexType": {
630
+ "original": "void",
631
+ "resolved": "void",
632
+ "references": {}
633
+ }
634
+ }];
635
+ }
636
+ static get methods() {
637
+ return {
638
+ "show": {
639
+ "complexType": {
640
+ "signature": "() => Promise<void>",
641
+ "parameters": [],
642
+ "references": {
643
+ "Promise": {
644
+ "location": "global",
645
+ "id": "global::Promise"
646
+ }
647
+ },
648
+ "return": "Promise<void>"
649
+ },
650
+ "docs": {
651
+ "text": "Opens the popover",
652
+ "tags": []
653
+ }
654
+ },
655
+ "hide": {
656
+ "complexType": {
657
+ "signature": "() => Promise<void>",
658
+ "parameters": [],
659
+ "references": {
660
+ "Promise": {
661
+ "location": "global",
662
+ "id": "global::Promise"
663
+ }
664
+ },
665
+ "return": "Promise<void>"
666
+ },
667
+ "docs": {
668
+ "text": "Closes the popover",
669
+ "tags": []
670
+ }
671
+ },
672
+ "toggle": {
673
+ "complexType": {
674
+ "signature": "() => Promise<void>",
675
+ "parameters": [],
676
+ "references": {
677
+ "Promise": {
678
+ "location": "global",
679
+ "id": "global::Promise"
680
+ }
681
+ },
682
+ "return": "Promise<void>"
683
+ },
684
+ "docs": {
685
+ "text": "Toggles the popover",
686
+ "tags": []
687
+ }
688
+ }
689
+ };
690
+ }
691
+ static get elementRef() { return "el"; }
692
+ }
693
+ //# sourceMappingURL=le-popover.js.map