le-kit 0.5.2 → 0.5.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 (317) hide show
  1. package/LLM_CONTEXT.md +22 -0
  2. package/dist/cjs/le-bar_16.cjs.entry.js +945 -1257
  3. package/dist/cjs/le-box.cjs.entry.js +40 -88
  4. package/dist/cjs/le-breadcrumbs.cjs.entry.js +223 -0
  5. package/dist/cjs/le-card.cjs.entry.js +11 -11
  6. package/dist/cjs/le-code-input.cjs.entry.js +76 -110
  7. package/dist/cjs/le-combobox.cjs.entry.js +126 -153
  8. package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
  9. package/dist/cjs/le-kit.cjs.js +1 -1
  10. package/dist/cjs/le-multiselect.cjs.entry.js +149 -171
  11. package/dist/cjs/le-number-input.cjs.entry.js +89 -129
  12. package/dist/cjs/le-round-progress.cjs.entry.js +6 -11
  13. package/dist/cjs/le-segmented-control.cjs.entry.js +77 -87
  14. package/dist/cjs/le-side-panel-toggle.cjs.entry.js +59 -75
  15. package/dist/cjs/le-side-panel.cjs.entry.js +130 -137
  16. package/dist/cjs/le-stack.cjs.entry.js +38 -51
  17. package/dist/cjs/le-tab-bar.cjs.entry.js +80 -89
  18. package/dist/cjs/le-tab-panel.cjs.entry.js +21 -39
  19. package/dist/cjs/le-tab.cjs.entry.js +53 -91
  20. package/dist/cjs/le-tabs.cjs.entry.js +112 -122
  21. package/dist/cjs/le-tag.cjs.entry.js +23 -40
  22. package/dist/cjs/le-text.cjs.entry.js +131 -148
  23. package/dist/cjs/le-turntable.cjs.entry.js +17 -25
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/collection/collection-manifest.json +1 -0
  26. package/dist/collection/components/le-bar/le-bar.js +132 -139
  27. package/dist/collection/components/le-bar/le-bar.js.map +1 -1
  28. package/dist/collection/components/le-box/le-box.js +41 -88
  29. package/dist/collection/components/le-box/le-box.js.map +1 -1
  30. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.css +72 -0
  31. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js +372 -0
  32. package/dist/collection/components/le-breadcrumbs/le-breadcrumbs.js.map +1 -0
  33. package/dist/collection/components/le-button/le-button.js +50 -79
  34. package/dist/collection/components/le-button/le-button.js.map +1 -1
  35. package/dist/collection/components/le-card/le-card.js +12 -11
  36. package/dist/collection/components/le-card/le-card.js.map +1 -1
  37. package/dist/collection/components/le-checkbox/le-checkbox.js +27 -42
  38. package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -1
  39. package/dist/collection/components/le-code-input/le-code-input.js +77 -110
  40. package/dist/collection/components/le-code-input/le-code-input.js.map +1 -1
  41. package/dist/collection/components/le-collapse/le-collapse.js +15 -14
  42. package/dist/collection/components/le-collapse/le-collapse.js.map +1 -1
  43. package/dist/collection/components/le-combobox/le-combobox.js +127 -153
  44. package/dist/collection/components/le-combobox/le-combobox.js.map +1 -1
  45. package/dist/collection/components/le-component/le-component.js +14 -38
  46. package/dist/collection/components/le-component/le-component.js.map +1 -1
  47. package/dist/collection/components/le-current-heading/le-current-heading.js +6 -5
  48. package/dist/collection/components/le-current-heading/le-current-heading.js.map +1 -1
  49. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +139 -165
  50. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js.map +1 -1
  51. package/dist/collection/components/le-header/le-header.js +22 -45
  52. package/dist/collection/components/le-header/le-header.js.map +1 -1
  53. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +1 -1
  54. package/dist/collection/components/le-icon/le-icon.js +14 -14
  55. package/dist/collection/components/le-icon/le-icon.js.map +1 -1
  56. package/dist/collection/components/le-multiselect/le-multiselect.js +150 -171
  57. package/dist/collection/components/le-multiselect/le-multiselect.js.map +1 -1
  58. package/dist/collection/components/le-navigation/le-navigation.js +118 -128
  59. package/dist/collection/components/le-navigation/le-navigation.js.map +1 -1
  60. package/dist/collection/components/le-number-input/le-number-input.js +90 -129
  61. package/dist/collection/components/le-number-input/le-number-input.js.map +1 -1
  62. package/dist/collection/components/le-popover/le-popover.css +2 -1
  63. package/dist/collection/components/le-popover/le-popover.js +101 -126
  64. package/dist/collection/components/le-popover/le-popover.js.map +1 -1
  65. package/dist/collection/components/le-popup/le-popup.js +89 -115
  66. package/dist/collection/components/le-popup/le-popup.js.map +1 -1
  67. package/dist/collection/components/le-round-progress/le-round-progress.js +7 -12
  68. package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -1
  69. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +6 -7
  70. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js.map +1 -1
  71. package/dist/collection/components/le-segmented-control/le-segmented-control.js +78 -87
  72. package/dist/collection/components/le-segmented-control/le-segmented-control.js.map +1 -1
  73. package/dist/collection/components/le-select/le-select.js +88 -110
  74. package/dist/collection/components/le-select/le-select.js.map +1 -1
  75. package/dist/collection/components/le-side-panel/le-side-panel.css +10 -1
  76. package/dist/collection/components/le-side-panel/le-side-panel.js +131 -136
  77. package/dist/collection/components/le-side-panel/le-side-panel.js.map +1 -1
  78. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js +60 -75
  79. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js.map +1 -1
  80. package/dist/collection/components/le-slot/le-slot.js +96 -144
  81. package/dist/collection/components/le-slot/le-slot.js.map +1 -1
  82. package/dist/collection/components/le-stack/le-stack.js +39 -51
  83. package/dist/collection/components/le-stack/le-stack.js.map +1 -1
  84. package/dist/collection/components/le-string-input/le-string-input.js +41 -84
  85. package/dist/collection/components/le-string-input/le-string-input.js.map +1 -1
  86. package/dist/collection/components/le-tab/le-tab.js +54 -91
  87. package/dist/collection/components/le-tab/le-tab.js.map +1 -1
  88. package/dist/collection/components/le-tab-bar/le-tab-bar.js +81 -89
  89. package/dist/collection/components/le-tab-bar/le-tab-bar.js.map +1 -1
  90. package/dist/collection/components/le-tab-panel/le-tab-panel.js +22 -39
  91. package/dist/collection/components/le-tab-panel/le-tab-panel.js.map +1 -1
  92. package/dist/collection/components/le-tabs/le-tabs.js +113 -122
  93. package/dist/collection/components/le-tabs/le-tabs.js.map +1 -1
  94. package/dist/collection/components/le-tag/le-tag.js +25 -40
  95. package/dist/collection/components/le-tag/le-tag.js.map +1 -1
  96. package/dist/collection/components/le-text/le-text.js +132 -148
  97. package/dist/collection/components/le-text/le-text.js.map +1 -1
  98. package/dist/collection/components/le-turntable/le-turntable.js +18 -26
  99. package/dist/collection/components/le-turntable/le-turntable.js.map +1 -1
  100. package/dist/collection/dist/components/assets/custom-elements.json +973 -645
  101. package/dist/collection/dist/components/assets/icons/arrow-left.json +21 -0
  102. package/dist/collection/dist/components/assets/icons/arrow-right.json +21 -0
  103. package/dist/collection/dist/components/assets/icons/check.json +12 -0
  104. package/dist/collection/dist/components/assets/icons/chevron-down.json +1 -2
  105. package/dist/collection/dist/components/assets/icons/chevron-left.json +12 -0
  106. package/dist/collection/dist/components/assets/icons/chevron-right.json +12 -0
  107. package/dist/collection/dist/components/assets/icons/chevron-up.json +12 -0
  108. package/dist/components/assets/custom-elements.json +973 -645
  109. package/dist/components/assets/icons/arrow-left.json +21 -0
  110. package/dist/components/assets/icons/arrow-right.json +21 -0
  111. package/dist/components/assets/icons/check.json +12 -0
  112. package/dist/components/assets/icons/chevron-down.json +1 -2
  113. package/dist/components/assets/icons/chevron-left.json +12 -0
  114. package/dist/components/assets/icons/chevron-right.json +12 -0
  115. package/dist/components/assets/icons/chevron-up.json +12 -0
  116. package/dist/components/le-bar2.js +132 -140
  117. package/dist/components/le-bar2.js.map +1 -1
  118. package/dist/components/le-box.js +41 -89
  119. package/dist/components/le-box.js.map +1 -1
  120. package/dist/components/le-breadcrumbs.d.ts +11 -0
  121. package/dist/components/le-breadcrumbs.js +327 -0
  122. package/dist/components/le-breadcrumbs.js.map +1 -0
  123. package/dist/components/le-button2.js +405 -619
  124. package/dist/components/le-button2.js.map +1 -1
  125. package/dist/components/le-card.js +12 -12
  126. package/dist/components/le-card.js.map +1 -1
  127. package/dist/components/le-code-input.js +77 -111
  128. package/dist/components/le-code-input.js.map +1 -1
  129. package/dist/components/le-collapse2.js +15 -15
  130. package/dist/components/le-collapse2.js.map +1 -1
  131. package/dist/components/le-combobox.js +127 -154
  132. package/dist/components/le-combobox.js.map +1 -1
  133. package/dist/components/le-current-heading.js +6 -6
  134. package/dist/components/le-current-heading.js.map +1 -1
  135. package/dist/components/le-dropdown-base2.js +139 -166
  136. package/dist/components/le-dropdown-base2.js.map +1 -1
  137. package/dist/components/le-header-placeholder.js +1 -1
  138. package/dist/components/le-header.js +22 -46
  139. package/dist/components/le-header.js.map +1 -1
  140. package/dist/components/le-icon2.js +14 -15
  141. package/dist/components/le-icon2.js.map +1 -1
  142. package/dist/components/le-multiselect.js +150 -172
  143. package/dist/components/le-multiselect.js.map +1 -1
  144. package/dist/components/le-navigation.js +1 -494
  145. package/dist/components/le-navigation.js.map +1 -1
  146. package/dist/components/le-navigation2.js +488 -0
  147. package/dist/components/le-navigation2.js.map +1 -0
  148. package/dist/components/le-number-input.js +90 -130
  149. package/dist/components/le-number-input.js.map +1 -1
  150. package/dist/components/le-popover2.js +103 -128
  151. package/dist/components/le-popover2.js.map +1 -1
  152. package/dist/components/le-round-progress.js +7 -12
  153. package/dist/components/le-round-progress.js.map +1 -1
  154. package/dist/components/le-scroll-progress.js +6 -8
  155. package/dist/components/le-scroll-progress.js.map +1 -1
  156. package/dist/components/le-segmented-control.js +78 -88
  157. package/dist/components/le-segmented-control.js.map +1 -1
  158. package/dist/components/le-side-panel-toggle2.js +60 -76
  159. package/dist/components/le-side-panel-toggle2.js.map +1 -1
  160. package/dist/components/le-side-panel.js +133 -139
  161. package/dist/components/le-side-panel.js.map +1 -1
  162. package/dist/components/le-stack.js +39 -52
  163. package/dist/components/le-stack.js.map +1 -1
  164. package/dist/components/le-tab-bar.js +81 -90
  165. package/dist/components/le-tab-bar.js.map +1 -1
  166. package/dist/components/le-tab-panel.js +22 -40
  167. package/dist/components/le-tab-panel.js.map +1 -1
  168. package/dist/components/le-tab2.js +54 -92
  169. package/dist/components/le-tab2.js.map +1 -1
  170. package/dist/components/le-tabs.js +113 -123
  171. package/dist/components/le-tabs.js.map +1 -1
  172. package/dist/components/le-tag2.js +24 -41
  173. package/dist/components/le-tag2.js.map +1 -1
  174. package/dist/components/le-text.js +132 -149
  175. package/dist/components/le-text.js.map +1 -1
  176. package/dist/components/le-turntable.js +18 -26
  177. package/dist/components/le-turntable.js.map +1 -1
  178. package/dist/docs.json +294 -2
  179. package/dist/esm/le-bar_16.entry.js +946 -1258
  180. package/dist/esm/le-box.entry.js +41 -89
  181. package/dist/esm/le-box.entry.js.map +1 -1
  182. package/dist/esm/le-breadcrumbs.entry.js +221 -0
  183. package/dist/esm/le-breadcrumbs.entry.js.map +1 -0
  184. package/dist/esm/le-card.entry.js +12 -12
  185. package/dist/esm/le-card.entry.js.map +1 -1
  186. package/dist/esm/le-code-input.entry.js +77 -111
  187. package/dist/esm/le-code-input.entry.js.map +1 -1
  188. package/dist/esm/le-combobox.entry.js +127 -154
  189. package/dist/esm/le-combobox.entry.js.map +1 -1
  190. package/dist/esm/le-header-placeholder.entry.js +1 -1
  191. package/dist/esm/le-kit.js +1 -1
  192. package/dist/esm/le-multiselect.entry.js +150 -172
  193. package/dist/esm/le-multiselect.entry.js.map +1 -1
  194. package/dist/esm/le-number-input.entry.js +90 -130
  195. package/dist/esm/le-number-input.entry.js.map +1 -1
  196. package/dist/esm/le-round-progress.entry.js +7 -12
  197. package/dist/esm/le-round-progress.entry.js.map +1 -1
  198. package/dist/esm/le-segmented-control.entry.js +78 -88
  199. package/dist/esm/le-segmented-control.entry.js.map +1 -1
  200. package/dist/esm/le-side-panel-toggle.entry.js +60 -76
  201. package/dist/esm/le-side-panel-toggle.entry.js.map +1 -1
  202. package/dist/esm/le-side-panel.entry.js +131 -138
  203. package/dist/esm/le-side-panel.entry.js.map +1 -1
  204. package/dist/esm/le-stack.entry.js +39 -52
  205. package/dist/esm/le-stack.entry.js.map +1 -1
  206. package/dist/esm/le-tab-bar.entry.js +81 -90
  207. package/dist/esm/le-tab-bar.entry.js.map +1 -1
  208. package/dist/esm/le-tab-panel.entry.js +22 -40
  209. package/dist/esm/le-tab-panel.entry.js.map +1 -1
  210. package/dist/esm/le-tab.entry.js +54 -92
  211. package/dist/esm/le-tab.entry.js.map +1 -1
  212. package/dist/esm/le-tabs.entry.js +113 -123
  213. package/dist/esm/le-tabs.entry.js.map +1 -1
  214. package/dist/esm/le-tag.entry.js +23 -40
  215. package/dist/esm/le-tag.entry.js.map +1 -1
  216. package/dist/esm/le-text.entry.js +132 -149
  217. package/dist/esm/le-text.entry.js.map +1 -1
  218. package/dist/esm/le-turntable.entry.js +18 -26
  219. package/dist/esm/le-turntable.entry.js.map +1 -1
  220. package/dist/esm/loader.js +1 -1
  221. package/dist/le-kit/dist/components/assets/custom-elements.json +973 -645
  222. package/dist/le-kit/dist/components/assets/icons/arrow-left.json +21 -0
  223. package/dist/le-kit/dist/components/assets/icons/arrow-right.json +21 -0
  224. package/dist/le-kit/dist/components/assets/icons/check.json +12 -0
  225. package/dist/le-kit/dist/components/assets/icons/chevron-down.json +1 -2
  226. package/dist/le-kit/dist/components/assets/icons/chevron-left.json +12 -0
  227. package/dist/le-kit/dist/components/assets/icons/chevron-right.json +12 -0
  228. package/dist/le-kit/dist/components/assets/icons/chevron-up.json +12 -0
  229. package/dist/le-kit/le-kit.esm.js +1 -1
  230. package/dist/le-kit/p-3067b18f.entry.js +2 -0
  231. package/dist/le-kit/p-3067b18f.entry.js.map +1 -0
  232. package/dist/le-kit/p-34c4d97d.entry.js +2 -0
  233. package/dist/le-kit/p-34c4d97d.entry.js.map +1 -0
  234. package/dist/le-kit/p-45182541.entry.js +2 -0
  235. package/dist/le-kit/p-45182541.entry.js.map +1 -0
  236. package/dist/le-kit/p-52a41c96.entry.js +2 -0
  237. package/dist/le-kit/p-52a41c96.entry.js.map +1 -0
  238. package/dist/le-kit/p-55fb5dd2.entry.js +2 -0
  239. package/dist/le-kit/p-55fb5dd2.entry.js.map +1 -0
  240. package/dist/le-kit/{p-ab6c1def.entry.js → p-649025f4.entry.js} +2 -2
  241. package/dist/le-kit/p-649025f4.entry.js.map +1 -0
  242. package/dist/le-kit/p-67930309.entry.js +2 -0
  243. package/dist/le-kit/p-67930309.entry.js.map +1 -0
  244. package/dist/le-kit/p-6d222705.entry.js +2 -0
  245. package/dist/le-kit/p-6d222705.entry.js.map +1 -0
  246. package/dist/le-kit/p-8049e0c2.entry.js +2 -0
  247. package/dist/le-kit/p-8049e0c2.entry.js.map +1 -0
  248. package/dist/le-kit/p-884f57bd.entry.js +2 -0
  249. package/dist/le-kit/p-88c70f9d.entry.js +2 -0
  250. package/dist/le-kit/p-88c70f9d.entry.js.map +1 -0
  251. package/dist/le-kit/p-96610729.entry.js +2 -0
  252. package/dist/le-kit/p-96610729.entry.js.map +1 -0
  253. package/dist/le-kit/p-a34054e0.entry.js +2 -0
  254. package/dist/le-kit/p-a34054e0.entry.js.map +1 -0
  255. package/dist/le-kit/p-a388e46a.entry.js +2 -0
  256. package/dist/le-kit/p-a388e46a.entry.js.map +1 -0
  257. package/dist/le-kit/p-c0c53650.entry.js +2 -0
  258. package/dist/le-kit/p-c0c53650.entry.js.map +1 -0
  259. package/dist/le-kit/p-cbf17514.entry.js +2 -0
  260. package/dist/le-kit/p-cbf17514.entry.js.map +1 -0
  261. package/dist/le-kit/p-d934de74.entry.js +2 -0
  262. package/dist/le-kit/p-d934de74.entry.js.map +1 -0
  263. package/dist/le-kit/p-de72c8b5.entry.js +2 -0
  264. package/dist/le-kit/p-de72c8b5.entry.js.map +1 -0
  265. package/dist/le-kit/p-e3dd0f2a.entry.js +2 -0
  266. package/dist/le-kit/p-e3dd0f2a.entry.js.map +1 -0
  267. package/dist/le-kit/p-ee170967.entry.js +2 -0
  268. package/dist/le-kit/p-ee170967.entry.js.map +1 -0
  269. package/dist/le-kit/p-eedb2f75.entry.js +2 -0
  270. package/dist/le-kit/p-eedb2f75.entry.js.map +1 -0
  271. package/dist/types/components/le-breadcrumbs/le-breadcrumbs.d.ts +57 -0
  272. package/dist/types/components/le-side-panel/le-side-panel.d.ts +2 -0
  273. package/dist/types/components.d.ts +84 -0
  274. package/package.json +1 -1
  275. package/dist/collection/assets/icons/chevron-down.svg +0 -3
  276. package/dist/collection/dist/components/assets/icons/chevron-down.svg +0 -3
  277. package/dist/components/assets/icons/chevron-down.svg +0 -3
  278. package/dist/le-kit/dist/components/assets/icons/chevron-down.svg +0 -3
  279. package/dist/le-kit/p-221d379a.entry.js +0 -2
  280. package/dist/le-kit/p-221d379a.entry.js.map +0 -1
  281. package/dist/le-kit/p-24112ca3.entry.js +0 -2
  282. package/dist/le-kit/p-24112ca3.entry.js.map +0 -1
  283. package/dist/le-kit/p-2c6d080d.entry.js +0 -2
  284. package/dist/le-kit/p-2c6d080d.entry.js.map +0 -1
  285. package/dist/le-kit/p-46276e77.entry.js +0 -2
  286. package/dist/le-kit/p-46276e77.entry.js.map +0 -1
  287. package/dist/le-kit/p-516c8531.entry.js +0 -2
  288. package/dist/le-kit/p-6ae60ba5.entry.js +0 -2
  289. package/dist/le-kit/p-6ae60ba5.entry.js.map +0 -1
  290. package/dist/le-kit/p-6b69f9a2.entry.js +0 -2
  291. package/dist/le-kit/p-6b69f9a2.entry.js.map +0 -1
  292. package/dist/le-kit/p-6d14306f.entry.js +0 -2
  293. package/dist/le-kit/p-6d14306f.entry.js.map +0 -1
  294. package/dist/le-kit/p-7bcdf2d4.entry.js +0 -2
  295. package/dist/le-kit/p-7bcdf2d4.entry.js.map +0 -1
  296. package/dist/le-kit/p-7cf1e23c.entry.js +0 -2
  297. package/dist/le-kit/p-7cf1e23c.entry.js.map +0 -1
  298. package/dist/le-kit/p-85f2fd4d.entry.js +0 -2
  299. package/dist/le-kit/p-85f2fd4d.entry.js.map +0 -1
  300. package/dist/le-kit/p-98242429.entry.js +0 -2
  301. package/dist/le-kit/p-98242429.entry.js.map +0 -1
  302. package/dist/le-kit/p-ab6c1def.entry.js.map +0 -1
  303. package/dist/le-kit/p-ae4ead64.entry.js +0 -2
  304. package/dist/le-kit/p-ae4ead64.entry.js.map +0 -1
  305. package/dist/le-kit/p-b05d4511.entry.js +0 -2
  306. package/dist/le-kit/p-b05d4511.entry.js.map +0 -1
  307. package/dist/le-kit/p-b6ac02ff.entry.js +0 -2
  308. package/dist/le-kit/p-b6ac02ff.entry.js.map +0 -1
  309. package/dist/le-kit/p-c24769e2.entry.js +0 -2
  310. package/dist/le-kit/p-c24769e2.entry.js.map +0 -1
  311. package/dist/le-kit/p-dc0445ad.entry.js +0 -2
  312. package/dist/le-kit/p-dc0445ad.entry.js.map +0 -1
  313. package/dist/le-kit/p-eb5286f2.entry.js +0 -2
  314. package/dist/le-kit/p-eb5286f2.entry.js.map +0 -1
  315. package/dist/le-kit/p-f78b1ee6.entry.js +0 -2
  316. package/dist/le-kit/p-f78b1ee6.entry.js.map +0 -1
  317. /package/dist/le-kit/{p-516c8531.entry.js.map → p-884f57bd.entry.js.map} +0 -0
@@ -9,6 +9,7 @@ const lePopoverCss = () => `/* ============================================
9
9
  :host {
10
10
  display: inline-block;
11
11
  position: relative;
12
+ --le-popover-padding: var(--le-space-md, 12px);
12
13
  }
13
14
 
14
15
  :host([trigger-full-width]) {
@@ -154,7 +155,7 @@ const lePopoverCss = () => `/* ============================================
154
155
  ============================================ */
155
156
 
156
157
  .le-popover-body {
157
- padding: var(--le-space-md, 12px);
158
+ padding: var(--le-popover-padding);
158
159
  }
159
160
 
160
161
  /* ============================================
@@ -178,80 +179,109 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
178
179
  this.__attachShadow();
179
180
  this.lePopoverOpen = createEvent(this, "lePopoverOpen", 7);
180
181
  this.lePopoverClose = createEvent(this, "lePopoverClose", 7);
182
+ /**
183
+ * Whether the popover is currently open
184
+ */
185
+ this.open = false;
186
+ /**
187
+ * Position of the popover relative to its trigger
188
+ */
189
+ this.position = 'bottom';
190
+ /**
191
+ * Alignment of the popover
192
+ */
193
+ this.align = 'start';
194
+ /**
195
+ * Whether to show a close button in the header
196
+ */
197
+ this.showClose = true;
198
+ /**
199
+ * Whether clicking outside closes the popover
200
+ */
201
+ this.closeOnClickOutside = true;
202
+ /**
203
+ * Whether pressing Escape closes the popover
204
+ */
205
+ this.closeOnEscape = true;
206
+ /**
207
+ * Offset from the trigger element (in pixels)
208
+ */
209
+ this.offset = 8;
210
+ /**
211
+ * Minimum width for the popover (e.g., '200px', '15rem')
212
+ */
213
+ this.minWidth = '200px';
214
+ /**
215
+ * Should the popover's trigger take full width of its container
216
+ */
217
+ this.triggerFullWidth = false;
218
+ this.isPositioned = false;
219
+ this.uniqueId = `le-popover-${Math.random().toString(36).substr(2, 9)}`;
220
+ this.scrollParents = [];
221
+ this.isListeningForDismiss = false;
222
+ this.handleDocumentPointerDown = (event) => {
223
+ if (!this.open || !this.closeOnClickOutside)
224
+ return;
225
+ // If the click happens inside this popover component (trigger OR content), don't close.
226
+ const path = (event.composedPath?.() ?? []);
227
+ if (path.includes(this.el))
228
+ return;
229
+ this.hide();
230
+ };
231
+ this.handleDocumentKeyDown = (event) => {
232
+ if (!this.open || !this.closeOnEscape)
233
+ return;
234
+ if (event.key !== 'Escape')
235
+ return;
236
+ // Only the top-most opened popover handles Escape.
237
+ const top = openPopoverStack[openPopoverStack.length - 1];
238
+ if (top !== this.el)
239
+ return;
240
+ event.preventDefault();
241
+ event.stopPropagation();
242
+ this.hide();
243
+ };
244
+ this.handleScroll = () => {
245
+ if (this.open) {
246
+ this._updatePosition();
247
+ }
248
+ };
249
+ this.handlePopoverToggle = (event) => {
250
+ if (event.newState === 'open') {
251
+ this.handleOpened();
252
+ }
253
+ else {
254
+ this.handleClosed();
255
+ }
256
+ };
257
+ this.handleOtherPopoverOpen = (event) => {
258
+ const customEvent = event;
259
+ const openingPopover = customEvent.detail?.popover;
260
+ if (!openingPopover)
261
+ return;
262
+ if (openingPopover === this.el)
263
+ return;
264
+ // Allow nested popovers (e.g., le-select inside another popover).
265
+ // Use a shadow-DOM-aware containment check.
266
+ if (this.shadowContains(this.el, openingPopover) ||
267
+ this.shadowContains(openingPopover, this.el)) {
268
+ return;
269
+ }
270
+ if (this.open) {
271
+ this.hide();
272
+ }
273
+ };
274
+ this.handleTriggerClick = (event) => {
275
+ event.stopPropagation();
276
+ this.toggle();
277
+ };
181
278
  }
182
- get el() { return this; }
183
- /**
184
- * Mode of the popover should be 'default' for internal use
185
- */
186
- mode;
187
- /**
188
- * Whether the popover is currently open
189
- */
190
- open = false;
191
- /**
192
- * Position of the popover relative to its trigger
193
- */
194
- position = 'bottom';
195
- /**
196
- * Alignment of the popover
197
- */
198
- align = 'start';
199
- /**
200
- * Optional title for the popover header
201
- */
202
- popoverTitle;
203
- /**
204
- * Whether to show a close button in the header
205
- */
206
- showClose = true;
207
- /**
208
- * Whether clicking outside closes the popover
209
- */
210
- closeOnClickOutside = true;
211
- /**
212
- * Whether pressing Escape closes the popover
213
- */
214
- closeOnEscape = true;
215
- /**
216
- * Offset from the trigger element (in pixels)
217
- */
218
- offset = 8;
219
- /**
220
- * Fixed width for the popover (e.g., '300px', '20rem')
221
- */
222
- width;
223
- /**
224
- * Minimum width for the popover (e.g., '200px', '15rem')
225
- */
226
- minWidth = '200px';
227
- /**
228
- * Maximum width for the popover (e.g., '400px', '25rem')
229
- */
230
- maxWidth;
231
- /**
232
- * Should the popover's trigger take full width of its container
233
- */
234
- triggerFullWidth = false;
235
- /**
236
- * Emitted when the popover opens
237
- */
238
- lePopoverOpen;
239
- /**
240
- * Emitted when the popover closes
241
- */
242
- lePopoverClose;
243
279
  /**
244
280
  * Method to update the popover position from a parent component
245
281
  */
246
282
  async updatePosition() {
247
283
  this._updatePosition();
248
284
  }
249
- isPositioned = false;
250
- triggerEl;
251
- popoverEl;
252
- uniqueId = `le-popover-${Math.random().toString(36).substr(2, 9)}`;
253
- scrollParents = [];
254
- isListeningForDismiss = false;
255
285
  get supportsPopoverApi() {
256
286
  return typeof HTMLElement.prototype.showPopover === 'function';
257
287
  }
@@ -308,28 +338,6 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
308
338
  document.removeEventListener('keydown', this.handleDocumentKeyDown, true);
309
339
  this.isListeningForDismiss = false;
310
340
  }
311
- handleDocumentPointerDown = (event) => {
312
- if (!this.open || !this.closeOnClickOutside)
313
- return;
314
- // If the click happens inside this popover component (trigger OR content), don't close.
315
- const path = (event.composedPath?.() ?? []);
316
- if (path.includes(this.el))
317
- return;
318
- this.hide();
319
- };
320
- handleDocumentKeyDown = (event) => {
321
- if (!this.open || !this.closeOnEscape)
322
- return;
323
- if (event.key !== 'Escape')
324
- return;
325
- // Only the top-most opened popover handles Escape.
326
- const top = openPopoverStack[openPopoverStack.length - 1];
327
- if (top !== this.el)
328
- return;
329
- event.preventDefault();
330
- event.stopPropagation();
331
- this.hide();
332
- };
333
341
  /**
334
342
  * Find all scrollable parent elements
335
343
  */
@@ -373,11 +381,6 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
373
381
  window.removeEventListener('resize', this.handleScroll);
374
382
  this.scrollParents = [];
375
383
  }
376
- handleScroll = () => {
377
- if (this.open) {
378
- this._updatePosition();
379
- }
380
- };
381
384
  handleOpened() {
382
385
  this.open = true;
383
386
  // Track stack order for Escape handling.
@@ -400,31 +403,6 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
400
403
  openPopoverStack.splice(index, 1);
401
404
  this.lePopoverClose.emit();
402
405
  }
403
- handlePopoverToggle = (event) => {
404
- if (event.newState === 'open') {
405
- this.handleOpened();
406
- }
407
- else {
408
- this.handleClosed();
409
- }
410
- };
411
- handleOtherPopoverOpen = (event) => {
412
- const customEvent = event;
413
- const openingPopover = customEvent.detail?.popover;
414
- if (!openingPopover)
415
- return;
416
- if (openingPopover === this.el)
417
- return;
418
- // Allow nested popovers (e.g., le-select inside another popover).
419
- // Use a shadow-DOM-aware containment check.
420
- if (this.shadowContains(this.el, openingPopover) ||
421
- this.shadowContains(openingPopover, this.el)) {
422
- return;
423
- }
424
- if (this.open) {
425
- this.hide();
426
- }
427
- };
428
406
  /**
429
407
  * Opens the popover
430
408
  */
@@ -461,10 +439,6 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
461
439
  await this.show();
462
440
  }
463
441
  }
464
- handleTriggerClick = (event) => {
465
- event.stopPropagation();
466
- this.toggle();
467
- };
468
442
  _updatePosition() {
469
443
  if (!this.triggerEl || !this.popoverEl)
470
444
  return;
@@ -619,15 +593,16 @@ const LePopover = /*@__PURE__*/ proxyCustomElement(class LePopover extends HTMLE
619
593
  popoverStyles.minWidth = this.minWidth;
620
594
  if (this.maxWidth)
621
595
  popoverStyles.maxWidth = this.maxWidth;
622
- return (h(Host, { key: '542d4ab391a9b176d110fe00c0dd61f2c46d73ef', "trigger-full-width": this.triggerFullWidth }, h("div", { key: '2248ab763d65e8a9150e62644452085f01c6a238', class: classnames('le-popover-trigger', {
596
+ return (h(Host, { key: 'c9adf9fa285b33fca47bd2caa54c3ad62f2784e1', "trigger-full-width": this.triggerFullWidth }, h("div", { key: 'e3f6c1441ec018325400e2673e012ba2939d359b', class: classnames('le-popover-trigger', {
623
597
  'le-popover-trigger-full-width': this.triggerFullWidth,
624
- }), ref: el => (this.triggerEl = el), onClick: this.handleTriggerClick, part: "trigger" }, h("slot", { key: '9d9a5f05f4b9f1b11f1fcbb09d29f0c1e36a2cd6', name: "trigger" }, h("button", { key: 'ed573daefaffb7b1effb3c7891722aa40e4b606e', type: "button", class: "le-popover-default-trigger" }, h("span", { key: '61f00ea9761935224e1529adc3b102b85efd4f33' }, "\u2295")))), h("div", { key: 'bf447493c9c7dedb7f2ae7083c80a7a2d06aebe0', id: this.uniqueId, class: "le-popover-content",
598
+ }), ref: el => (this.triggerEl = el), onClick: this.handleTriggerClick, part: "trigger" }, h("slot", { key: '9ece065f14fedc62905406359f0b6ae25747403b', name: "trigger" }, h("button", { key: '816e450c49c441f315bd619c24a4c96ef3bbc164', type: "button", class: "le-popover-default-trigger" }, h("span", { key: '4408bf0edee9ccf6e3fa9147110793c94eed8a39' }, "\u2295")))), h("div", { key: '9061223ed8051dda88802b1fb54b455aafcd20a6', id: this.uniqueId, class: "le-popover-content",
625
599
  // Always use manual mode so nested popovers can be open together.
626
600
  // We implement click-outside and Escape handling ourselves.
627
- popover: "manual", ref: el => (this.popoverEl = el), style: popoverStyles, "data-fallback-open": this.supportsPopoverApi ? undefined : String(this.open) }, (this.popoverTitle || this.showClose) && (h("div", { key: '50fe79bb415b5de315aea7f766d57ae911a90343', class: "le-popover-header" }, this.popoverTitle && h("span", { key: 'd809f12c512197bd34ca215a05820b533f4d8734', class: "le-popover-title" }, this.popoverTitle), this.showClose && (h("button", { key: '2baee3e910ad65243a66eee2bba1c46d9fa628b4', type: "button", class: "le-popover-close", onClick: () => this.hide(), "aria-label": "Close" }, "\u00D7")))), h("div", { key: 'eacad60a20becde7f4f8b9fa01d195dd3f4c08f1', class: "le-popover-body", part: "content" }, h("slot", { key: 'f8aa2edd170ee039d5277a1b9ebc8ee077a1a9dc' })))));
601
+ popover: "manual", ref: el => (this.popoverEl = el), style: popoverStyles, "data-fallback-open": this.supportsPopoverApi ? undefined : String(this.open) }, (this.popoverTitle || this.showClose) && (h("div", { key: '92f61d207bfd18693d5e610cdfca708afecadf9d', class: "le-popover-header" }, this.popoverTitle && h("span", { key: 'caeb2cfc8b500061bad1e8dc9cf36eff298ba7ed', class: "le-popover-title" }, this.popoverTitle), this.showClose && (h("button", { key: '3fc53cc7c0ae0bce3330613ecc90003db5028d69', type: "button", class: "le-popover-close", onClick: () => this.hide(), "aria-label": "Close" }, "\u00D7")))), h("div", { key: '829a9d5d78cb8b5d19dfb7c2afeda55faafaa8ac', class: "le-popover-body", part: "content" }, h("slot", { key: '684b41952086d22e7d3d79f6db02f7cbfd32bbf5' })))));
628
602
  }
603
+ get el() { return this; }
629
604
  static get style() { return lePopoverCss(); }
630
- }, [769, "le-popover", {
605
+ }, [257, "le-popover", {
631
606
  "mode": [1537],
632
607
  "open": [1540],
633
608
  "position": [1],
@@ -1 +1 @@
1
- {"file":"le-popover2.js","mappings":";;;AAAA,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;ACtJD;AACA;AACA,MAAM,gBAAgB,GAAkB,EAAE;MAsB7B,SAAS,iBAAAA,kBAAA,CAAA,MAAA,SAAA,SAAA,WAAA,CAAA;;;;;;;;;;;AAGpB;;AAEG;AACqC,IAAA,IAAI;AAE5C;;AAEG;IACqC,IAAI,GAAY,KAAK;AAE7D;;AAEG;IACK,QAAQ,GAAiD,QAAQ;AAEzE;;AAEG;IACK,KAAK,GAA+B,OAAO;AAEnD;;AAEG;AACK,IAAA,YAAY;AAEpB;;AAEG;IACK,SAAS,GAAY,IAAI;AAEjC;;AAEG;IACK,mBAAmB,GAAY,IAAI;AAE3C;;AAEG;IACK,aAAa,GAAY,IAAI;AAErC;;AAEG;IACK,MAAM,GAAW,CAAC;AAE1B;;AAEG;AACK,IAAA,KAAK;AAEb;;AAEG;IACK,QA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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-popover/le-popover.css?tag=le-popover&encapsulation=shadow","src/components/le-popover/le-popover.tsx"],"sourcesContent":["/* ============================================\n le-popover.css\n Popover using native HTML Popover API\n ============================================ */\n\n:host {\n display: inline-block;\n position: relative;\n}\n\n:host([trigger-full-width]) {\n display: block;\n width: 100%;\n}\n\n/* ============================================\n Trigger\n ============================================ */\n\n.le-popover-trigger {\n display: inline-flex;\n cursor: pointer;\n}\n\n.le-popover-trigger-full-width {\n display: flex;\n width: 100%;\n}\n\n.le-popover-default-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-md, 6px);\n background: var(--le-color-surface, #fff);\n color: var(--le-color-text-secondary, #666);\n font-size: 16px;\n cursor: pointer;\n transition: all var(--le-transition-fast, 0.15s ease);\n}\n\n.le-popover-default-trigger:hover {\n border-color: var(--le-color-primary, #2196f3);\n color: var(--le-color-primary, #2196f3);\n background: var(--le-color-primary-light, rgba(33, 150, 243, 0.1));\n}\n\n/* ============================================\n Popover Content (native popover)\n ============================================ */\n\n.le-popover-content {\n /* Reset native popover defaults */\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n \n /* Positioning - will be set via JS */\n position: fixed;\n inset: unset;\n \n /* Styling */\n background: var(--le-color-surface, #ffffff);\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-lg, 8px);\n box-shadow: var(--le-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.15));\n overflow: hidden;\n font-family: var(--le-font-family, system-ui, -apple-system, sans-serif);\n font-size: var(--le-font-size-sm, 0.875rem);\n color: var(--le-color-text, #333);\n \n /* Animation */\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 0.15s ease, transform 0.15s ease, display 0.15s ease allow-discrete;\n}\n\n/* When popover is open */\n.le-popover-content:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Fallback for browsers without the Popover API */\n.le-popover-content[data-fallback-open=\"false\"] {\n display: none;\n}\n\n.le-popover-content[data-fallback-open=\"true\"] {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Starting style for animation (CSS Anchor Positioning spec) */\n@starting-style {\n .le-popover-content:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n/* ============================================\n Header\n ============================================ */\n\n.le-popover-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--le-space-xs, 4px) var(--le-space-xs, 4px) var(--le-space-xs, 4px) var(--le-space-sm, 8px);\n border-bottom: 1px solid var(--le-color-border, #e0e0e0);\n background: var(--le-color-surface-alt, #f9f9f9);\n min-height: 32px;\n}\n\n.le-popover-title {\n font-weight: var(--le-font-weight-semibold, 600);\n font-size: var(--le-font-size-sm, 0.875rem);\n color: var(--le-color-text, #333);\n}\n\n.le-popover-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-color-text-secondary, #666);\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: var(--le-radius-sm, 4px);\n transition: background-color 0.15s, color 0.15s;\n}\n\n.le-popover-close:hover {\n background: var(--le-color-surface-hover, rgba(0, 0, 0, 0.05));\n color: var(--le-color-text, #333);\n}\n\n/* ============================================\n Body\n ============================================ */\n\n.le-popover-body {\n padding: var(--le-space-md, 12px);\n}\n\n/* ============================================\n Scrollable content\n ============================================ */\n\n.le-popover-content[style*=\"overflow-y: auto\"] .le-popover-body {\n overflow-y: auto;\n}\n","import {\n Component,\n Prop,\n Method,\n Event,\n EventEmitter,\n State,\n h,\n Element,\n Host,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n// Keep a simple stack so Escape closes the most recently opened popover first.\n// This also helps nested popovers behave naturally.\nconst openPopoverStack: HTMLElement[] = [];\n\n/**\n * A popover component for displaying floating content.\n *\n * Uses the native HTML Popover API for proper layering with dialogs\n * and other top-layer elements. Falls back gracefully in older browsers.\n *\n * @slot - Content to display inside the popover\n * @slot trigger - Element that triggers the popover (optional)\n *\n * @csspart trigger - The popover trigger element\n * @csspart content - The popover content wrapper\n *\n * @cmsInternal true\n * @cmsCategory System\n */\n@Component({\n tag: 'le-popover',\n styleUrl: 'le-popover.css',\n shadow: true,\n})\nexport class LePopover {\n @Element() el: HTMLElement;\n\n /**\n * Mode of the popover should be 'default' for internal use\n */\n @Prop({ mutable: true, reflect: true }) mode: 'default' | 'admin';\n\n /**\n * Whether the popover is currently open\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Position of the popover relative to its trigger\n */\n @Prop() position: 'top' | 'bottom' | 'left' | 'right' | 'auto' = 'bottom';\n\n /**\n * Alignment of the popover\n */\n @Prop() align: 'start' | 'center' | 'end' = 'start';\n\n /**\n * Optional title for the popover header\n */\n @Prop() popoverTitle?: string;\n\n /**\n * Whether to show a close button in the header\n */\n @Prop() showClose: boolean = true;\n\n /**\n * Whether clicking outside closes the popover\n */\n @Prop() closeOnClickOutside: boolean = true;\n\n /**\n * Whether pressing Escape closes the popover\n */\n @Prop() closeOnEscape: boolean = true;\n\n /**\n * Offset from the trigger element (in pixels)\n */\n @Prop() offset: number = 8;\n\n /**\n * Fixed width for the popover (e.g., '300px', '20rem')\n */\n @Prop() width?: string;\n\n /**\n * Minimum width for the popover (e.g., '200px', '15rem')\n */\n @Prop() minWidth?: string = '200px';\n\n /**\n * Maximum width for the popover (e.g., '400px', '25rem')\n */\n @Prop() maxWidth?: string;\n\n /**\n * Should the popover's trigger take full width of its container\n */\n @Prop() triggerFullWidth: boolean = false;\n\n /**\n * Emitted when the popover opens\n */\n @Event() lePopoverOpen: EventEmitter<void>;\n\n /**\n * Emitted when the popover closes\n */\n @Event() lePopoverClose: EventEmitter<void>;\n\n /**\n * Method to update the popover position from a parent component\n */\n @Method()\n async updatePosition() {\n this._updatePosition();\n }\n\n @State() private isPositioned: boolean = false;\n\n private triggerEl?: HTMLElement;\n private popoverEl?: HTMLElement;\n private uniqueId: string = `le-popover-${Math.random().toString(36).substr(2, 9)}`;\n private scrollParents: Element[] = [];\n\n private isListeningForDismiss: boolean = false;\n\n private get supportsPopoverApi(): boolean {\n return typeof (HTMLElement.prototype as any).showPopover === 'function';\n }\n\n private shadowContains(container: HTMLElement, node: HTMLElement): boolean {\n let current: Node | null = node;\n while (current) {\n if (current === container) return true;\n\n if (current instanceof ShadowRoot) {\n current = current.host;\n continue;\n }\n\n if (current.parentNode) {\n current = current.parentNode;\n continue;\n }\n\n const root = current.getRootNode?.();\n if (root instanceof ShadowRoot) {\n current = root.host;\n continue;\n }\n\n break;\n }\n\n return false;\n }\n\n componentDidLoad() {\n // Listen for toggle events from the native popover API\n this.popoverEl?.addEventListener('toggle', this.handlePopoverToggle as EventListener);\n\n // Listen for other popovers opening to close this one\n document.addEventListener('le-popover-will-open', this.handleOtherPopoverOpen);\n\n // If the popover is initially open (unlikely, but possible), wire listeners.\n if (this.open) {\n this.addDismissListeners();\n }\n }\n\n disconnectedCallback() {\n this.popoverEl?.removeEventListener('toggle', this.handlePopoverToggle as EventListener);\n document.removeEventListener('le-popover-will-open', this.handleOtherPopoverOpen);\n this.removeScrollListeners();\n this.removeDismissListeners();\n }\n\n private addDismissListeners() {\n if (this.isListeningForDismiss) return;\n\n // Use capture so clicks inside the trigger (which stops propagation) are still observed.\n document.addEventListener('pointerdown', this.handleDocumentPointerDown, true);\n document.addEventListener('keydown', this.handleDocumentKeyDown, true);\n this.isListeningForDismiss = true;\n }\n\n private removeDismissListeners() {\n if (!this.isListeningForDismiss) return;\n document.removeEventListener('pointerdown', this.handleDocumentPointerDown, true);\n document.removeEventListener('keydown', this.handleDocumentKeyDown, true);\n this.isListeningForDismiss = false;\n }\n\n private handleDocumentPointerDown = (event: PointerEvent) => {\n if (!this.open || !this.closeOnClickOutside) return;\n\n // If the click happens inside this popover component (trigger OR content), don't close.\n const path = (event.composedPath?.() ?? []) as EventTarget[];\n if (path.includes(this.el)) return;\n\n this.hide();\n };\n\n private handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (!this.open || !this.closeOnEscape) return;\n if (event.key !== 'Escape') return;\n\n // Only the top-most opened popover handles Escape.\n const top = openPopoverStack[openPopoverStack.length - 1];\n if (top !== this.el) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.hide();\n };\n\n /**\n * Find all scrollable parent elements\n */\n private getScrollParents(element: Element): Element[] {\n const scrollParents: Element[] = [];\n let parent = element.parentElement;\n\n while (parent) {\n const style = getComputedStyle(parent);\n const overflow = style.overflow + style.overflowY + style.overflowX;\n if (/(auto|scroll)/.test(overflow)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n\n // Always include window for page scroll\n return scrollParents;\n }\n\n /**\n * Add scroll listeners to all scrollable parents\n */\n private addScrollListeners() {\n if (!this.triggerEl) return;\n\n this.scrollParents = this.getScrollParents(this.triggerEl);\n\n // Listen to each scroll parent\n this.scrollParents.forEach(parent => {\n parent.addEventListener('scroll', this.handleScroll, { passive: true });\n });\n\n // Also listen to window scroll and resize\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n window.addEventListener('resize', this.handleScroll, { passive: true });\n }\n\n /**\n * Remove scroll listeners\n */\n private removeScrollListeners() {\n this.scrollParents.forEach(parent => {\n parent.removeEventListener('scroll', this.handleScroll);\n });\n window.removeEventListener('scroll', this.handleScroll);\n window.removeEventListener('resize', this.handleScroll);\n this.scrollParents = [];\n }\n\n private handleScroll = () => {\n if (this.open) {\n this._updatePosition();\n }\n };\n\n private handleOpened() {\n this.open = true;\n\n // Track stack order for Escape handling.\n const existingIndex = openPopoverStack.indexOf(this.el);\n if (existingIndex >= 0) openPopoverStack.splice(existingIndex, 1);\n openPopoverStack.push(this.el);\n\n this.addDismissListeners();\n this.addScrollListeners();\n this._updatePosition();\n this.lePopoverOpen.emit();\n }\n\n private handleClosed() {\n this.open = false;\n this.isPositioned = false;\n this.removeScrollListeners();\n this.removeDismissListeners();\n\n const index = openPopoverStack.indexOf(this.el);\n if (index >= 0) openPopoverStack.splice(index, 1);\n\n this.lePopoverClose.emit();\n }\n\n private handlePopoverToggle = (event: ToggleEvent) => {\n if (event.newState === 'open') {\n this.handleOpened();\n } else {\n this.handleClosed();\n }\n };\n\n private handleOtherPopoverOpen = (event: Event) => {\n const customEvent = event as CustomEvent;\n const openingPopover = customEvent.detail?.popover as HTMLElement | undefined;\n if (!openingPopover) return;\n if (openingPopover === this.el) return;\n\n // Allow nested popovers (e.g., le-select inside another popover).\n // Use a shadow-DOM-aware containment check.\n if (\n this.shadowContains(this.el, openingPopover) ||\n this.shadowContains(openingPopover, this.el)\n ) {\n return;\n }\n\n if (this.open) {\n this.hide();\n }\n };\n\n /**\n * Opens the popover\n */\n @Method()\n async show() {\n document.dispatchEvent(\n new CustomEvent('le-popover-will-open', {\n detail: { popover: this.el },\n }),\n );\n\n if (this.supportsPopoverApi) {\n this.popoverEl?.showPopover();\n } else {\n this.handleOpened();\n }\n }\n\n /**\n * Closes the popover\n */\n @Method()\n async hide() {\n if (this.supportsPopoverApi) {\n this.popoverEl?.hidePopover();\n } else {\n this.handleClosed();\n }\n }\n\n /**\n * Toggles the popover\n */\n @Method()\n async toggle() {\n if (this.open) {\n await this.hide();\n } else {\n await this.show();\n }\n }\n\n private handleTriggerClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.toggle();\n };\n\n private _updatePosition() {\n if (!this.triggerEl || !this.popoverEl) return;\n\n const triggerRect = this.triggerEl.getBoundingClientRect();\n const popoverRect = this.popoverEl.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const viewportPadding = 8;\n\n let position = this.position;\n let align = this.align;\n\n // Auto-position logic\n const spaceBelow = viewportHeight - triggerRect.bottom - viewportPadding;\n const spaceAbove = triggerRect.top - viewportPadding;\n const spaceRight = viewportWidth - triggerRect.right - viewportPadding;\n const spaceLeft = triggerRect.left - viewportPadding;\n\n if (position === 'auto') {\n if (spaceBelow >= popoverRect.height + this.offset) {\n position = 'bottom';\n } else if (spaceAbove >= popoverRect.height + this.offset) {\n position = 'top';\n } else if (spaceRight >= popoverRect.width + this.offset) {\n position = 'right';\n } else if (spaceLeft >= popoverRect.width + this.offset) {\n position = 'left';\n } else {\n const maxSpace = Math.max(spaceBelow, spaceAbove, spaceRight, spaceLeft);\n if (maxSpace === spaceBelow) position = 'bottom';\n else if (maxSpace === spaceAbove) position = 'top';\n else if (maxSpace === spaceRight) position = 'right';\n else position = 'left';\n }\n }\n\n // Adjust alignment for horizontal overflow\n if (position === 'top' || position === 'bottom') {\n if (\n align === 'start' &&\n triggerRect.left + popoverRect.width > viewportWidth - viewportPadding\n ) {\n align = 'end';\n } else if (align === 'end' && triggerRect.right - popoverRect.width < viewportPadding) {\n align = 'start';\n } else if (align === 'center') {\n const triggerCenter = triggerRect.left + triggerRect.width / 2;\n if (triggerCenter - popoverRect.width / 2 < viewportPadding) {\n align = 'start';\n } else if (triggerCenter + popoverRect.width / 2 > viewportWidth - viewportPadding) {\n align = 'end';\n }\n }\n }\n\n // Calculate position\n let top: number = 0;\n let left: number = 0;\n let maxHeight: number | null = null;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - popoverRect.height - this.offset;\n if (top < viewportPadding) {\n maxHeight = triggerRect.top - this.offset - viewportPadding * 2;\n top = viewportPadding;\n }\n break;\n case 'bottom':\n top = triggerRect.bottom + this.offset;\n if (top + popoverRect.height > viewportHeight - viewportPadding) {\n maxHeight = viewportHeight - top - viewportPadding;\n }\n break;\n case 'left':\n left = triggerRect.left - popoverRect.width - this.offset;\n top = triggerRect.top;\n if (left < viewportPadding) left = viewportPadding;\n break;\n case 'right':\n left = triggerRect.right + this.offset;\n top = triggerRect.top;\n if (left + popoverRect.width > viewportWidth - viewportPadding) {\n left = viewportWidth - popoverRect.width - viewportPadding;\n }\n break;\n }\n\n // Calculate horizontal alignment for top/bottom\n if (position === 'top' || position === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'end':\n left = triggerRect.right - popoverRect.width;\n break;\n }\n\n // Constrain to viewport\n if (left < viewportPadding) {\n left = viewportPadding;\n } else if (left + popoverRect.width > viewportWidth - viewportPadding) {\n left = viewportWidth - popoverRect.width - viewportPadding;\n }\n }\n\n // Calculate vertical alignment for left/right\n if (position === 'left' || position === 'right') {\n switch (align) {\n case 'start':\n top = triggerRect.top;\n break;\n case 'center':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n break;\n case 'end':\n top = triggerRect.bottom - popoverRect.height;\n break;\n }\n\n if (top < viewportPadding) top = viewportPadding;\n if (top + popoverRect.height > viewportHeight - viewportPadding) {\n maxHeight = viewportHeight - top - viewportPadding;\n }\n }\n\n // Apply styles\n this.popoverEl.style.top = `${top}px`;\n this.popoverEl.style.left = `${left}px`;\n\n if (maxHeight !== null && maxHeight > 100) {\n this.popoverEl.style.maxHeight = `${maxHeight}px`;\n this.popoverEl.style.overflowY = 'auto';\n } else {\n this.popoverEl.style.maxHeight = '';\n this.popoverEl.style.overflowY = '';\n }\n\n this.isPositioned = true;\n }\n\n render() {\n const popoverStyles: Record<string, string> = {\n visibility: this.isPositioned ? 'visible' : 'hidden',\n };\n\n if (this.width) popoverStyles.width = this.width;\n if (this.minWidth) popoverStyles.minWidth = this.minWidth;\n if (this.maxWidth) popoverStyles.maxWidth = this.maxWidth;\n\n return (\n <Host trigger-full-width={this.triggerFullWidth}>\n <div\n class={classnames('le-popover-trigger', {\n 'le-popover-trigger-full-width': this.triggerFullWidth,\n })}\n ref={el => (this.triggerEl = el)}\n onClick={this.handleTriggerClick}\n part=\"trigger\"\n >\n <slot name=\"trigger\">\n <button type=\"button\" class=\"le-popover-default-trigger\">\n <span>⊕</span>\n </button>\n </slot>\n </div>\n <div\n id={this.uniqueId}\n class=\"le-popover-content\"\n // Always use manual mode so nested popovers can be open together.\n // We implement click-outside and Escape handling ourselves.\n popover=\"manual\"\n ref={el => (this.popoverEl = el)}\n style={popoverStyles}\n data-fallback-open={this.supportsPopoverApi ? undefined : String(this.open)}\n >\n {(this.popoverTitle || this.showClose) && (\n <div class=\"le-popover-header\">\n {this.popoverTitle && <span class=\"le-popover-title\">{this.popoverTitle}</span>}\n {this.showClose && (\n <button\n type=\"button\"\n class=\"le-popover-close\"\n onClick={() => this.hide()}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <div class=\"le-popover-body\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-popover2.js","mappings":";;;AAAA,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;ACvJD;AACA;AACA,MAAM,gBAAgB,GAAkB,EAAE;MAsB7B,SAAS,iBAAAA,kBAAA,CAAA,MAAA,SAAA,SAAA,WAAA,CAAA;AALtB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;;AAaE;;AAEG;AACqC,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK;AAE7D;;AAEG;AACK,QAAA,IAAQ,CAAA,QAAA,GAAiD,QAAQ;AAEzE;;AAEG;AACK,QAAA,IAAK,CAAA,KAAA,GAA+B,OAAO;AAOnD;;AAEG;AACK,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI;AAEjC;;AAEG;AACK,QAAA,IAAmB,CAAA,mBAAA,GAAY,IAAI;AAE3C;;AAEG;AACK,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI;AAErC;;AAE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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-popover/le-popover.css?tag=le-popover&encapsulation=shadow","src/components/le-popover/le-popover.tsx"],"sourcesContent":["/* ============================================\n le-popover.css\n Popover using native HTML Popover API\n ============================================ */\n\n:host {\n display: inline-block;\n position: relative;\n --le-popover-padding: var(--le-space-md, 12px);\n}\n\n:host([trigger-full-width]) {\n display: block;\n width: 100%;\n}\n\n/* ============================================\n Trigger\n ============================================ */\n\n.le-popover-trigger {\n display: inline-flex;\n cursor: pointer;\n}\n\n.le-popover-trigger-full-width {\n display: flex;\n width: 100%;\n}\n\n.le-popover-default-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-md, 6px);\n background: var(--le-color-surface, #fff);\n color: var(--le-color-text-secondary, #666);\n font-size: 16px;\n cursor: pointer;\n transition: all var(--le-transition-fast, 0.15s ease);\n}\n\n.le-popover-default-trigger:hover {\n border-color: var(--le-color-primary, #2196f3);\n color: var(--le-color-primary, #2196f3);\n background: var(--le-color-primary-light, rgba(33, 150, 243, 0.1));\n}\n\n/* ============================================\n Popover Content (native popover)\n ============================================ */\n\n.le-popover-content {\n /* Reset native popover defaults */\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n \n /* Positioning - will be set via JS */\n position: fixed;\n inset: unset;\n \n /* Styling */\n background: var(--le-color-surface, #ffffff);\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-lg, 8px);\n box-shadow: var(--le-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.15));\n overflow: hidden;\n font-family: var(--le-font-family, system-ui, -apple-system, sans-serif);\n font-size: var(--le-font-size-sm, 0.875rem);\n color: var(--le-color-text, #333);\n \n /* Animation */\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 0.15s ease, transform 0.15s ease, display 0.15s ease allow-discrete;\n}\n\n/* When popover is open */\n.le-popover-content:popover-open {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Fallback for browsers without the Popover API */\n.le-popover-content[data-fallback-open=\"false\"] {\n display: none;\n}\n\n.le-popover-content[data-fallback-open=\"true\"] {\n opacity: 1;\n transform: scale(1);\n}\n\n/* Starting style for animation (CSS Anchor Positioning spec) */\n@starting-style {\n .le-popover-content:popover-open {\n opacity: 0;\n transform: scale(0.95);\n }\n}\n\n/* ============================================\n Header\n ============================================ */\n\n.le-popover-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--le-space-xs, 4px) var(--le-space-xs, 4px) var(--le-space-xs, 4px) var(--le-space-sm, 8px);\n border-bottom: 1px solid var(--le-color-border, #e0e0e0);\n background: var(--le-color-surface-alt, #f9f9f9);\n min-height: 32px;\n}\n\n.le-popover-title {\n font-weight: var(--le-font-weight-semibold, 600);\n font-size: var(--le-font-size-sm, 0.875rem);\n color: var(--le-color-text, #333);\n}\n\n.le-popover-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--le-color-text-secondary, #666);\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: var(--le-radius-sm, 4px);\n transition: background-color 0.15s, color 0.15s;\n}\n\n.le-popover-close:hover {\n background: var(--le-color-surface-hover, rgba(0, 0, 0, 0.05));\n color: var(--le-color-text, #333);\n}\n\n/* ============================================\n Body\n ============================================ */\n\n.le-popover-body {\n padding: var(--le-popover-padding);\n}\n\n/* ============================================\n Scrollable content\n ============================================ */\n\n.le-popover-content[style*=\"overflow-y: auto\"] .le-popover-body {\n overflow-y: auto;\n}\n","import {\n Component,\n Prop,\n Method,\n Event,\n EventEmitter,\n State,\n h,\n Element,\n Host,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n// Keep a simple stack so Escape closes the most recently opened popover first.\n// This also helps nested popovers behave naturally.\nconst openPopoverStack: HTMLElement[] = [];\n\n/**\n * A popover component for displaying floating content.\n *\n * Uses the native HTML Popover API for proper layering with dialogs\n * and other top-layer elements. Falls back gracefully in older browsers.\n *\n * @slot - Content to display inside the popover\n * @slot trigger - Element that triggers the popover (optional)\n *\n * @csspart trigger - The popover trigger element\n * @csspart content - The popover content wrapper\n *\n * @cmsInternal true\n * @cmsCategory System\n */\n@Component({\n tag: 'le-popover',\n styleUrl: 'le-popover.css',\n shadow: true,\n})\nexport class LePopover {\n @Element() el: HTMLElement;\n\n /**\n * Mode of the popover should be 'default' for internal use\n */\n @Prop({ mutable: true, reflect: true }) mode: 'default' | 'admin';\n\n /**\n * Whether the popover is currently open\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Position of the popover relative to its trigger\n */\n @Prop() position: 'top' | 'bottom' | 'left' | 'right' | 'auto' = 'bottom';\n\n /**\n * Alignment of the popover\n */\n @Prop() align: 'start' | 'center' | 'end' = 'start';\n\n /**\n * Optional title for the popover header\n */\n @Prop() popoverTitle?: string;\n\n /**\n * Whether to show a close button in the header\n */\n @Prop() showClose: boolean = true;\n\n /**\n * Whether clicking outside closes the popover\n */\n @Prop() closeOnClickOutside: boolean = true;\n\n /**\n * Whether pressing Escape closes the popover\n */\n @Prop() closeOnEscape: boolean = true;\n\n /**\n * Offset from the trigger element (in pixels)\n */\n @Prop() offset: number = 8;\n\n /**\n * Fixed width for the popover (e.g., '300px', '20rem')\n */\n @Prop() width?: string;\n\n /**\n * Minimum width for the popover (e.g., '200px', '15rem')\n */\n @Prop() minWidth?: string = '200px';\n\n /**\n * Maximum width for the popover (e.g., '400px', '25rem')\n */\n @Prop() maxWidth?: string;\n\n /**\n * Should the popover's trigger take full width of its container\n */\n @Prop() triggerFullWidth: boolean = false;\n\n /**\n * Emitted when the popover opens\n */\n @Event() lePopoverOpen: EventEmitter<void>;\n\n /**\n * Emitted when the popover closes\n */\n @Event() lePopoverClose: EventEmitter<void>;\n\n /**\n * Method to update the popover position from a parent component\n */\n @Method()\n async updatePosition() {\n this._updatePosition();\n }\n\n @State() private isPositioned: boolean = false;\n\n private triggerEl?: HTMLElement;\n private popoverEl?: HTMLElement;\n private uniqueId: string = `le-popover-${Math.random().toString(36).substr(2, 9)}`;\n private scrollParents: Element[] = [];\n\n private isListeningForDismiss: boolean = false;\n\n private get supportsPopoverApi(): boolean {\n return typeof (HTMLElement.prototype as any).showPopover === 'function';\n }\n\n private shadowContains(container: HTMLElement, node: HTMLElement): boolean {\n let current: Node | null = node;\n while (current) {\n if (current === container) return true;\n\n if (current instanceof ShadowRoot) {\n current = current.host;\n continue;\n }\n\n if (current.parentNode) {\n current = current.parentNode;\n continue;\n }\n\n const root = current.getRootNode?.();\n if (root instanceof ShadowRoot) {\n current = root.host;\n continue;\n }\n\n break;\n }\n\n return false;\n }\n\n componentDidLoad() {\n // Listen for toggle events from the native popover API\n this.popoverEl?.addEventListener('toggle', this.handlePopoverToggle as EventListener);\n\n // Listen for other popovers opening to close this one\n document.addEventListener('le-popover-will-open', this.handleOtherPopoverOpen);\n\n // If the popover is initially open (unlikely, but possible), wire listeners.\n if (this.open) {\n this.addDismissListeners();\n }\n }\n\n disconnectedCallback() {\n this.popoverEl?.removeEventListener('toggle', this.handlePopoverToggle as EventListener);\n document.removeEventListener('le-popover-will-open', this.handleOtherPopoverOpen);\n this.removeScrollListeners();\n this.removeDismissListeners();\n }\n\n private addDismissListeners() {\n if (this.isListeningForDismiss) return;\n\n // Use capture so clicks inside the trigger (which stops propagation) are still observed.\n document.addEventListener('pointerdown', this.handleDocumentPointerDown, true);\n document.addEventListener('keydown', this.handleDocumentKeyDown, true);\n this.isListeningForDismiss = true;\n }\n\n private removeDismissListeners() {\n if (!this.isListeningForDismiss) return;\n document.removeEventListener('pointerdown', this.handleDocumentPointerDown, true);\n document.removeEventListener('keydown', this.handleDocumentKeyDown, true);\n this.isListeningForDismiss = false;\n }\n\n private handleDocumentPointerDown = (event: PointerEvent) => {\n if (!this.open || !this.closeOnClickOutside) return;\n\n // If the click happens inside this popover component (trigger OR content), don't close.\n const path = (event.composedPath?.() ?? []) as EventTarget[];\n if (path.includes(this.el)) return;\n\n this.hide();\n };\n\n private handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (!this.open || !this.closeOnEscape) return;\n if (event.key !== 'Escape') return;\n\n // Only the top-most opened popover handles Escape.\n const top = openPopoverStack[openPopoverStack.length - 1];\n if (top !== this.el) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.hide();\n };\n\n /**\n * Find all scrollable parent elements\n */\n private getScrollParents(element: Element): Element[] {\n const scrollParents: Element[] = [];\n let parent = element.parentElement;\n\n while (parent) {\n const style = getComputedStyle(parent);\n const overflow = style.overflow + style.overflowY + style.overflowX;\n if (/(auto|scroll)/.test(overflow)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n\n // Always include window for page scroll\n return scrollParents;\n }\n\n /**\n * Add scroll listeners to all scrollable parents\n */\n private addScrollListeners() {\n if (!this.triggerEl) return;\n\n this.scrollParents = this.getScrollParents(this.triggerEl);\n\n // Listen to each scroll parent\n this.scrollParents.forEach(parent => {\n parent.addEventListener('scroll', this.handleScroll, { passive: true });\n });\n\n // Also listen to window scroll and resize\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n window.addEventListener('resize', this.handleScroll, { passive: true });\n }\n\n /**\n * Remove scroll listeners\n */\n private removeScrollListeners() {\n this.scrollParents.forEach(parent => {\n parent.removeEventListener('scroll', this.handleScroll);\n });\n window.removeEventListener('scroll', this.handleScroll);\n window.removeEventListener('resize', this.handleScroll);\n this.scrollParents = [];\n }\n\n private handleScroll = () => {\n if (this.open) {\n this._updatePosition();\n }\n };\n\n private handleOpened() {\n this.open = true;\n\n // Track stack order for Escape handling.\n const existingIndex = openPopoverStack.indexOf(this.el);\n if (existingIndex >= 0) openPopoverStack.splice(existingIndex, 1);\n openPopoverStack.push(this.el);\n\n this.addDismissListeners();\n this.addScrollListeners();\n this._updatePosition();\n this.lePopoverOpen.emit();\n }\n\n private handleClosed() {\n this.open = false;\n this.isPositioned = false;\n this.removeScrollListeners();\n this.removeDismissListeners();\n\n const index = openPopoverStack.indexOf(this.el);\n if (index >= 0) openPopoverStack.splice(index, 1);\n\n this.lePopoverClose.emit();\n }\n\n private handlePopoverToggle = (event: ToggleEvent) => {\n if (event.newState === 'open') {\n this.handleOpened();\n } else {\n this.handleClosed();\n }\n };\n\n private handleOtherPopoverOpen = (event: Event) => {\n const customEvent = event as CustomEvent;\n const openingPopover = customEvent.detail?.popover as HTMLElement | undefined;\n if (!openingPopover) return;\n if (openingPopover === this.el) return;\n\n // Allow nested popovers (e.g., le-select inside another popover).\n // Use a shadow-DOM-aware containment check.\n if (\n this.shadowContains(this.el, openingPopover) ||\n this.shadowContains(openingPopover, this.el)\n ) {\n return;\n }\n\n if (this.open) {\n this.hide();\n }\n };\n\n /**\n * Opens the popover\n */\n @Method()\n async show() {\n document.dispatchEvent(\n new CustomEvent('le-popover-will-open', {\n detail: { popover: this.el },\n }),\n );\n\n if (this.supportsPopoverApi) {\n this.popoverEl?.showPopover();\n } else {\n this.handleOpened();\n }\n }\n\n /**\n * Closes the popover\n */\n @Method()\n async hide() {\n if (this.supportsPopoverApi) {\n this.popoverEl?.hidePopover();\n } else {\n this.handleClosed();\n }\n }\n\n /**\n * Toggles the popover\n */\n @Method()\n async toggle() {\n if (this.open) {\n await this.hide();\n } else {\n await this.show();\n }\n }\n\n private handleTriggerClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.toggle();\n };\n\n private _updatePosition() {\n if (!this.triggerEl || !this.popoverEl) return;\n\n const triggerRect = this.triggerEl.getBoundingClientRect();\n const popoverRect = this.popoverEl.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const viewportPadding = 8;\n\n let position = this.position;\n let align = this.align;\n\n // Auto-position logic\n const spaceBelow = viewportHeight - triggerRect.bottom - viewportPadding;\n const spaceAbove = triggerRect.top - viewportPadding;\n const spaceRight = viewportWidth - triggerRect.right - viewportPadding;\n const spaceLeft = triggerRect.left - viewportPadding;\n\n if (position === 'auto') {\n if (spaceBelow >= popoverRect.height + this.offset) {\n position = 'bottom';\n } else if (spaceAbove >= popoverRect.height + this.offset) {\n position = 'top';\n } else if (spaceRight >= popoverRect.width + this.offset) {\n position = 'right';\n } else if (spaceLeft >= popoverRect.width + this.offset) {\n position = 'left';\n } else {\n const maxSpace = Math.max(spaceBelow, spaceAbove, spaceRight, spaceLeft);\n if (maxSpace === spaceBelow) position = 'bottom';\n else if (maxSpace === spaceAbove) position = 'top';\n else if (maxSpace === spaceRight) position = 'right';\n else position = 'left';\n }\n }\n\n // Adjust alignment for horizontal overflow\n if (position === 'top' || position === 'bottom') {\n if (\n align === 'start' &&\n triggerRect.left + popoverRect.width > viewportWidth - viewportPadding\n ) {\n align = 'end';\n } else if (align === 'end' && triggerRect.right - popoverRect.width < viewportPadding) {\n align = 'start';\n } else if (align === 'center') {\n const triggerCenter = triggerRect.left + triggerRect.width / 2;\n if (triggerCenter - popoverRect.width / 2 < viewportPadding) {\n align = 'start';\n } else if (triggerCenter + popoverRect.width / 2 > viewportWidth - viewportPadding) {\n align = 'end';\n }\n }\n }\n\n // Calculate position\n let top: number = 0;\n let left: number = 0;\n let maxHeight: number | null = null;\n\n switch (position) {\n case 'top':\n top = triggerRect.top - popoverRect.height - this.offset;\n if (top < viewportPadding) {\n maxHeight = triggerRect.top - this.offset - viewportPadding * 2;\n top = viewportPadding;\n }\n break;\n case 'bottom':\n top = triggerRect.bottom + this.offset;\n if (top + popoverRect.height > viewportHeight - viewportPadding) {\n maxHeight = viewportHeight - top - viewportPadding;\n }\n break;\n case 'left':\n left = triggerRect.left - popoverRect.width - this.offset;\n top = triggerRect.top;\n if (left < viewportPadding) left = viewportPadding;\n break;\n case 'right':\n left = triggerRect.right + this.offset;\n top = triggerRect.top;\n if (left + popoverRect.width > viewportWidth - viewportPadding) {\n left = viewportWidth - popoverRect.width - viewportPadding;\n }\n break;\n }\n\n // Calculate horizontal alignment for top/bottom\n if (position === 'top' || position === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + triggerRect.width / 2 - popoverRect.width / 2;\n break;\n case 'end':\n left = triggerRect.right - popoverRect.width;\n break;\n }\n\n // Constrain to viewport\n if (left < viewportPadding) {\n left = viewportPadding;\n } else if (left + popoverRect.width > viewportWidth - viewportPadding) {\n left = viewportWidth - popoverRect.width - viewportPadding;\n }\n }\n\n // Calculate vertical alignment for left/right\n if (position === 'left' || position === 'right') {\n switch (align) {\n case 'start':\n top = triggerRect.top;\n break;\n case 'center':\n top = triggerRect.top + triggerRect.height / 2 - popoverRect.height / 2;\n break;\n case 'end':\n top = triggerRect.bottom - popoverRect.height;\n break;\n }\n\n if (top < viewportPadding) top = viewportPadding;\n if (top + popoverRect.height > viewportHeight - viewportPadding) {\n maxHeight = viewportHeight - top - viewportPadding;\n }\n }\n\n // Apply styles\n this.popoverEl.style.top = `${top}px`;\n this.popoverEl.style.left = `${left}px`;\n\n if (maxHeight !== null && maxHeight > 100) {\n this.popoverEl.style.maxHeight = `${maxHeight}px`;\n this.popoverEl.style.overflowY = 'auto';\n } else {\n this.popoverEl.style.maxHeight = '';\n this.popoverEl.style.overflowY = '';\n }\n\n this.isPositioned = true;\n }\n\n render() {\n const popoverStyles: Record<string, string> = {\n visibility: this.isPositioned ? 'visible' : 'hidden',\n };\n\n if (this.width) popoverStyles.width = this.width;\n if (this.minWidth) popoverStyles.minWidth = this.minWidth;\n if (this.maxWidth) popoverStyles.maxWidth = this.maxWidth;\n\n return (\n <Host trigger-full-width={this.triggerFullWidth}>\n <div\n class={classnames('le-popover-trigger', {\n 'le-popover-trigger-full-width': this.triggerFullWidth,\n })}\n ref={el => (this.triggerEl = el)}\n onClick={this.handleTriggerClick}\n part=\"trigger\"\n >\n <slot name=\"trigger\">\n <button type=\"button\" class=\"le-popover-default-trigger\">\n <span>⊕</span>\n </button>\n </slot>\n </div>\n <div\n id={this.uniqueId}\n class=\"le-popover-content\"\n // Always use manual mode so nested popovers can be open together.\n // We implement click-outside and Escape handling ourselves.\n popover=\"manual\"\n ref={el => (this.popoverEl = el)}\n style={popoverStyles}\n data-fallback-open={this.supportsPopoverApi ? undefined : String(this.open)}\n >\n {(this.popoverTitle || this.showClose) && (\n <div class=\"le-popover-header\">\n {this.popoverTitle && <span class=\"le-popover-title\">{this.popoverTitle}</span>}\n {this.showClose && (\n <button\n type=\"button\"\n class=\"le-popover-close\"\n onClick={() => this.hide()}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <div class=\"le-popover-body\" part=\"content\">\n <slot></slot>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -9,27 +9,21 @@ const LeRoundProgress$1 = /*@__PURE__*/ proxyCustomElement(class LeRoundProgress
9
9
  this.__registerHost();
10
10
  }
11
11
  this.__attachShadow();
12
+ // progress value coming from an attribute
13
+ this.value = 0;
14
+ // padding value coming from an attribute
15
+ this.padding = 0;
12
16
  }
13
- get el() { return this; }
14
- // progress value coming from an attribute
15
- value = 0;
16
17
  updateValue(newValue) {
17
18
  this.value = parseFloat(newValue);
18
19
  }
19
- // padding value coming from an attribute
20
- padding = 0;
21
20
  updatePadding(newValue) {
22
21
  this.padding = parseFloat(newValue);
23
22
  this.calcParams();
24
23
  }
25
- // the progress backgrounds can be as many as needed
26
- // but it should be JSON format: double quotes and strict commas
27
- paths;
28
24
  updateProgressBackgrounds(newValue) {
29
25
  this.progressPaths = JSON.parse(newValue);
30
26
  }
31
- progressPaths;
32
- params;
33
27
  /**
34
28
  * Component lifecycles
35
29
  *
@@ -94,15 +88,16 @@ const LeRoundProgress$1 = /*@__PURE__*/ proxyCustomElement(class LeRoundProgress
94
88
  return (h("svg", { viewBox: this.getViewBox(), class: "round-progress" }, paths));
95
89
  }
96
90
  render() {
97
- return (h("div", { key: 'dd678c7e3ff93c60f9eb6c2c09cbf1eab963ec69', class: "round-progress--container" }, this.getPaths(), h("svg", { key: '4a7fc03af132741d9bcddb10d94db800a51e53bc', viewBox: this.getViewBox(), class: "round-progress round-progress--progress" }, h("path", { key: 'd3091d22a5c5e696d0e58748f880471d99f4ac4d', class: "round-progress--circle", "stroke-dasharray": this.getStrokeDashArray(), d: this.getPath() })), h("slot", { key: '8dabb64461b68928e1e58c48dcaec84f504d4639' })));
91
+ return (h("div", { key: '5a51e57f587b1c065bc63091a4d824006ffb0547', class: "round-progress--container" }, this.getPaths(), h("svg", { key: '12ca2118e9f5ff3dc472f1d20a4a4d4dbd3b97c0', viewBox: this.getViewBox(), class: "round-progress round-progress--progress" }, h("path", { key: '7fb75f5b03fe34d4a0f9ecdba94db95ba59a7756', class: "round-progress--circle", "stroke-dasharray": this.getStrokeDashArray(), d: this.getPath() })), h("slot", { key: 'a855a01d4332479f6488d1e7a7760d70e29eb707' })));
98
92
  }
93
+ get el() { return this; }
99
94
  static get watchers() { return {
100
95
  "value": ["updateValue"],
101
96
  "padding": ["updatePadding"],
102
97
  "paths": ["updateProgressBackgrounds"]
103
98
  }; }
104
99
  static get style() { return leRoundProgressCss(); }
105
- }, [769, "le-round-progress", {
100
+ }, [257, "le-round-progress", {
106
101
  "value": [2],
107
102
  "padding": [2],
108
103
  "paths": [1],
@@ -1 +1 @@
1
- {"file":"le-round-progress.js","mappings":"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","names":["LeRoundProgress","__stencil_proxyCustomElement"],"sources":["src/components/le-round-progress/le-round-progress.css?tag=le-round-progress&encapsulation=shadow","src/components/le-round-progress/le-round-progress.tsx"],"sourcesContent":[".round-progress--container {\n position: relative;\n}\n\n.round-progress {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: block;\n}\n\n.round-progress--progress {\n filter: drop-shadow(var(--progress-shadow));\n}\n\n.round-progress--circle {\n fill: none;\n stroke: var(--progress-color, #999);\n stroke-width: var(--progress-width, 4);\n stroke-linecap: var(--progress-linecap, round);\n animation: progress--circle 0.5s ease-out forwards;\n transition: stroke-dasharray 0.5s ease-out;\n}\n\n@keyframes progress--circle {\n 0% { stroke-dasharray: 0 1000; }\n}\n\n.round-progress--path {\n fill: none;\n stroke-linecap: round;\n}\n","import { Component, Element, h, Prop, State, Watch } from '@stencil/core';\n\n@Component({\n tag: 'le-round-progress',\n styleUrl: 'le-round-progress.css',\n shadow: true,\n})\nexport class LeRoundProgress {\n // host element\n @Element() el: HTMLElement;\n\n // progress value coming from an attribute\n @Prop() value: number = 0;\n @Watch('value')\n updateValue(newValue: string) {\n this.value = parseFloat(newValue);\n }\n\n // padding value coming from an attribute\n @Prop() padding: number = 0;\n @Watch('padding')\n updatePadding(newValue: string) {\n this.padding = parseFloat(newValue);\n this.calcParams();\n }\n\n // the progress backgrounds can be as many as needed\n // but it should be JSON format: double quotes and strict commas\n @Prop() paths: string;\n @Watch('paths')\n updateProgressBackgrounds(newValue: string) {\n this.progressPaths = JSON.parse(newValue);\n }\n progressPaths: any[];\n\n @State() params: {\n width: number;\n diameter: number;\n circumference: number;\n };\n\n /**\n * Component lifecycles\n *\n * Before the component is loaded, we need to calculate and update params\n * using the component size (width of the round progress)\n * and progress width (max of )\n */\n componentWillLoad() {\n if (typeof this.paths === 'string') {\n this.updateProgressBackgrounds(this.paths);\n }\n this.calcParams();\n }\n\n calcParams() {\n // get element width\n const width = this.el.getBoundingClientRect().width;\n const diameter = width - this.padding;\n // calc circumference — we'll need it later to calc the stroke paths\n const circumference = Math.PI * diameter;\n\n this.params = { width, diameter, circumference };\n }\n\n /**\n * Returns the viewPath attribute value for the SVG\n * based on the width of the parent element\n */\n getViewBox() {\n return '0 0 ' + this.params.width + ' ' + this.params.width;\n }\n\n /**\n * Returns the circular path for the progress stroke\n * and additional paths in the background\n */\n getPath() {\n return (\n 'M' +\n this.params.width / 2 +\n ' ' +\n (this.params.width - this.params.diameter) / 2 +\n ' a ' +\n this.params.diameter / 2 +\n ' ' +\n this.params.diameter / 2 +\n ' 0 0 1 0 ' +\n this.params.diameter +\n ' a ' +\n this.params.diameter / 2 +\n ' ' +\n this.params.diameter / 2 +\n ' 0 0 1 0 -' +\n this.params.diameter\n );\n }\n\n getStrokeDashArray() {\n return (this.value / 100) * this.params.circumference + ', ' + this.params.circumference;\n }\n\n getPaths() {\n if (!this.progressPaths || !this.progressPaths.length) {\n return null;\n }\n let paths = [];\n this.progressPaths.forEach(bg => {\n paths.push(<path class=\"round-progress--path\" d={this.getPath()} stroke={bg.color} stroke-width={bg.width} stroke-dasharray={bg.dasharray} stroke-linecap={bg.linecap} />);\n });\n return (\n <svg viewBox={this.getViewBox()} class=\"round-progress\">\n {paths}\n </svg>\n );\n }\n\n render() {\n return (\n <div class=\"round-progress--container\">\n {this.getPaths()}\n <svg viewBox={this.getViewBox()} class=\"round-progress round-progress--progress\">\n <path class=\"round-progress--circle\" stroke-dasharray={this.getStrokeDashArray()} d={this.getPath()} />\n </svg>\n <slot />\n </div>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-round-progress.js","mappings":"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","names":["LeRoundProgress","__stencil_proxyCustomElement"],"sources":["src/components/le-round-progress/le-round-progress.css?tag=le-round-progress&encapsulation=shadow","src/components/le-round-progress/le-round-progress.tsx"],"sourcesContent":[".round-progress--container {\n position: relative;\n}\n\n.round-progress {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: block;\n}\n\n.round-progress--progress {\n filter: drop-shadow(var(--progress-shadow));\n}\n\n.round-progress--circle {\n fill: none;\n stroke: var(--progress-color, #999);\n stroke-width: var(--progress-width, 4);\n stroke-linecap: var(--progress-linecap, round);\n animation: progress--circle 0.5s ease-out forwards;\n transition: stroke-dasharray 0.5s ease-out;\n}\n\n@keyframes progress--circle {\n 0% { stroke-dasharray: 0 1000; }\n}\n\n.round-progress--path {\n fill: none;\n stroke-linecap: round;\n}\n","import { Component, Element, h, Prop, State, Watch } from '@stencil/core';\n\n@Component({\n tag: 'le-round-progress',\n styleUrl: 'le-round-progress.css',\n shadow: true,\n})\nexport class LeRoundProgress {\n // host element\n @Element() el: HTMLElement;\n\n // progress value coming from an attribute\n @Prop() value: number = 0;\n @Watch('value')\n updateValue(newValue: string) {\n this.value = parseFloat(newValue);\n }\n\n // padding value coming from an attribute\n @Prop() padding: number = 0;\n @Watch('padding')\n updatePadding(newValue: string) {\n this.padding = parseFloat(newValue);\n this.calcParams();\n }\n\n // the progress backgrounds can be as many as needed\n // but it should be JSON format: double quotes and strict commas\n @Prop() paths: string;\n @Watch('paths')\n updateProgressBackgrounds(newValue: string) {\n this.progressPaths = JSON.parse(newValue);\n }\n progressPaths: any[];\n\n @State() params: {\n width: number;\n diameter: number;\n circumference: number;\n };\n\n /**\n * Component lifecycles\n *\n * Before the component is loaded, we need to calculate and update params\n * using the component size (width of the round progress)\n * and progress width (max of )\n */\n componentWillLoad() {\n if (typeof this.paths === 'string') {\n this.updateProgressBackgrounds(this.paths);\n }\n this.calcParams();\n }\n\n calcParams() {\n // get element width\n const width = this.el.getBoundingClientRect().width;\n const diameter = width - this.padding;\n // calc circumference — we'll need it later to calc the stroke paths\n const circumference = Math.PI * diameter;\n\n this.params = { width, diameter, circumference };\n }\n\n /**\n * Returns the viewPath attribute value for the SVG\n * based on the width of the parent element\n */\n getViewBox() {\n return '0 0 ' + this.params.width + ' ' + this.params.width;\n }\n\n /**\n * Returns the circular path for the progress stroke\n * and additional paths in the background\n */\n getPath() {\n return (\n 'M' +\n this.params.width / 2 +\n ' ' +\n (this.params.width - this.params.diameter) / 2 +\n ' a ' +\n this.params.diameter / 2 +\n ' ' +\n this.params.diameter / 2 +\n ' 0 0 1 0 ' +\n this.params.diameter +\n ' a ' +\n this.params.diameter / 2 +\n ' ' +\n this.params.diameter / 2 +\n ' 0 0 1 0 -' +\n this.params.diameter\n );\n }\n\n getStrokeDashArray() {\n return (this.value / 100) * this.params.circumference + ', ' + this.params.circumference;\n }\n\n getPaths() {\n if (!this.progressPaths || !this.progressPaths.length) {\n return null;\n }\n let paths = [];\n this.progressPaths.forEach(bg => {\n paths.push(<path class=\"round-progress--path\" d={this.getPath()} stroke={bg.color} stroke-width={bg.width} stroke-dasharray={bg.dasharray} stroke-linecap={bg.linecap} />);\n });\n return (\n <svg viewBox={this.getViewBox()} class=\"round-progress\">\n {paths}\n </svg>\n );\n }\n\n render() {\n return (\n <div class=\"round-progress--container\">\n {this.getPaths()}\n <svg viewBox={this.getViewBox()} class=\"round-progress round-progress--progress\">\n <path class=\"round-progress--circle\" stroke-dasharray={this.getStrokeDashArray()} d={this.getPath()} />\n </svg>\n <slot />\n </div>\n );\n }\n}\n"],"version":3}
@@ -9,13 +9,10 @@ const LeScrollProgress$1 = /*@__PURE__*/ proxyCustomElement(class LeScrollProgre
9
9
  this.__registerHost();
10
10
  }
11
11
  this.__attachShadow();
12
+ this.progress = 0;
13
+ this.rafId = null;
14
+ this.targetEl = null;
12
15
  }
13
- get el() { return this; }
14
- /** Boolean or selector string. */
15
- trackScrollProgress;
16
- progress = 0;
17
- rafId = null;
18
- targetEl = null;
19
16
  componentWillLoad() {
20
17
  this.updateProgress();
21
18
  }
@@ -107,13 +104,14 @@ const LeScrollProgress$1 = /*@__PURE__*/ proxyCustomElement(class LeScrollProgre
107
104
  }
108
105
  render() {
109
106
  const width = `${this.progress * 100}%`;
110
- return (h(Host, { key: '7a93dbfd8b14e5e581ff1480ad0e657f8f33bcf4' }, h("div", { key: 'fe4ff14af541e2a610d0b32605aaadb87ccea957', class: "track", part: "track", "aria-hidden": "true" }, h("div", { key: 'f46a09358bf77a7cff64deafa63702360a686c6a', class: "fill", part: "fill", style: { width } }))));
107
+ return (h(Host, { key: '4521900e44e8226280a6fc1d7431e24832057be3' }, h("div", { key: 'a0daeec6b1c39fd4b5cc3ae90f27e615fa9828ef', class: "track", part: "track", "aria-hidden": "true" }, h("div", { key: 'd2c683765627c5eea27483ce00c3eff734e8c87a', class: "fill", part: "fill", style: { width } }))));
111
108
  }
109
+ get el() { return this; }
112
110
  static get watchers() { return {
113
111
  "trackScrollProgress": ["onTrackChange"]
114
112
  }; }
115
113
  static get style() { return leScrollProgressCss(); }
116
- }, [769, "le-scroll-progress", {
114
+ }, [257, "le-scroll-progress", {
117
115
  "trackScrollProgress": [513, "track-scroll-progress"],
118
116
  "progress": [32]
119
117
  }, [[9, "scroll", "onScroll"], [9, "resize", "onResize"]], {
@@ -1 +1 @@
1
- {"file":"le-scroll-progress.js","mappings":"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","names":["LeScrollProgress","__stencil_proxyCustomElement"],"sources":["src/components/le-scroll-progress/le-scroll-progress.css?tag=le-scroll-progress&encapsulation=shadow","src/components/le-scroll-progress/le-scroll-progress.tsx"],"sourcesContent":[":host {\n display: block;\n}\n:host([sticky]) {\n position: sticky;\n top: var(--le-scroll-progress-sticky-top, 0);\n z-index: var(--le-scroll-progress-z, calc(var(--le-header-z, 1000) + 1));\n}\n:host([fixed]) {\n position: fixed;\n top: var(--le-scroll-progress-fixed-top, 0);\n left: var(--le-scroll-progress-fixed-left, 0);\n right: var(--le-scroll-progress-fixed-right, 0);\n z-index: var(--le-scroll-progress-z, calc(var(--le-header-z, 1000) + 1));\n}\n\n.track {\n width: 100%;\n height: var(--le-scroll-progress-height, 4px);\n background: var(--le-scroll-progress-bg, transparent);\n}\n\n.fill {\n height: 100%; \n width: 0;\n background: var(--le-scroll-progress-fill, var(--le-color-primary, currentColor));\n border-radius: var(--le-scroll-progress-border-radius, 2px);\n transition: width var(--le-transition-fast, 120ms linear);\n}\n","import { Component, Element, h, Host, Listen, Prop, State, Watch } from '@stencil/core';\n\n/**\n * Displays scroll progress as a simple bar.\n *\n * If `track-scroll-progress` is present without a value, tracks the full document.\n * If it is a selector string, tracks progress within the matched element.\n *\n * @cssprop --le-scroll-progress-height - Bar height\n * @cssprop --le-scroll-progress-bg - Track background\n * @cssprop --le-scroll-progress-fill - Fill color\n * @cssprop --le-scroll-progress-sticky-top - If sticky, stop position to parent top\n * @cssprop --le-scroll-progress-fixed-top - If fixed, distance from window top\n * @cssprop --le-scroll-progress-fixed-left - If fixed, distance from window left\n * @cssprop --le-scroll-progress-fixed-right - If fixed, distance from window right\n * @cssprop --le-scroll-progress-z - Z-index of the progress bar (1001 by default, above header)\n *\n * @csspart track - Outer track\n * @csspart fill - Inner fill\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-scroll-progress',\n styleUrl: 'le-scroll-progress.css',\n shadow: true,\n})\nexport class LeScrollProgress {\n @Element() el: HTMLElement;\n\n /** Boolean or selector string. */\n @Prop({ attribute: 'track-scroll-progress', reflect: true }) trackScrollProgress?: string;\n\n @State() private progress: number = 0;\n\n private rafId: number | null = null;\n private targetEl: Element | null = null;\n\n componentWillLoad() {\n this.updateProgress();\n }\n\n componentDidLoad() {\n this.resolveTarget();\n this.updateProgress();\n }\n\n disconnectedCallback() {\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n @Watch('trackScrollProgress')\n protected onTrackChange() {\n this.resolveTarget();\n this.updateProgress();\n }\n\n @Listen('scroll', { target: 'window', passive: true })\n protected onScroll() {\n this.scheduleUpdate();\n }\n\n @Listen('resize', { target: 'window', passive: true })\n protected onResize() {\n this.resolveTarget();\n this.scheduleUpdate(true);\n }\n\n private scheduleUpdate(force: boolean = false) {\n if (this.rafId != null && !force) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.updateProgress();\n });\n }\n\n private resolveTarget() {\n if (typeof document === 'undefined') return;\n const raw = this.trackScrollProgress;\n\n // If attribute missing, default to enabled (full document).\n // If user explicitly sets 'false', treat as disabled.\n if (raw == null) {\n this.targetEl = null;\n return;\n }\n\n const val = String(raw).trim();\n if (val === '' || val === 'true') {\n this.targetEl = null;\n return;\n }\n\n if (val === 'false') {\n this.targetEl = null;\n return;\n }\n\n try {\n this.targetEl = document.querySelector(val);\n } catch {\n this.targetEl = null;\n }\n }\n\n private clamp01(n: number) {\n return Math.max(0, Math.min(1, n));\n }\n\n private updateProgress() {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n\n // If explicitly disabled.\n if (this.trackScrollProgress === 'false') {\n if (this.progress !== 0) this.progress = 0;\n return;\n }\n\n const scrollY = window.scrollY || 0;\n\n let p = 0;\n\n if (this.targetEl) {\n const rect = (this.targetEl as HTMLElement).getBoundingClientRect();\n const top = scrollY + rect.top;\n const height = rect.height;\n const viewport = window.innerHeight || 1;\n\n const denom = Math.max(1, height - viewport);\n p = this.clamp01((scrollY - top) / denom);\n } else {\n const doc = document.documentElement;\n const denom = Math.max(1, doc.scrollHeight - doc.clientHeight);\n p = this.clamp01(scrollY / denom);\n }\n\n const next = Math.round(p * 1000) / 1000;\n if (next !== this.progress) this.progress = next;\n }\n\n render() {\n const width = `${this.progress * 100}%`;\n\n return (\n <Host>\n <div class=\"track\" part=\"track\" aria-hidden=\"true\">\n <div class=\"fill\" part=\"fill\" style={{ width }} />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-scroll-progress.js","mappings":"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","names":["LeScrollProgress","__stencil_proxyCustomElement"],"sources":["src/components/le-scroll-progress/le-scroll-progress.css?tag=le-scroll-progress&encapsulation=shadow","src/components/le-scroll-progress/le-scroll-progress.tsx"],"sourcesContent":[":host {\n display: block;\n}\n:host([sticky]) {\n position: sticky;\n top: var(--le-scroll-progress-sticky-top, 0);\n z-index: var(--le-scroll-progress-z, calc(var(--le-header-z, 1000) + 1));\n}\n:host([fixed]) {\n position: fixed;\n top: var(--le-scroll-progress-fixed-top, 0);\n left: var(--le-scroll-progress-fixed-left, 0);\n right: var(--le-scroll-progress-fixed-right, 0);\n z-index: var(--le-scroll-progress-z, calc(var(--le-header-z, 1000) + 1));\n}\n\n.track {\n width: 100%;\n height: var(--le-scroll-progress-height, 4px);\n background: var(--le-scroll-progress-bg, transparent);\n}\n\n.fill {\n height: 100%; \n width: 0;\n background: var(--le-scroll-progress-fill, var(--le-color-primary, currentColor));\n border-radius: var(--le-scroll-progress-border-radius, 2px);\n transition: width var(--le-transition-fast, 120ms linear);\n}\n","import { Component, Element, h, Host, Listen, Prop, State, Watch } from '@stencil/core';\n\n/**\n * Displays scroll progress as a simple bar.\n *\n * If `track-scroll-progress` is present without a value, tracks the full document.\n * If it is a selector string, tracks progress within the matched element.\n *\n * @cssprop --le-scroll-progress-height - Bar height\n * @cssprop --le-scroll-progress-bg - Track background\n * @cssprop --le-scroll-progress-fill - Fill color\n * @cssprop --le-scroll-progress-sticky-top - If sticky, stop position to parent top\n * @cssprop --le-scroll-progress-fixed-top - If fixed, distance from window top\n * @cssprop --le-scroll-progress-fixed-left - If fixed, distance from window left\n * @cssprop --le-scroll-progress-fixed-right - If fixed, distance from window right\n * @cssprop --le-scroll-progress-z - Z-index of the progress bar (1001 by default, above header)\n *\n * @csspart track - Outer track\n * @csspart fill - Inner fill\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-scroll-progress',\n styleUrl: 'le-scroll-progress.css',\n shadow: true,\n})\nexport class LeScrollProgress {\n @Element() el: HTMLElement;\n\n /** Boolean or selector string. */\n @Prop({ attribute: 'track-scroll-progress', reflect: true }) trackScrollProgress?: string;\n\n @State() private progress: number = 0;\n\n private rafId: number | null = null;\n private targetEl: Element | null = null;\n\n componentWillLoad() {\n this.updateProgress();\n }\n\n componentDidLoad() {\n this.resolveTarget();\n this.updateProgress();\n }\n\n disconnectedCallback() {\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n @Watch('trackScrollProgress')\n protected onTrackChange() {\n this.resolveTarget();\n this.updateProgress();\n }\n\n @Listen('scroll', { target: 'window', passive: true })\n protected onScroll() {\n this.scheduleUpdate();\n }\n\n @Listen('resize', { target: 'window', passive: true })\n protected onResize() {\n this.resolveTarget();\n this.scheduleUpdate(true);\n }\n\n private scheduleUpdate(force: boolean = false) {\n if (this.rafId != null && !force) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.updateProgress();\n });\n }\n\n private resolveTarget() {\n if (typeof document === 'undefined') return;\n const raw = this.trackScrollProgress;\n\n // If attribute missing, default to enabled (full document).\n // If user explicitly sets 'false', treat as disabled.\n if (raw == null) {\n this.targetEl = null;\n return;\n }\n\n const val = String(raw).trim();\n if (val === '' || val === 'true') {\n this.targetEl = null;\n return;\n }\n\n if (val === 'false') {\n this.targetEl = null;\n return;\n }\n\n try {\n this.targetEl = document.querySelector(val);\n } catch {\n this.targetEl = null;\n }\n }\n\n private clamp01(n: number) {\n return Math.max(0, Math.min(1, n));\n }\n\n private updateProgress() {\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\n\n // If explicitly disabled.\n if (this.trackScrollProgress === 'false') {\n if (this.progress !== 0) this.progress = 0;\n return;\n }\n\n const scrollY = window.scrollY || 0;\n\n let p = 0;\n\n if (this.targetEl) {\n const rect = (this.targetEl as HTMLElement).getBoundingClientRect();\n const top = scrollY + rect.top;\n const height = rect.height;\n const viewport = window.innerHeight || 1;\n\n const denom = Math.max(1, height - viewport);\n p = this.clamp01((scrollY - top) / denom);\n } else {\n const doc = document.documentElement;\n const denom = Math.max(1, doc.scrollHeight - doc.clientHeight);\n p = this.clamp01(scrollY / denom);\n }\n\n const next = Math.round(p * 1000) / 1000;\n if (next !== this.progress) this.progress = next;\n }\n\n render() {\n const width = `${this.progress * 100}%`;\n\n return (\n <Host>\n <div class=\"track\" part=\"track\" aria-hidden=\"true\">\n <div class=\"fill\" part=\"fill\" style={{ width }} />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}