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
@@ -14,79 +14,143 @@ const LeDropdownBase = /*@__PURE__*/ proxyCustomElement(class LeDropdownBase ext
14
14
  this.leOptionSelect = createEvent(this, "leOptionSelect", 7);
15
15
  this.leDropdownOpen = createEvent(this, "leDropdownOpen", 7);
16
16
  this.leDropdownClose = createEvent(this, "leDropdownClose", 7);
17
+ /**
18
+ * The options to display in the dropdown.
19
+ */
20
+ this.options = [];
21
+ /**
22
+ * Whether multiple selection is allowed.
23
+ */
24
+ this.multiple = false;
25
+ /**
26
+ * Whether the dropdown is open.
27
+ */
28
+ this.open = false;
29
+ /**
30
+ * Whether the dropdown is disabled.
31
+ */
32
+ this.disabled = false;
33
+ /**
34
+ * Current filter query string.
35
+ */
36
+ this.filterQuery = '';
37
+ /**
38
+ * Placeholder text when no options match filter.
39
+ */
40
+ this.emptyText = 'No options';
41
+ /**
42
+ * Whether to show checkboxes for multiselect mode.
43
+ */
44
+ this.showCheckboxes = true;
45
+ /**
46
+ * Maximum height of the dropdown list.
47
+ */
48
+ this.maxHeight = '300px';
49
+ /**
50
+ * Sets the dropdown to full width of the trigger.
51
+ */
52
+ this.fullWidth = false;
53
+ /**
54
+ * Whether to close the dropdown when clicking outside.
55
+ * (used to support combobox with input focus)
56
+ */
57
+ this.closeOnClickOutside = true;
58
+ this.focusedIndex = -1;
59
+ this.filteredOptions = [];
60
+ this.triggerWidth = 0;
61
+ this.handleKeyDown = (e) => {
62
+ if (!this.open)
63
+ return;
64
+ const optionCount = this.filteredOptions.length;
65
+ switch (e.key) {
66
+ case 'ArrowDown':
67
+ e.preventDefault();
68
+ // check for the next non-disabled option and focus
69
+ let nextIndex = this.focusedIndex < optionCount - 1 ? this.focusedIndex + 1 : 0;
70
+ while (this.filteredOptions[nextIndex].disabled) {
71
+ nextIndex = ++nextIndex < optionCount ? nextIndex : 0;
72
+ }
73
+ this.focusedIndex = nextIndex;
74
+ this.scrollToFocused();
75
+ break;
76
+ case 'ArrowUp':
77
+ e.preventDefault();
78
+ // check for the previous non-disabled option and focus
79
+ let prevIndex = this.focusedIndex > 0 ? this.focusedIndex - 1 : optionCount - 1;
80
+ while (this.filteredOptions[prevIndex].disabled) {
81
+ prevIndex = --prevIndex >= 0 ? prevIndex : optionCount - 1;
82
+ }
83
+ this.focusedIndex = prevIndex;
84
+ this.scrollToFocused();
85
+ break;
86
+ case 'Home':
87
+ e.preventDefault();
88
+ // check for the first non-disabled option and focus
89
+ let firstIndex = 0;
90
+ while (this.filteredOptions[firstIndex].disabled) {
91
+ firstIndex++;
92
+ if (firstIndex >= optionCount) {
93
+ firstIndex = -1;
94
+ break;
95
+ }
96
+ }
97
+ this.focusedIndex = firstIndex;
98
+ this.scrollToFocused();
99
+ break;
100
+ case 'End':
101
+ e.preventDefault();
102
+ // check for the last non-disabled option and focus
103
+ let lastIndex = optionCount - 1;
104
+ while (this.filteredOptions[lastIndex].disabled) {
105
+ lastIndex--;
106
+ if (lastIndex < 0) {
107
+ lastIndex = -1;
108
+ break;
109
+ }
110
+ }
111
+ this.focusedIndex = lastIndex;
112
+ this.scrollToFocused();
113
+ break;
114
+ case 'Enter':
115
+ case ' ':
116
+ e.preventDefault();
117
+ if (this.focusedIndex >= 0 && this.focusedIndex < optionCount) {
118
+ const option = this.filteredOptions[this.focusedIndex];
119
+ if (!option || option.disabled)
120
+ return;
121
+ this.leOptionSelect.emit({
122
+ value: option.value ?? option.label,
123
+ option,
124
+ });
125
+ if (!this.multiple) {
126
+ this.hide();
127
+ }
128
+ }
129
+ break;
130
+ case 'Escape':
131
+ e.preventDefault();
132
+ this.hide();
133
+ break;
134
+ case 'Tab':
135
+ this.hide();
136
+ break;
137
+ }
138
+ };
139
+ this.handlePopoverOpen = () => {
140
+ this.open = true;
141
+ this.focusedIndex = this.getInitialFocusIndex();
142
+ this.leDropdownOpen.emit();
143
+ // Add keyboard listener
144
+ document.addEventListener('keydown', this.handleKeyDown);
145
+ };
146
+ this.handlePopoverClose = () => {
147
+ this.open = false;
148
+ this.focusedIndex = -1;
149
+ this.leDropdownClose.emit();
150
+ // Remove keyboard listener
151
+ document.removeEventListener('keydown', this.handleKeyDown);
152
+ };
17
153
  }
18
- get el() { return this; }
19
- /**
20
- * The options to display in the dropdown.
21
- */
22
- options = [];
23
- /**
24
- * Current value(s) - single value or array for multiselect.
25
- */
26
- value;
27
- /**
28
- * Whether multiple selection is allowed.
29
- */
30
- multiple = false;
31
- /**
32
- * Whether the dropdown is open.
33
- */
34
- open = false;
35
- /**
36
- * Whether the dropdown is disabled.
37
- */
38
- disabled = false;
39
- /**
40
- * Filter function for options.
41
- * Return true to include the option.
42
- */
43
- filterFn;
44
- /**
45
- * Current filter query string.
46
- */
47
- filterQuery = '';
48
- /**
49
- * Placeholder text when no options match filter.
50
- */
51
- emptyText = 'No options';
52
- /**
53
- * Whether to show checkboxes for multiselect mode.
54
- */
55
- showCheckboxes = true;
56
- /**
57
- * Maximum height of the dropdown list.
58
- */
59
- maxHeight = '300px';
60
- /**
61
- * Width of the dropdown. If not set, matches trigger width.
62
- */
63
- width;
64
- /**
65
- * Sets the dropdown to full width of the trigger.
66
- */
67
- fullWidth = false;
68
- /**
69
- * Whether to close the dropdown when clicking outside.
70
- * (used to support combobox with input focus)
71
- */
72
- closeOnClickOutside = true;
73
- /**
74
- * Emitted when an option is selected.
75
- */
76
- leOptionSelect;
77
- /**
78
- * Emitted when the dropdown opens.
79
- */
80
- leDropdownOpen;
81
- /**
82
- * Emitted when the dropdown closes.
83
- */
84
- leDropdownClose;
85
- focusedIndex = -1;
86
- filteredOptions = [];
87
- popoverEl;
88
- listEl;
89
- triggerWidth = 0;
90
154
  handleOptionsChange() {
91
155
  this.updateFilteredOptions();
92
156
  }
@@ -138,84 +202,6 @@ const LeDropdownBase = /*@__PURE__*/ proxyCustomElement(class LeDropdownBase ext
138
202
  this.hide();
139
203
  }
140
204
  }
141
- handleKeyDown = (e) => {
142
- if (!this.open)
143
- return;
144
- const optionCount = this.filteredOptions.length;
145
- switch (e.key) {
146
- case 'ArrowDown':
147
- e.preventDefault();
148
- // check for the next non-disabled option and focus
149
- let nextIndex = this.focusedIndex < optionCount - 1 ? this.focusedIndex + 1 : 0;
150
- while (this.filteredOptions[nextIndex].disabled) {
151
- nextIndex = ++nextIndex < optionCount ? nextIndex : 0;
152
- }
153
- this.focusedIndex = nextIndex;
154
- this.scrollToFocused();
155
- break;
156
- case 'ArrowUp':
157
- e.preventDefault();
158
- // check for the previous non-disabled option and focus
159
- let prevIndex = this.focusedIndex > 0 ? this.focusedIndex - 1 : optionCount - 1;
160
- while (this.filteredOptions[prevIndex].disabled) {
161
- prevIndex = --prevIndex >= 0 ? prevIndex : optionCount - 1;
162
- }
163
- this.focusedIndex = prevIndex;
164
- this.scrollToFocused();
165
- break;
166
- case 'Home':
167
- e.preventDefault();
168
- // check for the first non-disabled option and focus
169
- let firstIndex = 0;
170
- while (this.filteredOptions[firstIndex].disabled) {
171
- firstIndex++;
172
- if (firstIndex >= optionCount) {
173
- firstIndex = -1;
174
- break;
175
- }
176
- }
177
- this.focusedIndex = firstIndex;
178
- this.scrollToFocused();
179
- break;
180
- case 'End':
181
- e.preventDefault();
182
- // check for the last non-disabled option and focus
183
- let lastIndex = optionCount - 1;
184
- while (this.filteredOptions[lastIndex].disabled) {
185
- lastIndex--;
186
- if (lastIndex < 0) {
187
- lastIndex = -1;
188
- break;
189
- }
190
- }
191
- this.focusedIndex = lastIndex;
192
- this.scrollToFocused();
193
- break;
194
- case 'Enter':
195
- case ' ':
196
- e.preventDefault();
197
- if (this.focusedIndex >= 0 && this.focusedIndex < optionCount) {
198
- const option = this.filteredOptions[this.focusedIndex];
199
- if (!option || option.disabled)
200
- return;
201
- this.leOptionSelect.emit({
202
- value: option.value ?? option.label,
203
- option,
204
- });
205
- if (!this.multiple) {
206
- this.hide();
207
- }
208
- }
209
- break;
210
- case 'Escape':
211
- e.preventDefault();
212
- this.hide();
213
- break;
214
- case 'Tab':
215
- this.hide();
216
- break;
217
- }
218
- };
219
205
  scrollToFocused() {
220
206
  if (!this.listEl || this.focusedIndex < 0)
221
207
  return;
@@ -224,20 +210,6 @@ const LeDropdownBase = /*@__PURE__*/ proxyCustomElement(class LeDropdownBase ext
224
210
  focusedEl.scrollIntoView({ block: 'nearest' });
225
211
  }
226
212
  }
227
- handlePopoverOpen = () => {
228
- this.open = true;
229
- this.focusedIndex = this.getInitialFocusIndex();
230
- this.leDropdownOpen.emit();
231
- // Add keyboard listener
232
- document.addEventListener('keydown', this.handleKeyDown);
233
- };
234
- handlePopoverClose = () => {
235
- this.open = false;
236
- this.focusedIndex = -1;
237
- this.leDropdownClose.emit();
238
- // Remove keyboard listener
239
- document.removeEventListener('keydown', this.handleKeyDown);
240
- };
241
213
  getInitialFocusIndex() {
242
214
  // Focus on first selected option, or first option
243
215
  const selectableOptions = this.getSelectableOptions();
@@ -338,14 +310,15 @@ const LeDropdownBase = /*@__PURE__*/ proxyCustomElement(class LeDropdownBase ext
338
310
  }
339
311
  render() {
340
312
  const dropdownWidth = this.width || (this.triggerWidth ? `${this.triggerWidth}px` : undefined);
341
- return (h(Host, { key: '90bca5763b9110f8e5cad70870110cab1efeeec6' }, h("le-popover", { key: 'ebded64a4f2b23c8b1a954dd995c4d6171ef9c88', ref: el => (this.popoverEl = el), position: "bottom", align: "start", showClose: false, closeOnClickOutside: this.closeOnClickOutside, closeOnEscape: true, offset: 4, width: dropdownWidth, minWidth: "150px", "trigger-full-width": this.fullWidth, onLePopoverOpen: this.handlePopoverOpen, onLePopoverClose: this.handlePopoverClose }, h("slot", { key: '57e540660ee269de594209186d6fbe066b9c8fc1', name: "trigger", slot: "trigger" }), h("slot", { key: 'e58a76a0097f938873f5462c844ee9f1a5eece72', name: "header" }), h("div", { key: 'c4fa35069438df82894e45e87f46aef67a189c43', class: "dropdown-list", role: "listbox", "aria-multiselectable": this.multiple ? 'true' : undefined, ref: el => (this.listEl = el), style: { maxHeight: this.maxHeight } }, this.renderOptions()))));
313
+ return (h(Host, { key: '71c3537d6234aebb8c18fb6c07e5a751568a4b87' }, h("le-popover", { key: 'e02fcd7454cae5a9c197a509d18cd7b91e49fc9e', ref: el => (this.popoverEl = el), position: "bottom", align: "start", showClose: false, closeOnClickOutside: this.closeOnClickOutside, closeOnEscape: true, offset: 4, width: dropdownWidth, minWidth: "150px", "trigger-full-width": this.fullWidth, onLePopoverOpen: this.handlePopoverOpen, onLePopoverClose: this.handlePopoverClose }, h("slot", { key: 'f1a9e3145119f1cfc1b8a535b98b0858758c6265', name: "trigger", slot: "trigger" }), h("slot", { key: '8dd6126a610e167fb2b3c2593677f70c387bd275', name: "header" }), h("div", { key: '708b3916132c36f736f8a88e3408d482a50610fb', class: "dropdown-list", role: "listbox", "aria-multiselectable": this.multiple ? 'true' : undefined, ref: el => (this.listEl = el), style: { maxHeight: this.maxHeight } }, this.renderOptions()))));
342
314
  }
315
+ get el() { return this; }
343
316
  static get watchers() { return {
344
317
  "options": ["handleOptionsChange"],
345
318
  "filterQuery": ["handleOptionsChange"]
346
319
  }; }
347
320
  static get style() { return leDropdownBaseCss(); }
348
- }, [769, "le-dropdown-base", {
321
+ }, [257, "le-dropdown-base", {
349
322
  "options": [16],
350
323
  "value": [8],
351
324
  "multiple": [4],
@@ -1 +1 @@
1
- {"file":"le-dropdown-base2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-dropdown-base/le-dropdown-base.css?tag=le-dropdown-base&encapsulation=shadow","src/components/le-dropdown-base/le-dropdown-base.tsx"],"sourcesContent":["/**\n * le-dropdown-base component styles\n *\n * Internal component - minimal styling, meant to be customized\n * by wrapper components (le-select, le-combobox, etc.)\n */\n\n:host {\n display: block;\n --le-dropdown-list-padding: var(--le-spacing-1);\n --le-dropdown-empty-padding: var(--le-spacing-4);\n --le-dropdown-option-radius: var(--le-radius-md);\n --le-dropdown-font-size: var(--le-font-size-sm);\n --le-dropdown-option-padding: var(--le-spacing-1) var(--le-spacing-2);\n --le-dropdown-group-padding: var(--le-spacing-2) var(--le-spacing-2) var(--le-spacing-1);\n --le-dropdown-group-font-size: var(--le-font-size-xs);\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n/* Dropdown list container */\nle-popover::part(content) {\n overflow-y: auto;\n overflow-x: hidden;\n padding: var(--le-dropdown-list-padding, 0.25rem);\n}\n\n/* Empty state */\n.dropdown-empty {\n padding: var(--le-dropdown-empty-padding);\n text-align: center;\n color: var(--le-color-text-secondary, #9ca3af);\n font-size: var(--le-dropdown-font-size);\n}\n\n/* Group header */\n.dropdown-group-header {\n padding: var(--le-dropdown-group-padding);\n font-size: var(--le-dropdown-group-font-size);\n font-weight: 700;\n color: var(--le-color-text-secondary, #9ca3af);\n letter-spacing: 0.05em;\n}\n\n.dropdown-list {\n text-align: initial;\n}\n\n/* Separator */\n.dropdown-separator {\n height: 1px;\n margin: var(--le-dropdown-separator-margin, 0.25rem 0);\n background: var(--le-color-border, #e5e7eb);\n}\n\n/* Option item */\n.dropdown-option {\n display: flex;\n align-items: center;\n gap: var(--le-dropdown-option-gap, 0.5rem);\n padding: var(--le-dropdown-option-padding);\n font-size: var(--le-dropdown-font-size, 0.875rem);\n line-height: 1.4;\n color: var(--le-color-text, #1f2937);\n border: 1px solid transparent;\n border-radius: var(--le-dropdown-option-radius, 0.25rem);\n cursor: pointer;\n user-select: none;\n transition: background-color 0.1s ease;\n}\n\n.dropdown-option:hover,\n.dropdown-option.is-focused {\n border-color: var(--le-color-border-hover, #d1d5db);\n}\n\n.dropdown-option.is-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.dropdown-option.is-disabled:hover {\n background: transparent;\n}\n\n/* Checkbox for multiselect */\n.option-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border: 2px solid var(--le-color-border, #d1d5db);\n border-radius: 0.25rem;\n background: var(--le-color-surface, #fff);\n flex-shrink: 0;\n}\n\n.is-selected .option-checkbox {\n background: var(--le-color-primary, #3b82f6);\n border-color: var(--le-color-primary, #3b82f6);\n color: white;\n}\n\n.option-checkbox svg {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n/* Icons */\n.option-icon-start,\n.option-icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n}\n\n.option-icon-start img,\n.option-icon-end img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* Content */\n.option-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.option-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.option-description {\n font-size: 0.75rem;\n color: var(--le-color-text-muted, #6b7280);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Check mark for single select */\n.option-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n color: var(--le-color-primary, #3b82f6);\n flex-shrink: 0;\n}\n\n.option-check svg {\n width: 1rem;\n height: 1rem;\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Method,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\nimport { generateId } from '../../utils/utils';\n\n/**\n * Internal dropdown base component that provides shared functionality\n * for select, combobox, and multiselect components.\n *\n * Wraps le-popover for positioning and provides:\n * - Option list rendering with groups\n * - Keyboard navigation (↑↓, Enter, Escape, Home/End)\n * - Option filtering support\n * - Single and multi-select modes\n *\n * @cmsInternal true\n * @cmsCategory System\n *\n * @slot trigger - The element that triggers the dropdown\n */\n@Component({\n tag: 'le-dropdown-base',\n styleUrl: 'le-dropdown-base.css',\n shadow: true,\n})\nexport class LeDropdownBase {\n @Element() el: HTMLElement;\n\n /**\n * The options to display in the dropdown.\n */\n @Prop() options: LeOption[] = [];\n\n /**\n * Current value(s) - single value or array for multiselect.\n */\n @Prop() value?: LeOptionValue | LeOptionValue[];\n\n /**\n * Whether multiple selection is allowed.\n */\n @Prop() multiple: boolean = false;\n\n /**\n * Whether the dropdown is open.\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Whether the dropdown is disabled.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Filter function for options.\n * Return true to include the option.\n */\n @Prop() filterFn?: (option: LeOption, query: string) => boolean;\n\n /**\n * Current filter query string.\n */\n @Prop() filterQuery: string = '';\n\n /**\n * Placeholder text when no options match filter.\n */\n @Prop() emptyText: string = 'No options';\n\n /**\n * Whether to show checkboxes for multiselect mode.\n */\n @Prop() showCheckboxes: boolean = true;\n\n /**\n * Maximum height of the dropdown list.\n */\n @Prop() maxHeight: string = '300px';\n\n /**\n * Width of the dropdown. If not set, matches trigger width.\n */\n @Prop() width?: string;\n\n /**\n * Sets the dropdown to full width of the trigger.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether to close the dropdown when clicking outside.\n * (used to support combobox with input focus)\n */\n @Prop() closeOnClickOutside: boolean = true;\n\n /**\n * Emitted when an option is selected.\n */\n @Event() leOptionSelect: EventEmitter<LeOptionSelectDetail>;\n\n /**\n * Emitted when the dropdown opens.\n */\n @Event() leDropdownOpen: EventEmitter<void>;\n\n /**\n * Emitted when the dropdown closes.\n */\n @Event() leDropdownClose: EventEmitter<void>;\n\n @State() private focusedIndex: number = -1;\n @State() private filteredOptions: LeOption[] = [];\n\n private popoverEl?: HTMLLePopoverElement;\n private listEl?: HTMLElement;\n private triggerWidth: number = 0;\n\n @Watch('options')\n @Watch('filterQuery')\n handleOptionsChange() {\n this.updateFilteredOptions();\n }\n\n componentWillLoad() {\n this.updateFilteredOptions();\n }\n\n private updateFilteredOptions() {\n // Remember previously focused option\n const focusedOption = this.filteredOptions[this.focusedIndex];\n\n if (!this.filterQuery || !this.filterFn) {\n this.filteredOptions = this.options;\n } else {\n this.filteredOptions = this.options.filter(opt => this.filterFn!(opt, this.filterQuery));\n }\n\n // try to maintain focus on same option if still present\n if (focusedOption) {\n const newIndex = this.filteredOptions.indexOf(focusedOption);\n this.focusedIndex = newIndex >= 0 ? newIndex : this.getInitialFocusIndex();\n } else {\n this.focusedIndex = -1;\n }\n }\n\n private getSelectableOptions(): LeOption[] {\n return this.filteredOptions.filter(opt => !opt.disabled);\n }\n\n private isSelected(option: LeOption): boolean {\n const optValue = option.value ?? option.label;\n if (this.multiple && Array.isArray(this.value)) {\n setTimeout(() => {\n this.popoverEl?.updatePosition();\n }, 50);\n return this.value.includes(optValue);\n }\n return this.value === optValue;\n }\n\n private handleOptionClick(option: LeOption, e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (option.disabled) return;\n\n this.leOptionSelect.emit({\n value: option.value ?? option.label,\n option,\n });\n\n // Close dropdown for single select\n if (!this.multiple) {\n this.hide();\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (!this.open) return;\n\n const optionCount = this.filteredOptions.length;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n // check for the next non-disabled option and focus\n let nextIndex = this.focusedIndex < optionCount - 1 ? this.focusedIndex + 1 : 0;\n while (this.filteredOptions[nextIndex].disabled) {\n nextIndex = ++nextIndex < optionCount ? nextIndex : 0;\n }\n this.focusedIndex = nextIndex;\n this.scrollToFocused();\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n // check for the previous non-disabled option and focus\n let prevIndex = this.focusedIndex > 0 ? this.focusedIndex - 1 : optionCount - 1;\n while (this.filteredOptions[prevIndex].disabled) {\n prevIndex = --prevIndex >= 0 ? prevIndex : optionCount - 1;\n }\n this.focusedIndex = prevIndex;\n this.scrollToFocused();\n break;\n\n case 'Home':\n e.preventDefault();\n // check for the first non-disabled option and focus\n let firstIndex = 0;\n while (this.filteredOptions[firstIndex].disabled) {\n firstIndex++;\n if (firstIndex >= optionCount) {\n firstIndex = -1;\n break;\n }\n }\n this.focusedIndex = firstIndex;\n this.scrollToFocused();\n break;\n\n case 'End':\n e.preventDefault();\n // check for the last non-disabled option and focus\n let lastIndex = optionCount - 1;\n while (this.filteredOptions[lastIndex].disabled) {\n lastIndex--;\n if (lastIndex < 0) {\n lastIndex = -1;\n break;\n }\n }\n this.focusedIndex = lastIndex;\n this.scrollToFocused();\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.focusedIndex >= 0 && this.focusedIndex < optionCount) {\n const option = this.filteredOptions[this.focusedIndex];\n if (!option || option.disabled) return;\n this.leOptionSelect.emit({\n value: option.value ?? option.label,\n option,\n });\n if (!this.multiple) {\n this.hide();\n }\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n this.hide();\n break;\n\n case 'Tab':\n this.hide();\n break;\n }\n };\n\n private scrollToFocused() {\n if (!this.listEl || this.focusedIndex < 0) return;\n\n const focusedEl = this.listEl.querySelector(\n `[data-index=\"${this.focusedIndex}\"]`,\n ) as HTMLElement;\n if (focusedEl) {\n focusedEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private handlePopoverOpen = () => {\n this.open = true;\n this.focusedIndex = this.getInitialFocusIndex();\n this.leDropdownOpen.emit();\n\n // Add keyboard listener\n document.addEventListener('keydown', this.handleKeyDown);\n };\n\n private handlePopoverClose = () => {\n this.open = false;\n this.focusedIndex = -1;\n this.leDropdownClose.emit();\n\n // Remove keyboard listener\n document.removeEventListener('keydown', this.handleKeyDown);\n };\n\n private getInitialFocusIndex(): number {\n // Focus on first selected option, or first option\n const selectableOptions = this.getSelectableOptions();\n const selectedIndex = selectableOptions.findIndex(opt => this.isSelected(opt));\n return selectedIndex >= 0 ? selectedIndex : 0;\n }\n\n /**\n * Opens the dropdown.\n */\n @Method()\n async show() {\n if (this.disabled) return;\n\n // Capture trigger width for matching dropdown width\n const trigger = this.el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n if (trigger) {\n this.triggerWidth = trigger.offsetWidth;\n }\n\n await this.popoverEl?.show();\n }\n\n /**\n * Closes the dropdown.\n */\n @Method()\n async hide() {\n await this.popoverEl?.hide();\n }\n\n /**\n * Toggles the dropdown.\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 renderIcon(icon: string | undefined, className: string) {\n if (!icon) return null;\n\n if (icon.startsWith('http') || icon.startsWith('/')) {\n return <img class={className} src={icon} alt=\"\" />;\n }\n\n return <span class={className}>{icon}</span>;\n }\n\n private renderOption(option: LeOption, index: number) {\n const isSelected = this.isSelected(option);\n const isFocused = index === this.focusedIndex;\n const optionId = option.id || generateId();\n\n return (\n <div\n class={{\n 'dropdown-option': true,\n 'is-selected': isSelected,\n 'is-focused': isFocused,\n 'is-disabled': !!option.disabled,\n }}\n role=\"option\"\n id={optionId}\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n data-index={index}\n onClick={e => this.handleOptionClick(option, e)}\n onMouseEnter={() => {\n if (!option.disabled) {\n this.focusedIndex = index;\n }\n }}\n >\n {this.renderIcon(option.iconStart, 'option-icon-start')}\n <div class=\"option-content\">\n <span class=\"option-label\">{option.label}</span>\n {option.description && <span class=\"option-description\">{option.description}</span>}\n </div>\n {this.renderIcon(option.iconEnd, 'option-icon-end')}\n {(!this.multiple || this.showCheckboxes) && isSelected && (\n <span class=\"option-check\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\" />\n </svg>\n </span>\n )}\n </div>\n );\n }\n\n private renderOptions() {\n if (this.filteredOptions.length === 0) {\n return <div class=\"dropdown-empty\">{this.emptyText}</div>;\n }\n\n // Group options if they have group property\n const grouped = new Map<string, LeOption[]>();\n const ungrouped: LeOption[] = [];\n\n this.filteredOptions.forEach(opt => {\n if (opt.group) {\n const group = grouped.get(opt.group) || [];\n group.push(opt);\n grouped.set(opt.group, group);\n } else {\n ungrouped.push(opt);\n }\n });\n\n // Build flat list with group headers for index tracking\n let globalIndex = 0;\n const elements: any[] = [];\n\n // Render ungrouped options first\n ungrouped.forEach(opt => {\n if (opt.separator === 'before') {\n elements.push(<div class=\"dropdown-separator\" role=\"separator\" />);\n }\n elements.push(this.renderOption(opt, globalIndex++));\n if (opt.separator === 'after') {\n elements.push(<div class=\"dropdown-separator\" role=\"separator\" />);\n }\n });\n\n // Render grouped options\n grouped.forEach((options, groupLabel) => {\n elements.push(\n <div class=\"dropdown-group-header\" role=\"presentation\">\n {groupLabel}\n </div>,\n );\n options.forEach(opt => {\n elements.push(this.renderOption(opt, globalIndex++));\n });\n });\n\n return elements;\n }\n\n render() {\n const dropdownWidth = this.width || (this.triggerWidth ? `${this.triggerWidth}px` : undefined);\n\n return (\n <Host>\n <le-popover\n ref={el => (this.popoverEl = el)}\n position=\"bottom\"\n align=\"start\"\n showClose={false}\n closeOnClickOutside={this.closeOnClickOutside}\n closeOnEscape={true}\n offset={4}\n width={dropdownWidth}\n minWidth=\"150px\"\n trigger-full-width={this.fullWidth}\n onLePopoverOpen={this.handlePopoverOpen}\n onLePopoverClose={this.handlePopoverClose}\n >\n <slot name=\"trigger\" slot=\"trigger\" />\n <slot name=\"header\" />\n <div\n class=\"dropdown-list\"\n role=\"listbox\"\n aria-multiselectable={this.multiple ? 'true' : undefined}\n ref={el => (this.listEl = el)}\n style={{ maxHeight: this.maxHeight }}\n >\n {this.renderOptions()}\n </div>\n </le-popover>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-dropdown-base2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/le-dropdown-base/le-dropdown-base.css?tag=le-dropdown-base&encapsulation=shadow","src/components/le-dropdown-base/le-dropdown-base.tsx"],"sourcesContent":["/**\n * le-dropdown-base component styles\n *\n * Internal component - minimal styling, meant to be customized\n * by wrapper components (le-select, le-combobox, etc.)\n */\n\n:host {\n display: block;\n --le-dropdown-list-padding: var(--le-spacing-1);\n --le-dropdown-empty-padding: var(--le-spacing-4);\n --le-dropdown-option-radius: var(--le-radius-md);\n --le-dropdown-font-size: var(--le-font-size-sm);\n --le-dropdown-option-padding: var(--le-spacing-1) var(--le-spacing-2);\n --le-dropdown-group-padding: var(--le-spacing-2) var(--le-spacing-2) var(--le-spacing-1);\n --le-dropdown-group-font-size: var(--le-font-size-xs);\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n/* Dropdown list container */\nle-popover::part(content) {\n overflow-y: auto;\n overflow-x: hidden;\n padding: var(--le-dropdown-list-padding, 0.25rem);\n}\n\n/* Empty state */\n.dropdown-empty {\n padding: var(--le-dropdown-empty-padding);\n text-align: center;\n color: var(--le-color-text-secondary, #9ca3af);\n font-size: var(--le-dropdown-font-size);\n}\n\n/* Group header */\n.dropdown-group-header {\n padding: var(--le-dropdown-group-padding);\n font-size: var(--le-dropdown-group-font-size);\n font-weight: 700;\n color: var(--le-color-text-secondary, #9ca3af);\n letter-spacing: 0.05em;\n}\n\n.dropdown-list {\n text-align: initial;\n}\n\n/* Separator */\n.dropdown-separator {\n height: 1px;\n margin: var(--le-dropdown-separator-margin, 0.25rem 0);\n background: var(--le-color-border, #e5e7eb);\n}\n\n/* Option item */\n.dropdown-option {\n display: flex;\n align-items: center;\n gap: var(--le-dropdown-option-gap, 0.5rem);\n padding: var(--le-dropdown-option-padding);\n font-size: var(--le-dropdown-font-size, 0.875rem);\n line-height: 1.4;\n color: var(--le-color-text, #1f2937);\n border: 1px solid transparent;\n border-radius: var(--le-dropdown-option-radius, 0.25rem);\n cursor: pointer;\n user-select: none;\n transition: background-color 0.1s ease;\n}\n\n.dropdown-option:hover,\n.dropdown-option.is-focused {\n border-color: var(--le-color-border-hover, #d1d5db);\n}\n\n.dropdown-option.is-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.dropdown-option.is-disabled:hover {\n background: transparent;\n}\n\n/* Checkbox for multiselect */\n.option-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border: 2px solid var(--le-color-border, #d1d5db);\n border-radius: 0.25rem;\n background: var(--le-color-surface, #fff);\n flex-shrink: 0;\n}\n\n.is-selected .option-checkbox {\n background: var(--le-color-primary, #3b82f6);\n border-color: var(--le-color-primary, #3b82f6);\n color: white;\n}\n\n.option-checkbox svg {\n width: 0.75rem;\n height: 0.75rem;\n}\n\n/* Icons */\n.option-icon-start,\n.option-icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n}\n\n.option-icon-start img,\n.option-icon-end img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* Content */\n.option-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.option-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.option-description {\n font-size: 0.75rem;\n color: var(--le-color-text-muted, #6b7280);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Check mark for single select */\n.option-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n color: var(--le-color-primary, #3b82f6);\n flex-shrink: 0;\n}\n\n.option-check svg {\n width: 1rem;\n height: 1rem;\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Method,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\nimport { generateId } from '../../utils/utils';\n\n/**\n * Internal dropdown base component that provides shared functionality\n * for select, combobox, and multiselect components.\n *\n * Wraps le-popover for positioning and provides:\n * - Option list rendering with groups\n * - Keyboard navigation (↑↓, Enter, Escape, Home/End)\n * - Option filtering support\n * - Single and multi-select modes\n *\n * @cmsInternal true\n * @cmsCategory System\n *\n * @slot trigger - The element that triggers the dropdown\n */\n@Component({\n tag: 'le-dropdown-base',\n styleUrl: 'le-dropdown-base.css',\n shadow: true,\n})\nexport class LeDropdownBase {\n @Element() el: HTMLElement;\n\n /**\n * The options to display in the dropdown.\n */\n @Prop() options: LeOption[] = [];\n\n /**\n * Current value(s) - single value or array for multiselect.\n */\n @Prop() value?: LeOptionValue | LeOptionValue[];\n\n /**\n * Whether multiple selection is allowed.\n */\n @Prop() multiple: boolean = false;\n\n /**\n * Whether the dropdown is open.\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Whether the dropdown is disabled.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Filter function for options.\n * Return true to include the option.\n */\n @Prop() filterFn?: (option: LeOption, query: string) => boolean;\n\n /**\n * Current filter query string.\n */\n @Prop() filterQuery: string = '';\n\n /**\n * Placeholder text when no options match filter.\n */\n @Prop() emptyText: string = 'No options';\n\n /**\n * Whether to show checkboxes for multiselect mode.\n */\n @Prop() showCheckboxes: boolean = true;\n\n /**\n * Maximum height of the dropdown list.\n */\n @Prop() maxHeight: string = '300px';\n\n /**\n * Width of the dropdown. If not set, matches trigger width.\n */\n @Prop() width?: string;\n\n /**\n * Sets the dropdown to full width of the trigger.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether to close the dropdown when clicking outside.\n * (used to support combobox with input focus)\n */\n @Prop() closeOnClickOutside: boolean = true;\n\n /**\n * Emitted when an option is selected.\n */\n @Event() leOptionSelect: EventEmitter<LeOptionSelectDetail>;\n\n /**\n * Emitted when the dropdown opens.\n */\n @Event() leDropdownOpen: EventEmitter<void>;\n\n /**\n * Emitted when the dropdown closes.\n */\n @Event() leDropdownClose: EventEmitter<void>;\n\n @State() private focusedIndex: number = -1;\n @State() private filteredOptions: LeOption[] = [];\n\n private popoverEl?: HTMLLePopoverElement;\n private listEl?: HTMLElement;\n private triggerWidth: number = 0;\n\n @Watch('options')\n @Watch('filterQuery')\n handleOptionsChange() {\n this.updateFilteredOptions();\n }\n\n componentWillLoad() {\n this.updateFilteredOptions();\n }\n\n private updateFilteredOptions() {\n // Remember previously focused option\n const focusedOption = this.filteredOptions[this.focusedIndex];\n\n if (!this.filterQuery || !this.filterFn) {\n this.filteredOptions = this.options;\n } else {\n this.filteredOptions = this.options.filter(opt => this.filterFn!(opt, this.filterQuery));\n }\n\n // try to maintain focus on same option if still present\n if (focusedOption) {\n const newIndex = this.filteredOptions.indexOf(focusedOption);\n this.focusedIndex = newIndex >= 0 ? newIndex : this.getInitialFocusIndex();\n } else {\n this.focusedIndex = -1;\n }\n }\n\n private getSelectableOptions(): LeOption[] {\n return this.filteredOptions.filter(opt => !opt.disabled);\n }\n\n private isSelected(option: LeOption): boolean {\n const optValue = option.value ?? option.label;\n if (this.multiple && Array.isArray(this.value)) {\n setTimeout(() => {\n this.popoverEl?.updatePosition();\n }, 50);\n return this.value.includes(optValue);\n }\n return this.value === optValue;\n }\n\n private handleOptionClick(option: LeOption, e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (option.disabled) return;\n\n this.leOptionSelect.emit({\n value: option.value ?? option.label,\n option,\n });\n\n // Close dropdown for single select\n if (!this.multiple) {\n this.hide();\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (!this.open) return;\n\n const optionCount = this.filteredOptions.length;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n // check for the next non-disabled option and focus\n let nextIndex = this.focusedIndex < optionCount - 1 ? this.focusedIndex + 1 : 0;\n while (this.filteredOptions[nextIndex].disabled) {\n nextIndex = ++nextIndex < optionCount ? nextIndex : 0;\n }\n this.focusedIndex = nextIndex;\n this.scrollToFocused();\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n // check for the previous non-disabled option and focus\n let prevIndex = this.focusedIndex > 0 ? this.focusedIndex - 1 : optionCount - 1;\n while (this.filteredOptions[prevIndex].disabled) {\n prevIndex = --prevIndex >= 0 ? prevIndex : optionCount - 1;\n }\n this.focusedIndex = prevIndex;\n this.scrollToFocused();\n break;\n\n case 'Home':\n e.preventDefault();\n // check for the first non-disabled option and focus\n let firstIndex = 0;\n while (this.filteredOptions[firstIndex].disabled) {\n firstIndex++;\n if (firstIndex >= optionCount) {\n firstIndex = -1;\n break;\n }\n }\n this.focusedIndex = firstIndex;\n this.scrollToFocused();\n break;\n\n case 'End':\n e.preventDefault();\n // check for the last non-disabled option and focus\n let lastIndex = optionCount - 1;\n while (this.filteredOptions[lastIndex].disabled) {\n lastIndex--;\n if (lastIndex < 0) {\n lastIndex = -1;\n break;\n }\n }\n this.focusedIndex = lastIndex;\n this.scrollToFocused();\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.focusedIndex >= 0 && this.focusedIndex < optionCount) {\n const option = this.filteredOptions[this.focusedIndex];\n if (!option || option.disabled) return;\n this.leOptionSelect.emit({\n value: option.value ?? option.label,\n option,\n });\n if (!this.multiple) {\n this.hide();\n }\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n this.hide();\n break;\n\n case 'Tab':\n this.hide();\n break;\n }\n };\n\n private scrollToFocused() {\n if (!this.listEl || this.focusedIndex < 0) return;\n\n const focusedEl = this.listEl.querySelector(\n `[data-index=\"${this.focusedIndex}\"]`,\n ) as HTMLElement;\n if (focusedEl) {\n focusedEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private handlePopoverOpen = () => {\n this.open = true;\n this.focusedIndex = this.getInitialFocusIndex();\n this.leDropdownOpen.emit();\n\n // Add keyboard listener\n document.addEventListener('keydown', this.handleKeyDown);\n };\n\n private handlePopoverClose = () => {\n this.open = false;\n this.focusedIndex = -1;\n this.leDropdownClose.emit();\n\n // Remove keyboard listener\n document.removeEventListener('keydown', this.handleKeyDown);\n };\n\n private getInitialFocusIndex(): number {\n // Focus on first selected option, or first option\n const selectableOptions = this.getSelectableOptions();\n const selectedIndex = selectableOptions.findIndex(opt => this.isSelected(opt));\n return selectedIndex >= 0 ? selectedIndex : 0;\n }\n\n /**\n * Opens the dropdown.\n */\n @Method()\n async show() {\n if (this.disabled) return;\n\n // Capture trigger width for matching dropdown width\n const trigger = this.el.querySelector('[slot=\"trigger\"]') as HTMLElement;\n if (trigger) {\n this.triggerWidth = trigger.offsetWidth;\n }\n\n await this.popoverEl?.show();\n }\n\n /**\n * Closes the dropdown.\n */\n @Method()\n async hide() {\n await this.popoverEl?.hide();\n }\n\n /**\n * Toggles the dropdown.\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 renderIcon(icon: string | undefined, className: string) {\n if (!icon) return null;\n\n if (icon.startsWith('http') || icon.startsWith('/')) {\n return <img class={className} src={icon} alt=\"\" />;\n }\n\n return <span class={className}>{icon}</span>;\n }\n\n private renderOption(option: LeOption, index: number) {\n const isSelected = this.isSelected(option);\n const isFocused = index === this.focusedIndex;\n const optionId = option.id || generateId();\n\n return (\n <div\n class={{\n 'dropdown-option': true,\n 'is-selected': isSelected,\n 'is-focused': isFocused,\n 'is-disabled': !!option.disabled,\n }}\n role=\"option\"\n id={optionId}\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n data-index={index}\n onClick={e => this.handleOptionClick(option, e)}\n onMouseEnter={() => {\n if (!option.disabled) {\n this.focusedIndex = index;\n }\n }}\n >\n {this.renderIcon(option.iconStart, 'option-icon-start')}\n <div class=\"option-content\">\n <span class=\"option-label\">{option.label}</span>\n {option.description && <span class=\"option-description\">{option.description}</span>}\n </div>\n {this.renderIcon(option.iconEnd, 'option-icon-end')}\n {(!this.multiple || this.showCheckboxes) && isSelected && (\n <span class=\"option-check\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\" />\n </svg>\n </span>\n )}\n </div>\n );\n }\n\n private renderOptions() {\n if (this.filteredOptions.length === 0) {\n return <div class=\"dropdown-empty\">{this.emptyText}</div>;\n }\n\n // Group options if they have group property\n const grouped = new Map<string, LeOption[]>();\n const ungrouped: LeOption[] = [];\n\n this.filteredOptions.forEach(opt => {\n if (opt.group) {\n const group = grouped.get(opt.group) || [];\n group.push(opt);\n grouped.set(opt.group, group);\n } else {\n ungrouped.push(opt);\n }\n });\n\n // Build flat list with group headers for index tracking\n let globalIndex = 0;\n const elements: any[] = [];\n\n // Render ungrouped options first\n ungrouped.forEach(opt => {\n if (opt.separator === 'before') {\n elements.push(<div class=\"dropdown-separator\" role=\"separator\" />);\n }\n elements.push(this.renderOption(opt, globalIndex++));\n if (opt.separator === 'after') {\n elements.push(<div class=\"dropdown-separator\" role=\"separator\" />);\n }\n });\n\n // Render grouped options\n grouped.forEach((options, groupLabel) => {\n elements.push(\n <div class=\"dropdown-group-header\" role=\"presentation\">\n {groupLabel}\n </div>,\n );\n options.forEach(opt => {\n elements.push(this.renderOption(opt, globalIndex++));\n });\n });\n\n return elements;\n }\n\n render() {\n const dropdownWidth = this.width || (this.triggerWidth ? `${this.triggerWidth}px` : undefined);\n\n return (\n <Host>\n <le-popover\n ref={el => (this.popoverEl = el)}\n position=\"bottom\"\n align=\"start\"\n showClose={false}\n closeOnClickOutside={this.closeOnClickOutside}\n closeOnEscape={true}\n offset={4}\n width={dropdownWidth}\n minWidth=\"150px\"\n trigger-full-width={this.fullWidth}\n onLePopoverOpen={this.handlePopoverOpen}\n onLePopoverClose={this.handlePopoverClose}\n >\n <slot name=\"trigger\" slot=\"trigger\" />\n <slot name=\"header\" />\n <div\n class=\"dropdown-list\"\n role=\"listbox\"\n aria-multiselectable={this.multiple ? 'true' : undefined}\n ref={el => (this.listEl = el)}\n style={{ maxHeight: this.maxHeight }}\n >\n {this.renderOptions()}\n </div>\n </le-popover>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -8,7 +8,7 @@ const LeHeaderPlaceholder$1 = /*@__PURE__*/ proxyCustomElement(class LeHeaderPla
8
8
  }
9
9
  }
10
10
  render() {
11
- return (h(Host, { key: '0b056eac512d668bc8c3aa7000bdc7363dace713', "aria-hidden": "true", style: {
11
+ return (h(Host, { key: 'b026c810ccb0d5c8df7cdc35a3830ebdf676c614', "aria-hidden": "true", style: {
12
12
  display: 'block',
13
13
  height: 'var(--le-header-height, 64px)',
14
14
  } }));
@@ -18,50 +18,25 @@ const LeHeader$1 = /*@__PURE__*/ proxyCustomElement(class LeHeader extends HTMLE
18
18
  this.leHeaderState = createEvent(this, "leHeaderState", 7);
19
19
  this.leHeaderShrinkChange = createEvent(this, "leHeaderShrinkChange", 7);
20
20
  this.leHeaderVisibilityChange = createEvent(this, "leHeaderVisibilityChange", 7);
21
+ /** Force static positioning (default). Ignored if `sticky` or `fixed` are true. */
22
+ this.isStatic = false;
23
+ /** Sticky positioning (in-flow). Ignored if `fixed` is true. */
24
+ this.sticky = false;
25
+ /** Fixed positioning (out-of-flow). Takes precedence over `sticky`/`static`. */
26
+ this.fixed = false;
27
+ /**
28
+ * If true, expand the header when hovered
29
+ */
30
+ this.expandOnHover = false;
31
+ this.revealed = true;
32
+ this.shrunk = false;
33
+ this.placeholderHeight = null;
34
+ this.hoverActive = false;
35
+ this.rafId = null;
36
+ this.measureRafId = null;
37
+ this.lastY = 0;
38
+ this.lastEmittedDirection = 'down';
21
39
  }
22
- get el() { return this; }
23
- /** Force static positioning (default). Ignored if `sticky` or `fixed` are true. */
24
- isStatic = false;
25
- /** Sticky positioning (in-flow). Ignored if `fixed` is true. */
26
- sticky = false;
27
- /** Fixed positioning (out-of-flow). Takes precedence over `sticky`/`static`. */
28
- fixed = false;
29
- /**
30
- * Sticky-only reveal behavior (hide on scroll down, show on scroll up).
31
- * - missing/false: disabled
32
- * - true/empty attribute: enabled with default threshold (16)
33
- * - number (as string): enabled and used as threshold
34
- */
35
- revealOnScroll;
36
- /**
37
- * Shrink trigger.
38
- * - missing/0: disabled
39
- * - number (px): shrink when scrollY >= that value (but never before header height)
40
- * - css var name (e.g. --foo): shrink when scrollY >= resolved var value
41
- * - selector (e.g. .page-title): shrink when that element scrolls out of view above the viewport
42
- */
43
- shrinkOffset;
44
- /**
45
- * If true, expand the header when hovered
46
- */
47
- expandOnHover = false;
48
- /** Emits whenever scroll-driven state changes. */
49
- leHeaderState;
50
- /** Emits when the header shrinks/expands (only on change). */
51
- leHeaderShrinkChange;
52
- /** Emits when the header hides/shows (only on change). */
53
- leHeaderVisibilityChange;
54
- revealed = true;
55
- shrunk = false;
56
- placeholderHeight = null;
57
- hoverActive = false;
58
- disconnectModeObserver;
59
- rafId = null;
60
- measureRafId = null;
61
- lastY = 0;
62
- lastEmittedDirection = 'down';
63
- headerEl;
64
- shrinkSelectorEl;
65
40
  setShrunk(next, y) {
66
41
  if (next === this.shrunk)
67
42
  return;
@@ -243,7 +218,7 @@ const LeHeader$1 = /*@__PURE__*/ proxyCustomElement(class LeHeader extends HTMLE
243
218
  'is-hidden': !this.revealed,
244
219
  'is-shrunk': this.shrunk,
245
220
  });
246
- return (h(Host, { key: 'd1a4ae64dff81139b1c35681698539fdf072ae66', class: hostClass, onMouseEnter: () => {
221
+ return (h(Host, { key: 'ade87accbc122a0eb84422598646da357570d7d0', class: hostClass, onMouseEnter: () => {
247
222
  if (!this.expandOnHover)
248
223
  return;
249
224
  this.hoverActive = true;
@@ -253,8 +228,9 @@ const LeHeader$1 = /*@__PURE__*/ proxyCustomElement(class LeHeader extends HTMLE
253
228
  return;
254
229
  this.hoverActive = false;
255
230
  this.scheduleUpdate(true);
256
- } }, h("le-component", { key: '305bc8b4aefaf2ef1dd7287422167cfd68d3e8c2', component: "le-header" }, h("header", { key: '1cf3b2ab01140e14870c1282e49e6eb3dbae5bf8', class: "header", part: "header", role: "banner", ref: el => (this.headerEl = el) }, h("div", { key: 'b238e3762dd31228f3ab3627fbca2ff1a9c630fd', class: "inner", part: "inner" }, h("div", { key: 'f186fbecc9c9b6f6f08f45c272c292af9333450e', class: "row", part: "row" }, h("div", { key: 'e496055801a36f4cf7a045513df2bc917a573786', class: "start", part: "start" }, h("le-slot", { key: '697b90a8291836452c17d2c9d3759c23b7238e93', name: "start", label: "Start", description: "Logo / back button / nav", "allowed-components": "le-button,le-text,le-tag,le-box,le-stack" }, h("slot", { key: 'e7e2b7ad283ce089def47d1f11f78a8a1603face', name: "start" }))), h("div", { key: '145aaadb93972b9018f9303baee2d5b3c42db319', class: "title", part: "title" }, h("le-slot", { key: 'c488ef0d01da476a6351ae4b7dfb397950f9c3ce', name: "title", label: "Title", description: "Header title", type: "text", tag: "span" }, h("span", { key: '78c21f46cbc81dc720e2f803cb3edc81ba5f76cf', class: "title-slot", part: "title" }, h("slot", { key: 'a47d5c8d4d0ae42b1cb4d7fab98022cbb380a27e', name: "title" })))), h("div", { key: '5fb7c5febcfb9b837f313caa65ea9b5e08b6f9cb', class: "end", part: "end" }, h("le-slot", { key: 'cc2ed75ea779a29e5c616daafec3ef90bbec3cfc', name: "end", label: "End", description: "Actions", "allowed-components": "le-button,le-text,le-tag,le-box,le-stack" }, h("slot", { key: '135e8c2c0d7a7d9bef174f380d1f31d377cb043f', name: "end" })))), h("div", { key: 'b0d9e5fba045b7cfd5640e7ba700cb44d673f982', class: "secondary", part: "secondary" }, h("le-slot", { key: '75ed60e3ddef918db1534f8818cd0f337c71e8db', name: "", label: "Secondary", description: "Secondary row content", "allowed-components": "le-tabs,le-tab-bar,le-select,le-combobox,le-text,le-stack,le-box" }, h("slot", { key: '1266dc5bb54bf22055acbfc23befb398c1ee5a31' }))))))));
231
+ } }, h("le-component", { key: 'dfe9a341d0f8ec702775ff68f2f7afb42bc878dc', component: "le-header" }, h("header", { key: '3239f73706082a6dfc5f7637f5ee8c793debd28f', class: "header", part: "header", role: "banner", ref: el => (this.headerEl = el) }, h("div", { key: '7e4b99e4b1a8bde81c340086d947598ff7bfd9a6', class: "inner", part: "inner" }, h("div", { key: 'b8fb2a8d42a07b35482de7553cd2f3bb608169d2', class: "row", part: "row" }, h("div", { key: '89cd5b7707ccb0626c0ecdf1c07494b184fdda1b', class: "start", part: "start" }, h("le-slot", { key: 'ee442e5f097bd3dcbc5b8376eb5eed024fe474b4', name: "start", label: "Start", description: "Logo / back button / nav", "allowed-components": "le-button,le-text,le-tag,le-box,le-stack" }, h("slot", { key: 'fbf43302c87d9e15cb6e848c1f2e7a30d37ee8f0', name: "start" }))), h("div", { key: '295165dbf2b29744d0687e426cd91665a320944f', class: "title", part: "title" }, h("le-slot", { key: '96aa340f844a15042a17c98610fd4da7e771f61a', name: "title", label: "Title", description: "Header title", type: "text", tag: "span" }, h("span", { key: 'f12cee8413e02e18d3a30a203f61165c4efce673', class: "title-slot", part: "title" }, h("slot", { key: 'dddb32fcf70ec8f16017626056668f325c701b99', name: "title" })))), h("div", { key: 'bc1c9d0deb4120d335de476211e41d86ea408621', class: "end", part: "end" }, h("le-slot", { key: '804482ee7e47f93147899cab94eedbdedc1ba63f', name: "end", label: "End", description: "Actions", "allowed-components": "le-button,le-text,le-tag,le-box,le-stack" }, h("slot", { key: '11bc31fd9875f1d38393606833328c31ac651ece', name: "end" })))), h("div", { key: '8351339444b373d88d9ac0cc4487b67a8c5267cd', class: "secondary", part: "secondary" }, h("le-slot", { key: 'ee99b61af146d91bfb0a84b1fac64ab8e077b85e', name: "", label: "Secondary", description: "Secondary row content", "allowed-components": "le-tabs,le-tab-bar,le-select,le-combobox,le-text,le-stack,le-box" }, h("slot", { key: '77fabff83384d721715bd0ba6efe129dad285875' }))))))));
257
232
  }
233
+ get el() { return this; }
258
234
  static get watchers() { return {
259
235
  "revealOnScroll": ["onBehaviorPropsChange"],
260
236
  "shrinkOffset": ["onBehaviorPropsChange"],
@@ -263,7 +239,7 @@ const LeHeader$1 = /*@__PURE__*/ proxyCustomElement(class LeHeader extends HTMLE
263
239
  "isStatic": ["onBehaviorPropsChange"]
264
240
  }; }
265
241
  static get style() { return leHeaderCss(); }
266
- }, [769, "le-header", {
242
+ }, [257, "le-header", {
267
243
  "isStatic": [516, "static"],
268
244
  "sticky": [516],
269
245
  "fixed": [516],