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
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h, F as Fragment, H as Host } from './index-DFTm5BqT.js';
1
+ import { r as registerInstance, c as createEvent, h, F as Fragment, H as Host, a as getElement } from './index-DFTm5BqT.js';
2
2
  import { c as classnames } from './utils-DZYCZLrF.js';
3
3
 
4
4
  const leTabCss = () => `:host{display:inline-block;--le-tab-border-radius:var(--le-radius-md);--le-tab-padding-x:var(--le-spacing-4);--le-tab-padding-y:var(--le-spacing-2);--le-tab-padding:var(--le-tab-padding-y) var(--le-tab-padding-x);--le-tab-small-padding:0.25rem;--le-tab-font-size:var(--le-font-size-md);--le-tab-font-weight:var(--le-font-weight-medium);--le-tab-transition:var(--le-transition-fast);--le-transition-easing:ease-in-out;--le-tab-icon-aspect-ratio:1;--le-tab-icon-only-aspect-ratio:2.5;--le-tab-color:var(--le-color-text-primary);--le-selected-tab-color:var(--le-color-primary);--le-selected-icon-only-tab-background:color-mix(in srgb, var(--_tab-bg) 10%, transparent);--_tab-bg:var(--le-color-primary);--_tab-bg-hover:var(--le-color-primary-dark);--_tab-bg-system:var(--le-color-black);--_tab-color:var(--le-tab-color);--_tab-border-color:var(--le-color-primary)}:host([full-width]){display:block;width:100%}.le-tab-container{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--le-spacing-3);width:100%;padding:var(--le-tab-padding);color:var(--_tab-color);font-family:var(--le-font-family-base);font-size:var(--le-tab-font-size);font-weight:var(--le-tab-font-weight);line-height:var(--le-line-height-tight);text-decoration:none;cursor:pointer;transition:background-color var(--le-tab-transition) var(--le-transition-easing),
@@ -10,82 +10,58 @@ const LeTab = class {
10
10
  constructor(hostRef) {
11
11
  registerInstance(this, hostRef);
12
12
  this.leClick = createEvent(this, "click");
13
+ /**
14
+ * Tab variant style
15
+ * @allowedValues solid | underlined | clear | enclosed | icon-only
16
+ */
17
+ this.variant = 'underlined';
18
+ /**
19
+ * Position of the tabs when used within a le-tabs component
20
+ * @allowedValues top | bottom | start | end
21
+ */
22
+ this.position = 'top';
23
+ /**
24
+ * Tab size
25
+ * @allowedValues small | medium | large
26
+ */
27
+ this.size = 'medium';
28
+ /**
29
+ * Whether the tab can get focus
30
+ * needed for accessibility when used in custom tab implementations
31
+ */
32
+ this.focusable = true;
33
+ /**
34
+ * Whether the tab is in a selected/active state
35
+ */
36
+ this.selected = false;
37
+ /**
38
+ * Whether the tab takes full width of its container
39
+ */
40
+ this.fullWidth = false;
41
+ /**
42
+ * Whether to show the label when in icon-only mode
43
+ */
44
+ this.showLabel = false;
45
+ /**
46
+ * Whether the tab is disabled
47
+ */
48
+ this.disabled = false;
49
+ /**
50
+ * Alignment of the tab label without the end icon
51
+ * @allowedValues start | center | space-between | end
52
+ */
53
+ this.align = 'center';
54
+ this.handleClick = (event) => {
55
+ // We stop the internal button click from bubbling up
56
+ event.stopPropagation();
57
+ if (this.disabled) {
58
+ event.preventDefault();
59
+ return;
60
+ }
61
+ // And emit our own click event from the host element
62
+ this.leClick.emit(event);
63
+ };
13
64
  }
14
- get el() { return getElement(this); }
15
- /**
16
- * Mode of the popover should be 'default' for internal use
17
- */
18
- mode;
19
- /**
20
- * Label if it is not provided via slot
21
- */
22
- label;
23
- /**
24
- * Value of the tab, defaults to label if not provided
25
- */
26
- value;
27
- /**
28
- * Tab variant style
29
- * @allowedValues solid | underlined | clear | enclosed | icon-only
30
- */
31
- variant = 'underlined';
32
- /**
33
- * Position of the tabs when used within a le-tabs component
34
- * @allowedValues top | bottom | start | end
35
- */
36
- position = 'top';
37
- /**
38
- * Tab size
39
- * @allowedValues small | medium | large
40
- */
41
- size = 'medium';
42
- /**
43
- * Whether the tab can get focus
44
- * needed for accessibility when used in custom tab implementations
45
- */
46
- focusable = true;
47
- /**
48
- * Whether the tab is in a selected/active state
49
- */
50
- selected = false;
51
- /**
52
- * Whether the tab takes full width of its container
53
- */
54
- fullWidth = false;
55
- /**
56
- * Icon only tab image or emoji
57
- * if this prop is set, the tab will render only the icon slot
58
- */
59
- icon;
60
- /**
61
- * Whether to show the label when in icon-only mode
62
- */
63
- showLabel = false;
64
- /**
65
- * Start icon image or emoji
66
- */
67
- iconStart;
68
- /**
69
- * End icon image or emoji
70
- */
71
- iconEnd;
72
- /**
73
- * Whether the tab is disabled
74
- */
75
- disabled = false;
76
- /**
77
- * Optional href to make the tab act as a link
78
- */
79
- href;
80
- /**
81
- * Link target when href is set
82
- */
83
- target;
84
- /**
85
- * Alignment of the tab label without the end icon
86
- * @allowedValues start | center | space-between | end
87
- */
88
- align = 'center';
89
65
  /**
90
66
  * Get tab configuration for parent component
91
67
  */
@@ -99,21 +75,6 @@ const LeTab = class {
99
75
  disabled: this.disabled,
100
76
  };
101
77
  }
102
- /**
103
- * Emitted when the tab is clicked.
104
- * This is a custom event that wraps the native click but ensures the target is the le-tab.
105
- */
106
- leClick;
107
- handleClick = (event) => {
108
- // We stop the internal button click from bubbling up
109
- event.stopPropagation();
110
- if (this.disabled) {
111
- event.preventDefault();
112
- return;
113
- }
114
- // And emit our own click event from the host element
115
- this.leClick.emit(event);
116
- };
117
78
  render() {
118
79
  const classes = classnames(`variant-${this.variant}`, `size-${this.size}`, `position-${this.position}`, {
119
80
  'selected': this.selected,
@@ -125,8 +86,9 @@ const LeTab = class {
125
86
  const attrs = this.href
126
87
  ? { href: this.href, target: this.target, role: 'button' }
127
88
  : { disabled: this.disabled };
128
- return (h(Host, { key: 'a539044017f98ddaa7636df1457b669f56c19d94' }, h("le-component", { key: 'b6df3e0738be09d00f3cd802b3cd06af4402e746', component: "le-tab" }, h(TagType, { key: 'a37f2d404da74b5b0d99bbb0b9ff57121903ee2d', class: classnames('le-tab-container', `le-tab-align-${this.align}`, classes), part: "button", ...attrs, onClick: this.handleClick, tabIndex: this.focusable ? 0 : -1 }, this.icon !== undefined ? (h("div", { class: "icon-only" }, h("div", { class: "icon" }, this.icon), this.showLabel && h("span", { class: "icon-label" }, this.label))) : (h(Fragment, null, h("span", { class: "le-tab-label" }, this.iconStart && (h("span", { class: "icon-start", part: "icon-start" }, this.iconStart)), h("le-slot", { name: "", description: "Tab text", type: "text", class: "content", part: "content" }, h("slot", null, this.label))), this.iconEnd && (h("span", { class: "icon-end", part: "icon-end" }, this.iconEnd))))))));
89
+ return (h(Host, { key: '1c4f36bb0cd97c1fea114d5119425507d133cf55' }, h("le-component", { key: '5a8755d8cf973d2f7d9f25e8d984f4a35047c6c2', component: "le-tab" }, h(TagType, { key: '875b8ef5905a15e3c114001f3a7b05ce3731e037', class: classnames('le-tab-container', `le-tab-align-${this.align}`, classes), part: "button", ...attrs, onClick: this.handleClick, tabIndex: this.focusable ? 0 : -1 }, this.icon !== undefined ? (h("div", { class: "icon-only" }, h("div", { class: "icon" }, this.icon), this.showLabel && h("span", { class: "icon-label" }, this.label))) : (h(Fragment, null, h("span", { class: "le-tab-label" }, this.iconStart && (h("span", { class: "icon-start", part: "icon-start" }, this.iconStart)), h("le-slot", { name: "", description: "Tab text", type: "text", class: "content", part: "content" }, h("slot", null, this.label))), this.iconEnd && (h("span", { class: "icon-end", part: "icon-end" }, this.iconEnd))))))));
129
90
  }
91
+ get el() { return getElement(this); }
130
92
  };
131
93
  LeTab.style = leTabCss();
132
94
 
@@ -1 +1 @@
1
- {"version":3,"file":"le-tab.entry.js","sources":["src/components/le-tab/le-tab.css?tag=le-tab&encapsulation=shadow","src/components/le-tab/le-tab.tsx"],"sourcesContent":["/**\n * Default mode styles for le-button\n * Uses global design tokens with component-specific overrides\n */\n:host {\n display: inline-block;\n \n /* Component-specific tokens */\n --le-tab-border-radius: var(--le-radius-md);\n --le-tab-padding-x: var(--le-spacing-4);\n --le-tab-padding-y: var(--le-spacing-2);\n --le-tab-padding: var(--le-tab-padding-y) var(--le-tab-padding-x);\n --le-tab-small-padding: 0.25rem;\n --le-tab-font-size: var(--le-font-size-md);\n --le-tab-font-weight: var(--le-font-weight-medium);\n --le-tab-transition: var(--le-transition-fast);\n --le-transition-easing: ease-in-out;\n --le-tab-icon-aspect-ratio: 1;\n --le-tab-icon-only-aspect-ratio: 2.5;\n --le-tab-color: var(--le-color-text-primary);\n --le-selected-tab-color: var(--le-color-primary);\n --le-selected-icon-only-tab-background: color-mix(in srgb, var(--_tab-bg) 10%, transparent);\n \n /* Internal state variables - set by color classes */\n --_tab-bg: var(--le-color-primary);\n --_tab-bg-hover: var(--le-color-primary-dark);\n --_tab-bg-system: var(--le-color-black);\n --_tab-color: var(--le-tab-color);\n --_tab-border-color: var(--le-color-primary);\n}\n\n:host([full-width]) {\n display: block;\n width: 100%;\n}\n\n.le-tab-container {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-3);\n width: 100%;\n padding: var(--le-tab-padding);\n color: var(--_tab-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-tab-font-size);\n font-weight: var(--le-tab-font-weight);\n line-height: var(--le-line-height-tight);\n text-decoration: none;\n cursor: pointer;\n transition: \n background-color var(--le-tab-transition) var(--le-transition-easing),\n border-color var(--le-tab-transition) var(--le-transition-easing),\n box-shadow var(--le-tab-transition) var(--le-transition-easing),\n transform var(--le-tab-transition) var(--le-transition-easing);\n}\n\n.le-tab-container:hover:not(:disabled) {\n color: var(--le-selected-tab-color);\n}\n\n.le-tab-container:focus-visible {\n outline: none;\n}\n\n.le-tab-container:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.le-tab-label {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n}\n\n/* ===========================================\n * STYLE VARIANTS\n * =========================================== */\n\n/* Underlined (default for tabs), depends on the position (top, bottom, start, end) */\n.le-tab-container.variant-underlined {\n background: transparent;\n border: 2px solid transparent;\n border-radius: 0;\n}\n.le-tab-container.variant-underlined.position-start,\n.le-tab-container.variant-underlined.position-end {\n border-block-width: 0;\n}\n.le-tab-container.variant-underlined.position-start {\n padding-inline-start: 0;\n}\n.le-tab-container.variant-underlined.position-top,\n.le-tab-container.variant-underlined.position-bottom {\n border-inline-width: 0;\n}\n.le-tab-container.variant-underlined.position-start.selected {\n border-inline-end-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-end.selected {\n border-inline-start-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-top.selected {\n border-bottom-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-bottom.selected {\n border-top-color: var(--_tab-border-color);\n}\n\n/* Solid (default) - already styled by color classes */\n.le-tab-container.variant-solid {\n background: transparent;\n border-radius: var(--le-tab-border-radius);\n border: none;\n}\n.le-tab-container.variant-solid.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Pills */\n.le-tab-container.variant-pills {\n background: transparent;\n border-radius: var(--le-radius-full);\n border: none;\n}\n.le-tab-container.variant-pills.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Enclosed */\n.le-tab-container.variant-enclosed {\n padding-block: var(--le-spacing-1);\n background: transparent;\n border-radius: var(--le-tab-border-radius);\n border: none;\n}\n.le-tab-container.variant-enclosed.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Icon only (used in le-tab-bar - mobile navigation) */\n.le-tab-container.variant-icon-only {\n border: none;\n padding: 0;\n background: transparent;\n color: var(--_tab-color);\n}\n.le-tab-container.variant-icon-only .icon-only {\n flex-direction: column;\n}\n.le-tab-container.variant-icon-only .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--le-font-size-3xl);\n aspect-ratio: var(--le-tab-icon-only-aspect-ratio);\n font-size: var(--le-font-size-2xl);\n border-radius: var(--le-radius-full);\n}\n.le-tab-container.variant-icon-only .icon-label {\n margin-top: var(--le-spacing-1);\n font-size: var(--le-font-size-2xs);\n}\n\n.le-tab-container.variant-icon-only.selected {\n color: var(--le-selected-tab-color);\n}\n.le-tab-container.variant-icon-only.selected .icon {\n background: var(--le-selected-icon-only-tab-background);\n}\n.le-tab-container.variant-icon-only.size-small {\n padding: var(--le-tab-small-padding, 0.25rem);\n}\n.le-tab-container.variant-icon-only .content {\n display: none;\n}\n\n\n/* ===========================================\n * SIZES\n * =========================================== */\n.le-tab-container.size-small {\n --le-tab-padding-x: 0.4rem;\n --le-tab-padding-y: 0.3rem;\n --le-tab-padding-top: 0.35rem;\n --le-tab-font-size: var(--le-tab-small-font-size, var(--le-font-size-xs));\n}\n\n.le-tab-container.size-large {\n --le-tab-padding-x: 0.9rem;\n --le-tab-padding-y: 0.6rem;\n --le-tab-font-size: var(--le-font-size-xl);\n}\n\n/* ===========================================\n * STATES & MODIFIERS\n * =========================================== */\n\n/* Full width */\n.le-tab-container.full-width {\n display: block;\n width: 100%;\n}\n\n.le-tab-container.variant-underlined.selected,\n.le-tab-container.variant-clear.selected {\n color: var(--le-selected-tab-color);\n}\n\n/* Icon only */\n:host > le-component.icon-only .le-tab-container {\n padding: 0.5rem;\n padding-bottom: 0.6rem;\n aspect-ratio: var(--le-tab-icon-aspect-ratio, 1);\n}\n\n.le-tab-container.icon-only.size-small {\n padding: var(--le-tab-small-padding, 0.25rem);\n}\n\n.le-tab-container.icon-only.size-large {\n padding: 0.75rem;\n}\n\n/* Hide content in icon-only mode */\n.le-tab-container.icon-only .content {\n display: none;\n}\n\n/* ===========================================\n * CONTENT (le-slot wrapper)\n * =========================================== */\n.content {\n display: inline;\n}\n\n.content:empty {\n display: none;\n}\n\n/* ===========================================\n * ICON WRAPPERS & SLOTS\n * =========================================== */\n.icon-start,\n.icon-only,\n.icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.icon-start:empty,\n.icon-only:empty,\n.icon-end:empty {\n display: none;\n}\n\n::slotted([slot=\"icon-start\"]),\n::slotted([slot=\"icon-only\"]),\n::slotted([slot=\"icon-end\"]) {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.125em;\n height: 1.125em;\n}\n\n/* ===========================================\n * ALIGNMENT MODIFIERS\n * =========================================== */\n.le-tab-align-start {\n justify-content: flex-start;\n}\n.le-tab-align-center {\n justify-content: center;\n}\n.le-tab-align-space-between {\n justify-content: space-between;\n}\n.le-tab-align-end {\n justify-content: flex-end;\n}\n","import {\n Component,\n Prop,\n h,\n Element,\n Fragment,\n Event,\n EventEmitter,\n Host,\n Method,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible tab component with multiple variants and states.\n *\n * @slot - Tab text content\n * @slot icon-only - Icon for icon-only tabs\n *\n * @cssprop --le-tab-bg - Tab background color\n * @cssprop --le-tab-color - Tab text color\n * @cssprop --le-tab-border-radius - Tab border radius\n * @cssprop --le-tab-padding-x - Tab horizontal padding\n * @cssprop --le-tab-padding-y - Tab vertical padding\n *\n * @csspart button - The native button element\n * @csspart content - The tab 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-tab',\n styleUrl: 'le-tab.css',\n shadow: true,\n})\nexport class LeTab {\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 * Label if it is not provided via slot\n */\n @Prop() label?: string;\n\n /**\n * Value of the tab, defaults to label if not provided\n */\n @Prop() value?: string;\n\n /**\n * Tab variant style\n * @allowedValues solid | underlined | clear | enclosed | icon-only\n */\n @Prop() variant: 'underlined' | 'solid' | 'pills' | 'enclosed' | 'icon-only' = 'underlined';\n\n /**\n * Position of the tabs when used within a le-tabs component\n * @allowedValues top | bottom | start | end\n */\n @Prop() position: 'top' | 'bottom' | 'start' | 'end' = 'top';\n\n /**\n * Tab size\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the tab can get focus\n * needed for accessibility when used in custom tab implementations\n */\n @Prop() focusable: boolean = true;\n\n /**\n * Whether the tab is in a selected/active state\n */\n @Prop() selected: boolean = false;\n\n /**\n * Whether the tab takes full width of its container\n */\n @Prop({ reflect: true }) fullWidth: boolean = false;\n\n /**\n * Icon only tab image or emoji\n * if this prop is set, the tab will render only the icon slot\n */\n @Prop() icon?: string | Node;\n\n /**\n * Whether to show the label when in icon-only mode\n */\n @Prop() showLabel: boolean = false;\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 tab is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Optional href to make the tab 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 tab 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 * Get tab configuration for parent component\n */\n @Method()\n async getTabConfig(): Promise<{\n label: string;\n value: string;\n icon: string | Node;\n iconStart?: string | Node;\n iconEnd?: string | Node;\n disabled: boolean;\n }> {\n return {\n label: this.label,\n value: this.value ?? this.label,\n icon: this.icon,\n iconStart: this.iconStart,\n iconEnd: this.iconEnd,\n disabled: this.disabled,\n };\n }\n\n /**\n * Emitted when the tab is clicked.\n * This is a custom event that wraps the native click but ensures the target is the le-tab.\n */\n @Event({ eventName: 'click' }) leClick: EventEmitter<PointerEvent>;\n\n private handleClick = (event: PointerEvent) => {\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 `size-${this.size}`,\n `position-${this.position}`,\n {\n 'selected': this.selected,\n 'full-width': this.fullWidth,\n 'icon-only': this.icon !== undefined,\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 : { disabled: this.disabled };\n\n return (\n <Host>\n <le-component component=\"le-tab\">\n <TagType\n class={classnames('le-tab-container', `le-tab-align-${this.align}`, classes)}\n part=\"button\"\n {...attrs}\n onClick={this.handleClick}\n tabIndex={this.focusable ? 0 : -1}\n >\n {this.icon !== undefined ? (\n <div class=\"icon-only\">\n <div class=\"icon\">{this.icon}</div>\n {this.showLabel && <span class=\"icon-label\">{this.label}</span>}\n </div>\n ) : (\n <Fragment>\n <span class=\"le-tab-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=\"Tab text\"\n type=\"text\"\n class=\"content\"\n part=\"content\"\n >\n <slot>{this.label}</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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"le-tab.entry.js","sources":["src/components/le-tab/le-tab.css?tag=le-tab&encapsulation=shadow","src/components/le-tab/le-tab.tsx"],"sourcesContent":["/**\n * Default mode styles for le-button\n * Uses global design tokens with component-specific overrides\n */\n:host {\n display: inline-block;\n \n /* Component-specific tokens */\n --le-tab-border-radius: var(--le-radius-md);\n --le-tab-padding-x: var(--le-spacing-4);\n --le-tab-padding-y: var(--le-spacing-2);\n --le-tab-padding: var(--le-tab-padding-y) var(--le-tab-padding-x);\n --le-tab-small-padding: 0.25rem;\n --le-tab-font-size: var(--le-font-size-md);\n --le-tab-font-weight: var(--le-font-weight-medium);\n --le-tab-transition: var(--le-transition-fast);\n --le-transition-easing: ease-in-out;\n --le-tab-icon-aspect-ratio: 1;\n --le-tab-icon-only-aspect-ratio: 2.5;\n --le-tab-color: var(--le-color-text-primary);\n --le-selected-tab-color: var(--le-color-primary);\n --le-selected-icon-only-tab-background: color-mix(in srgb, var(--_tab-bg) 10%, transparent);\n \n /* Internal state variables - set by color classes */\n --_tab-bg: var(--le-color-primary);\n --_tab-bg-hover: var(--le-color-primary-dark);\n --_tab-bg-system: var(--le-color-black);\n --_tab-color: var(--le-tab-color);\n --_tab-border-color: var(--le-color-primary);\n}\n\n:host([full-width]) {\n display: block;\n width: 100%;\n}\n\n.le-tab-container {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-3);\n width: 100%;\n padding: var(--le-tab-padding);\n color: var(--_tab-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-tab-font-size);\n font-weight: var(--le-tab-font-weight);\n line-height: var(--le-line-height-tight);\n text-decoration: none;\n cursor: pointer;\n transition: \n background-color var(--le-tab-transition) var(--le-transition-easing),\n border-color var(--le-tab-transition) var(--le-transition-easing),\n box-shadow var(--le-tab-transition) var(--le-transition-easing),\n transform var(--le-tab-transition) var(--le-transition-easing);\n}\n\n.le-tab-container:hover:not(:disabled) {\n color: var(--le-selected-tab-color);\n}\n\n.le-tab-container:focus-visible {\n outline: none;\n}\n\n.le-tab-container:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.le-tab-label {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n}\n\n/* ===========================================\n * STYLE VARIANTS\n * =========================================== */\n\n/* Underlined (default for tabs), depends on the position (top, bottom, start, end) */\n.le-tab-container.variant-underlined {\n background: transparent;\n border: 2px solid transparent;\n border-radius: 0;\n}\n.le-tab-container.variant-underlined.position-start,\n.le-tab-container.variant-underlined.position-end {\n border-block-width: 0;\n}\n.le-tab-container.variant-underlined.position-start {\n padding-inline-start: 0;\n}\n.le-tab-container.variant-underlined.position-top,\n.le-tab-container.variant-underlined.position-bottom {\n border-inline-width: 0;\n}\n.le-tab-container.variant-underlined.position-start.selected {\n border-inline-end-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-end.selected {\n border-inline-start-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-top.selected {\n border-bottom-color: var(--_tab-border-color);\n}\n.le-tab-container.variant-underlined.position-bottom.selected {\n border-top-color: var(--_tab-border-color);\n}\n\n/* Solid (default) - already styled by color classes */\n.le-tab-container.variant-solid {\n background: transparent;\n border-radius: var(--le-tab-border-radius);\n border: none;\n}\n.le-tab-container.variant-solid.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Pills */\n.le-tab-container.variant-pills {\n background: transparent;\n border-radius: var(--le-radius-full);\n border: none;\n}\n.le-tab-container.variant-pills.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Enclosed */\n.le-tab-container.variant-enclosed {\n padding-block: var(--le-spacing-1);\n background: transparent;\n border-radius: var(--le-tab-border-radius);\n border: none;\n}\n.le-tab-container.variant-enclosed.selected {\n background: var(--_tab-bg);\n color: var(--le-color-on-primary);\n}\n\n/* Icon only (used in le-tab-bar - mobile navigation) */\n.le-tab-container.variant-icon-only {\n border: none;\n padding: 0;\n background: transparent;\n color: var(--_tab-color);\n}\n.le-tab-container.variant-icon-only .icon-only {\n flex-direction: column;\n}\n.le-tab-container.variant-icon-only .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--le-font-size-3xl);\n aspect-ratio: var(--le-tab-icon-only-aspect-ratio);\n font-size: var(--le-font-size-2xl);\n border-radius: var(--le-radius-full);\n}\n.le-tab-container.variant-icon-only .icon-label {\n margin-top: var(--le-spacing-1);\n font-size: var(--le-font-size-2xs);\n}\n\n.le-tab-container.variant-icon-only.selected {\n color: var(--le-selected-tab-color);\n}\n.le-tab-container.variant-icon-only.selected .icon {\n background: var(--le-selected-icon-only-tab-background);\n}\n.le-tab-container.variant-icon-only.size-small {\n padding: var(--le-tab-small-padding, 0.25rem);\n}\n.le-tab-container.variant-icon-only .content {\n display: none;\n}\n\n\n/* ===========================================\n * SIZES\n * =========================================== */\n.le-tab-container.size-small {\n --le-tab-padding-x: 0.4rem;\n --le-tab-padding-y: 0.3rem;\n --le-tab-padding-top: 0.35rem;\n --le-tab-font-size: var(--le-tab-small-font-size, var(--le-font-size-xs));\n}\n\n.le-tab-container.size-large {\n --le-tab-padding-x: 0.9rem;\n --le-tab-padding-y: 0.6rem;\n --le-tab-font-size: var(--le-font-size-xl);\n}\n\n/* ===========================================\n * STATES & MODIFIERS\n * =========================================== */\n\n/* Full width */\n.le-tab-container.full-width {\n display: block;\n width: 100%;\n}\n\n.le-tab-container.variant-underlined.selected,\n.le-tab-container.variant-clear.selected {\n color: var(--le-selected-tab-color);\n}\n\n/* Icon only */\n:host > le-component.icon-only .le-tab-container {\n padding: 0.5rem;\n padding-bottom: 0.6rem;\n aspect-ratio: var(--le-tab-icon-aspect-ratio, 1);\n}\n\n.le-tab-container.icon-only.size-small {\n padding: var(--le-tab-small-padding, 0.25rem);\n}\n\n.le-tab-container.icon-only.size-large {\n padding: 0.75rem;\n}\n\n/* Hide content in icon-only mode */\n.le-tab-container.icon-only .content {\n display: none;\n}\n\n/* ===========================================\n * CONTENT (le-slot wrapper)\n * =========================================== */\n.content {\n display: inline;\n}\n\n.content:empty {\n display: none;\n}\n\n/* ===========================================\n * ICON WRAPPERS & SLOTS\n * =========================================== */\n.icon-start,\n.icon-only,\n.icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.icon-start:empty,\n.icon-only:empty,\n.icon-end:empty {\n display: none;\n}\n\n::slotted([slot=\"icon-start\"]),\n::slotted([slot=\"icon-only\"]),\n::slotted([slot=\"icon-end\"]) {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.125em;\n height: 1.125em;\n}\n\n/* ===========================================\n * ALIGNMENT MODIFIERS\n * =========================================== */\n.le-tab-align-start {\n justify-content: flex-start;\n}\n.le-tab-align-center {\n justify-content: center;\n}\n.le-tab-align-space-between {\n justify-content: space-between;\n}\n.le-tab-align-end {\n justify-content: flex-end;\n}\n","import {\n Component,\n Prop,\n h,\n Element,\n Fragment,\n Event,\n EventEmitter,\n Host,\n Method,\n} from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible tab component with multiple variants and states.\n *\n * @slot - Tab text content\n * @slot icon-only - Icon for icon-only tabs\n *\n * @cssprop --le-tab-bg - Tab background color\n * @cssprop --le-tab-color - Tab text color\n * @cssprop --le-tab-border-radius - Tab border radius\n * @cssprop --le-tab-padding-x - Tab horizontal padding\n * @cssprop --le-tab-padding-y - Tab vertical padding\n *\n * @csspart button - The native button element\n * @csspart content - The tab 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-tab',\n styleUrl: 'le-tab.css',\n shadow: true,\n})\nexport class LeTab {\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 * Label if it is not provided via slot\n */\n @Prop() label?: string;\n\n /**\n * Value of the tab, defaults to label if not provided\n */\n @Prop() value?: string;\n\n /**\n * Tab variant style\n * @allowedValues solid | underlined | clear | enclosed | icon-only\n */\n @Prop() variant: 'underlined' | 'solid' | 'pills' | 'enclosed' | 'icon-only' = 'underlined';\n\n /**\n * Position of the tabs when used within a le-tabs component\n * @allowedValues top | bottom | start | end\n */\n @Prop() position: 'top' | 'bottom' | 'start' | 'end' = 'top';\n\n /**\n * Tab size\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether the tab can get focus\n * needed for accessibility when used in custom tab implementations\n */\n @Prop() focusable: boolean = true;\n\n /**\n * Whether the tab is in a selected/active state\n */\n @Prop() selected: boolean = false;\n\n /**\n * Whether the tab takes full width of its container\n */\n @Prop({ reflect: true }) fullWidth: boolean = false;\n\n /**\n * Icon only tab image or emoji\n * if this prop is set, the tab will render only the icon slot\n */\n @Prop() icon?: string | Node;\n\n /**\n * Whether to show the label when in icon-only mode\n */\n @Prop() showLabel: boolean = false;\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 tab is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Optional href to make the tab 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 tab 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 * Get tab configuration for parent component\n */\n @Method()\n async getTabConfig(): Promise<{\n label: string;\n value: string;\n icon: string | Node;\n iconStart?: string | Node;\n iconEnd?: string | Node;\n disabled: boolean;\n }> {\n return {\n label: this.label,\n value: this.value ?? this.label,\n icon: this.icon,\n iconStart: this.iconStart,\n iconEnd: this.iconEnd,\n disabled: this.disabled,\n };\n }\n\n /**\n * Emitted when the tab is clicked.\n * This is a custom event that wraps the native click but ensures the target is the le-tab.\n */\n @Event({ eventName: 'click' }) leClick: EventEmitter<PointerEvent>;\n\n private handleClick = (event: PointerEvent) => {\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 `size-${this.size}`,\n `position-${this.position}`,\n {\n 'selected': this.selected,\n 'full-width': this.fullWidth,\n 'icon-only': this.icon !== undefined,\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 : { disabled: this.disabled };\n\n return (\n <Host>\n <le-component component=\"le-tab\">\n <TagType\n class={classnames('le-tab-container', `le-tab-align-${this.align}`, classes)}\n part=\"button\"\n {...attrs}\n onClick={this.handleClick}\n tabIndex={this.focusable ? 0 : -1}\n >\n {this.icon !== undefined ? (\n <div class=\"icon-only\">\n <div class=\"icon\">{this.icon}</div>\n {this.showLabel && <span class=\"icon-label\">{this.label}</span>}\n </div>\n ) : (\n <Fragment>\n <span class=\"le-tab-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=\"Tab text\"\n type=\"text\"\n class=\"content\"\n part=\"content\"\n >\n <slot>{this.label}</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"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DFTm5BqT.js';
1
+ import { r as registerInstance, c as createEvent, h, a as getElement } from './index-DFTm5BqT.js';
2
2
  import { c as classnames } from './utils-DZYCZLrF.js';
3
3
 
4
4
  const leTabsCss = () => `:host{display:block;--le-tabs-gap:var(--le-spacing-1);--le-tabs-border-color:var(--le-border-color);--le-tabs-padding-y:var(--le-spacing-2);--le-tabs-padding-x:var(--le-spacing-4);--le-tabs-enclosed-bg:var(--le-color-background-secondary)}.le-tabs{display:flex;flex-direction:column}.le-tabs.orientation-vertical{flex-direction:row}.tablist{display:flex;position:relative;border-radius:var(--le-radius-md);gap:var(--le-tabs-gap)}.tablist.wrap-tabs{flex-wrap:wrap}.tablist.overflow-auto{overflow:auto}.tablist.overflow-hidden{overflow:hidden}.tablist.overflow-visible{overflow:visible}.tablist.overflow-scroll{overflow:scroll}.tablist:focus{outline:2px solid var(--le-color-focus);outline-offset:2px}.orientation-horizontal .tablist{flex-direction:row;border-bottom:1px solid var(--le-tabs-border-color)}.orientation-vertical .tablist{flex-direction:column;border-right:1px solid var(--le-tabs-border-color);min-width:150px}.full-width .tablist{width:100%}.full-width.orientation-horizontal .tab{flex:1}.variant-underlined .tablist{padding-inline:4px}.variant-pills .tablist{border-radius:calc(1.12rem)}.variant-enclosed .tablist{border:none;gap:0;background-color:var(--le-tabs-enclosed-bg);border-radius:calc(var(--le-radius-md) + var(--le-spacing-1));padding:var(--le-spacing-1)}.tab-icon{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;font-size:1.1em}.tab-icon img{width:100%;height:100%;object-fit:contain}.panels{flex:1;min-height:0}.panel{padding:var(--le-tabs-panel-padding, var(--le-spacing-4))}.panel[hidden]{display:none}.orientation-vertical .panels{padding-left:var(--le-spacing-4)}.position-end .panels{order:1}.position-end .tablist{order:2}`;
@@ -7,68 +7,116 @@ const LeTabs = class {
7
7
  constructor(hostRef) {
8
8
  registerInstance(this, hostRef);
9
9
  this.leTabChange = createEvent(this, "leTabChange");
10
+ /**
11
+ * Array of tab options (programmatic mode).
12
+ * If le-tab-panel children exist, they take precedence.
13
+ */
14
+ this.tabs = [];
15
+ /**
16
+ * Orientation of the tabs.
17
+ * @allowedValues horizontal | vertical
18
+ */
19
+ this.orientation = 'horizontal';
20
+ /**
21
+ * Position of the tabs relative to the panels.
22
+ * @allowedValues start | end
23
+ */
24
+ this.position = 'start';
25
+ /**
26
+ * Tab variant style.
27
+ * @allowedValues underlined | solid | pills | enclosed | icon-only
28
+ */
29
+ this.variant = 'underlined';
30
+ /**
31
+ * Whether tabs should stretch to fill available width.
32
+ */
33
+ this.fullWidth = false;
34
+ /**
35
+ * Size of the tabs.
36
+ * @allowedValues sm | md | lg
37
+ */
38
+ this.size = 'medium';
39
+ /**
40
+ * Wrap the tabs if they exceed container width.
41
+ */
42
+ this.wrap = false;
43
+ /**
44
+ * Scroll behavior for overflowing tabs.
45
+ * @allowedValues auto | hidden | visible | scroll
46
+ */
47
+ this.overflow = 'auto';
48
+ /**
49
+ * Internal tab configurations (built from children or tabs prop)
50
+ */
51
+ this.tabConfigs = [];
52
+ /**
53
+ * Internal state for focused tab index (for keyboard navigation)
54
+ */
55
+ this.focusedIndex = 0;
56
+ /**
57
+ * Whether we're using declarative mode (le-tab-panel children)
58
+ */
59
+ this.isDeclarativeMode = false;
60
+ this.handleTabClick = (config) => {
61
+ this.selectTab(config);
62
+ };
63
+ this.handleKeyDown = (event) => {
64
+ const { tabConfigs, orientation } = this;
65
+ const isHorizontal = orientation === 'horizontal';
66
+ let newIndex = this.focusedIndex;
67
+ switch (event.key) {
68
+ case 'ArrowLeft':
69
+ if (isHorizontal) {
70
+ event.preventDefault();
71
+ newIndex = this.findNextEnabledTab(-1);
72
+ }
73
+ break;
74
+ case 'ArrowRight':
75
+ if (isHorizontal) {
76
+ event.preventDefault();
77
+ newIndex = this.findNextEnabledTab(1);
78
+ }
79
+ break;
80
+ case 'ArrowUp':
81
+ if (!isHorizontal) {
82
+ event.preventDefault();
83
+ newIndex = this.findNextEnabledTab(-1);
84
+ }
85
+ break;
86
+ case 'ArrowDown':
87
+ if (!isHorizontal) {
88
+ event.preventDefault();
89
+ newIndex = this.findNextEnabledTab(1);
90
+ }
91
+ break;
92
+ case 'Home':
93
+ event.preventDefault();
94
+ newIndex = this.findFirstEnabledTab();
95
+ break;
96
+ case 'End':
97
+ event.preventDefault();
98
+ newIndex = this.findLastEnabledTab();
99
+ break;
100
+ case 'Enter':
101
+ case ' ':
102
+ event.preventDefault();
103
+ if (tabConfigs[this.focusedIndex]) {
104
+ this.selectTab(tabConfigs[this.focusedIndex]);
105
+ }
106
+ return;
107
+ default:
108
+ return;
109
+ }
110
+ if (newIndex !== this.focusedIndex) {
111
+ this.focusedIndex = newIndex;
112
+ this.focusTab(newIndex);
113
+ // Auto-select on focus (recommended for tabs)
114
+ if (tabConfigs[newIndex]) {
115
+ this.selectTab(tabConfigs[newIndex]);
116
+ }
117
+ }
118
+ };
10
119
  }
11
- get el() { return getElement(this); }
12
- /**
13
- * Array of tab options (programmatic mode).
14
- * If le-tab-panel children exist, they take precedence.
15
- */
16
- tabs = [];
17
- /**
18
- * The value of the currently selected tab.
19
- * If not provided, defaults to the first tab.
20
- */
21
- selected;
22
- /**
23
- * Orientation of the tabs.
24
- * @allowedValues horizontal | vertical
25
- */
26
- orientation = 'horizontal';
27
- /**
28
- * Position of the tabs relative to the panels.
29
- * @allowedValues start | end
30
- */
31
- position = 'start';
32
- /**
33
- * Tab variant style.
34
- * @allowedValues underlined | solid | pills | enclosed | icon-only
35
- */
36
- variant = 'underlined';
37
- /**
38
- * Whether tabs should stretch to fill available width.
39
- */
40
- fullWidth = false;
41
- /**
42
- * Size of the tabs.
43
- * @allowedValues sm | md | lg
44
- */
45
- size = 'medium';
46
- /**
47
- * Wrap the tabs if they exceed container width.
48
- */
49
- wrap = false;
50
- /**
51
- * Scroll behavior for overflowing tabs.
52
- * @allowedValues auto | hidden | visible | scroll
53
- */
54
- overflow = 'auto';
55
- /**
56
- * Internal tab configurations (built from children or tabs prop)
57
- */
58
- tabConfigs = [];
59
- /**
60
- * Internal state for focused tab index (for keyboard navigation)
61
- */
62
- focusedIndex = 0;
63
- /**
64
- * Whether we're using declarative mode (le-tab-panel children)
65
- */
66
- isDeclarativeMode = false;
67
- /**
68
- * Emitted when the selected tab changes.
69
- */
70
- leTabChange;
71
- mutationObserver;
72
120
  selectedChanged(newValue) {
73
121
  const index = this.tabConfigs.findIndex(t => t.value === newValue);
74
122
  if (index >= 0) {
@@ -170,65 +218,6 @@ const LeTabs = class {
170
218
  },
171
219
  });
172
220
  }
173
- handleTabClick = (config) => {
174
- this.selectTab(config);
175
- };
176
- handleKeyDown = (event) => {
177
- const { tabConfigs, orientation } = this;
178
- const isHorizontal = orientation === 'horizontal';
179
- let newIndex = this.focusedIndex;
180
- switch (event.key) {
181
- case 'ArrowLeft':
182
- if (isHorizontal) {
183
- event.preventDefault();
184
- newIndex = this.findNextEnabledTab(-1);
185
- }
186
- break;
187
- case 'ArrowRight':
188
- if (isHorizontal) {
189
- event.preventDefault();
190
- newIndex = this.findNextEnabledTab(1);
191
- }
192
- break;
193
- case 'ArrowUp':
194
- if (!isHorizontal) {
195
- event.preventDefault();
196
- newIndex = this.findNextEnabledTab(-1);
197
- }
198
- break;
199
- case 'ArrowDown':
200
- if (!isHorizontal) {
201
- event.preventDefault();
202
- newIndex = this.findNextEnabledTab(1);
203
- }
204
- break;
205
- case 'Home':
206
- event.preventDefault();
207
- newIndex = this.findFirstEnabledTab();
208
- break;
209
- case 'End':
210
- event.preventDefault();
211
- newIndex = this.findLastEnabledTab();
212
- break;
213
- case 'Enter':
214
- case ' ':
215
- event.preventDefault();
216
- if (tabConfigs[this.focusedIndex]) {
217
- this.selectTab(tabConfigs[this.focusedIndex]);
218
- }
219
- return;
220
- default:
221
- return;
222
- }
223
- if (newIndex !== this.focusedIndex) {
224
- this.focusedIndex = newIndex;
225
- this.focusTab(newIndex);
226
- // Auto-select on focus (recommended for tabs)
227
- if (tabConfigs[newIndex]) {
228
- this.selectTab(tabConfigs[newIndex]);
229
- }
230
- }
231
- };
232
221
  findNextEnabledTab(direction) {
233
222
  const { tabConfigs } = this;
234
223
  let index = this.focusedIndex;
@@ -271,7 +260,7 @@ const LeTabs = class {
271
260
  : this.position === 'start'
272
261
  ? 'top'
273
262
  : 'bottom';
274
- return (h("le-component", { key: '9a92363db43231088e476bca66dbbf47f26ebf34', component: "le-tabs", hostClass: classnames(classes) }, h("div", { key: '3c14f3367e2b281090721e5521bfa8a3b53f5b97', class: classes }, h("div", { key: 'cd4aad46f9a8e1ec5760f9388a0c4149556bfb06', class: {
263
+ return (h("le-component", { key: '0240e0ae8c8b2513e80e8a032101df47a2041e3d', component: "le-tabs", hostClass: classnames(classes) }, h("div", { key: 'b063db57a29d4c212ed81a738c41d7e395f5618c', class: classes }, h("div", { key: '01ba40aac8cb13357c668d82daf7c34f7fb104e6', class: {
275
264
  'tablist': true,
276
265
  'wrap-tabs': this.wrap,
277
266
  [`overflow-${this.overflow}`]: true,
@@ -280,7 +269,7 @@ const LeTabs = class {
280
269
  const tabId = `tab-${config.value}`;
281
270
  const panelId = `panel-${config.value}`;
282
271
  return (h("le-tab", { key: config.value, id: tabId, class: "tab", mode: "default", variant: this.variant, selected: isSelected, disabled: config.disabled, size: this.size, position: tabPosition, align: this.orientation === 'vertical' ? 'start' : 'center', role: "tab", part: isSelected ? 'tab tab-active' : 'tab', "aria-selected": isSelected ? 'true' : 'false', "aria-controls": panelId, "aria-disabled": config.disabled ? 'true' : undefined, focusable: false, onClick: () => this.handleTabClick(config), iconStart: config.iconStart, iconEnd: config.iconEnd }, h("span", { class: "tab-label" }, config.label)));
283
- })), h("div", { key: '0b34e9ab8ce8f0e31ad9392bc3a6a60c92a0aa00', class: "panels", part: "panels" }, isDeclarativeMode ? (
272
+ })), h("div", { key: 'b1e16928f27f5083e94674e80b0ad397eb3e8fec', class: "panels", part: "panels" }, isDeclarativeMode ? (
284
273
  // Declarative mode - render slot for le-tab-panel children
285
274
  h("le-slot", { name: "", description: "Tab panels", type: "slot", allowedComponents: "le-tab-panel" }, h("slot", null))) : (
286
275
  // Programmatic mode - render named slots
@@ -294,6 +283,7 @@ const LeTabs = class {
294
283
  }, role: "tabpanel", part: "panel", "aria-labelledby": tabId, tabIndex: 0, hidden: !isSelected }, h("slot", { name: `panel-${config.value}` })));
295
284
  }))))));
296
285
  }
286
+ get el() { return getElement(this); }
297
287
  static get watchers() { return {
298
288
  "selected": ["selectedChanged"],
299
289
  "tabs": ["tabsChanged"]