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
@@ -0,0 +1,372 @@
1
+ import { h, Host, Fragment, } from "@stencil/core";
2
+ import { classnames, generateId } from "../../utils/utils";
3
+ export class LeBreadcrumbs {
4
+ constructor() {
5
+ /**
6
+ * Breadcrumb items (supports JSON string).
7
+ */
8
+ this.items = [];
9
+ /**
10
+ * Accessible label for the breadcrumbs navigation.
11
+ */
12
+ this.label = 'Breadcrumbs';
13
+ /**
14
+ * Separator icon name (used if no separator slot is provided).
15
+ */
16
+ this.separatorIcon = 'chevron-right';
17
+ /**
18
+ * Overflow behavior: collapse (default), wrap, or scroll.
19
+ */
20
+ this.overflowMode = 'collapse';
21
+ /**
22
+ * Minimum visible items before collapsing.
23
+ */
24
+ this.minVisibleItems = 2;
25
+ this.hiddenIndices = [];
26
+ this.separatorTemplate = '';
27
+ this.instanceId = generateId('le-breadcrumbs');
28
+ this.recomputeQueued = false;
29
+ this.handleSeparatorSlotChange = (ev) => {
30
+ const slot = ev.target;
31
+ const nodes = slot.assignedNodes({ flatten: true });
32
+ const html = nodes
33
+ .map(node => {
34
+ if (node.nodeType === Node.TEXT_NODE) {
35
+ return node.textContent || '';
36
+ }
37
+ if (node.nodeType === Node.ELEMENT_NODE) {
38
+ return node.outerHTML || '';
39
+ }
40
+ return '';
41
+ })
42
+ .join('')
43
+ .trim();
44
+ this.separatorTemplate = html;
45
+ this.scheduleOverflowRecompute();
46
+ };
47
+ this.handleItemClick = (item, id, ev) => {
48
+ const href = item.href || item.url;
49
+ this.leBreadcrumbSelect.emit({ item, id, href, originalEvent: ev });
50
+ };
51
+ this.handleKeyDown = (ev) => {
52
+ if (ev.key !== 'ArrowRight' && ev.key !== 'ArrowLeft')
53
+ return;
54
+ const focusables = Array.from(this.el.shadowRoot?.querySelectorAll('a,button,[tabindex="0"]') || []);
55
+ if (focusables.length === 0)
56
+ return;
57
+ const current = document.activeElement;
58
+ const idx = focusables.findIndex(el => el === current);
59
+ if (idx === -1)
60
+ return;
61
+ ev.preventDefault();
62
+ const nextIdx = ev.key === 'ArrowRight' ? idx + 1 : idx - 1;
63
+ const target = focusables[(nextIdx + focusables.length) % focusables.length];
64
+ target?.focus();
65
+ };
66
+ }
67
+ componentDidLoad() {
68
+ this.setupResizeObserver();
69
+ this.scheduleOverflowRecompute();
70
+ }
71
+ disconnectedCallback() {
72
+ this.resizeObserver?.disconnect();
73
+ }
74
+ handleInputsChange() {
75
+ this.scheduleOverflowRecompute();
76
+ }
77
+ setupResizeObserver() {
78
+ if (typeof window === 'undefined' || !('ResizeObserver' in window))
79
+ return;
80
+ this.resizeObserver = new ResizeObserver(() => this.scheduleOverflowRecompute());
81
+ this.resizeObserver.observe(this.el);
82
+ }
83
+ get parsedItems() {
84
+ if (typeof this.items === 'string') {
85
+ try {
86
+ return JSON.parse(this.items);
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ return this.items;
93
+ }
94
+ getItemId(item, index) {
95
+ return item.id ?? `${this.instanceId}:${index}`;
96
+ }
97
+ scheduleOverflowRecompute() {
98
+ if (this.overflowMode !== 'collapse') {
99
+ if (this.hiddenIndices.length) {
100
+ this.hiddenIndices = [];
101
+ }
102
+ return;
103
+ }
104
+ if (this.recomputeQueued)
105
+ return;
106
+ this.recomputeQueued = true;
107
+ requestAnimationFrame(() => this.recomputeOverflow());
108
+ }
109
+ nextFrame() {
110
+ return new Promise(resolve => requestAnimationFrame(() => resolve()));
111
+ }
112
+ async recomputeOverflow() {
113
+ this.recomputeQueued = false;
114
+ if (this.overflowMode !== 'collapse') {
115
+ return;
116
+ }
117
+ const items = this.parsedItems;
118
+ if (!this.listEl || items.length <= Math.max(2, this.minVisibleItems)) {
119
+ if (this.hiddenIndices.length) {
120
+ this.hiddenIndices = [];
121
+ }
122
+ return;
123
+ }
124
+ // Reset hidden items first
125
+ if (this.hiddenIndices.length) {
126
+ this.hiddenIndices = [];
127
+ await this.nextFrame();
128
+ }
129
+ const containerWidth = this.listEl.clientWidth;
130
+ if (!containerWidth)
131
+ return;
132
+ const candidates = items.map((_, idx) => idx).slice(1, -1);
133
+ const hidden = [];
134
+ let attempts = 0;
135
+ while (this.listEl.scrollWidth > containerWidth &&
136
+ attempts < candidates.length &&
137
+ items.length - hidden.length > this.minVisibleItems) {
138
+ const next = candidates.shift();
139
+ if (next === undefined)
140
+ break;
141
+ hidden.push(next);
142
+ this.hiddenIndices = [...hidden];
143
+ await this.nextFrame();
144
+ attempts += 1;
145
+ }
146
+ // If still overflowing, hide first then last as a last resort
147
+ if (this.listEl.scrollWidth > containerWidth &&
148
+ items.length - hidden.length > this.minVisibleItems) {
149
+ if (!hidden.includes(0)) {
150
+ hidden.unshift(0);
151
+ this.hiddenIndices = [...hidden];
152
+ await this.nextFrame();
153
+ }
154
+ }
155
+ if (this.listEl.scrollWidth > containerWidth &&
156
+ items.length - hidden.length > this.minVisibleItems) {
157
+ const lastIndex = items.length - 1;
158
+ if (!hidden.includes(lastIndex)) {
159
+ hidden.push(lastIndex);
160
+ this.hiddenIndices = [...hidden];
161
+ await this.nextFrame();
162
+ }
163
+ }
164
+ }
165
+ renderSeparator() {
166
+ console.log('separatorTemplate', this.separatorTemplate || 'no-template', this.separatorIcon);
167
+ if (this.separatorTemplate) {
168
+ return h("span", { class: "separator", "aria-hidden": "true", innerHTML: this.separatorTemplate });
169
+ }
170
+ return (h("span", { class: "separator", "aria-hidden": "true" }, h("le-icon", { name: this.separatorIcon })));
171
+ }
172
+ renderItem(item, index) {
173
+ const id = this.getItemId(item, index);
174
+ const hasChildren = Array.isArray(item.children) && item.children.length > 0;
175
+ const isCurrent = !!item.selected;
176
+ const itemClass = classnames('item', { current: isCurrent });
177
+ const icontent = item.icon || item.iconStart;
178
+ const content = (h("le-button", { slot: hasChildren ? 'trigger' : undefined, variant: "clear", color: "secondary", class: itemClass, onClick: ev => this.handleItemClick(item, id, ev), "aria-haspopup": "menu", "aria-current": isCurrent ? 'page' : null, part: item.part, iconStart: icontent }, h("span", { class: "item-label" }, item.label)));
179
+ if (hasChildren) {
180
+ return (h("le-popover", { position: "bottom", align: "start", "show-close": "false", class: "item-popover" }, content, h("le-navigation", { orientation: "vertical", items: item.children, style: { minWidth: '200px' } })));
181
+ }
182
+ return content;
183
+ }
184
+ renderMore(hiddenItems) {
185
+ if (hiddenItems.length === 0)
186
+ return null;
187
+ return (h("le-popover", { position: "bottom", align: "start", "show-close": "false" }, h("button", { slot: "trigger", class: "more-trigger", type: "button", "aria-haspopup": "menu" }, h("slot", { name: "more-trigger" }, h("le-icon", { name: "ellipsis-horizontal" }))), h("le-navigation", { orientation: "vertical", items: hiddenItems, style: { minWidth: '200px' } })));
188
+ }
189
+ render() {
190
+ const items = this.parsedItems;
191
+ const indexedItems = items.map((item, index) => ({ item, index }));
192
+ const hiddenSet = new Set(this.hiddenIndices);
193
+ const hiddenItems = indexedItems.filter(({ index }) => hiddenSet.has(index));
194
+ const visibleItems = indexedItems.filter(({ index }) => !hiddenSet.has(index));
195
+ const shouldCollapse = this.overflowMode === 'collapse' && hiddenItems.length > 0;
196
+ const firstVisible = visibleItems[0];
197
+ const remainingVisible = visibleItems.slice(1);
198
+ const firstHidden = hiddenSet.has(0);
199
+ return (h(Host, { key: '6da8c091e08c97f903d6e840d02bca6a321ed0ba', onKeyDown: this.handleKeyDown }, h("nav", { key: 'ddc78c68de5a49d59a3d7cfa446ce7a4dea02366', class: "breadcrumbs", "aria-label": this.label }, h("slot", { key: 'c76c6164b589bdad8715a8adbe94d39dab261e71', name: "start" }), h("div", { key: '80fecb4159d873e7d5994299229f80610f0ca1ed', class: classnames('list', {
200
+ wrap: this.overflowMode === 'wrap',
201
+ scroll: this.overflowMode === 'scroll',
202
+ }), ref: el => (this.listEl = el) }, !firstHidden && firstVisible
203
+ ? this.renderItem(firstVisible.item, firstVisible.index)
204
+ : null, shouldCollapse && !firstHidden && firstVisible ? this.renderSeparator() : null, shouldCollapse ? this.renderMore(hiddenItems.map(h => h.item)) : null, (firstHidden ? visibleItems : remainingVisible).map(({ item, index }, i) => (h(Fragment, null, this.renderSeparator(), h("span", { class: "crumb", key: `${item.label}-${index}-${i}` }, this.renderItem(item, index)))))), h("slot", { key: 'cd9f1f1200554f43cd144f07870aa3063de9a843', name: "end" })), h("span", { key: '3bd953f8c8a4bae9d2e1b3bbe61977d92b1f0f50', class: "hidden-slot", "aria-hidden": "true" }, h("slot", { key: '5deeddaba836a0ac6c698d25ed799670231c3acd', name: "separator", onSlotchange: this.handleSeparatorSlotChange }))));
205
+ }
206
+ static get is() { return "le-breadcrumbs"; }
207
+ static get encapsulation() { return "shadow"; }
208
+ static get originalStyleUrls() {
209
+ return {
210
+ "$": ["le-breadcrumbs.css"]
211
+ };
212
+ }
213
+ static get styleUrls() {
214
+ return {
215
+ "$": ["le-breadcrumbs.css"]
216
+ };
217
+ }
218
+ static get properties() {
219
+ return {
220
+ "items": {
221
+ "type": "string",
222
+ "mutable": false,
223
+ "complexType": {
224
+ "original": "LeOption[] | string",
225
+ "resolved": "LeOption[] | string",
226
+ "references": {
227
+ "LeOption": {
228
+ "location": "import",
229
+ "path": "../../types/options",
230
+ "id": "src/types/options.ts::LeOption"
231
+ }
232
+ }
233
+ },
234
+ "required": false,
235
+ "optional": false,
236
+ "docs": {
237
+ "tags": [],
238
+ "text": "Breadcrumb items (supports JSON string)."
239
+ },
240
+ "getter": false,
241
+ "setter": false,
242
+ "reflect": false,
243
+ "attribute": "items",
244
+ "defaultValue": "[]"
245
+ },
246
+ "label": {
247
+ "type": "string",
248
+ "mutable": false,
249
+ "complexType": {
250
+ "original": "string",
251
+ "resolved": "string",
252
+ "references": {}
253
+ },
254
+ "required": false,
255
+ "optional": false,
256
+ "docs": {
257
+ "tags": [],
258
+ "text": "Accessible label for the breadcrumbs navigation."
259
+ },
260
+ "getter": false,
261
+ "setter": false,
262
+ "reflect": false,
263
+ "attribute": "label",
264
+ "defaultValue": "'Breadcrumbs'"
265
+ },
266
+ "separatorIcon": {
267
+ "type": "string",
268
+ "mutable": false,
269
+ "complexType": {
270
+ "original": "string",
271
+ "resolved": "string",
272
+ "references": {}
273
+ },
274
+ "required": false,
275
+ "optional": false,
276
+ "docs": {
277
+ "tags": [],
278
+ "text": "Separator icon name (used if no separator slot is provided)."
279
+ },
280
+ "getter": false,
281
+ "setter": false,
282
+ "reflect": false,
283
+ "attribute": "separator-icon",
284
+ "defaultValue": "'chevron-right'"
285
+ },
286
+ "overflowMode": {
287
+ "type": "string",
288
+ "mutable": false,
289
+ "complexType": {
290
+ "original": "'collapse' | 'wrap' | 'scroll'",
291
+ "resolved": "\"collapse\" | \"scroll\" | \"wrap\"",
292
+ "references": {}
293
+ },
294
+ "required": false,
295
+ "optional": false,
296
+ "docs": {
297
+ "tags": [],
298
+ "text": "Overflow behavior: collapse (default), wrap, or scroll."
299
+ },
300
+ "getter": false,
301
+ "setter": false,
302
+ "reflect": false,
303
+ "attribute": "overflow-mode",
304
+ "defaultValue": "'collapse'"
305
+ },
306
+ "minVisibleItems": {
307
+ "type": "number",
308
+ "mutable": false,
309
+ "complexType": {
310
+ "original": "number",
311
+ "resolved": "number",
312
+ "references": {}
313
+ },
314
+ "required": false,
315
+ "optional": false,
316
+ "docs": {
317
+ "tags": [],
318
+ "text": "Minimum visible items before collapsing."
319
+ },
320
+ "getter": false,
321
+ "setter": false,
322
+ "reflect": false,
323
+ "attribute": "min-visible-items",
324
+ "defaultValue": "2"
325
+ }
326
+ };
327
+ }
328
+ static get states() {
329
+ return {
330
+ "hiddenIndices": {},
331
+ "separatorTemplate": {}
332
+ };
333
+ }
334
+ static get events() {
335
+ return [{
336
+ "method": "leBreadcrumbSelect",
337
+ "name": "leBreadcrumbSelect",
338
+ "bubbles": true,
339
+ "cancelable": true,
340
+ "composed": true,
341
+ "docs": {
342
+ "tags": [],
343
+ "text": "Emitted when a breadcrumb item is selected."
344
+ },
345
+ "complexType": {
346
+ "original": "LeBreadcrumbSelectDetail",
347
+ "resolved": "LeBreadcrumbSelectDetail",
348
+ "references": {
349
+ "LeBreadcrumbSelectDetail": {
350
+ "location": "local",
351
+ "path": "/home/runner/work/le-kit/le-kit/src/components/le-breadcrumbs/le-breadcrumbs.tsx",
352
+ "id": "src/components/le-breadcrumbs/le-breadcrumbs.tsx::LeBreadcrumbSelectDetail"
353
+ }
354
+ }
355
+ }
356
+ }];
357
+ }
358
+ static get elementRef() { return "el"; }
359
+ static get watchers() {
360
+ return [{
361
+ "propName": "items",
362
+ "methodName": "handleInputsChange"
363
+ }, {
364
+ "propName": "overflowMode",
365
+ "methodName": "handleInputsChange"
366
+ }, {
367
+ "propName": "minVisibleItems",
368
+ "methodName": "handleInputsChange"
369
+ }];
370
+ }
371
+ }
372
+ //# sourceMappingURL=le-breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-breadcrumbs.js","sourceRoot":"","sources":["../../../src/components/le-breadcrumbs/le-breadcrumbs.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n Fragment,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\n\nexport interface LeBreadcrumbSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent | KeyboardEvent;\n}\n\n@Component({\n tag: 'le-breadcrumbs',\n styleUrl: 'le-breadcrumbs.css',\n shadow: true,\n})\nexport class LeBreadcrumbs {\n @Element() el: HTMLElement;\n\n /**\n * Breadcrumb items (supports JSON string).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Accessible label for the breadcrumbs navigation.\n */\n @Prop() label: string = 'Breadcrumbs';\n\n /**\n * Separator icon name (used if no separator slot is provided).\n */\n @Prop() separatorIcon: string = 'chevron-right';\n\n /**\n * Overflow behavior: collapse (default), wrap, or scroll.\n */\n @Prop() overflowMode: 'collapse' | 'wrap' | 'scroll' = 'collapse';\n\n /**\n * Minimum visible items before collapsing.\n */\n @Prop() minVisibleItems: number = 2;\n\n /**\n * Emitted when a breadcrumb item is selected.\n */\n @Event({ cancelable: true }) leBreadcrumbSelect: EventEmitter<LeBreadcrumbSelectDetail>;\n\n @State() private hiddenIndices: number[] = [];\n @State() private separatorTemplate: string = '';\n\n private listEl?: HTMLElement;\n private resizeObserver?: ResizeObserver;\n private instanceId: string = generateId('le-breadcrumbs');\n private recomputeQueued: boolean = false;\n\n componentDidLoad() {\n this.setupResizeObserver();\n this.scheduleOverflowRecompute();\n }\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n }\n\n @Watch('items')\n @Watch('overflowMode')\n @Watch('minVisibleItems')\n handleInputsChange() {\n this.scheduleOverflowRecompute();\n }\n\n private setupResizeObserver() {\n if (typeof window === 'undefined' || !('ResizeObserver' in window)) return;\n this.resizeObserver = new ResizeObserver(() => this.scheduleOverflowRecompute());\n this.resizeObserver.observe(this.el);\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n return this.items;\n }\n\n private getItemId(item: LeOption, index: number): string {\n return item.id ?? `${this.instanceId}:${index}`;\n }\n\n private handleSeparatorSlotChange = (ev: Event) => {\n const slot = ev.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n const html = nodes\n .map(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent || '';\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n return (node as HTMLElement).outerHTML || '';\n }\n return '';\n })\n .join('')\n .trim();\n\n this.separatorTemplate = html;\n this.scheduleOverflowRecompute();\n };\n\n private scheduleOverflowRecompute() {\n if (this.overflowMode !== 'collapse') {\n if (this.hiddenIndices.length) {\n this.hiddenIndices = [];\n }\n return;\n }\n\n if (this.recomputeQueued) return;\n this.recomputeQueued = true;\n requestAnimationFrame(() => this.recomputeOverflow());\n }\n\n private nextFrame(): Promise<void> {\n return new Promise(resolve => requestAnimationFrame(() => resolve()));\n }\n\n private async recomputeOverflow() {\n this.recomputeQueued = false;\n\n if (this.overflowMode !== 'collapse') {\n return;\n }\n\n const items = this.parsedItems;\n if (!this.listEl || items.length <= Math.max(2, this.minVisibleItems)) {\n if (this.hiddenIndices.length) {\n this.hiddenIndices = [];\n }\n return;\n }\n\n // Reset hidden items first\n if (this.hiddenIndices.length) {\n this.hiddenIndices = [];\n await this.nextFrame();\n }\n\n const containerWidth = this.listEl.clientWidth;\n if (!containerWidth) return;\n\n const candidates = items.map((_, idx) => idx).slice(1, -1);\n const hidden: number[] = [];\n\n let attempts = 0;\n while (\n this.listEl.scrollWidth > containerWidth &&\n attempts < candidates.length &&\n items.length - hidden.length > this.minVisibleItems\n ) {\n const next = candidates.shift();\n if (next === undefined) break;\n hidden.push(next);\n this.hiddenIndices = [...hidden];\n await this.nextFrame();\n attempts += 1;\n }\n\n // If still overflowing, hide first then last as a last resort\n if (\n this.listEl.scrollWidth > containerWidth &&\n items.length - hidden.length > this.minVisibleItems\n ) {\n if (!hidden.includes(0)) {\n hidden.unshift(0);\n this.hiddenIndices = [...hidden];\n await this.nextFrame();\n }\n }\n\n if (\n this.listEl.scrollWidth > containerWidth &&\n items.length - hidden.length > this.minVisibleItems\n ) {\n const lastIndex = items.length - 1;\n if (!hidden.includes(lastIndex)) {\n hidden.push(lastIndex);\n this.hiddenIndices = [...hidden];\n await this.nextFrame();\n }\n }\n }\n\n private handleItemClick = (item: LeOption, id: string, ev: MouseEvent) => {\n const href = (item as any).href || (item as any).url;\n this.leBreadcrumbSelect.emit({ item, id, href, originalEvent: ev });\n };\n\n private handleKeyDown = (ev: KeyboardEvent) => {\n if (ev.key !== 'ArrowRight' && ev.key !== 'ArrowLeft') return;\n const focusables = Array.from(\n this.el.shadowRoot?.querySelectorAll<HTMLElement>('a,button,[tabindex=\"0\"]') || [],\n );\n\n if (focusables.length === 0) return;\n const current = document.activeElement as HTMLElement | null;\n const idx = focusables.findIndex(el => el === current);\n if (idx === -1) return;\n\n ev.preventDefault();\n const nextIdx = ev.key === 'ArrowRight' ? idx + 1 : idx - 1;\n const target = focusables[(nextIdx + focusables.length) % focusables.length];\n target?.focus();\n };\n\n private renderSeparator() {\n console.log('separatorTemplate', this.separatorTemplate || 'no-template', this.separatorIcon);\n if (this.separatorTemplate) {\n return <span class=\"separator\" aria-hidden=\"true\" innerHTML={this.separatorTemplate}></span>;\n }\n\n return (\n <span class=\"separator\" aria-hidden=\"true\">\n <le-icon name={this.separatorIcon} />\n </span>\n );\n }\n\n private renderItem(item: LeOption, index: number) {\n const id = this.getItemId(item, index);\n const hasChildren = Array.isArray(item.children) && item.children.length > 0;\n const isCurrent = !!item.selected;\n\n const itemClass = classnames('item', { current: isCurrent });\n const icontent = item.icon || item.iconStart;\n const content = (\n <le-button\n slot={hasChildren ? 'trigger' : undefined}\n variant=\"clear\"\n color=\"secondary\"\n class={itemClass}\n onClick={ev => this.handleItemClick(item, id, ev)}\n aria-haspopup=\"menu\"\n aria-current={isCurrent ? 'page' : null}\n part={item.part}\n iconStart={icontent}\n >\n <span class=\"item-label\">{item.label}</span>\n </le-button>\n );\n\n if (hasChildren) {\n return (\n <le-popover position=\"bottom\" align=\"start\" show-close=\"false\" class=\"item-popover\">\n {content}\n <le-navigation\n orientation=\"vertical\"\n items={item.children as LeOption[]}\n style={{ minWidth: '200px' }}\n ></le-navigation>\n </le-popover>\n );\n }\n\n return content;\n }\n\n private renderMore(hiddenItems: LeOption[]) {\n if (hiddenItems.length === 0) return null;\n\n return (\n <le-popover position=\"bottom\" align=\"start\" show-close=\"false\">\n <button slot=\"trigger\" class=\"more-trigger\" type=\"button\" aria-haspopup=\"menu\">\n <slot name=\"more-trigger\">\n <le-icon name=\"ellipsis-horizontal\" />\n </slot>\n </button>\n <le-navigation\n orientation=\"vertical\"\n items={hiddenItems}\n style={{ minWidth: '200px' }}\n ></le-navigation>\n </le-popover>\n );\n }\n\n render() {\n const items = this.parsedItems;\n const indexedItems = items.map((item, index) => ({ item, index }));\n const hiddenSet = new Set(this.hiddenIndices);\n const hiddenItems = indexedItems.filter(({ index }) => hiddenSet.has(index));\n const visibleItems = indexedItems.filter(({ index }) => !hiddenSet.has(index));\n const shouldCollapse = this.overflowMode === 'collapse' && hiddenItems.length > 0;\n\n const firstVisible = visibleItems[0];\n const remainingVisible = visibleItems.slice(1);\n const firstHidden = hiddenSet.has(0);\n\n return (\n <Host onKeyDown={this.handleKeyDown}>\n <nav class=\"breadcrumbs\" aria-label={this.label}>\n <slot name=\"start\"></slot>\n\n <div\n class={classnames('list', {\n wrap: this.overflowMode === 'wrap',\n scroll: this.overflowMode === 'scroll',\n })}\n ref={el => (this.listEl = el as HTMLElement)}\n >\n {!firstHidden && firstVisible\n ? this.renderItem(firstVisible.item, firstVisible.index)\n : null}\n\n {shouldCollapse && !firstHidden && firstVisible ? this.renderSeparator() : null}\n {shouldCollapse ? this.renderMore(hiddenItems.map(h => h.item)) : null}\n\n {(firstHidden ? visibleItems : remainingVisible).map(({ item, index }, i) => (\n <Fragment>\n {this.renderSeparator()}\n <span class=\"crumb\" key={`${item.label}-${index}-${i}`}>\n {this.renderItem(item, index)}\n </span>\n </Fragment>\n ))}\n </div>\n\n <slot name=\"end\"></slot>\n </nav>\n\n <span class=\"hidden-slot\" aria-hidden=\"true\">\n <slot name=\"separator\" onSlotchange={this.handleSeparatorSlotChange}></slot>\n </span>\n </Host>\n );\n }\n}\n"]}
@@ -21,84 +21,55 @@ import { classnames } from "../../utils/utils";
21
21
  * @cmsCategory Actions
22
22
  */
23
23
  export class LeButton {
24
- el;
25
- /**
26
- * Mode of the popover should be 'default' for internal use
27
- */
28
- mode;
29
- /**
30
- * Button variant style
31
- * @allowedValues solid | outlined | clear
32
- */
33
- variant = 'solid';
34
- /**
35
- * Button color theme (uses theme semantic colors)
36
- * @allowedValues primary | secondary | success | warning | danger | info
37
- */
38
- color = 'primary';
39
- /**
40
- * Button size
41
- * @allowedValues small | medium | large
42
- */
43
- size = 'medium';
44
- /**
45
- * Whether the button is in a selected/active state
46
- */
47
- selected = false;
48
- /**
49
- * Whether the button takes full width of its container
50
- */
51
- fullWidth = false;
52
- /**
53
- * Icon only button image or emoji
54
- * if this prop is set, the button will render only the icon slot
55
- */
56
- iconOnly;
57
- /**
58
- * Start icon image or emoji
59
- */
60
- iconStart;
61
- /**
62
- * End icon image or emoji
63
- */
64
- iconEnd;
65
- /**
66
- * Whether the button is disabled
67
- */
68
- disabled = false;
69
- /**
70
- * The button type attribute
71
- * @allowedValues button | submit | reset
72
- */
73
- type = 'button';
74
- /**
75
- * Optional href to make the button act as a link
76
- */
77
- href;
78
- /**
79
- * Link target when href is set
80
- */
81
- target;
82
- /**
83
- * Alignment of the button label without the end icon
84
- * @allowedValues start | center | space-between | end
85
- */
86
- align = 'center';
87
- /**
88
- * Emitted when the button is clicked.
89
- * This is a custom event that wraps the native click but ensures the target is the le-button.
90
- */
91
- leClick;
92
- handleClick = (event) => {
93
- // We stop the internal button click from bubbling up
94
- event.stopPropagation();
95
- if (this.disabled) {
96
- event.preventDefault();
97
- return;
98
- }
99
- // And emit our own click event from the host element
100
- this.leClick.emit(event);
101
- };
24
+ constructor() {
25
+ /**
26
+ * Button variant style
27
+ * @allowedValues solid | outlined | clear
28
+ */
29
+ this.variant = 'solid';
30
+ /**
31
+ * Button color theme (uses theme semantic colors)
32
+ * @allowedValues primary | secondary | success | warning | danger | info
33
+ */
34
+ this.color = 'primary';
35
+ /**
36
+ * Button size
37
+ * @allowedValues small | medium | large
38
+ */
39
+ this.size = 'medium';
40
+ /**
41
+ * Whether the button is in a selected/active state
42
+ */
43
+ this.selected = false;
44
+ /**
45
+ * Whether the button takes full width of its container
46
+ */
47
+ this.fullWidth = false;
48
+ /**
49
+ * Whether the button is disabled
50
+ */
51
+ this.disabled = false;
52
+ /**
53
+ * The button type attribute
54
+ * @allowedValues button | submit | reset
55
+ */
56
+ this.type = 'button';
57
+ /**
58
+ * Alignment of the button label without the end icon
59
+ * @allowedValues start | center | space-between | end
60
+ */
61
+ this.align = 'center';
62
+ this.handleClick = (event) => {
63
+ // We stop the internal button click from bubbling up
64
+ event.stopPropagation();
65
+ if (this.disabled) {
66
+ event.preventDefault();
67
+ return;
68
+ }
69
+ // And emit our own click event from the host element
70
+ this.leClick.emit(event);
71
+ };
72
+ }
102
73
  render() {
103
74
  const classes = classnames(`variant-${this.variant}`, `color-${this.color}`, `size-${this.size}`, {
104
75
  'selected': this.selected,
@@ -110,7 +81,7 @@ export class LeButton {
110
81
  const attrs = this.href
111
82
  ? { href: this.href, target: this.target, role: 'button' }
112
83
  : { type: this.type, disabled: this.disabled };
113
- return (h(Host, { key: 'a42aef03b5faf34f47b50dff799316a6815babd5', class: classes }, h("le-component", { key: '86ef8acf04d43e829b83d3e225f210acefc99515', component: "le-button" }, h(TagType, { key: '44145a5244577aab167c103501b788f0088799e3', class: classnames('le-button-container', `le-button-align-${this.align}`), part: "button", ...attrs, onClick: this.handleClick }, this.iconOnly !== undefined ? (h("slot", { name: "icon-only" }, typeof this.iconOnly === 'string' ? this.iconOnly : null)) : (h(Fragment, null, h("span", { class: "le-button-label" }, this.iconStart && (h("span", { class: "icon-start", part: "icon-start" }, this.iconStart)), h("le-slot", { name: "", description: "Button text", type: "text", class: "content", part: "content" }, h("slot", null))), this.iconEnd && (h("span", { class: "icon-end", part: "icon-end" }, this.iconEnd))))))));
84
+ return (h(Host, { key: '4bf9fb21e9bf0ca5a19193d977ad9fab90b519a0', class: classes }, h("le-component", { key: '8e0edefabbe9196eba935a1e8cce788c686c170c', component: "le-button" }, h(TagType, { key: '30f88ea834a9029c0f8ec24819107ba318dc6397', class: classnames('le-button-container', `le-button-align-${this.align}`), part: "button", ...attrs, onClick: this.handleClick }, this.iconOnly !== undefined ? (h("slot", { name: "icon-only" }, typeof this.iconOnly === 'string' ? this.iconOnly : null)) : (h(Fragment, null, h("span", { class: "le-button-label" }, this.iconStart && (h("span", { class: "icon-start", part: "icon-start" }, this.iconStart)), h("le-slot", { name: "", description: "Button text", type: "text", class: "content", part: "content" }, h("slot", null))), this.iconEnd && (h("span", { class: "icon-end", part: "icon-end" }, this.iconEnd))))))));
114
85
  }
115
86
  static get is() { return "le-button"; }
116
87
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"le-button.js","sourceRoot":"","sources":["../../../src/components/le-button/le-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, Element, Fragment, Event, EventEmitter, Host } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible button component with multiple variants and states.\n *\n * @slot - Button text content\n * @slot icon-only - Icon for icon-only buttons\n *\n * @cssprop --le-button-bg - Button background color\n * @cssprop --le-button-color - Button text color\n * @cssprop --le-button-border-radius - Button border radius\n * @cssprop --le-button-padding-x - Button horizontal padding\n * @cssprop --le-button-padding-y - Button vertical padding\n *\n * @csspart button - The native button element\n * @csspart content - The button content wrapper\n * @csspart icon-start - The start icon slot\n * @csspart icon-end - The end icon slot\n *\n * @cmsEditable true\n * @cmsCategory Actions\n */\n@Component({\n tag: 'le-button',\n styleUrl: 'le-button.css',\n shadow: true,\n})\nexport class LeButton {\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 * Button variant style\n * @allowedValues solid | outlined | clear\n */\n @Prop() variant: 'solid' | 'outlined' | 'clear' | 'system' = 'solid';\n\n /**\n * Button color theme (uses theme semantic colors)\n * @allowedValues primary | secondary | success | warning | danger | info\n */\n @Prop() color: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' = 'primary';\n\n /**\n * Button size\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the button is in a selected/active state\n */\n @Prop() selected: boolean = false;\n\n /**\n * Whether the button takes full width of its container\n */\n @Prop({ reflect: true }) fullWidth: boolean = false;\n\n /**\n * Icon only button image or emoji\n * if this prop is set, the button will render only the icon slot\n */\n @Prop() iconOnly?: string | Node;\n\n /**\n * Start icon image or emoji\n */\n @Prop() iconStart?: string | Node;\n\n /**\n * End icon image or emoji\n */\n @Prop() iconEnd?: string | Node;\n\n /**\n * Whether the button is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * The button type attribute\n * @allowedValues button | submit | reset\n */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Optional href to make the button act as a link\n */\n @Prop() href?: string;\n\n /**\n * Link target when href is set\n */\n @Prop() target?: string;\n\n /**\n * Alignment of the button label without the end icon\n * @allowedValues start | center | space-between | end\n */\n @Prop() align: 'start' | 'center' | 'space-between' | 'end' = 'center';\n\n /**\n * Emitted when the button is clicked.\n * This is a custom event that wraps the native click but ensures the target is the le-button.\n */\n @Event({ eventName: 'click' }) leClick: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n // We stop the internal button click from bubbling up\n event.stopPropagation();\n\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n\n // And emit our own click event from the host element\n this.leClick.emit(event);\n };\n\n render() {\n const classes = classnames(\n `variant-${this.variant}`,\n `color-${this.color}`,\n `size-${this.size}`,\n {\n 'selected': this.selected,\n 'full-width': this.fullWidth,\n 'icon-only': this.iconOnly,\n 'disabled': this.disabled,\n },\n );\n\n const TagType = this.href ? 'a' : 'button';\n const attrs = this.href\n ? { href: this.href, target: this.target, role: 'button' }\n : { type: this.type, disabled: this.disabled };\n\n return (\n <Host class={classes}>\n <le-component component=\"le-button\">\n <TagType\n class={classnames('le-button-container', `le-button-align-${this.align}`)}\n part=\"button\"\n {...attrs}\n onClick={this.handleClick}\n >\n {this.iconOnly !== undefined ? (\n <slot name=\"icon-only\">\n {typeof this.iconOnly === 'string' ? this.iconOnly : null}\n </slot>\n ) : (\n <Fragment>\n <span class=\"le-button-label\">\n {this.iconStart && (\n <span class=\"icon-start\" part=\"icon-start\">\n {this.iconStart}\n </span>\n )}\n <le-slot\n name=\"\"\n description=\"Button text\"\n type=\"text\"\n class=\"content\"\n part=\"content\"\n >\n <slot></slot>\n </le-slot>\n </span>\n {this.iconEnd && (\n <span class=\"icon-end\" part=\"icon-end\">\n {this.iconEnd}\n </span>\n )}\n </Fragment>\n )}\n </TagType>\n </le-component>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"le-button.js","sourceRoot":"","sources":["../../../src/components/le-button/le-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, Element, Fragment, Event, EventEmitter, Host } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible button component with multiple variants and states.\n *\n * @slot - Button text content\n * @slot icon-only - Icon for icon-only buttons\n *\n * @cssprop --le-button-bg - Button background color\n * @cssprop --le-button-color - Button text color\n * @cssprop --le-button-border-radius - Button border radius\n * @cssprop --le-button-padding-x - Button horizontal padding\n * @cssprop --le-button-padding-y - Button vertical padding\n *\n * @csspart button - The native button element\n * @csspart content - The button content wrapper\n * @csspart icon-start - The start icon slot\n * @csspart icon-end - The end icon slot\n *\n * @cmsEditable true\n * @cmsCategory Actions\n */\n@Component({\n tag: 'le-button',\n styleUrl: 'le-button.css',\n shadow: true,\n})\nexport class LeButton {\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 * Button variant style\n * @allowedValues solid | outlined | clear\n */\n @Prop() variant: 'solid' | 'outlined' | 'clear' | 'system' = 'solid';\n\n /**\n * Button color theme (uses theme semantic colors)\n * @allowedValues primary | secondary | success | warning | danger | info\n */\n @Prop() color: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' = 'primary';\n\n /**\n * Button size\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the button is in a selected/active state\n */\n @Prop() selected: boolean = false;\n\n /**\n * Whether the button takes full width of its container\n */\n @Prop({ reflect: true }) fullWidth: boolean = false;\n\n /**\n * Icon only button image or emoji\n * if this prop is set, the button will render only the icon slot\n */\n @Prop() iconOnly?: string | Node;\n\n /**\n * Start icon image or emoji\n */\n @Prop() iconStart?: string | Node;\n\n /**\n * End icon image or emoji\n */\n @Prop() iconEnd?: string | Node;\n\n /**\n * Whether the button is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * The button type attribute\n * @allowedValues button | submit | reset\n */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Optional href to make the button act as a link\n */\n @Prop() href?: string;\n\n /**\n * Link target when href is set\n */\n @Prop() target?: string;\n\n /**\n * Alignment of the button label without the end icon\n * @allowedValues start | center | space-between | end\n */\n @Prop() align: 'start' | 'center' | 'space-between' | 'end' = 'center';\n\n /**\n * Emitted when the button is clicked.\n * This is a custom event that wraps the native click but ensures the target is the le-button.\n */\n @Event({ eventName: 'click' }) leClick: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n // We stop the internal button click from bubbling up\n event.stopPropagation();\n\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n\n // And emit our own click event from the host element\n this.leClick.emit(event);\n };\n\n render() {\n const classes = classnames(\n `variant-${this.variant}`,\n `color-${this.color}`,\n `size-${this.size}`,\n {\n 'selected': this.selected,\n 'full-width': this.fullWidth,\n 'icon-only': this.iconOnly,\n 'disabled': this.disabled,\n },\n );\n\n const TagType = this.href ? 'a' : 'button';\n const attrs = this.href\n ? { href: this.href, target: this.target, role: 'button' }\n : { type: this.type, disabled: this.disabled };\n\n return (\n <Host class={classes}>\n <le-component component=\"le-button\">\n <TagType\n class={classnames('le-button-container', `le-button-align-${this.align}`)}\n part=\"button\"\n {...attrs}\n onClick={this.handleClick}\n >\n {this.iconOnly !== undefined ? (\n <slot name=\"icon-only\">\n {typeof this.iconOnly === 'string' ? this.iconOnly : null}\n </slot>\n ) : (\n <Fragment>\n <span class=\"le-button-label\">\n {this.iconStart && (\n <span class=\"icon-start\" part=\"icon-start\">\n {this.iconStart}\n </span>\n )}\n <le-slot\n name=\"\"\n description=\"Button text\"\n type=\"text\"\n class=\"content\"\n part=\"content\"\n >\n <slot></slot>\n </le-slot>\n </span>\n {this.iconEnd && (\n <span class=\"icon-end\" part=\"icon-end\">\n {this.iconEnd}\n </span>\n )}\n </Fragment>\n )}\n </TagType>\n </le-component>\n </Host>\n );\n }\n}\n"]}
@@ -25,18 +25,19 @@ import { classnames } from "../../utils/utils";
25
25
  * @cmsCategory Layout
26
26
  */
27
27
  export class LeCard {
28
- el;
29
- /**
30
- * Card variant style
31
- * @allowedValues default | outlined | elevated
32
- */
33
- variant = 'default';
34
- /**
35
- * Whether the card is interactive (clickable)
36
- */
37
- interactive = false;
28
+ constructor() {
29
+ /**
30
+ * Card variant style
31
+ * @allowedValues default | outlined | elevated
32
+ */
33
+ this.variant = 'default';
34
+ /**
35
+ * Whether the card is interactive (clickable)
36
+ */
37
+ this.interactive = false;
38
+ }
38
39
  render() {
39
- return (h("le-component", { key: 'b4203e8775f711c1ce4d8b9a4270815f122271f2', component: "le-card", hostClass: classnames(`variant-${this.variant}`, { 'interactive': this.interactive }) }, h("div", { key: '0dc9231529fc6d2eb29bc5cde2c1dbf18b332a43', class: "card", part: "card" }, h("div", { key: '511fcec73b51b0931d92e0fee4d17b108c827e74', class: "card-header", part: "header" }, h("le-slot", { key: 'e50dbadbe53ce6fa343ac7cfccb5a5d8f58fbd01', name: "header", label: "Header", description: "Card title", type: "text", tag: "h3" }, h("slot", { key: '36e1f7c3c5c1c5a9d49261d1b1406efe4004389b', name: "header" }))), h("div", { key: 'f9da55c0661d7906161b77aa22edc1c6bb7fb8d4', class: "card-content", part: "content" }, h("le-slot", { key: '01670058d67851f1bd70b21fc4111b4bf2509f25', name: "", label: "Content", description: "Card content", type: "textarea", tag: "p", required: true }, h("slot", { key: 'e6eff48970eca2b3971f0ea7bfda3ca12bd1a3a1' }))), h("div", { key: 'ccd29257bc339a0d26c4750823fc635a182123cc', class: "card-footer", part: "footer" }, h("le-slot", { key: '198499afcbb9b0e82cac6cf976ab407697263c1f', name: "footer", label: "Footer", description: "Card footer with actions", "allowed-components": "le-button,le-link" }, h("slot", { key: '4d495b49f48ac142cdf739472b48d4bfb37933af', name: "footer" }))))));
40
+ return (h("le-component", { key: '50b722661132acca9396539021caebd0beb99c13', component: "le-card", hostClass: classnames(`variant-${this.variant}`, { 'interactive': this.interactive }) }, h("div", { key: '4fa7de6abb9460281b1a98a158b76dcd0ee9fe8d', class: "card", part: "card" }, h("div", { key: '60b67d4d7416628fbd07aae2623aebeb10e78366', class: "card-header", part: "header" }, h("le-slot", { key: '1ef59c336f43b1292eae242b00e92d1b90ec1fd1', name: "header", label: "Header", description: "Card title", type: "text", tag: "h3" }, h("slot", { key: 'cdbf9d8ee5b832a7c7314443e974b6f3fe0d6ffd', name: "header" }))), h("div", { key: '11290af7a2fc3f927e825e06f5ae51797013592e', class: "card-content", part: "content" }, h("le-slot", { key: '29d5890f7b841138910c84bf9017462edb90a851', name: "", label: "Content", description: "Card content", type: "textarea", tag: "p", required: true }, h("slot", { key: '6e30f0ca8881825cf474e9d28ca7f16cc9e2feb6' }))), h("div", { key: '6e4824adaafef5e440e7d9e26d29048841e3cdba', class: "card-footer", part: "footer" }, h("le-slot", { key: 'aa734bdb5f1166bae0868949225bfc50cdb6e898', name: "footer", label: "Footer", description: "Card footer with actions", "allowed-components": "le-button,le-link" }, h("slot", { key: '6d3bf34e9585b38ce19aaeacf8259543560856a4', name: "footer" }))))));
40
41
  }
41
42
  static get is() { return "le-card"; }
42
43
  static get encapsulation() { return "shadow"; }