le-kit 0.1.16 → 0.1.18

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 (237) hide show
  1. package/dist/cjs/{index-CHzu3ydp.js → index-pT2cVC5w.js} +10 -4
  2. package/dist/cjs/index-pT2cVC5w.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +4 -2
  4. package/dist/cjs/le-box.cjs.entry.js +4 -4
  5. package/dist/cjs/le-button_13.cjs.entry.js +204 -30
  6. package/dist/cjs/le-card.cjs.entry.js +4 -4
  7. package/dist/cjs/le-combobox.cjs.entry.js +3 -3
  8. package/dist/cjs/le-header-placeholder.cjs.entry.js +1 -1
  9. package/dist/cjs/le-kit.cjs.js +4 -2
  10. package/dist/cjs/le-kit.cjs.js.map +1 -1
  11. package/dist/cjs/le-multiselect.cjs.entry.js +3 -3
  12. package/dist/cjs/le-number-input.cjs.entry.js +4 -4
  13. package/dist/cjs/le-round-progress.cjs.entry.js +3 -3
  14. package/dist/cjs/le-segmented-control.cjs.entry.js +3 -3
  15. package/dist/cjs/le-stack.cjs.entry.js +4 -4
  16. package/dist/cjs/le-tab-bar.cjs.entry.js +3 -3
  17. package/dist/cjs/le-tab-panel.cjs.entry.js +3 -3
  18. package/dist/cjs/le-tab.cjs.entry.js +7 -4
  19. package/dist/cjs/le-tabs.cjs.entry.js +4 -4
  20. package/dist/cjs/le-tag.cjs.entry.js +3 -3
  21. package/dist/cjs/le-text.cjs.entry.js +4 -4
  22. package/dist/cjs/le-turntable.cjs.entry.js +3 -3
  23. package/dist/cjs/loader.cjs.js +3 -1
  24. package/dist/cjs/loader.cjs.js.map +1 -1
  25. package/dist/cjs/{utils-CYOKcOW8.js → utils-ByTskwtC.js} +3 -3
  26. package/dist/cjs/{utils-CYOKcOW8.js.map → utils-ByTskwtC.js.map} +1 -1
  27. package/dist/collection/collection-manifest.json +2 -2
  28. package/dist/collection/components/le-button/le-button.js +8 -6
  29. package/dist/collection/components/le-button/le-button.js.map +1 -1
  30. package/dist/collection/components/le-component/le-component.js +2 -0
  31. package/dist/collection/components/le-component/le-component.js.map +1 -1
  32. package/dist/collection/components/le-current-heading/le-current-heading.css +1 -0
  33. package/dist/collection/dist/components/assets/custom-elements.json +787 -791
  34. package/dist/components/assets/custom-elements.json +787 -791
  35. package/dist/components/le-box.js +14 -14
  36. package/dist/components/le-box.js.map +1 -1
  37. package/dist/components/le-button2.js +97 -89
  38. package/dist/components/le-button2.js.map +1 -1
  39. package/dist/components/le-card.js +14 -14
  40. package/dist/components/le-card.js.map +1 -1
  41. package/dist/components/le-collapse.js +15 -14
  42. package/dist/components/le-collapse.js.map +1 -1
  43. package/dist/components/le-combobox.js +14 -14
  44. package/dist/components/le-combobox.js.map +1 -1
  45. package/dist/components/le-current-heading.js +5 -5
  46. package/dist/components/le-current-heading.js.map +1 -1
  47. package/dist/components/le-dropdown-base2.js +6 -6
  48. package/dist/components/le-dropdown-base2.js.map +1 -1
  49. package/dist/components/le-header-placeholder.js +3 -3
  50. package/dist/components/le-header.js +16 -14
  51. package/dist/components/le-header.js.map +1 -1
  52. package/dist/components/le-multiselect.js +15 -15
  53. package/dist/components/le-multiselect.js.map +1 -1
  54. package/dist/components/le-number-input.js +14 -14
  55. package/dist/components/le-number-input.js.map +1 -1
  56. package/dist/components/le-popover2.js +168 -5
  57. package/dist/components/le-popover2.js.map +1 -1
  58. package/dist/components/le-round-progress.js +5 -5
  59. package/dist/components/le-round-progress.js.map +1 -1
  60. package/dist/components/le-scroll-progress.js +5 -5
  61. package/dist/components/le-scroll-progress.js.map +1 -1
  62. package/dist/components/le-segmented-control.js +15 -15
  63. package/dist/components/le-segmented-control.js.map +1 -1
  64. package/dist/components/le-stack.js +14 -14
  65. package/dist/components/le-stack.js.map +1 -1
  66. package/dist/components/le-tab-bar.js +15 -15
  67. package/dist/components/le-tab-bar.js.map +1 -1
  68. package/dist/components/le-tab-panel.js +14 -14
  69. package/dist/components/le-tab-panel.js.map +1 -1
  70. package/dist/components/le-tab2.js +17 -14
  71. package/dist/components/le-tab2.js.map +1 -1
  72. package/dist/components/le-tabs.js +15 -15
  73. package/dist/components/le-tabs.js.map +1 -1
  74. package/dist/components/le-tag2.js +14 -14
  75. package/dist/components/le-tag2.js.map +1 -1
  76. package/dist/components/le-text.js +14 -14
  77. package/dist/components/le-text.js.map +1 -1
  78. package/dist/components/le-turntable.js +5 -5
  79. package/dist/components/le-turntable.js.map +1 -1
  80. package/dist/docs.json +8 -8
  81. package/dist/esm/{index-hmBwv43R.js → index-CNv6tzAt.js} +10 -4
  82. package/dist/esm/index-CNv6tzAt.js.map +1 -0
  83. package/dist/esm/index.js +4 -2
  84. package/dist/esm/le-box.entry.js +4 -4
  85. package/dist/esm/le-box.entry.js.map +1 -1
  86. package/dist/esm/le-button_13.entry.js +204 -30
  87. package/dist/esm/le-card.entry.js +4 -4
  88. package/dist/esm/le-card.entry.js.map +1 -1
  89. package/dist/esm/le-combobox.entry.js +3 -3
  90. package/dist/esm/le-combobox.entry.js.map +1 -1
  91. package/dist/esm/le-header-placeholder.entry.js +1 -1
  92. package/dist/esm/le-kit.js +5 -3
  93. package/dist/esm/le-kit.js.map +1 -1
  94. package/dist/esm/le-multiselect.entry.js +3 -3
  95. package/dist/esm/le-multiselect.entry.js.map +1 -1
  96. package/dist/esm/le-number-input.entry.js +4 -4
  97. package/dist/esm/le-number-input.entry.js.map +1 -1
  98. package/dist/esm/le-round-progress.entry.js +3 -3
  99. package/dist/esm/le-round-progress.entry.js.map +1 -1
  100. package/dist/esm/le-segmented-control.entry.js +3 -3
  101. package/dist/esm/le-segmented-control.entry.js.map +1 -1
  102. package/dist/esm/le-stack.entry.js +4 -4
  103. package/dist/esm/le-stack.entry.js.map +1 -1
  104. package/dist/esm/le-tab-bar.entry.js +3 -3
  105. package/dist/esm/le-tab-bar.entry.js.map +1 -1
  106. package/dist/esm/le-tab-panel.entry.js +3 -3
  107. package/dist/esm/le-tab-panel.entry.js.map +1 -1
  108. package/dist/esm/le-tab.entry.js +7 -4
  109. package/dist/esm/le-tab.entry.js.map +1 -1
  110. package/dist/esm/le-tabs.entry.js +4 -4
  111. package/dist/esm/le-tabs.entry.js.map +1 -1
  112. package/dist/esm/le-tag.entry.js +3 -3
  113. package/dist/esm/le-tag.entry.js.map +1 -1
  114. package/dist/esm/le-text.entry.js +4 -4
  115. package/dist/esm/le-text.entry.js.map +1 -1
  116. package/dist/esm/le-turntable.entry.js +3 -3
  117. package/dist/esm/le-turntable.entry.js.map +1 -1
  118. package/dist/esm/loader.js +4 -2
  119. package/dist/esm/{utils-DRTFlnxz.js → utils-BzC2tvPX.js} +3 -3
  120. package/dist/esm/{utils-DRTFlnxz.js.map → utils-BzC2tvPX.js.map} +1 -1
  121. package/dist/le-kit/dist/components/assets/custom-elements.json +787 -791
  122. package/dist/le-kit/index.esm.js +1 -1
  123. package/dist/le-kit/le-kit.esm.js +1 -1
  124. package/dist/le-kit/le-kit.esm.js.map +1 -1
  125. package/dist/le-kit/p-269fb44f.entry.js +2 -0
  126. package/dist/le-kit/p-269fb44f.entry.js.map +1 -0
  127. package/dist/le-kit/p-31c3649c.entry.js +2 -0
  128. package/dist/le-kit/p-31c3649c.entry.js.map +1 -0
  129. package/dist/le-kit/p-3829f572.entry.js +2 -0
  130. package/dist/le-kit/p-3829f572.entry.js.map +1 -0
  131. package/dist/le-kit/p-629c5e13.entry.js +2 -0
  132. package/dist/le-kit/p-629c5e13.entry.js.map +1 -0
  133. package/dist/le-kit/p-684adc9f.entry.js +2 -0
  134. package/dist/le-kit/p-684adc9f.entry.js.map +1 -0
  135. package/dist/le-kit/p-7d316315.entry.js +2 -0
  136. package/dist/le-kit/p-7d316315.entry.js.map +1 -0
  137. package/dist/le-kit/p-8a78110f.entry.js +2 -0
  138. package/dist/le-kit/p-8a78110f.entry.js.map +1 -0
  139. package/dist/le-kit/p-8afe6862.entry.js +2 -0
  140. package/dist/le-kit/p-8afe6862.entry.js.map +1 -0
  141. package/dist/le-kit/p-95cf203e.entry.js +2 -0
  142. package/dist/le-kit/p-95cf203e.entry.js.map +1 -0
  143. package/dist/le-kit/p-9ba2bfb3.entry.js +2 -0
  144. package/dist/le-kit/p-9ba2bfb3.entry.js.map +1 -0
  145. package/dist/le-kit/{p-hmBwv43R.js → p-CNv6tzAt.js} +2 -2
  146. package/dist/le-kit/p-CNv6tzAt.js.map +1 -0
  147. package/dist/le-kit/{p-txKmCJHv.js → p-W4FbLlut.js} +2 -2
  148. package/dist/le-kit/{p-txKmCJHv.js.map → p-W4FbLlut.js.map} +1 -1
  149. package/dist/le-kit/p-aaec0169.entry.js +2 -0
  150. package/dist/le-kit/p-aaec0169.entry.js.map +1 -0
  151. package/dist/le-kit/p-b3531106.entry.js +2 -0
  152. package/dist/le-kit/p-b3531106.entry.js.map +1 -0
  153. package/dist/le-kit/p-c83a1255.entry.js +2 -0
  154. package/dist/le-kit/p-c83a1255.entry.js.map +1 -0
  155. package/dist/le-kit/p-d2a5d431.entry.js +2 -0
  156. package/dist/le-kit/p-d2a5d431.entry.js.map +1 -0
  157. package/dist/le-kit/p-deef1f4d.entry.js +2 -0
  158. package/dist/le-kit/p-deef1f4d.entry.js.map +1 -0
  159. package/dist/le-kit/p-e07d4b78.entry.js +2 -0
  160. package/dist/le-kit/p-e4618b36.entry.js +2 -0
  161. package/dist/le-kit/p-e4618b36.entry.js.map +1 -0
  162. package/dist/types/components/le-button/le-button.d.ts +1 -1
  163. package/dist/types/components.d.ts +2 -2
  164. package/dist/types/stencil-public-runtime.d.ts +43 -0
  165. package/package.json +1 -1
  166. package/dist/cjs/index-CHzu3ydp.js.map +0 -1
  167. package/dist/cjs/le-box.entry.cjs.js.map +0 -1
  168. package/dist/cjs/le-button.le-checkbox.le-collapse.le-component.le-current-heading.le-dropdown-base.le-header.le-popover.le-popup.le-scroll-progress.le-select.le-slot.le-string-input.entry.cjs.js.map +0 -1
  169. package/dist/cjs/le-card.entry.cjs.js.map +0 -1
  170. package/dist/cjs/le-combobox.entry.cjs.js.map +0 -1
  171. package/dist/cjs/le-header-placeholder.entry.cjs.js.map +0 -1
  172. package/dist/cjs/le-multiselect.entry.cjs.js.map +0 -1
  173. package/dist/cjs/le-number-input.entry.cjs.js.map +0 -1
  174. package/dist/cjs/le-round-progress.entry.cjs.js.map +0 -1
  175. package/dist/cjs/le-segmented-control.entry.cjs.js.map +0 -1
  176. package/dist/cjs/le-stack.entry.cjs.js.map +0 -1
  177. package/dist/cjs/le-tab-bar.entry.cjs.js.map +0 -1
  178. package/dist/cjs/le-tab-panel.entry.cjs.js.map +0 -1
  179. package/dist/cjs/le-tab.entry.cjs.js.map +0 -1
  180. package/dist/cjs/le-tabs.entry.cjs.js.map +0 -1
  181. package/dist/cjs/le-tag.entry.cjs.js.map +0 -1
  182. package/dist/cjs/le-text.entry.cjs.js.map +0 -1
  183. package/dist/cjs/le-turntable.entry.cjs.js.map +0 -1
  184. package/dist/esm/index-hmBwv43R.js.map +0 -1
  185. package/dist/esm/le-button.le-checkbox.le-collapse.le-component.le-current-heading.le-dropdown-base.le-header.le-popover.le-popup.le-scroll-progress.le-select.le-slot.le-string-input.entry.js.map +0 -1
  186. package/dist/le-kit/le-box.entry.esm.js.map +0 -1
  187. package/dist/le-kit/le-button.le-checkbox.le-collapse.le-component.le-current-heading.le-dropdown-base.le-header.le-popover.le-popup.le-scroll-progress.le-select.le-slot.le-string-input.entry.esm.js.map +0 -1
  188. package/dist/le-kit/le-card.entry.esm.js.map +0 -1
  189. package/dist/le-kit/le-combobox.entry.esm.js.map +0 -1
  190. package/dist/le-kit/le-header-placeholder.entry.esm.js.map +0 -1
  191. package/dist/le-kit/le-multiselect.entry.esm.js.map +0 -1
  192. package/dist/le-kit/le-number-input.entry.esm.js.map +0 -1
  193. package/dist/le-kit/le-round-progress.entry.esm.js.map +0 -1
  194. package/dist/le-kit/le-segmented-control.entry.esm.js.map +0 -1
  195. package/dist/le-kit/le-stack.entry.esm.js.map +0 -1
  196. package/dist/le-kit/le-tab-bar.entry.esm.js.map +0 -1
  197. package/dist/le-kit/le-tab-panel.entry.esm.js.map +0 -1
  198. package/dist/le-kit/le-tab.entry.esm.js.map +0 -1
  199. package/dist/le-kit/le-tabs.entry.esm.js.map +0 -1
  200. package/dist/le-kit/le-tag.entry.esm.js.map +0 -1
  201. package/dist/le-kit/le-text.entry.esm.js.map +0 -1
  202. package/dist/le-kit/le-turntable.entry.esm.js.map +0 -1
  203. package/dist/le-kit/p-13a4dc1d.entry.js +0 -2
  204. package/dist/le-kit/p-13a4dc1d.entry.js.map +0 -1
  205. package/dist/le-kit/p-1a9e65d0.entry.js +0 -2
  206. package/dist/le-kit/p-1a9e65d0.entry.js.map +0 -1
  207. package/dist/le-kit/p-2708dc65.entry.js +0 -2
  208. package/dist/le-kit/p-2708dc65.entry.js.map +0 -1
  209. package/dist/le-kit/p-2b96a5bd.entry.js +0 -2
  210. package/dist/le-kit/p-32cbb683.entry.js +0 -2
  211. package/dist/le-kit/p-32cbb683.entry.js.map +0 -1
  212. package/dist/le-kit/p-476e1886.entry.js +0 -2
  213. package/dist/le-kit/p-476e1886.entry.js.map +0 -1
  214. package/dist/le-kit/p-67d702f9.entry.js +0 -2
  215. package/dist/le-kit/p-67d702f9.entry.js.map +0 -1
  216. package/dist/le-kit/p-6884e3e8.entry.js +0 -2
  217. package/dist/le-kit/p-6884e3e8.entry.js.map +0 -1
  218. package/dist/le-kit/p-704ad5e0.entry.js +0 -2
  219. package/dist/le-kit/p-704ad5e0.entry.js.map +0 -1
  220. package/dist/le-kit/p-88f9aa40.entry.js +0 -2
  221. package/dist/le-kit/p-88f9aa40.entry.js.map +0 -1
  222. package/dist/le-kit/p-8dd8a487.entry.js +0 -2
  223. package/dist/le-kit/p-8dd8a487.entry.js.map +0 -1
  224. package/dist/le-kit/p-97b7658a.entry.js +0 -2
  225. package/dist/le-kit/p-97b7658a.entry.js.map +0 -1
  226. package/dist/le-kit/p-c0925e92.entry.js +0 -2
  227. package/dist/le-kit/p-c0925e92.entry.js.map +0 -1
  228. package/dist/le-kit/p-c2494a0d.entry.js +0 -2
  229. package/dist/le-kit/p-c2494a0d.entry.js.map +0 -1
  230. package/dist/le-kit/p-ded51018.entry.js +0 -2
  231. package/dist/le-kit/p-ded51018.entry.js.map +0 -1
  232. package/dist/le-kit/p-e3db7974.entry.js +0 -2
  233. package/dist/le-kit/p-e3db7974.entry.js.map +0 -1
  234. package/dist/le-kit/p-f9b03aec.entry.js +0 -2
  235. package/dist/le-kit/p-f9b03aec.entry.js.map +0 -1
  236. package/dist/le-kit/p-hmBwv43R.js.map +0 -1
  237. /package/dist/le-kit/{p-2b96a5bd.entry.js.map → p-e07d4b78.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"le-stack.js","mappings":"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","names":["LeStack","__stencil_proxyCustomElement"],"sources":["src/components/le-stack/le-stack.default.css?tag=le-stack&encapsulation=shadow","src/components/le-stack/le-stack.tsx"],"sourcesContent":["/**\n * le-stack default styles\n *\n * The component uses inline styles for flex properties to allow\n * dynamic prop-based configuration. This CSS handles theming.\n */\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n/* Base stack container */\n.stack {\n gap: var(--le-stack-gap, var(--le-space-md));\n}\n\n/* Full width/height variants */\n:host(.full-width) {\n width: 100%;\n}\n\n:host(.full-height) {\n height: 100%;\n}\n\n/* Direction-specific defaults */\n:host(.direction-horizontal) .stack {\n min-height: 0;\n}\n\n:host(.direction-vertical) .stack {\n min-width: 0;\n}\n","import { Component, Prop, h, Element } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible stack layout component using CSS flexbox.\n *\n * `le-stack` arranges its children in a row (horizontal) or column (vertical)\n * with configurable spacing, alignment, and wrapping behavior. Perfect for\n * creating responsive layouts.\n *\n * @slot - Default slot for stack items (le-box components recommended)\n *\n * @cssprop --le-stack-gap - Gap between items (defaults to var(--le-space-md))\n *\n * @csspart stack - The main stack container\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-stack',\n styleUrl: 'le-stack.default.css',\n shadow: true,\n})\nexport class LeStack {\n @Element() el: HTMLElement;\n\n /**\n * Direction of the stack layout\n * @allowedValues horizontal | vertical\n */\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Gap between items (CSS value like '8px', '1rem', 'var(--le-space-md)')\n */\n @Prop() gap?: string;\n\n /**\n * Alignment of items on the cross axis\n * @allowedValues start | center | end | stretch | baseline\n */\n @Prop() align: 'start' | 'center' | 'end' | 'stretch' | 'baseline' = 'stretch';\n\n /**\n * Distribution of items on the main axis\n * @allowedValues start | center | end | space-between | space-around | space-evenly\n */\n @Prop() justify: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly' = 'start';\n\n /**\n * Whether items should wrap to multiple lines\n */\n @Prop() wrap: boolean = false;\n\n /**\n * Alignment of wrapped lines (only applies when wrap is true)\n * @allowedValues start | center | end | stretch | space-between | space-around\n */\n @Prop() alignContent: 'start' | 'center' | 'end' | 'stretch' | 'space-between' | 'space-around' = 'stretch';\n\n /**\n * Whether to reverse the order of items\n */\n @Prop() reverse: boolean = false;\n\n /**\n * Maximum number of items allowed in the stack (for CMS validation)\n * @min 1\n */\n @Prop() maxItems?: number;\n\n /**\n * Whether the stack should take full width of its container\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether the stack should take full height of its container\n */\n @Prop() fullHeight: boolean = false;\n\n /**\n * Padding inside the stack container (CSS value)\n */\n @Prop() padding?: string;\n\n private getFlexDirection(): string {\n const base = this.direction === 'vertical' ? 'column' : 'row';\n return this.reverse ? `${base}-reverse` : base;\n }\n\n private getAlignItems(): string {\n const alignMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n };\n return alignMap[this.align] || 'stretch';\n }\n\n private getJustifyContent(): string {\n const justifyMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n 'space-evenly': 'space-evenly',\n };\n return justifyMap[this.justify] || 'flex-start';\n }\n\n private getAlignContent(): string {\n const alignContentMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n };\n return alignContentMap[this.alignContent] || 'stretch';\n }\n\n render() {\n const style: { [key: string]: string } = {\n display: 'flex',\n flexDirection: this.getFlexDirection(),\n alignItems: this.getAlignItems(),\n justifyContent: this.getJustifyContent(),\n flexWrap: this.wrap ? 'wrap' : 'nowrap',\n };\n\n if (this.wrap) {\n style.alignContent = this.getAlignContent();\n }\n\n if (this.gap) {\n style.gap = this.gap;\n }\n\n if (this.padding) {\n style.padding = this.padding;\n }\n\n // if (this.fullWidth) {\n // style.width = '100%';\n // }\n\n // if (this.fullHeight) {\n // style.height = '100%';\n // }\n\n const hostClass = classnames(\n `direction-${this.direction}`,\n {\n 'wrap': this.wrap,\n 'reverse': this.reverse,\n 'full-width': this.fullWidth,\n 'full-height': this.fullHeight,\n }\n );\n\n // Slot style for admin mode - make items display in the same direction\n const slotStyle = `display: flex; flex-direction: ${this.getFlexDirection()}; gap: ${this.gap || 'var(--le-space-md)'}; flex-wrap: ${this.wrap ? 'wrap' : 'nowrap'}; justify-content: ${this.getJustifyContent()}; align-items: ${this.getAlignItems()};`;\n\n return (\n <le-component component=\"le-stack\" hostClass={hostClass}>\n <div class=\"stack\" part=\"stack\" style={style}>\n <le-slot\n name=\"\"\n description={`Items arranged ${this.direction}ly${this.maxItems ? ` (max ${this.maxItems})` : ''}`}\n type=\"slot\"\n allowed-components=\"le-text,le-box,le-card,le-button,le-stack\"\n slotStyle={slotStyle}\n >\n <slot></slot>\n </le-slot>\n </div>\n </le-component>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-stack.js","mappings":"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","names":["LeStack","__stencil_proxyCustomElement"],"sources":["src/components/le-stack/le-stack.default.css?tag=le-stack&encapsulation=shadow","src/components/le-stack/le-stack.tsx"],"sourcesContent":["/**\n * le-stack default styles\n *\n * The component uses inline styles for flex properties to allow\n * dynamic prop-based configuration. This CSS handles theming.\n */\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n/* Base stack container */\n.stack {\n gap: var(--le-stack-gap, var(--le-space-md));\n}\n\n/* Full width/height variants */\n:host(.full-width) {\n width: 100%;\n}\n\n:host(.full-height) {\n height: 100%;\n}\n\n/* Direction-specific defaults */\n:host(.direction-horizontal) .stack {\n min-height: 0;\n}\n\n:host(.direction-vertical) .stack {\n min-width: 0;\n}\n","import { Component, Prop, h, Element } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible stack layout component using CSS flexbox.\n *\n * `le-stack` arranges its children in a row (horizontal) or column (vertical)\n * with configurable spacing, alignment, and wrapping behavior. Perfect for\n * creating responsive layouts.\n *\n * @slot - Default slot for stack items (le-box components recommended)\n *\n * @cssprop --le-stack-gap - Gap between items (defaults to var(--le-space-md))\n *\n * @csspart stack - The main stack container\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-stack',\n styleUrl: 'le-stack.default.css',\n shadow: true,\n})\nexport class LeStack {\n @Element() el: HTMLElement;\n\n /**\n * Direction of the stack layout\n * @allowedValues horizontal | vertical\n */\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Gap between items (CSS value like '8px', '1rem', 'var(--le-space-md)')\n */\n @Prop() gap?: string;\n\n /**\n * Alignment of items on the cross axis\n * @allowedValues start | center | end | stretch | baseline\n */\n @Prop() align: 'start' | 'center' | 'end' | 'stretch' | 'baseline' = 'stretch';\n\n /**\n * Distribution of items on the main axis\n * @allowedValues start | center | end | space-between | space-around | space-evenly\n */\n @Prop() justify: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly' = 'start';\n\n /**\n * Whether items should wrap to multiple lines\n */\n @Prop() wrap: boolean = false;\n\n /**\n * Alignment of wrapped lines (only applies when wrap is true)\n * @allowedValues start | center | end | stretch | space-between | space-around\n */\n @Prop() alignContent: 'start' | 'center' | 'end' | 'stretch' | 'space-between' | 'space-around' = 'stretch';\n\n /**\n * Whether to reverse the order of items\n */\n @Prop() reverse: boolean = false;\n\n /**\n * Maximum number of items allowed in the stack (for CMS validation)\n * @min 1\n */\n @Prop() maxItems?: number;\n\n /**\n * Whether the stack should take full width of its container\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Whether the stack should take full height of its container\n */\n @Prop() fullHeight: boolean = false;\n\n /**\n * Padding inside the stack container (CSS value)\n */\n @Prop() padding?: string;\n\n private getFlexDirection(): string {\n const base = this.direction === 'vertical' ? 'column' : 'row';\n return this.reverse ? `${base}-reverse` : base;\n }\n\n private getAlignItems(): string {\n const alignMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n };\n return alignMap[this.align] || 'stretch';\n }\n\n private getJustifyContent(): string {\n const justifyMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n 'space-evenly': 'space-evenly',\n };\n return justifyMap[this.justify] || 'flex-start';\n }\n\n private getAlignContent(): string {\n const alignContentMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n };\n return alignContentMap[this.alignContent] || 'stretch';\n }\n\n render() {\n const style: { [key: string]: string } = {\n display: 'flex',\n flexDirection: this.getFlexDirection(),\n alignItems: this.getAlignItems(),\n justifyContent: this.getJustifyContent(),\n flexWrap: this.wrap ? 'wrap' : 'nowrap',\n };\n\n if (this.wrap) {\n style.alignContent = this.getAlignContent();\n }\n\n if (this.gap) {\n style.gap = this.gap;\n }\n\n if (this.padding) {\n style.padding = this.padding;\n }\n\n // if (this.fullWidth) {\n // style.width = '100%';\n // }\n\n // if (this.fullHeight) {\n // style.height = '100%';\n // }\n\n const hostClass = classnames(\n `direction-${this.direction}`,\n {\n 'wrap': this.wrap,\n 'reverse': this.reverse,\n 'full-width': this.fullWidth,\n 'full-height': this.fullHeight,\n }\n );\n\n // Slot style for admin mode - make items display in the same direction\n const slotStyle = `display: flex; flex-direction: ${this.getFlexDirection()}; gap: ${this.gap || 'var(--le-space-md)'}; flex-wrap: ${this.wrap ? 'wrap' : 'nowrap'}; justify-content: ${this.getJustifyContent()}; align-items: ${this.getAlignItems()};`;\n\n return (\n <le-component component=\"le-stack\" hostClass={hostClass}>\n <div class=\"stack\" part=\"stack\" style={style}>\n <le-slot\n name=\"\"\n description={`Items arranged ${this.direction}ly${this.maxItems ? ` (max ${this.maxItems})` : ''}`}\n type=\"slot\"\n allowed-components=\"le-text,le-box,le-card,le-button,le-stack\"\n slotStyle={slotStyle}\n >\n <slot></slot>\n </le-slot>\n </div>\n </le-component>\n );\n }\n}\n"],"version":3}
@@ -1,10 +1,10 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host, transformTag } from '@stencil/core/internal/client';
2
2
  import { d as defineCustomElement$3, a as defineCustomElement$4, b as defineCustomElement$5, c as defineCustomElement$6, e as defineCustomElement$9, f as defineCustomElement$a, g as defineCustomElement$b } from './le-button2.js';
3
3
  import { d as defineCustomElement$8 } from './le-dropdown-base2.js';
4
4
  import { d as defineCustomElement$7 } from './le-popover2.js';
5
5
  import { d as defineCustomElement$2 } from './le-tab2.js';
6
6
 
7
- const leTabBarCss = ":host{display:block;--le-tab-bar-background:var(--le-color-surface);--le-tab-bar-border-color:var(--le-color-border);--le-tab-bar-gap:var(--le-spacing-2);--le-tab-bar-padding-y:var(--le-spacing-2);--le-tab-bar-padding-x:var(--le-spacing-1);background:var(--le-tab-bar-background);padding:var(--le-tab-bar-padding-y) var(--le-tab-bar-padding-x)}:host([full-width]){width:100%}:host(.bordered.position-top){border-bottom:1px solid var(--le-tab-bar-border-color)}:host(.bordered.position-bottom){border-top:1px solid var(--le-tab-bar-border-color)}.tablist{display:flex;flex-direction:row;align-items:flex-end;justify-content:space-around;gap:var(--le-tab-bar-gap, var(--le-spacing-1));width:100%}.tab{display:inline-flex;align-items:flex-start;justify-content:space-around;gap:var(--le-spacing-2);position:relative;background:transparent;border:none;cursor:pointer}.tab-disabled{opacity:0.5;cursor:not-allowed}.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}.tab-description{font-size:var(--le-font-size-xs);font-weight:var(--le-font-weight-normal);color:var(--le-text-tertiary);margin-left:var(--le-spacing-1)}";
7
+ const leTabBarCss = () => `:host{display:block;--le-tab-bar-background:var(--le-color-surface);--le-tab-bar-border-color:var(--le-color-border);--le-tab-bar-gap:var(--le-spacing-2);--le-tab-bar-padding-y:var(--le-spacing-2);--le-tab-bar-padding-x:var(--le-spacing-1);background:var(--le-tab-bar-background);padding:var(--le-tab-bar-padding-y) var(--le-tab-bar-padding-x)}:host([full-width]){width:100%}:host(.bordered.position-top){border-bottom:1px solid var(--le-tab-bar-border-color)}:host(.bordered.position-bottom){border-top:1px solid var(--le-tab-bar-border-color)}.tablist{display:flex;flex-direction:row;align-items:flex-end;justify-content:space-around;gap:var(--le-tab-bar-gap, var(--le-spacing-1));width:100%}.tab{display:inline-flex;align-items:flex-start;justify-content:space-around;gap:var(--le-spacing-2);position:relative;background:transparent;border:none;cursor:pointer}.tab-disabled{opacity:0.5;cursor:not-allowed}.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}.tab-description{font-size:var(--le-font-size-xs);font-weight:var(--le-font-weight-normal);color:var(--le-text-tertiary);margin-left:var(--le-spacing-1)}`;
8
8
 
9
9
  const LeTabBar$1 = /*@__PURE__*/ proxyCustomElement(class LeTabBar extends HTMLElement {
10
10
  constructor(registerHost) {
@@ -241,7 +241,7 @@ const LeTabBar$1 = /*@__PURE__*/ proxyCustomElement(class LeTabBar extends HTMLE
241
241
  "selected": ["selectedChanged"],
242
242
  "tabs": ["tabsChanged"]
243
243
  }; }
244
- static get style() { return leTabBarCss; }
244
+ static get style() { return leTabBarCss(); }
245
245
  }, [769, "le-tab-bar", {
246
246
  "tabs": [16],
247
247
  "selected": [1032],
@@ -264,57 +264,57 @@ function defineCustomElement$1() {
264
264
  const components = ["le-tab-bar", "le-button", "le-checkbox", "le-component", "le-dropdown-base", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input", "le-tab"];
265
265
  components.forEach(tagName => { switch (tagName) {
266
266
  case "le-tab-bar":
267
- if (!customElements.get(tagName)) {
268
- customElements.define(tagName, LeTabBar$1);
267
+ if (!customElements.get(transformTag(tagName))) {
268
+ customElements.define(transformTag(tagName), LeTabBar$1);
269
269
  }
270
270
  break;
271
271
  case "le-button":
272
- if (!customElements.get(tagName)) {
272
+ if (!customElements.get(transformTag(tagName))) {
273
273
  defineCustomElement$b();
274
274
  }
275
275
  break;
276
276
  case "le-checkbox":
277
- if (!customElements.get(tagName)) {
277
+ if (!customElements.get(transformTag(tagName))) {
278
278
  defineCustomElement$a();
279
279
  }
280
280
  break;
281
281
  case "le-component":
282
- if (!customElements.get(tagName)) {
282
+ if (!customElements.get(transformTag(tagName))) {
283
283
  defineCustomElement$9();
284
284
  }
285
285
  break;
286
286
  case "le-dropdown-base":
287
- if (!customElements.get(tagName)) {
287
+ if (!customElements.get(transformTag(tagName))) {
288
288
  defineCustomElement$8();
289
289
  }
290
290
  break;
291
291
  case "le-popover":
292
- if (!customElements.get(tagName)) {
292
+ if (!customElements.get(transformTag(tagName))) {
293
293
  defineCustomElement$7();
294
294
  }
295
295
  break;
296
296
  case "le-popup":
297
- if (!customElements.get(tagName)) {
297
+ if (!customElements.get(transformTag(tagName))) {
298
298
  defineCustomElement$6();
299
299
  }
300
300
  break;
301
301
  case "le-select":
302
- if (!customElements.get(tagName)) {
302
+ if (!customElements.get(transformTag(tagName))) {
303
303
  defineCustomElement$5();
304
304
  }
305
305
  break;
306
306
  case "le-slot":
307
- if (!customElements.get(tagName)) {
307
+ if (!customElements.get(transformTag(tagName))) {
308
308
  defineCustomElement$4();
309
309
  }
310
310
  break;
311
311
  case "le-string-input":
312
- if (!customElements.get(tagName)) {
312
+ if (!customElements.get(transformTag(tagName))) {
313
313
  defineCustomElement$3();
314
314
  }
315
315
  break;
316
316
  case "le-tab":
317
- if (!customElements.get(tagName)) {
317
+ if (!customElements.get(transformTag(tagName))) {
318
318
  defineCustomElement$2();
319
319
  }
320
320
  break;
@@ -1 +1 @@
1
- {"file":"le-tab-bar.js","mappings":"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","names":["LeTabBar","__stencil_proxyCustomElement"],"sources":["src/components/le-tab-bar/le-tab-bar.css?tag=le-tab-bar&encapsulation=shadow","src/components/le-tab-bar/le-tab-bar.tsx"],"sourcesContent":["/**\n * le-tab-bar - Default mode styles\n */\n\n:host {\n display: block;\n --le-tab-bar-background: var(--le-color-surface);\n --le-tab-bar-border-color: var(--le-color-border);\n --le-tab-bar-gap: var(--le-spacing-2);\n --le-tab-bar-padding-y: var(--le-spacing-2);\n --le-tab-bar-padding-x: var(--le-spacing-1);\n\n background: var(--le-tab-bar-background);\n padding: var(--le-tab-bar-padding-y) var(--le-tab-bar-padding-x);\n}\n\n:host([full-width]) {\n width: 100%;\n}\n:host(.bordered.position-top) {\n border-bottom: 1px solid var(--le-tab-bar-border-color);\n}\n:host(.bordered.position-bottom) {\n border-top: 1px solid var(--le-tab-bar-border-color);\n}\n\n/* ============================================\n * TABLIST\n * ============================================ */\n\n.tablist {\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n justify-content: space-around;\n gap: var(--le-tab-bar-gap, var(--le-spacing-1));\n width: 100%;\n}\n\n/* ============================================\n * TAB BUTTON BASE\n * ============================================ */\n\n.tab {\n display: inline-flex;\n align-items: flex-start;\n justify-content: space-around;\n gap: var(--le-spacing-2);\n position: relative;\n \n background: transparent;\n border: none;\n cursor: pointer;\n}\n\n.tab-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ============================================\n * TAB ICON\n * ============================================ */\n\n.tab-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1em;\n height: 1em;\n font-size: 1.1em;\n}\n\n.tab-icon img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* ============================================\n * TAB DESCRIPTION\n * ============================================ */\n\n.tab-description {\n font-size: var(--le-font-size-xs);\n font-weight: var(--le-font-weight-normal);\n color: var(--le-text-tertiary);\n margin-left: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Element,\n Watch,\n Listen,\n Host,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\n\ninterface TabConfig {\n label: string;\n value: string;\n icon?: string;\n href?: string;\n disabled: boolean;\n}\n\n/**\n * A presentational tab bar component without panels.\n *\n * Use this for navigation/routing scenarios where you manage the content\n * externally based on the selection events. For tabs with built-in panels,\n * use `le-tabs` instead.\n *\n * @cssprop --le-tab-bar-border-color - Border color\n * @cssprop --le-tab-bar-gap - Gap between tabs\n * @cssprop --le-tab-bar-indicator-color - Active indicator color\n * @cssprop --le-tab-bar-padding-x - Horizontal padding for tabs\n * @cssprop --le-tab-bar-padding-y - Vertical padding for tabs\n *\n * @csspart tablist - The tab button container\n * @csspart tab - Individual tab buttons\n * @csspart tab-active - The currently active tab\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-tab-bar',\n styleUrl: 'le-tab-bar.css',\n shadow: true,\n})\nexport class LeTabBar {\n @Element() el: HTMLElement;\n\n /**\n * Array of tab options defining the tabs to display.\n */\n @Prop() tabs: LeOption[] = [];\n\n /**\n * The value of the currently selected tab.\n */\n @Prop({ mutable: true }) selected?: LeOptionValue;\n\n /**\n * Whether tabs should stretch to fill available width.\n */\n @Prop() fullWidth: boolean = true;\n\n /**\n * Whether to show labels in icon-only mode.\n */\n @Prop() showLabels: boolean = false;\n\n /**\n * Position of the tab bar.\n * @allowedValues top | bottom\n */\n @Prop() position: 'top' | 'bottom' = 'top';\n\n /**\n * Size of the tabs.\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether to show a border below the tab bar.\n */\n @Prop() bordered: boolean = true;\n\n /**\n * Internal tab configurations (built from children or tabs prop)\n */\n @State() private tabConfigs: TabConfig[] = [];\n\n /**\n * Whether we're using declarative mode (le-tab-panel children)\n */\n @State() private isDeclarativeMode: boolean = false;\n\n /**\n * Internal state for focused tab index (for keyboard navigation)\n */\n @State() private focusedIndex: number = 0;\n\n /**\n * Emitted when the selected tab changes.\n */\n @Event() leTabChange: EventEmitter<LeOptionSelectDetail>;\n\n private mutationObserver?: MutationObserver;\n\n @Watch('selected')\n selectedChanged(newValue: LeOptionValue) {\n const index = this.tabConfigs.findIndex(t => t.value === newValue);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n\n @Watch('tabs')\n tabsChanged() {\n if (!this.isDeclarativeMode) {\n this.buildTabConfigs();\n }\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n this.buildTabConfigs();\n }\n\n componentWillLoad() {\n this.buildTabConfigs();\n if (this.selected === undefined && this.tabs.length > 0) {\n const firstEnabled = this.tabs.find(tab => !tab.disabled);\n if (firstEnabled) {\n this.selected = this.getTabValue(firstEnabled);\n }\n }\n if (this.selected !== undefined) {\n const index = this.getTabIndex(this.selected);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n connectedCallback() {\n // Watch for dynamic changes to children\n this.mutationObserver = new MutationObserver(() => {\n this.buildTabConfigs();\n });\n this.mutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n }\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n }\n\n private async buildTabConfigs() {\n // Check for le-tab-panel children\n const tabs = Array.from(this.el.querySelectorAll(':scope > le-tab')) as Array<\n HTMLElement & {\n getTabConfig: () => Promise<TabConfig>;\n setActive: (active: boolean) => Promise<void>;\n }\n >;\n\n if (tabs.length > 0) {\n // Declarative mode - build from children\n this.isDeclarativeMode = true;\n const configs: TabConfig[] = [];\n\n for (const tab of tabs) {\n const config = await tab.getTabConfig();\n configs.push({ ...config });\n }\n\n this.tabConfigs = configs;\n } else if (this.tabs.length > 0) {\n // Programmatic mode - use tabs prop\n this.isDeclarativeMode = false;\n this.tabConfigs = this.tabs.map(tab => ({\n label: tab.label,\n value: (tab.value !== undefined ? tab.value : tab.label) as string,\n iconStart: tab.iconStart,\n iconEnd: tab.iconEnd,\n disabled: tab.disabled ?? false,\n }));\n } else {\n this.tabConfigs = [];\n }\n\n // Set default selected\n if (this.selected === undefined && this.tabConfigs.length > 0) {\n const firstEnabled = this.tabConfigs.find(t => !t.disabled);\n if (firstEnabled) {\n this.selected = firstEnabled.value;\n }\n }\n\n // Initialize focused index\n if (this.selected !== undefined) {\n const index = this.tabConfigs.findIndex(t => t.value === this.selected);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n private getTabValue(tab: LeOption): LeOptionValue {\n return tab.value !== undefined ? tab.value : tab.label;\n }\n\n private getTabIndex(value: LeOptionValue): number {\n return this.tabs.findIndex(tab => this.getTabValue(tab) === value);\n }\n\n private selectTab(tab: LeOption) {\n if (tab.disabled) return;\n\n const value = this.getTabValue(tab);\n this.selected = value;\n this.leTabChange.emit({ value, option: tab });\n }\n\n private handleTabClick = (tab: LeOption) => {\n this.selectTab(tab);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const { tabConfigs } = this;\n let newIndex = this.focusedIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = this.findNextEnabledTab(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = this.findNextEnabledTab(1);\n break;\n case 'Home':\n event.preventDefault();\n newIndex = this.findFirstEnabledTab();\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.findLastEnabledTab();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (tabConfigs[this.focusedIndex]) {\n this.selectTab(tabConfigs[this.focusedIndex]);\n }\n return;\n default:\n return;\n }\n\n if (newIndex !== this.focusedIndex) {\n this.focusedIndex = newIndex;\n if (tabConfigs[newIndex]) {\n this.selectTab(tabConfigs[newIndex]);\n }\n }\n };\n\n private findNextEnabledTab(direction: 1 | -1): number {\n const { tabConfigs } = this;\n let index = this.focusedIndex;\n const length = tabConfigs.length;\n\n for (let i = 0; i < length; i++) {\n index = (index + direction + length) % length;\n if (!tabConfigs[index].disabled) {\n return index;\n }\n }\n return this.focusedIndex;\n }\n\n private findFirstEnabledTab(): number {\n return this.tabConfigs.findIndex(tab => !tab.disabled);\n }\n\n private findLastEnabledTab(): number {\n for (let i = this.tabConfigs.length - 1; i >= 0; i--) {\n if (!this.tabConfigs[i].disabled) return i;\n }\n return 0;\n }\n\n render() {\n const { tabConfigs, selected, size, bordered } = this;\n\n const classes = {\n 'le-tab-bar': true,\n 'bordered': bordered,\n 'position-top': this.position === 'top',\n 'position-bottom': this.position === 'bottom',\n };\n\n return (\n <Host class={classes}>\n <le-component component=\"le-tab-bar\">\n <div\n class=\"tablist\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n part=\"tablist\"\n onKeyDown={this.handleKeyDown}\n >\n <le-slot name=\"\" type=\"slot\" allowedComponents=\"le-tab\">\n {tabConfigs.map(tab => {\n const value = this.getTabValue(tab);\n const isSelected = value === selected;\n\n return (\n <le-tab\n key={value}\n class=\"tab\"\n role=\"tab\"\n variant=\"icon-only\"\n label={tab.label}\n value={tab.value}\n icon={tab.icon}\n href={tab.href}\n selected={isSelected}\n disabled={tab.disabled}\n showLabel={this.showLabels}\n size={size}\n part={isSelected ? 'tab tab-active' : 'tab'}\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={tab.disabled ? 'true' : undefined}\n tabIndex={-1}\n onClick={() => this.handleTabClick(tab)}\n >\n <span class=\"tab-label\">{tab.label}</span>\n </le-tab>\n );\n })}\n </le-slot>\n </div>\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-tab-bar.js","mappings":"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","names":["LeTabBar","__stencil_proxyCustomElement"],"sources":["src/components/le-tab-bar/le-tab-bar.css?tag=le-tab-bar&encapsulation=shadow","src/components/le-tab-bar/le-tab-bar.tsx"],"sourcesContent":["/**\n * le-tab-bar - Default mode styles\n */\n\n:host {\n display: block;\n --le-tab-bar-background: var(--le-color-surface);\n --le-tab-bar-border-color: var(--le-color-border);\n --le-tab-bar-gap: var(--le-spacing-2);\n --le-tab-bar-padding-y: var(--le-spacing-2);\n --le-tab-bar-padding-x: var(--le-spacing-1);\n\n background: var(--le-tab-bar-background);\n padding: var(--le-tab-bar-padding-y) var(--le-tab-bar-padding-x);\n}\n\n:host([full-width]) {\n width: 100%;\n}\n:host(.bordered.position-top) {\n border-bottom: 1px solid var(--le-tab-bar-border-color);\n}\n:host(.bordered.position-bottom) {\n border-top: 1px solid var(--le-tab-bar-border-color);\n}\n\n/* ============================================\n * TABLIST\n * ============================================ */\n\n.tablist {\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n justify-content: space-around;\n gap: var(--le-tab-bar-gap, var(--le-spacing-1));\n width: 100%;\n}\n\n/* ============================================\n * TAB BUTTON BASE\n * ============================================ */\n\n.tab {\n display: inline-flex;\n align-items: flex-start;\n justify-content: space-around;\n gap: var(--le-spacing-2);\n position: relative;\n \n background: transparent;\n border: none;\n cursor: pointer;\n}\n\n.tab-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ============================================\n * TAB ICON\n * ============================================ */\n\n.tab-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1em;\n height: 1em;\n font-size: 1.1em;\n}\n\n.tab-icon img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* ============================================\n * TAB DESCRIPTION\n * ============================================ */\n\n.tab-description {\n font-size: var(--le-font-size-xs);\n font-weight: var(--le-font-weight-normal);\n color: var(--le-text-tertiary);\n margin-left: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n h,\n Element,\n Watch,\n Listen,\n Host,\n} from '@stencil/core';\nimport { LeOption, LeOptionValue, LeOptionSelectDetail } from '../../types/options';\n\ninterface TabConfig {\n label: string;\n value: string;\n icon?: string;\n href?: string;\n disabled: boolean;\n}\n\n/**\n * A presentational tab bar component without panels.\n *\n * Use this for navigation/routing scenarios where you manage the content\n * externally based on the selection events. For tabs with built-in panels,\n * use `le-tabs` instead.\n *\n * @cssprop --le-tab-bar-border-color - Border color\n * @cssprop --le-tab-bar-gap - Gap between tabs\n * @cssprop --le-tab-bar-indicator-color - Active indicator color\n * @cssprop --le-tab-bar-padding-x - Horizontal padding for tabs\n * @cssprop --le-tab-bar-padding-y - Vertical padding for tabs\n *\n * @csspart tablist - The tab button container\n * @csspart tab - Individual tab buttons\n * @csspart tab-active - The currently active tab\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-tab-bar',\n styleUrl: 'le-tab-bar.css',\n shadow: true,\n})\nexport class LeTabBar {\n @Element() el: HTMLElement;\n\n /**\n * Array of tab options defining the tabs to display.\n */\n @Prop() tabs: LeOption[] = [];\n\n /**\n * The value of the currently selected tab.\n */\n @Prop({ mutable: true }) selected?: LeOptionValue;\n\n /**\n * Whether tabs should stretch to fill available width.\n */\n @Prop() fullWidth: boolean = true;\n\n /**\n * Whether to show labels in icon-only mode.\n */\n @Prop() showLabels: boolean = false;\n\n /**\n * Position of the tab bar.\n * @allowedValues top | bottom\n */\n @Prop() position: 'top' | 'bottom' = 'top';\n\n /**\n * Size of the tabs.\n * @allowedValues small | medium | large\n */\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether to show a border below the tab bar.\n */\n @Prop() bordered: boolean = true;\n\n /**\n * Internal tab configurations (built from children or tabs prop)\n */\n @State() private tabConfigs: TabConfig[] = [];\n\n /**\n * Whether we're using declarative mode (le-tab-panel children)\n */\n @State() private isDeclarativeMode: boolean = false;\n\n /**\n * Internal state for focused tab index (for keyboard navigation)\n */\n @State() private focusedIndex: number = 0;\n\n /**\n * Emitted when the selected tab changes.\n */\n @Event() leTabChange: EventEmitter<LeOptionSelectDetail>;\n\n private mutationObserver?: MutationObserver;\n\n @Watch('selected')\n selectedChanged(newValue: LeOptionValue) {\n const index = this.tabConfigs.findIndex(t => t.value === newValue);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n\n @Watch('tabs')\n tabsChanged() {\n if (!this.isDeclarativeMode) {\n this.buildTabConfigs();\n }\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n this.buildTabConfigs();\n }\n\n componentWillLoad() {\n this.buildTabConfigs();\n if (this.selected === undefined && this.tabs.length > 0) {\n const firstEnabled = this.tabs.find(tab => !tab.disabled);\n if (firstEnabled) {\n this.selected = this.getTabValue(firstEnabled);\n }\n }\n if (this.selected !== undefined) {\n const index = this.getTabIndex(this.selected);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n connectedCallback() {\n // Watch for dynamic changes to children\n this.mutationObserver = new MutationObserver(() => {\n this.buildTabConfigs();\n });\n this.mutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n }\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n }\n\n private async buildTabConfigs() {\n // Check for le-tab-panel children\n const tabs = Array.from(this.el.querySelectorAll(':scope > le-tab')) as Array<\n HTMLElement & {\n getTabConfig: () => Promise<TabConfig>;\n setActive: (active: boolean) => Promise<void>;\n }\n >;\n\n if (tabs.length > 0) {\n // Declarative mode - build from children\n this.isDeclarativeMode = true;\n const configs: TabConfig[] = [];\n\n for (const tab of tabs) {\n const config = await tab.getTabConfig();\n configs.push({ ...config });\n }\n\n this.tabConfigs = configs;\n } else if (this.tabs.length > 0) {\n // Programmatic mode - use tabs prop\n this.isDeclarativeMode = false;\n this.tabConfigs = this.tabs.map(tab => ({\n label: tab.label,\n value: (tab.value !== undefined ? tab.value : tab.label) as string,\n iconStart: tab.iconStart,\n iconEnd: tab.iconEnd,\n disabled: tab.disabled ?? false,\n }));\n } else {\n this.tabConfigs = [];\n }\n\n // Set default selected\n if (this.selected === undefined && this.tabConfigs.length > 0) {\n const firstEnabled = this.tabConfigs.find(t => !t.disabled);\n if (firstEnabled) {\n this.selected = firstEnabled.value;\n }\n }\n\n // Initialize focused index\n if (this.selected !== undefined) {\n const index = this.tabConfigs.findIndex(t => t.value === this.selected);\n if (index >= 0) {\n this.focusedIndex = index;\n }\n }\n }\n\n private getTabValue(tab: LeOption): LeOptionValue {\n return tab.value !== undefined ? tab.value : tab.label;\n }\n\n private getTabIndex(value: LeOptionValue): number {\n return this.tabs.findIndex(tab => this.getTabValue(tab) === value);\n }\n\n private selectTab(tab: LeOption) {\n if (tab.disabled) return;\n\n const value = this.getTabValue(tab);\n this.selected = value;\n this.leTabChange.emit({ value, option: tab });\n }\n\n private handleTabClick = (tab: LeOption) => {\n this.selectTab(tab);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const { tabConfigs } = this;\n let newIndex = this.focusedIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = this.findNextEnabledTab(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = this.findNextEnabledTab(1);\n break;\n case 'Home':\n event.preventDefault();\n newIndex = this.findFirstEnabledTab();\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.findLastEnabledTab();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (tabConfigs[this.focusedIndex]) {\n this.selectTab(tabConfigs[this.focusedIndex]);\n }\n return;\n default:\n return;\n }\n\n if (newIndex !== this.focusedIndex) {\n this.focusedIndex = newIndex;\n if (tabConfigs[newIndex]) {\n this.selectTab(tabConfigs[newIndex]);\n }\n }\n };\n\n private findNextEnabledTab(direction: 1 | -1): number {\n const { tabConfigs } = this;\n let index = this.focusedIndex;\n const length = tabConfigs.length;\n\n for (let i = 0; i < length; i++) {\n index = (index + direction + length) % length;\n if (!tabConfigs[index].disabled) {\n return index;\n }\n }\n return this.focusedIndex;\n }\n\n private findFirstEnabledTab(): number {\n return this.tabConfigs.findIndex(tab => !tab.disabled);\n }\n\n private findLastEnabledTab(): number {\n for (let i = this.tabConfigs.length - 1; i >= 0; i--) {\n if (!this.tabConfigs[i].disabled) return i;\n }\n return 0;\n }\n\n render() {\n const { tabConfigs, selected, size, bordered } = this;\n\n const classes = {\n 'le-tab-bar': true,\n 'bordered': bordered,\n 'position-top': this.position === 'top',\n 'position-bottom': this.position === 'bottom',\n };\n\n return (\n <Host class={classes}>\n <le-component component=\"le-tab-bar\">\n <div\n class=\"tablist\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n part=\"tablist\"\n onKeyDown={this.handleKeyDown}\n >\n <le-slot name=\"\" type=\"slot\" allowedComponents=\"le-tab\">\n {tabConfigs.map(tab => {\n const value = this.getTabValue(tab);\n const isSelected = value === selected;\n\n return (\n <le-tab\n key={value}\n class=\"tab\"\n role=\"tab\"\n variant=\"icon-only\"\n label={tab.label}\n value={tab.value}\n icon={tab.icon}\n href={tab.href}\n selected={isSelected}\n disabled={tab.disabled}\n showLabel={this.showLabels}\n size={size}\n part={isSelected ? 'tab tab-active' : 'tab'}\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={tab.disabled ? 'true' : undefined}\n tabIndex={-1}\n onClick={() => this.handleTabClick(tab)}\n >\n <span class=\"tab-label\">{tab.label}</span>\n </le-tab>\n );\n })}\n </le-slot>\n </div>\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,9 +1,9 @@
1
- import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
1
+ import { proxyCustomElement, HTMLElement, h, transformTag } from '@stencil/core/internal/client';
2
2
  import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$4, c as defineCustomElement$5, e as defineCustomElement$8, f as defineCustomElement$9, g as defineCustomElement$a } from './le-button2.js';
3
3
  import { d as defineCustomElement$7 } from './le-dropdown-base2.js';
4
4
  import { d as defineCustomElement$6 } from './le-popover2.js';
5
5
 
6
- const leTabPanelCss = ":host{display:contents;--le-tab-panel-radius:var(--le-radius-md);--le-tab-panel-padding:var(--le-spacing-4)}.tab-panel{margin-top:4px;display:none;border-radius:var(--le-tab-panel-radius);padding:var(--le-tab-panel-padding)}.tab-panel.active{display:block}.tab-panel:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.tab-panel.lazy-hidden{display:none}";
6
+ const leTabPanelCss = () => `:host{display:contents;--le-tab-panel-radius:var(--le-radius-md);--le-tab-panel-padding:var(--le-spacing-4)}.tab-panel{margin-top:4px;display:none;border-radius:var(--le-tab-panel-radius);padding:var(--le-tab-panel-padding)}.tab-panel.active{display:block}.tab-panel:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.tab-panel.lazy-hidden{display:none}`;
7
7
 
8
8
  const LeTabPanel$1 = /*@__PURE__*/ proxyCustomElement(class LeTabPanel extends HTMLElement {
9
9
  constructor(registerHost) {
@@ -98,7 +98,7 @@ const LeTabPanel$1 = /*@__PURE__*/ proxyCustomElement(class LeTabPanel extends H
98
98
  static get watchers() { return {
99
99
  "active": ["activeChanged"]
100
100
  }; }
101
- static get style() { return leTabPanelCss; }
101
+ static get style() { return leTabPanelCss(); }
102
102
  }, [769, "le-tab-panel", {
103
103
  "label": [1],
104
104
  "value": [1],
@@ -121,52 +121,52 @@ function defineCustomElement$1() {
121
121
  const components = ["le-tab-panel", "le-button", "le-checkbox", "le-component", "le-dropdown-base", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
122
122
  components.forEach(tagName => { switch (tagName) {
123
123
  case "le-tab-panel":
124
- if (!customElements.get(tagName)) {
125
- customElements.define(tagName, LeTabPanel$1);
124
+ if (!customElements.get(transformTag(tagName))) {
125
+ customElements.define(transformTag(tagName), LeTabPanel$1);
126
126
  }
127
127
  break;
128
128
  case "le-button":
129
- if (!customElements.get(tagName)) {
129
+ if (!customElements.get(transformTag(tagName))) {
130
130
  defineCustomElement$a();
131
131
  }
132
132
  break;
133
133
  case "le-checkbox":
134
- if (!customElements.get(tagName)) {
134
+ if (!customElements.get(transformTag(tagName))) {
135
135
  defineCustomElement$9();
136
136
  }
137
137
  break;
138
138
  case "le-component":
139
- if (!customElements.get(tagName)) {
139
+ if (!customElements.get(transformTag(tagName))) {
140
140
  defineCustomElement$8();
141
141
  }
142
142
  break;
143
143
  case "le-dropdown-base":
144
- if (!customElements.get(tagName)) {
144
+ if (!customElements.get(transformTag(tagName))) {
145
145
  defineCustomElement$7();
146
146
  }
147
147
  break;
148
148
  case "le-popover":
149
- if (!customElements.get(tagName)) {
149
+ if (!customElements.get(transformTag(tagName))) {
150
150
  defineCustomElement$6();
151
151
  }
152
152
  break;
153
153
  case "le-popup":
154
- if (!customElements.get(tagName)) {
154
+ if (!customElements.get(transformTag(tagName))) {
155
155
  defineCustomElement$5();
156
156
  }
157
157
  break;
158
158
  case "le-select":
159
- if (!customElements.get(tagName)) {
159
+ if (!customElements.get(transformTag(tagName))) {
160
160
  defineCustomElement$4();
161
161
  }
162
162
  break;
163
163
  case "le-slot":
164
- if (!customElements.get(tagName)) {
164
+ if (!customElements.get(transformTag(tagName))) {
165
165
  defineCustomElement$3();
166
166
  }
167
167
  break;
168
168
  case "le-string-input":
169
- if (!customElements.get(tagName)) {
169
+ if (!customElements.get(transformTag(tagName))) {
170
170
  defineCustomElement$2();
171
171
  }
172
172
  break;
@@ -1 +1 @@
1
- {"file":"le-tab-panel.js","mappings":";;;;;AAAA,MAAM,aAAa,GAAG,0XAA0X;;MCmBnYA,YAAU,iBAAAC,kBAAA,CAAA,MAAA,UAAA,SAAA,WAAA,CAAA;;;;;;;;;AAGrB;;AAEG;AACK,IAAA,KAAK;AAEb;;;AAGG;AACK,IAAA,KAAK;AAEb;;;AAGG;AACK,IAAA,SAAS;AAEjB;;AAEG;AACK,IAAA,OAAO;AAEf;;AAEG;IACK,QAAQ,GAAY,KAAK;AAEjC;;;;AAIG;IACK,IAAI,GAAY,KAAK;AAE7B;;AAEG;IACM,MAAM,GAAY,KAAK;AAEhC;;AAEG;IACM,aAAa,GAAY,KAAK;AAGvC,IAAA,aAAa,CAAC,QAAiB,EAAA;AAC7B,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;AAI7B;;AAEG;AAEH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;;AAGjC;;AAEG;AAEH,IAAA,MAAM,YAAY,GAAA;QAOhB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;;AAGH;;AAEG;IAEH,MAAM,SAAS,CAAC,QAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;;AAGxB;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAC3B,OAAO,IAAI,CAAC,aAAa;;IAG3B,MAAM,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAE/C,QACE,CAAA,CAAA,cAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAc,SAAS,EAAC,cAAc,EAAA,EACpC,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,aAAa,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;AACzC,aAAA,EACD,IAAI,EAAC,UAAU,EAAA,aAAA,EACF,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAA,EAE9B,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAC,EAAE,EAAC,WAAW,EAAC,mBAAmB,EAAC,IAAI,EAAC,MAAM,EAAA,EACzD,YAAY,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACtB,CACN,CACO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["LeTabPanel","__stencil_proxyCustomElement"],"sources":["src/components/le-tab-panel/le-tab-panel.css?tag=le-tab-panel&encapsulation=shadow","src/components/le-tab-panel/le-tab-panel.tsx"],"sourcesContent":["/**\n * le-tab-panel - Styles\n */\n\n:host {\n display: contents;\n --le-tab-panel-radius: var(--le-radius-md);\n --le-tab-panel-padding: var(--le-spacing-4);\n}\n\n.tab-panel {\n margin-top: 4px;\n display: none;\n border-radius: var(--le-tab-panel-radius);\n padding: var(--le-tab-panel-padding);\n}\n\n.tab-panel.active {\n display: block;\n}\n\n.tab-panel:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* For lazy panels that have been rendered but are now hidden */\n.tab-panel.lazy-hidden {\n display: none;\n}\n","import { Component, Prop, h, Element, State, Watch, Method } from '@stencil/core';\n\n/**\n * A tab panel component used as a child of le-tabs.\n *\n * Each le-tab-panel defines both the tab button label and the panel content.\n * The parent le-tabs component automatically reads these panels and creates\n * the tab interface.\n *\n * @slot - Default slot for panel content\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-tab-panel',\n styleUrl: 'le-tab-panel.css',\n shadow: true,\n})\nexport class LeTabPanel {\n @Element() el: HTMLLeTabPanelElement;\n\n /**\n * The label displayed in the tab button.\n */\n @Prop() label!: string;\n\n /**\n * The value used to identify this tab.\n * Defaults to the label if not provided.\n */\n @Prop() value?: string;\n\n /**\n * Icon displayed at the start of the tab button.\n * Can be an emoji, URL, or icon class.\n */\n @Prop() iconStart?: string;\n\n /**\n * Icon displayed at the end of the tab button.\n */\n @Prop() iconEnd?: string;\n\n /**\n * Whether this tab is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether to render the panel content only when active (lazy loading).\n * When true, content is not rendered until the tab is first selected.\n * When false (default), content is always in DOM but hidden when inactive.\n */\n @Prop() lazy: boolean = false;\n\n /**\n * Internal: Whether this panel is currently active (set by parent le-tabs)\n */\n @State() active: boolean = false;\n\n /**\n * Internal: Track if panel has ever been activated (for lazy rendering)\n */\n @State() hasBeenActive: boolean = false;\n\n @Watch('active')\n activeChanged(isActive: boolean) {\n if (isActive && !this.hasBeenActive) {\n this.hasBeenActive = true;\n }\n }\n\n /**\n * Get the effective value (value or label as fallback)\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value ?? this.label;\n }\n\n /**\n * Get tab configuration for parent component\n */\n @Method()\n async getTabConfig(): Promise<{\n label: string;\n value: string;\n iconStart?: string;\n iconEnd?: string;\n disabled: boolean;\n }> {\n return {\n label: this.label,\n value: this.value ?? this.label,\n iconStart: this.iconStart,\n iconEnd: this.iconEnd,\n disabled: this.disabled,\n };\n }\n\n /**\n * Set the active state (called by parent le-tabs)\n */\n @Method()\n async setActive(isActive: boolean) {\n this.active = isActive;\n }\n\n /**\n * Check if panel should render content\n */\n private shouldRenderContent(): boolean {\n if (!this.lazy) return true;\n return this.hasBeenActive;\n }\n\n render() {\n const shouldRender = this.shouldRenderContent();\n\n return (\n <le-component component=\"le-tab-panel\">\n <div\n class={{\n 'tab-panel': true,\n 'active': this.active,\n 'lazy-hidden': this.lazy && !this.active,\n }}\n role=\"tabpanel\"\n aria-hidden={!this.active ? 'true' : undefined}\n tabIndex={this.active ? 0 : -1}\n >\n <le-slot name=\"\" description=\"Tab panel content\" type=\"slot\">\n {shouldRender && <slot></slot>}\n </le-slot>\n </div>\n </le-component>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-tab-panel.js","mappings":";;;;;AAAA,MAAM,aAAa,GAAG,MAAM,CAAC,wXAAwX,CAAC;;MCmBzYA,YAAU,iBAAAC,kBAAA,CAAA,MAAA,UAAA,SAAA,WAAA,CAAA;;;;;;;;;AAGrB;;AAEG;AACK,IAAA,KAAK;AAEb;;;AAGG;AACK,IAAA,KAAK;AAEb;;;AAGG;AACK,IAAA,SAAS;AAEjB;;AAEG;AACK,IAAA,OAAO;AAEf;;AAEG;IACK,QAAQ,GAAY,KAAK;AAEjC;;;;AAIG;IACK,IAAI,GAAY,KAAK;AAE7B;;AAEG;IACM,MAAM,GAAY,KAAK;AAEhC;;AAEG;IACM,aAAa,GAAY,KAAK;AAGvC,IAAA,aAAa,CAAC,QAAiB,EAAA;AAC7B,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;;AAI7B;;AAEG;AAEH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;;AAGjC;;AAEG;AAEH,IAAA,MAAM,YAAY,GAAA;QAOhB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;;AAGH;;AAEG;IAEH,MAAM,SAAS,CAAC,QAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;;AAGxB;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAC3B,OAAO,IAAI,CAAC,aAAa;;IAG3B,MAAM,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAE/C,QACE,CAAA,CAAA,cAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAc,SAAS,EAAC,cAAc,EAAA,EACpC,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,aAAa,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;AACzC,aAAA,EACD,IAAI,EAAC,UAAU,EAAA,aAAA,EACF,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAA,EAE9B,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAC,EAAE,EAAC,WAAW,EAAC,mBAAmB,EAAC,IAAI,EAAC,MAAM,EAAA,EACzD,YAAY,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACtB,CACN,CACO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["LeTabPanel","__stencil_proxyCustomElement"],"sources":["src/components/le-tab-panel/le-tab-panel.css?tag=le-tab-panel&encapsulation=shadow","src/components/le-tab-panel/le-tab-panel.tsx"],"sourcesContent":["/**\n * le-tab-panel - Styles\n */\n\n:host {\n display: contents;\n --le-tab-panel-radius: var(--le-radius-md);\n --le-tab-panel-padding: var(--le-spacing-4);\n}\n\n.tab-panel {\n margin-top: 4px;\n display: none;\n border-radius: var(--le-tab-panel-radius);\n padding: var(--le-tab-panel-padding);\n}\n\n.tab-panel.active {\n display: block;\n}\n\n.tab-panel:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* For lazy panels that have been rendered but are now hidden */\n.tab-panel.lazy-hidden {\n display: none;\n}\n","import { Component, Prop, h, Element, State, Watch, Method } from '@stencil/core';\n\n/**\n * A tab panel component used as a child of le-tabs.\n *\n * Each le-tab-panel defines both the tab button label and the panel content.\n * The parent le-tabs component automatically reads these panels and creates\n * the tab interface.\n *\n * @slot - Default slot for panel content\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-tab-panel',\n styleUrl: 'le-tab-panel.css',\n shadow: true,\n})\nexport class LeTabPanel {\n @Element() el: HTMLLeTabPanelElement;\n\n /**\n * The label displayed in the tab button.\n */\n @Prop() label!: string;\n\n /**\n * The value used to identify this tab.\n * Defaults to the label if not provided.\n */\n @Prop() value?: string;\n\n /**\n * Icon displayed at the start of the tab button.\n * Can be an emoji, URL, or icon class.\n */\n @Prop() iconStart?: string;\n\n /**\n * Icon displayed at the end of the tab button.\n */\n @Prop() iconEnd?: string;\n\n /**\n * Whether this tab is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether to render the panel content only when active (lazy loading).\n * When true, content is not rendered until the tab is first selected.\n * When false (default), content is always in DOM but hidden when inactive.\n */\n @Prop() lazy: boolean = false;\n\n /**\n * Internal: Whether this panel is currently active (set by parent le-tabs)\n */\n @State() active: boolean = false;\n\n /**\n * Internal: Track if panel has ever been activated (for lazy rendering)\n */\n @State() hasBeenActive: boolean = false;\n\n @Watch('active')\n activeChanged(isActive: boolean) {\n if (isActive && !this.hasBeenActive) {\n this.hasBeenActive = true;\n }\n }\n\n /**\n * Get the effective value (value or label as fallback)\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value ?? this.label;\n }\n\n /**\n * Get tab configuration for parent component\n */\n @Method()\n async getTabConfig(): Promise<{\n label: string;\n value: string;\n iconStart?: string;\n iconEnd?: string;\n disabled: boolean;\n }> {\n return {\n label: this.label,\n value: this.value ?? this.label,\n iconStart: this.iconStart,\n iconEnd: this.iconEnd,\n disabled: this.disabled,\n };\n }\n\n /**\n * Set the active state (called by parent le-tabs)\n */\n @Method()\n async setActive(isActive: boolean) {\n this.active = isActive;\n }\n\n /**\n * Check if panel should render content\n */\n private shouldRenderContent(): boolean {\n if (!this.lazy) return true;\n return this.hasBeenActive;\n }\n\n render() {\n const shouldRender = this.shouldRenderContent();\n\n return (\n <le-component component=\"le-tab-panel\">\n <div\n class={{\n 'tab-panel': true,\n 'active': this.active,\n 'lazy-hidden': this.lazy && !this.active,\n }}\n role=\"tabpanel\"\n aria-hidden={!this.active ? 'true' : undefined}\n tabIndex={this.active ? 0 : -1}\n >\n <le-slot name=\"\" description=\"Tab panel content\" type=\"slot\">\n {shouldRender && <slot></slot>}\n </le-slot>\n </div>\n </le-component>\n );\n }\n}\n"],"version":3}
@@ -1,10 +1,13 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host, Fragment } from '@stencil/core/internal/client';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host, Fragment, transformTag } from '@stencil/core/internal/client';
2
2
  import { h as classnames } from './utils.js';
3
3
  import { d as defineCustomElement$1, a as defineCustomElement$2, b as defineCustomElement$3, c as defineCustomElement$4, e as defineCustomElement$7, f as defineCustomElement$8, g as defineCustomElement$9 } from './le-button2.js';
4
4
  import { d as defineCustomElement$6 } from './le-dropdown-base2.js';
5
5
  import { d as defineCustomElement$5 } from './le-popover2.js';
6
6
 
7
- 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),\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)}.le-tab-container:hover:not(:disabled){color:var(--le-selected-tab-color)}.le-tab-container:focus-visible{outline:none}.le-tab-container:disabled{opacity:0.5;cursor:not-allowed}.le-tab-label{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--le-spacing-2)}.le-tab-container.variant-underlined{background:transparent;border:2px solid transparent;border-radius:0}.le-tab-container.variant-underlined.position-start,.le-tab-container.variant-underlined.position-end{border-block-width:0}.le-tab-container.variant-underlined.position-start{padding-inline-start:0}.le-tab-container.variant-underlined.position-top,.le-tab-container.variant-underlined.position-bottom{border-inline-width:0}.le-tab-container.variant-underlined.position-start.selected{border-inline-end-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-end.selected{border-inline-start-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-top.selected{border-bottom-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-bottom.selected{border-top-color:var(--_tab-border-color)}.le-tab-container.variant-solid{background:transparent;border-radius:var(--le-tab-border-radius);border:none}.le-tab-container.variant-solid.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-pills{background:transparent;border-radius:var(--le-radius-full);border:none}.le-tab-container.variant-pills.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-enclosed{padding-block:var(--le-spacing-1);background:transparent;border-radius:var(--le-tab-border-radius);border:none}.le-tab-container.variant-enclosed.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-icon-only{border:none;padding:0;background:transparent;color:var(--_tab-color)}.le-tab-container.variant-icon-only .icon-only{flex-direction:column}.le-tab-container.variant-icon-only .icon{display:flex;align-items:center;justify-content:center;min-height:var(--le-font-size-3xl);aspect-ratio:var(--le-tab-icon-only-aspect-ratio);font-size:var(--le-font-size-2xl);border-radius:var(--le-radius-full)}.le-tab-container.variant-icon-only .icon-label{margin-top:var(--le-spacing-1);font-size:var(--le-font-size-2xs)}.le-tab-container.variant-icon-only.selected{color:var(--le-selected-tab-color)}.le-tab-container.variant-icon-only.selected .icon{background:var(--le-selected-icon-only-tab-background)}.le-tab-container.variant-icon-only.size-small{padding:var(--le-tab-small-padding, 0.25rem)}.le-tab-container.variant-icon-only .content{display:none}.le-tab-container.size-small{--le-tab-padding-x:0.4rem;--le-tab-padding-y:0.3rem;--le-tab-padding-top:0.35rem;--le-tab-font-size:var(--le-tab-small-font-size, var(--le-font-size-xs))}.le-tab-container.size-large{--le-tab-padding-x:0.9rem;--le-tab-padding-y:0.6rem;--le-tab-font-size:var(--le-font-size-xl)}.le-tab-container.full-width{display:block;width:100%}.le-tab-container.variant-underlined.selected,.le-tab-container.variant-clear.selected{color:var(--le-selected-tab-color)}:host>le-component.icon-only .le-tab-container{padding:0.5rem;padding-bottom:0.6rem;aspect-ratio:var(--le-tab-icon-aspect-ratio, 1)}.le-tab-container.icon-only.size-small{padding:var(--le-tab-small-padding, 0.25rem)}.le-tab-container.icon-only.size-large{padding:0.75rem}.le-tab-container.icon-only .content{display:none}.content{display:inline}.content:empty{display:none}.icon-start,.icon-only,.icon-end{display:flex;align-items:center;justify-content:center}.icon-start:empty,.icon-only:empty,.icon-end:empty{display:none}::slotted([slot=\"icon-start\"]),::slotted([slot=\"icon-only\"]),::slotted([slot=\"icon-end\"]){display:flex;align-items:center;justify-content:center;width:1.125em;height:1.125em}.le-tab-align-start{justify-content:flex-start}.le-tab-align-center{justify-content:center}.le-tab-align-space-between{justify-content:space-between}.le-tab-align-end{justify-content:flex-end}";
7
+ 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),
8
+ border-color var(--le-tab-transition) var(--le-transition-easing),
9
+ box-shadow var(--le-tab-transition) var(--le-transition-easing),
10
+ transform var(--le-tab-transition) var(--le-transition-easing)}.le-tab-container:hover:not(:disabled){color:var(--le-selected-tab-color)}.le-tab-container:focus-visible{outline:none}.le-tab-container:disabled{opacity:0.5;cursor:not-allowed}.le-tab-label{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--le-spacing-2)}.le-tab-container.variant-underlined{background:transparent;border:2px solid transparent;border-radius:0}.le-tab-container.variant-underlined.position-start,.le-tab-container.variant-underlined.position-end{border-block-width:0}.le-tab-container.variant-underlined.position-start{padding-inline-start:0}.le-tab-container.variant-underlined.position-top,.le-tab-container.variant-underlined.position-bottom{border-inline-width:0}.le-tab-container.variant-underlined.position-start.selected{border-inline-end-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-end.selected{border-inline-start-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-top.selected{border-bottom-color:var(--_tab-border-color)}.le-tab-container.variant-underlined.position-bottom.selected{border-top-color:var(--_tab-border-color)}.le-tab-container.variant-solid{background:transparent;border-radius:var(--le-tab-border-radius);border:none}.le-tab-container.variant-solid.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-pills{background:transparent;border-radius:var(--le-radius-full);border:none}.le-tab-container.variant-pills.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-enclosed{padding-block:var(--le-spacing-1);background:transparent;border-radius:var(--le-tab-border-radius);border:none}.le-tab-container.variant-enclosed.selected{background:var(--_tab-bg);color:var(--le-color-on-primary)}.le-tab-container.variant-icon-only{border:none;padding:0;background:transparent;color:var(--_tab-color)}.le-tab-container.variant-icon-only .icon-only{flex-direction:column}.le-tab-container.variant-icon-only .icon{display:flex;align-items:center;justify-content:center;min-height:var(--le-font-size-3xl);aspect-ratio:var(--le-tab-icon-only-aspect-ratio);font-size:var(--le-font-size-2xl);border-radius:var(--le-radius-full)}.le-tab-container.variant-icon-only .icon-label{margin-top:var(--le-spacing-1);font-size:var(--le-font-size-2xs)}.le-tab-container.variant-icon-only.selected{color:var(--le-selected-tab-color)}.le-tab-container.variant-icon-only.selected .icon{background:var(--le-selected-icon-only-tab-background)}.le-tab-container.variant-icon-only.size-small{padding:var(--le-tab-small-padding, 0.25rem)}.le-tab-container.variant-icon-only .content{display:none}.le-tab-container.size-small{--le-tab-padding-x:0.4rem;--le-tab-padding-y:0.3rem;--le-tab-padding-top:0.35rem;--le-tab-font-size:var(--le-tab-small-font-size, var(--le-font-size-xs))}.le-tab-container.size-large{--le-tab-padding-x:0.9rem;--le-tab-padding-y:0.6rem;--le-tab-font-size:var(--le-font-size-xl)}.le-tab-container.full-width{display:block;width:100%}.le-tab-container.variant-underlined.selected,.le-tab-container.variant-clear.selected{color:var(--le-selected-tab-color)}:host>le-component.icon-only .le-tab-container{padding:0.5rem;padding-bottom:0.6rem;aspect-ratio:var(--le-tab-icon-aspect-ratio, 1)}.le-tab-container.icon-only.size-small{padding:var(--le-tab-small-padding, 0.25rem)}.le-tab-container.icon-only.size-large{padding:0.75rem}.le-tab-container.icon-only .content{display:none}.content{display:inline}.content:empty{display:none}.icon-start,.icon-only,.icon-end{display:flex;align-items:center;justify-content:center}.icon-start:empty,.icon-only:empty,.icon-end:empty{display:none}::slotted([slot="icon-start"]),::slotted([slot="icon-only"]),::slotted([slot="icon-end"]){display:flex;align-items:center;justify-content:center;width:1.125em;height:1.125em}.le-tab-align-start{justify-content:flex-start}.le-tab-align-center{justify-content:center}.le-tab-align-space-between{justify-content:space-between}.le-tab-align-end{justify-content:flex-end}`;
8
11
 
9
12
  const LeTab = /*@__PURE__*/ proxyCustomElement(class LeTab extends HTMLElement {
10
13
  constructor(registerHost) {
@@ -131,7 +134,7 @@ const LeTab = /*@__PURE__*/ proxyCustomElement(class LeTab extends HTMLElement {
131
134
  : { disabled: this.disabled };
132
135
  return (h(Host, { key: '6632a9b9df74dab0cb6bd638f35b55cc4a573e0e' }, h("le-component", { key: '3ed311094833d6e8819c35b1eaf69456dcb47773', component: "le-tab" }, h(TagType, { key: 'b9a3ca7a85e228da9a25ff9fc14a79cd9b4ffc41', 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))))))));
133
136
  }
134
- static get style() { return leTabCss; }
137
+ static get style() { return leTabCss(); }
135
138
  }, [769, "le-tab", {
136
139
  "mode": [1537],
137
140
  "label": [1],
@@ -159,52 +162,52 @@ function defineCustomElement() {
159
162
  const components = ["le-tab", "le-button", "le-checkbox", "le-component", "le-dropdown-base", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
160
163
  components.forEach(tagName => { switch (tagName) {
161
164
  case "le-tab":
162
- if (!customElements.get(tagName)) {
163
- customElements.define(tagName, LeTab);
165
+ if (!customElements.get(transformTag(tagName))) {
166
+ customElements.define(transformTag(tagName), LeTab);
164
167
  }
165
168
  break;
166
169
  case "le-button":
167
- if (!customElements.get(tagName)) {
170
+ if (!customElements.get(transformTag(tagName))) {
168
171
  defineCustomElement$9();
169
172
  }
170
173
  break;
171
174
  case "le-checkbox":
172
- if (!customElements.get(tagName)) {
175
+ if (!customElements.get(transformTag(tagName))) {
173
176
  defineCustomElement$8();
174
177
  }
175
178
  break;
176
179
  case "le-component":
177
- if (!customElements.get(tagName)) {
180
+ if (!customElements.get(transformTag(tagName))) {
178
181
  defineCustomElement$7();
179
182
  }
180
183
  break;
181
184
  case "le-dropdown-base":
182
- if (!customElements.get(tagName)) {
185
+ if (!customElements.get(transformTag(tagName))) {
183
186
  defineCustomElement$6();
184
187
  }
185
188
  break;
186
189
  case "le-popover":
187
- if (!customElements.get(tagName)) {
190
+ if (!customElements.get(transformTag(tagName))) {
188
191
  defineCustomElement$5();
189
192
  }
190
193
  break;
191
194
  case "le-popup":
192
- if (!customElements.get(tagName)) {
195
+ if (!customElements.get(transformTag(tagName))) {
193
196
  defineCustomElement$4();
194
197
  }
195
198
  break;
196
199
  case "le-select":
197
- if (!customElements.get(tagName)) {
200
+ if (!customElements.get(transformTag(tagName))) {
198
201
  defineCustomElement$3();
199
202
  }
200
203
  break;
201
204
  case "le-slot":
202
- if (!customElements.get(tagName)) {
205
+ if (!customElements.get(transformTag(tagName))) {
203
206
  defineCustomElement$2();
204
207
  }
205
208
  break;
206
209
  case "le-string-input":
207
- if (!customElements.get(tagName)) {
210
+ if (!customElements.get(transformTag(tagName))) {
208
211
  defineCustomElement$1();
209
212
  }
210
213
  break;
@@ -1 +1 @@
1
- {"file":"le-tab2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"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"],"version":3}
1
+ {"file":"le-tab2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"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"],"version":3}