le-kit 0.5.2 → 0.5.4

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 (475) hide show
  1. package/LLM_CONTEXT.md +22 -33
  2. package/package.json +3 -1
  3. package/readme.md +2 -0
  4. package/dist/cjs/index-BzadfLTc.js +0 -1864
  5. package/dist/cjs/index-BzadfLTc.js.map +0 -1
  6. package/dist/cjs/index.cjs.js +0 -124
  7. package/dist/cjs/index.cjs.js.map +0 -1
  8. package/dist/cjs/le-bar_16.cjs.entry.js +0 -3709
  9. package/dist/cjs/le-box.cjs.entry.js +0 -184
  10. package/dist/cjs/le-card.cjs.entry.js +0 -29
  11. package/dist/cjs/le-code-input.cjs.entry.js +0 -181
  12. package/dist/cjs/le-combobox.cjs.entry.js +0 -237
  13. package/dist/cjs/le-header-placeholder.cjs.entry.js +0 -18
  14. package/dist/cjs/le-kit.cjs.js +0 -27
  15. package/dist/cjs/le-kit.cjs.js.map +0 -1
  16. package/dist/cjs/le-multiselect.cjs.entry.js +0 -306
  17. package/dist/cjs/le-number-input.cjs.entry.js +0 -202
  18. package/dist/cjs/le-round-progress.cjs.entry.js +0 -106
  19. package/dist/cjs/le-segmented-control.cjs.entry.js +0 -245
  20. package/dist/cjs/le-side-panel-toggle.cjs.entry.js +0 -229
  21. package/dist/cjs/le-side-panel.cjs.entry.js +0 -546
  22. package/dist/cjs/le-stack.cjs.entry.js +0 -135
  23. package/dist/cjs/le-tab-bar.cjs.entry.js +0 -242
  24. package/dist/cjs/le-tab-panel.cjs.entry.js +0 -100
  25. package/dist/cjs/le-tab.cjs.entry.js +0 -136
  26. package/dist/cjs/le-tabs.cjs.entry.js +0 -307
  27. package/dist/cjs/le-tag.cjs.entry.js +0 -68
  28. package/dist/cjs/le-text.cjs.entry.js +0 -335
  29. package/dist/cjs/le-turntable.cjs.entry.js +0 -139
  30. package/dist/cjs/loader.cjs.js +0 -15
  31. package/dist/cjs/loader.cjs.js.map +0 -1
  32. package/dist/cjs/utils-Dxx9WhWK.js +0 -152
  33. package/dist/cjs/utils-Dxx9WhWK.js.map +0 -1
  34. package/dist/collection/assets/icons/chevron-down.svg +0 -3
  35. package/dist/collection/collection-manifest.json +0 -47
  36. package/dist/collection/components/le-bar/le-bar.css +0 -255
  37. package/dist/collection/components/le-bar/le-bar.js +0 -680
  38. package/dist/collection/components/le-bar/le-bar.js.map +0 -1
  39. package/dist/collection/components/le-box/le-box.css +0 -37
  40. package/dist/collection/components/le-box/le-box.js +0 -614
  41. package/dist/collection/components/le-box/le-box.js.map +0 -1
  42. package/dist/collection/components/le-button/le-button.css +0 -290
  43. package/dist/collection/components/le-button/le-button.js +0 -460
  44. package/dist/collection/components/le-button/le-button.js.map +0 -1
  45. package/dist/collection/components/le-card/le-card.css +0 -74
  46. package/dist/collection/components/le-card/le-card.js +0 -102
  47. package/dist/collection/components/le-card/le-card.js.map +0 -1
  48. package/dist/collection/components/le-checkbox/le-checkbox.css +0 -93
  49. package/dist/collection/components/le-checkbox/le-checkbox.js +0 -192
  50. package/dist/collection/components/le-checkbox/le-checkbox.js.map +0 -1
  51. package/dist/collection/components/le-code-input/le-code-input.css +0 -106
  52. package/dist/collection/components/le-code-input/le-code-input.js +0 -466
  53. package/dist/collection/components/le-code-input/le-code-input.js.map +0 -1
  54. package/dist/collection/components/le-collapse/le-collapse.css +0 -31
  55. package/dist/collection/components/le-collapse/le-collapse.js +0 -184
  56. package/dist/collection/components/le-collapse/le-collapse.js.map +0 -1
  57. package/dist/collection/components/le-combobox/le-combobox.css +0 -144
  58. package/dist/collection/components/le-combobox/le-combobox.js +0 -659
  59. package/dist/collection/components/le-combobox/le-combobox.js.map +0 -1
  60. package/dist/collection/components/le-component/le-component.css +0 -189
  61. package/dist/collection/components/le-component/le-component.js +0 -367
  62. package/dist/collection/components/le-component/le-component.js.map +0 -1
  63. package/dist/collection/components/le-current-heading/le-current-heading.css +0 -13
  64. package/dist/collection/components/le-current-heading/le-current-heading.js +0 -130
  65. package/dist/collection/components/le-current-heading/le-current-heading.js.map +0 -1
  66. package/dist/collection/components/le-dropdown-base/le-dropdown-base.css +0 -167
  67. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js +0 -761
  68. package/dist/collection/components/le-dropdown-base/le-dropdown-base.js.map +0 -1
  69. package/dist/collection/components/le-header/le-header.css +0 -120
  70. package/dist/collection/components/le-header/le-header.js +0 -508
  71. package/dist/collection/components/le-header/le-header.js.map +0 -1
  72. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js +0 -21
  73. package/dist/collection/components/le-header-placeholder/le-header-placeholder.js.map +0 -1
  74. package/dist/collection/components/le-icon/le-icon.css +0 -13
  75. package/dist/collection/components/le-icon/le-icon.js +0 -185
  76. package/dist/collection/components/le-icon/le-icon.js.map +0 -1
  77. package/dist/collection/components/le-multiselect/le-multiselect.css +0 -163
  78. package/dist/collection/components/le-multiselect/le-multiselect.js +0 -734
  79. package/dist/collection/components/le-multiselect/le-multiselect.js.map +0 -1
  80. package/dist/collection/components/le-navigation/le-navigation.css +0 -330
  81. package/dist/collection/components/le-navigation/le-navigation.js +0 -700
  82. package/dist/collection/components/le-navigation/le-navigation.js.map +0 -1
  83. package/dist/collection/components/le-number-input/le-number-input.css +0 -135
  84. package/dist/collection/components/le-number-input/le-number-input.js +0 -515
  85. package/dist/collection/components/le-number-input/le-number-input.js.map +0 -1
  86. package/dist/collection/components/le-popover/le-popover.css +0 -163
  87. package/dist/collection/components/le-popover/le-popover.js +0 -853
  88. package/dist/collection/components/le-popover/le-popover.js.map +0 -1
  89. package/dist/collection/components/le-popup/le-popup.api.js +0 -102
  90. package/dist/collection/components/le-popup/le-popup.api.js.map +0 -1
  91. package/dist/collection/components/le-popup/le-popup.css +0 -222
  92. package/dist/collection/components/le-popup/le-popup.js +0 -626
  93. package/dist/collection/components/le-popup/le-popup.js.map +0 -1
  94. package/dist/collection/components/le-round-progress/le-round-progress.css +0 -34
  95. package/dist/collection/components/le-round-progress/le-round-progress.js +0 -184
  96. package/dist/collection/components/le-round-progress/le-round-progress.js.map +0 -1
  97. package/dist/collection/components/le-scroll-progress/le-scroll-progress.css +0 -29
  98. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js +0 -186
  99. package/dist/collection/components/le-scroll-progress/le-scroll-progress.js.map +0 -1
  100. package/dist/collection/components/le-segmented-control/le-segmented-control.css +0 -78
  101. package/dist/collection/components/le-segmented-control/le-segmented-control.js +0 -445
  102. package/dist/collection/components/le-segmented-control/le-segmented-control.js.map +0 -1
  103. package/dist/collection/components/le-select/le-select.css +0 -121
  104. package/dist/collection/components/le-select/le-select.js +0 -578
  105. package/dist/collection/components/le-select/le-select.js.map +0 -1
  106. package/dist/collection/components/le-side-panel/le-side-panel.css +0 -193
  107. package/dist/collection/components/le-side-panel/le-side-panel.js +0 -953
  108. package/dist/collection/components/le-side-panel/le-side-panel.js.map +0 -1
  109. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js +0 -610
  110. package/dist/collection/components/le-side-panel-toggle/le-side-panel-toggle.js.map +0 -1
  111. package/dist/collection/components/le-slot/le-slot.default.css +0 -222
  112. package/dist/collection/components/le-slot/le-slot.js +0 -638
  113. package/dist/collection/components/le-slot/le-slot.js.map +0 -1
  114. package/dist/collection/components/le-stack/le-stack.default.css +0 -37
  115. package/dist/collection/components/le-stack/le-stack.js +0 -389
  116. package/dist/collection/components/le-stack/le-stack.js.map +0 -1
  117. package/dist/collection/components/le-string-input/le-string-input.css +0 -83
  118. package/dist/collection/components/le-string-input/le-string-input.js +0 -413
  119. package/dist/collection/components/le-string-input/le-string-input.js.map +0 -1
  120. package/dist/collection/components/le-tab/le-tab.css +0 -289
  121. package/dist/collection/components/le-tab/le-tab.js +0 -565
  122. package/dist/collection/components/le-tab/le-tab.js.map +0 -1
  123. package/dist/collection/components/le-tab-bar/le-tab-bar.css +0 -89
  124. package/dist/collection/components/le-tab-bar/le-tab-bar.js +0 -467
  125. package/dist/collection/components/le-tab-bar/le-tab-bar.js.map +0 -1
  126. package/dist/collection/components/le-tab-panel/le-tab-panel.css +0 -30
  127. package/dist/collection/components/le-tab-panel/le-tab-panel.js +0 -302
  128. package/dist/collection/components/le-tab-panel/le-tab-panel.js.map +0 -1
  129. package/dist/collection/components/le-tabs/le-tabs.css +0 -146
  130. package/dist/collection/components/le-tabs/le-tabs.js +0 -588
  131. package/dist/collection/components/le-tabs/le-tabs.js.map +0 -1
  132. package/dist/collection/components/le-tag/le-tag.css +0 -139
  133. package/dist/collection/components/le-tag/le-tag.js +0 -266
  134. package/dist/collection/components/le-tag/le-tag.js.map +0 -1
  135. package/dist/collection/components/le-text/le-text.css +0 -169
  136. package/dist/collection/components/le-text/le-text.js +0 -475
  137. package/dist/collection/components/le-text/le-text.js.map +0 -1
  138. package/dist/collection/components/le-turntable/le-turntable.css +0 -10
  139. package/dist/collection/components/le-turntable/le-turntable.js +0 -210
  140. package/dist/collection/components/le-turntable/le-turntable.js.map +0 -1
  141. package/dist/collection/dist/components/assets/custom-elements.json +0 -11935
  142. package/dist/collection/dist/components/assets/icons/chevron-down.json +0 -13
  143. package/dist/collection/dist/components/assets/icons/chevron-down.svg +0 -3
  144. package/dist/collection/dist/components/assets/icons/ellipsis-horizontal.json +0 -14
  145. package/dist/collection/dist/components/assets/icons/ellipsis-vertical.json +0 -14
  146. package/dist/collection/dist/components/assets/icons/hamburger.json +0 -14
  147. package/dist/collection/dist/components/assets/icons/side-panel.json +0 -61
  148. package/dist/collection/dist/themes/base.css +0 -89
  149. package/dist/collection/dist/themes/dark.css +0 -104
  150. package/dist/collection/dist/themes/default.css +0 -112
  151. package/dist/collection/dist/themes/gradient.css +0 -104
  152. package/dist/collection/dist/themes/index.css +0 -76
  153. package/dist/collection/dist/themes/minimal.css +0 -104
  154. package/dist/collection/dist/themes/warm.css +0 -104
  155. package/dist/collection/global/app.js +0 -177
  156. package/dist/collection/global/app.js.map +0 -1
  157. package/dist/collection/index.js +0 -16
  158. package/dist/collection/index.js.map +0 -1
  159. package/dist/collection/types/blocks.js +0 -115
  160. package/dist/collection/types/blocks.js.map +0 -1
  161. package/dist/collection/types/options.js +0 -2
  162. package/dist/collection/types/options.js.map +0 -1
  163. package/dist/collection/utils/utils.js +0 -141
  164. package/dist/collection/utils/utils.js.map +0 -1
  165. package/dist/components/app.js +0 -180
  166. package/dist/components/app.js.map +0 -1
  167. package/dist/components/assets/custom-elements.json +0 -11935
  168. package/dist/components/assets/icons/chevron-down.json +0 -13
  169. package/dist/components/assets/icons/chevron-down.svg +0 -3
  170. package/dist/components/assets/icons/ellipsis-horizontal.json +0 -14
  171. package/dist/components/assets/icons/ellipsis-vertical.json +0 -14
  172. package/dist/components/assets/icons/hamburger.json +0 -14
  173. package/dist/components/assets/icons/side-panel.json +0 -61
  174. package/dist/components/index.d.ts +0 -33
  175. package/dist/components/index.js +0 -12
  176. package/dist/components/index.js.map +0 -1
  177. package/dist/components/le-bar.d.ts +0 -11
  178. package/dist/components/le-bar.js +0 -9
  179. package/dist/components/le-bar.js.map +0 -1
  180. package/dist/components/le-bar2.js +0 -506
  181. package/dist/components/le-bar2.js.map +0 -1
  182. package/dist/components/le-box.d.ts +0 -11
  183. package/dist/components/le-box.js +0 -273
  184. package/dist/components/le-box.js.map +0 -1
  185. package/dist/components/le-button.d.ts +0 -11
  186. package/dist/components/le-button.js +0 -9
  187. package/dist/components/le-button.js.map +0 -1
  188. package/dist/components/le-button2.js +0 -1791
  189. package/dist/components/le-button2.js.map +0 -1
  190. package/dist/components/le-card.d.ts +0 -11
  191. package/dist/components/le-card.js +0 -100
  192. package/dist/components/le-card.js.map +0 -1
  193. package/dist/components/le-checkbox.d.ts +0 -11
  194. package/dist/components/le-checkbox.js +0 -9
  195. package/dist/components/le-checkbox.js.map +0 -1
  196. package/dist/components/le-code-input.d.ts +0 -11
  197. package/dist/components/le-code-input.js +0 -265
  198. package/dist/components/le-code-input.js.map +0 -1
  199. package/dist/components/le-collapse.d.ts +0 -11
  200. package/dist/components/le-collapse.js +0 -9
  201. package/dist/components/le-collapse.js.map +0 -1
  202. package/dist/components/le-collapse2.js +0 -138
  203. package/dist/components/le-collapse2.js.map +0 -1
  204. package/dist/components/le-combobox.d.ts +0 -11
  205. package/dist/components/le-combobox.js +0 -326
  206. package/dist/components/le-combobox.js.map +0 -1
  207. package/dist/components/le-component.d.ts +0 -11
  208. package/dist/components/le-component.js +0 -9
  209. package/dist/components/le-component.js.map +0 -1
  210. package/dist/components/le-current-heading.d.ts +0 -11
  211. package/dist/components/le-current-heading.js +0 -93
  212. package/dist/components/le-current-heading.js.map +0 -1
  213. package/dist/components/le-dropdown-base.d.ts +0 -11
  214. package/dist/components/le-dropdown-base.js +0 -9
  215. package/dist/components/le-dropdown-base.js.map +0 -1
  216. package/dist/components/le-dropdown-base2.js +0 -393
  217. package/dist/components/le-dropdown-base2.js.map +0 -1
  218. package/dist/components/le-header-placeholder.d.ts +0 -11
  219. package/dist/components/le-header-placeholder.js +0 -37
  220. package/dist/components/le-header-placeholder.js.map +0 -1
  221. package/dist/components/le-header.d.ts +0 -11
  222. package/dist/components/le-header.js +0 -349
  223. package/dist/components/le-header.js.map +0 -1
  224. package/dist/components/le-icon.d.ts +0 -11
  225. package/dist/components/le-icon.js +0 -9
  226. package/dist/components/le-icon.js.map +0 -1
  227. package/dist/components/le-icon2.js +0 -150
  228. package/dist/components/le-icon2.js.map +0 -1
  229. package/dist/components/le-multiselect.d.ts +0 -11
  230. package/dist/components/le-multiselect.js +0 -405
  231. package/dist/components/le-multiselect.js.map +0 -1
  232. package/dist/components/le-navigation.d.ts +0 -11
  233. package/dist/components/le-navigation.js +0 -502
  234. package/dist/components/le-navigation.js.map +0 -1
  235. package/dist/components/le-number-input.d.ts +0 -11
  236. package/dist/components/le-number-input.js +0 -288
  237. package/dist/components/le-number-input.js.map +0 -1
  238. package/dist/components/le-popover.d.ts +0 -11
  239. package/dist/components/le-popover.js +0 -9
  240. package/dist/components/le-popover.js.map +0 -1
  241. package/dist/components/le-popover2.js +0 -667
  242. package/dist/components/le-popover2.js.map +0 -1
  243. package/dist/components/le-popup.api.js +0 -106
  244. package/dist/components/le-popup.api.js.map +0 -1
  245. package/dist/components/le-popup.d.ts +0 -11
  246. package/dist/components/le-popup.js +0 -9
  247. package/dist/components/le-popup.js.map +0 -1
  248. package/dist/components/le-round-progress.d.ts +0 -11
  249. package/dist/components/le-round-progress.js +0 -135
  250. package/dist/components/le-round-progress.js.map +0 -1
  251. package/dist/components/le-scroll-progress.d.ts +0 -11
  252. package/dist/components/le-scroll-progress.js +0 -142
  253. package/dist/components/le-scroll-progress.js.map +0 -1
  254. package/dist/components/le-segmented-control.d.ts +0 -11
  255. package/dist/components/le-segmented-control.js +0 -331
  256. package/dist/components/le-segmented-control.js.map +0 -1
  257. package/dist/components/le-select.d.ts +0 -11
  258. package/dist/components/le-select.js +0 -9
  259. package/dist/components/le-select.js.map +0 -1
  260. package/dist/components/le-side-panel-toggle.d.ts +0 -11
  261. package/dist/components/le-side-panel-toggle.js +0 -9
  262. package/dist/components/le-side-panel-toggle.js.map +0 -1
  263. package/dist/components/le-side-panel-toggle2.js +0 -311
  264. package/dist/components/le-side-panel-toggle2.js.map +0 -1
  265. package/dist/components/le-side-panel.d.ts +0 -11
  266. package/dist/components/le-side-panel.js +0 -660
  267. package/dist/components/le-side-panel.js.map +0 -1
  268. package/dist/components/le-slot.d.ts +0 -11
  269. package/dist/components/le-slot.js +0 -9
  270. package/dist/components/le-slot.js.map +0 -1
  271. package/dist/components/le-stack.d.ts +0 -11
  272. package/dist/components/le-stack.js +0 -215
  273. package/dist/components/le-stack.js.map +0 -1
  274. package/dist/components/le-string-input.d.ts +0 -11
  275. package/dist/components/le-string-input.js +0 -9
  276. package/dist/components/le-string-input.js.map +0 -1
  277. package/dist/components/le-tab-bar.d.ts +0 -11
  278. package/dist/components/le-tab-bar.js +0 -330
  279. package/dist/components/le-tab-bar.js.map +0 -1
  280. package/dist/components/le-tab-panel.d.ts +0 -11
  281. package/dist/components/le-tab-panel.js +0 -182
  282. package/dist/components/le-tab-panel.js.map +0 -1
  283. package/dist/components/le-tab.d.ts +0 -11
  284. package/dist/components/le-tab.js +0 -9
  285. package/dist/components/le-tab.js.map +0 -1
  286. package/dist/components/le-tab2.js +0 -220
  287. package/dist/components/le-tab2.js.map +0 -1
  288. package/dist/components/le-tabs.d.ts +0 -11
  289. package/dist/components/le-tabs.js +0 -397
  290. package/dist/components/le-tabs.js.map +0 -1
  291. package/dist/components/le-tag.d.ts +0 -11
  292. package/dist/components/le-tag.js +0 -9
  293. package/dist/components/le-tag.js.map +0 -1
  294. package/dist/components/le-tag2.js +0 -141
  295. package/dist/components/le-tag2.js.map +0 -1
  296. package/dist/components/le-text.d.ts +0 -11
  297. package/dist/components/le-text.js +0 -415
  298. package/dist/components/le-text.js.map +0 -1
  299. package/dist/components/le-turntable.d.ts +0 -11
  300. package/dist/components/le-turntable.js +0 -164
  301. package/dist/components/le-turntable.js.map +0 -1
  302. package/dist/components/utils.js +0 -146
  303. package/dist/components/utils.js.map +0 -1
  304. package/dist/docs.d.ts +0 -443
  305. package/dist/docs.json +0 -14289
  306. package/dist/esm/index-DFTm5BqT.js +0 -1844
  307. package/dist/esm/index-DFTm5BqT.js.map +0 -1
  308. package/dist/esm/index.js +0 -109
  309. package/dist/esm/index.js.map +0 -1
  310. package/dist/esm/le-bar_16.entry.js +0 -3692
  311. package/dist/esm/le-box.entry.js +0 -182
  312. package/dist/esm/le-box.entry.js.map +0 -1
  313. package/dist/esm/le-card.entry.js +0 -27
  314. package/dist/esm/le-card.entry.js.map +0 -1
  315. package/dist/esm/le-code-input.entry.js +0 -179
  316. package/dist/esm/le-code-input.entry.js.map +0 -1
  317. package/dist/esm/le-combobox.entry.js +0 -235
  318. package/dist/esm/le-combobox.entry.js.map +0 -1
  319. package/dist/esm/le-header-placeholder.entry.js +0 -16
  320. package/dist/esm/le-header-placeholder.entry.js.map +0 -1
  321. package/dist/esm/le-kit.js +0 -23
  322. package/dist/esm/le-kit.js.map +0 -1
  323. package/dist/esm/le-multiselect.entry.js +0 -304
  324. package/dist/esm/le-multiselect.entry.js.map +0 -1
  325. package/dist/esm/le-number-input.entry.js +0 -200
  326. package/dist/esm/le-number-input.entry.js.map +0 -1
  327. package/dist/esm/le-round-progress.entry.js +0 -104
  328. package/dist/esm/le-round-progress.entry.js.map +0 -1
  329. package/dist/esm/le-segmented-control.entry.js +0 -243
  330. package/dist/esm/le-segmented-control.entry.js.map +0 -1
  331. package/dist/esm/le-side-panel-toggle.entry.js +0 -227
  332. package/dist/esm/le-side-panel-toggle.entry.js.map +0 -1
  333. package/dist/esm/le-side-panel.entry.js +0 -544
  334. package/dist/esm/le-side-panel.entry.js.map +0 -1
  335. package/dist/esm/le-stack.entry.js +0 -133
  336. package/dist/esm/le-stack.entry.js.map +0 -1
  337. package/dist/esm/le-tab-bar.entry.js +0 -240
  338. package/dist/esm/le-tab-bar.entry.js.map +0 -1
  339. package/dist/esm/le-tab-panel.entry.js +0 -98
  340. package/dist/esm/le-tab-panel.entry.js.map +0 -1
  341. package/dist/esm/le-tab.entry.js +0 -134
  342. package/dist/esm/le-tab.entry.js.map +0 -1
  343. package/dist/esm/le-tabs.entry.js +0 -305
  344. package/dist/esm/le-tabs.entry.js.map +0 -1
  345. package/dist/esm/le-tag.entry.js +0 -66
  346. package/dist/esm/le-tag.entry.js.map +0 -1
  347. package/dist/esm/le-text.entry.js +0 -333
  348. package/dist/esm/le-text.entry.js.map +0 -1
  349. package/dist/esm/le-turntable.entry.js +0 -137
  350. package/dist/esm/le-turntable.entry.js.map +0 -1
  351. package/dist/esm/loader.js +0 -13
  352. package/dist/esm/loader.js.map +0 -1
  353. package/dist/esm/utils-DZYCZLrF.js +0 -146
  354. package/dist/esm/utils-DZYCZLrF.js.map +0 -1
  355. package/dist/index.cjs.js +0 -1
  356. package/dist/index.js +0 -1
  357. package/dist/le-kit/dist/components/assets/custom-elements.json +0 -11935
  358. package/dist/le-kit/dist/components/assets/icons/chevron-down.json +0 -13
  359. package/dist/le-kit/dist/components/assets/icons/chevron-down.svg +0 -3
  360. package/dist/le-kit/dist/components/assets/icons/ellipsis-horizontal.json +0 -14
  361. package/dist/le-kit/dist/components/assets/icons/ellipsis-vertical.json +0 -14
  362. package/dist/le-kit/dist/components/assets/icons/hamburger.json +0 -14
  363. package/dist/le-kit/dist/components/assets/icons/side-panel.json +0 -61
  364. package/dist/le-kit/dist/themes/base.css +0 -89
  365. package/dist/le-kit/dist/themes/dark.css +0 -104
  366. package/dist/le-kit/dist/themes/default.css +0 -112
  367. package/dist/le-kit/dist/themes/gradient.css +0 -104
  368. package/dist/le-kit/dist/themes/index.css +0 -76
  369. package/dist/le-kit/dist/themes/minimal.css +0 -104
  370. package/dist/le-kit/dist/themes/warm.css +0 -104
  371. package/dist/le-kit/index.esm.js +0 -2
  372. package/dist/le-kit/index.esm.js.map +0 -1
  373. package/dist/le-kit/le-kit.css +0 -1
  374. package/dist/le-kit/le-kit.esm.js +0 -2
  375. package/dist/le-kit/le-kit.esm.js.map +0 -1
  376. package/dist/le-kit/loader.esm.js.map +0 -1
  377. package/dist/le-kit/p-221d379a.entry.js +0 -2
  378. package/dist/le-kit/p-221d379a.entry.js.map +0 -1
  379. package/dist/le-kit/p-24112ca3.entry.js +0 -2
  380. package/dist/le-kit/p-24112ca3.entry.js.map +0 -1
  381. package/dist/le-kit/p-2c6d080d.entry.js +0 -2
  382. package/dist/le-kit/p-2c6d080d.entry.js.map +0 -1
  383. package/dist/le-kit/p-46276e77.entry.js +0 -2
  384. package/dist/le-kit/p-46276e77.entry.js.map +0 -1
  385. package/dist/le-kit/p-516c8531.entry.js +0 -2
  386. package/dist/le-kit/p-516c8531.entry.js.map +0 -1
  387. package/dist/le-kit/p-6ae60ba5.entry.js +0 -2
  388. package/dist/le-kit/p-6ae60ba5.entry.js.map +0 -1
  389. package/dist/le-kit/p-6b69f9a2.entry.js +0 -2
  390. package/dist/le-kit/p-6b69f9a2.entry.js.map +0 -1
  391. package/dist/le-kit/p-6d14306f.entry.js +0 -2
  392. package/dist/le-kit/p-6d14306f.entry.js.map +0 -1
  393. package/dist/le-kit/p-7bcdf2d4.entry.js +0 -2
  394. package/dist/le-kit/p-7bcdf2d4.entry.js.map +0 -1
  395. package/dist/le-kit/p-7cf1e23c.entry.js +0 -2
  396. package/dist/le-kit/p-7cf1e23c.entry.js.map +0 -1
  397. package/dist/le-kit/p-85f2fd4d.entry.js +0 -2
  398. package/dist/le-kit/p-85f2fd4d.entry.js.map +0 -1
  399. package/dist/le-kit/p-98242429.entry.js +0 -2
  400. package/dist/le-kit/p-98242429.entry.js.map +0 -1
  401. package/dist/le-kit/p-D8RYDS9p.js +0 -2
  402. package/dist/le-kit/p-D8RYDS9p.js.map +0 -1
  403. package/dist/le-kit/p-DFTm5BqT.js +0 -3
  404. package/dist/le-kit/p-DFTm5BqT.js.map +0 -1
  405. package/dist/le-kit/p-ab6c1def.entry.js +0 -2
  406. package/dist/le-kit/p-ab6c1def.entry.js.map +0 -1
  407. package/dist/le-kit/p-ae4ead64.entry.js +0 -2
  408. package/dist/le-kit/p-ae4ead64.entry.js.map +0 -1
  409. package/dist/le-kit/p-b05d4511.entry.js +0 -2
  410. package/dist/le-kit/p-b05d4511.entry.js.map +0 -1
  411. package/dist/le-kit/p-b6ac02ff.entry.js +0 -2
  412. package/dist/le-kit/p-b6ac02ff.entry.js.map +0 -1
  413. package/dist/le-kit/p-c24769e2.entry.js +0 -2
  414. package/dist/le-kit/p-c24769e2.entry.js.map +0 -1
  415. package/dist/le-kit/p-dc0445ad.entry.js +0 -2
  416. package/dist/le-kit/p-dc0445ad.entry.js.map +0 -1
  417. package/dist/le-kit/p-eb5286f2.entry.js +0 -2
  418. package/dist/le-kit/p-eb5286f2.entry.js.map +0 -1
  419. package/dist/le-kit/p-f78b1ee6.entry.js +0 -2
  420. package/dist/le-kit/p-f78b1ee6.entry.js.map +0 -1
  421. package/dist/themes/base.css +0 -89
  422. package/dist/themes/dark.css +0 -104
  423. package/dist/themes/default.css +0 -112
  424. package/dist/themes/gradient.css +0 -104
  425. package/dist/themes/index.css +0 -76
  426. package/dist/themes/minimal.css +0 -104
  427. package/dist/themes/warm.css +0 -104
  428. package/dist/types/components/le-bar/le-bar.d.ts +0 -131
  429. package/dist/types/components/le-box/le-box.d.ts +0 -111
  430. package/dist/types/components/le-button/le-button.d.ts +0 -93
  431. package/dist/types/components/le-card/le-card.d.ts +0 -37
  432. package/dist/types/components/le-checkbox/le-checkbox.d.ts +0 -46
  433. package/dist/types/components/le-code-input/le-code-input.d.ts +0 -102
  434. package/dist/types/components/le-collapse/le-collapse.d.ts +0 -43
  435. package/dist/types/components/le-combobox/le-combobox.d.ts +0 -128
  436. package/dist/types/components/le-component/le-component.d.ts +0 -115
  437. package/dist/types/components/le-current-heading/le-current-heading.d.ts +0 -25
  438. package/dist/types/components/le-dropdown-base/le-dropdown-base.d.ts +0 -118
  439. package/dist/types/components/le-header/le-header.d.ts +0 -115
  440. package/dist/types/components/le-header-placeholder/le-header-placeholder.d.ts +0 -13
  441. package/dist/types/components/le-icon/le-icon.d.ts +0 -28
  442. package/dist/types/components/le-multiselect/le-multiselect.d.ts +0 -143
  443. package/dist/types/components/le-navigation/le-navigation.d.ts +0 -125
  444. package/dist/types/components/le-number-input/le-number-input.d.ts +0 -106
  445. package/dist/types/components/le-popover/le-popover.d.ts +0 -129
  446. package/dist/types/components/le-popup/le-popup.api.d.ts +0 -73
  447. package/dist/types/components/le-popup/le-popup.d.ts +0 -127
  448. package/dist/types/components/le-round-progress/le-round-progress.d.ts +0 -37
  449. package/dist/types/components/le-scroll-progress/le-scroll-progress.d.ts +0 -40
  450. package/dist/types/components/le-segmented-control/le-segmented-control.d.ts +0 -82
  451. package/dist/types/components/le-select/le-select.d.ts +0 -125
  452. package/dist/types/components/le-side-panel/le-side-panel.d.ts +0 -100
  453. package/dist/types/components/le-side-panel-toggle/le-side-panel-toggle.d.ts +0 -48
  454. package/dist/types/components/le-slot/le-slot.d.ts +0 -149
  455. package/dist/types/components/le-stack/le-stack.d.ts +0 -73
  456. package/dist/types/components/le-string-input/le-string-input.d.ts +0 -91
  457. package/dist/types/components/le-tab/le-tab.d.ts +0 -116
  458. package/dist/types/components/le-tab-bar/le-tab-bar.d.ts +0 -88
  459. package/dist/types/components/le-tab-panel/le-tab-panel.d.ts +0 -75
  460. package/dist/types/components/le-tabs/le-tabs.d.ts +0 -108
  461. package/dist/types/components/le-tag/le-tag.d.ts +0 -78
  462. package/dist/types/components/le-text/le-text.d.ts +0 -141
  463. package/dist/types/components/le-turntable/le-turntable.d.ts +0 -55
  464. package/dist/types/components.d.ts +0 -5716
  465. package/dist/types/global/app.d.ts +0 -96
  466. package/dist/types/index.d.ts +0 -16
  467. package/dist/types/stencil-public-runtime.d.ts +0 -1799
  468. package/dist/types/types/blocks.d.ts +0 -136
  469. package/dist/types/types/options.d.ts +0 -143
  470. package/dist/types/utils/utils.d.ts +0 -54
  471. package/loader/cdn.js +0 -1
  472. package/loader/index.cjs.js +0 -1
  473. package/loader/index.d.ts +0 -24
  474. package/loader/index.es2017.js +0 -1
  475. package/loader/index.js +0 -2
@@ -1,1791 +0,0 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, transformTag, getAssetPath, Host, Fragment } from '@stencil/core/internal/client';
2
- import { c as classnames, o as observeModeChanges } from './utils.js';
3
- import { d as getLeKitConfig } from './app.js';
4
- import { a as leConfirm } from './le-popup.api.js';
5
- import { d as defineCustomElement$8 } from './le-dropdown-base2.js';
6
- import { d as defineCustomElement$7 } from './le-popover2.js';
7
-
8
- const leStringInputCss = () => `:host{display:block;--le-input-bg:var(--le-color-surface, #ffffff);--le-input-color:var(--le-color-text-primary, #333333);--le-input-border:var(--le-border-width, 2px) solid var(--le-color-border-input, #007bff);--le-input-radius:var(--le-radius-sm, 4px);--le-input-padding:2px 6px;--le-input-height:1.5rem;--le-input-label-color:var(--le-color-text-primary, #333333);--le-input-desc-color:var(--le-color-text-secondary, #666666);--le-input-placeholder-color:#999999}.le-input-wrapper{display:flex;flex-direction:column;gap:2px}.le-input-label{display:block;font-size:0.9em;font-weight:500;color:var(--le-input-label-color);margin-bottom:2px}.le-input-container{position:relative;display:flex;align-items:center;background:var(--le-input-bg);border:var(--le-input-border);border-radius:var(--le-input-radius);transition:border-color 0.2s}.le-input-container:focus-within{outline:2px solid var(--le-color-focus);outline-offset:2px}:host([disabled]) .le-input-container{opacity:0.6;background-color:rgba(0,0,0,0.05);cursor:not-allowed}input{flex:1;min-height:var(--le-input-height);padding:var(--le-input-padding);border:none;background:transparent;color:var(--le-input-color);font-family:inherit;font-size:inherit;outline:none;width:100%}input::placeholder{color:var(--le-input-placeholder-color)}.icon-start,.icon-end{display:flex;align-items:center;justify-content:center;padding:0 8px;color:var(--le-input-desc-color)}.le-input-description{font-size:0.85em;color:var(--le-input-desc-color);margin-top:2px}.le-input-description::has(le-slot>slot[name=description]:empty){display:none}`;
9
-
10
- const LeStringInput = /*@__PURE__*/ proxyCustomElement(class LeStringInput extends HTMLElement {
11
- constructor(registerHost) {
12
- super();
13
- if (registerHost !== false) {
14
- this.__registerHost();
15
- }
16
- this.__attachShadow();
17
- this.leChange = createEvent(this, "change", 7);
18
- this.leInput = createEvent(this, "input", 7);
19
- }
20
- get el() { return this; }
21
- /**
22
- * Pass the ref of the input element to the parent component
23
- */
24
- inputRef;
25
- /**
26
- * Mode of the popover should be 'default' for internal use
27
- */
28
- mode;
29
- /**
30
- * The value of the input
31
- */
32
- value;
33
- /**
34
- * The name of the input
35
- */
36
- name;
37
- /**
38
- * The type of the input (text, email, password, etc.)
39
- */
40
- type = 'text';
41
- /**
42
- * Label for the input
43
- */
44
- label;
45
- /**
46
- * Icon for the start icon
47
- */
48
- iconStart;
49
- /**
50
- * Icon for the end icon
51
- */
52
- iconEnd;
53
- /**
54
- * Placeholder text
55
- */
56
- placeholder;
57
- /**
58
- * Hide description slot
59
- */
60
- hideDescription = false;
61
- /**
62
- * Whether the input is disabled
63
- */
64
- disabled = false;
65
- /**
66
- * Whether the input is read-only
67
- */
68
- readonly = false;
69
- /**
70
- * External ID for linking with external systems
71
- */
72
- externalId;
73
- /**
74
- * Emitted when the value changes (on blur or Enter)
75
- */
76
- leChange;
77
- /**
78
- * Emitted when the input value changes (on keystroke)
79
- */
80
- leInput;
81
- handleInput = (ev) => {
82
- const input = ev.target;
83
- this.value = input.value;
84
- this.leInput.emit({
85
- value: this.value,
86
- name: this.name,
87
- externalId: this.externalId,
88
- });
89
- };
90
- handleChange = (ev) => {
91
- const input = ev.target;
92
- this.value = input.value;
93
- this.leChange.emit({
94
- value: this.value,
95
- name: this.name,
96
- externalId: this.externalId,
97
- });
98
- };
99
- handleClick = (ev) => {
100
- ev.stopPropagation();
101
- };
102
- render() {
103
- return (h("le-component", { key: '385fe7607d573ab4cfe81315f74e650f8e57faa1', component: "le-string-input", hostClass: classnames({ disabled: this.disabled }) }, h("div", { key: 'a36c5a32238eb6c9c574aeb3955343e042d89225', class: "le-input-wrapper" }, this.label && (h("label", { key: 'c1ff01932ada19ecea0cd2e2b477615d0c873ff0', class: "le-input-label", htmlFor: this.name }, this.label)), h("div", { key: '7c8909ed5e4e3404a2900a3f9beef8b0f331d62c', class: "le-input-container", part: "container" }, this.iconStart && h("span", { key: 'cf7e7355e22de3100bade2399ba63702731350e0', class: "icon-start" }, this.iconStart), h("input", { key: '6d71245d395f6cd2c55110ca902fc0374c74026b', ref: el => {
104
- if (this.inputRef) {
105
- this.inputRef(el);
106
- }
107
- }, id: this.name, type: this.type, name: this.name, value: this.value, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput, onChange: this.handleChange, onClick: this.handleClick }), this.iconEnd && h("span", { key: 'e086f9559b086212be3cd231b7c870cdb229a733', class: "icon-end" }, this.iconEnd)), !this.hideDescription && (h("div", { key: '531ac78b43382166023a79475152345956188bcc', class: "le-input-description" }, h("le-slot", { key: '38700e86adc0c3bf049b0ad828d14993ddef7844', name: "description", type: "text", tag: "p", label: "Description" }, h("slot", { key: 'c2982e93304a872ec79446fe525eb5448e764401', name: "description" })))))));
108
- }
109
- static get style() { return leStringInputCss(); }
110
- }, [769, "le-string-input", {
111
- "inputRef": [16],
112
- "mode": [1537],
113
- "value": [1537],
114
- "name": [1],
115
- "type": [1],
116
- "label": [1],
117
- "iconStart": [1, "icon-start"],
118
- "iconEnd": [1, "icon-end"],
119
- "placeholder": [1],
120
- "hideDescription": [4, "hide-description"],
121
- "disabled": [4],
122
- "readonly": [4],
123
- "externalId": [1, "external-id"]
124
- }]);
125
- function defineCustomElement$6() {
126
- if (typeof customElements === "undefined") {
127
- return;
128
- }
129
- const components = ["le-string-input", "le-button", "le-checkbox", "le-component", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
130
- components.forEach(tagName => { switch (tagName) {
131
- case "le-string-input":
132
- if (!customElements.get(transformTag(tagName))) {
133
- customElements.define(transformTag(tagName), LeStringInput);
134
- }
135
- break;
136
- case "le-button":
137
- if (!customElements.get(transformTag(tagName))) {
138
- defineCustomElement();
139
- }
140
- break;
141
- case "le-checkbox":
142
- if (!customElements.get(transformTag(tagName))) {
143
- defineCustomElement$1();
144
- }
145
- break;
146
- case "le-component":
147
- if (!customElements.get(transformTag(tagName))) {
148
- defineCustomElement$2();
149
- }
150
- break;
151
- case "le-popover":
152
- if (!customElements.get(transformTag(tagName))) {
153
- defineCustomElement$7();
154
- }
155
- break;
156
- case "le-popup":
157
- if (!customElements.get(transformTag(tagName))) {
158
- defineCustomElement$3();
159
- }
160
- break;
161
- case "le-select":
162
- if (!customElements.get(transformTag(tagName))) {
163
- defineCustomElement$4();
164
- }
165
- break;
166
- case "le-slot":
167
- if (!customElements.get(transformTag(tagName))) {
168
- defineCustomElement$5();
169
- }
170
- break;
171
- case "le-string-input":
172
- if (!customElements.get(transformTag(tagName))) {
173
- defineCustomElement$6();
174
- }
175
- break;
176
- } });
177
- }
178
-
179
- const leSlotDefaultCss = () => `:host{display:contents;--le-slot-border-color:#0088ff;--le-slot-bg-color:rgba(0, 136, 255, 0.05);--le-slot-header-bg:rgb(218, 238, 255);--le-slot-label-color:#0066cc;--le-slot-description-color:#666;--le-slot-required-color:#e53935;--le-slot-dropzone-min-height:20px;--le-slot-dropzone-border-color:#ccc}.le-slot-container,.le-slot-header,.le-slot-description,.le-slot-dropzone,.le-slot-input{display:none}.hidden-slot{display:none}:host(.admin-mode){display:block;flex:1}:host(.admin-mode) .le-slot-container{position:relative;display:flex;flex-direction:column;border:2px dashed var(--le-slot-border-color);border-radius:4px;background:var(--le-slot-bg-color);margin:4px 0}:host(.admin-mode) .le-slot-header{display:flex;align-items:center;gap:4px;padding:0 0 0 var(--le-spacing-1, 4px);background:var(--le-slot-header-bg);border-bottom:1px solid var(--le-slot-border-color);font-size:var(--le-font-size-xs, 11px);font-weight:400;text-transform:capitalize}:host(.admin-mode) .le-slot-header-no-label{justify-content:flex-end;height:16px;border:none;background-color:transparent}.le-slot-label{color:var(--le-slot-label-color);text-align:start;overflow:hidden;width:0;flex:1 1 0%}.le-slot-required{color:var(--le-slot-required-color);font-weight:bold}:host(.admin-mode) .le-slot-description{display:block;padding:4px 8px;font-size:12px;color:var(--le-slot-description-color);font-style:italic}:host(.admin-mode) .le-slot-description-icon{display:inline-block;font-size:9px;line-height:1;cursor:pointer;color:var(--le-slot-description-color)}:host(.admin-mode) .le-slot-dropzone{display:block;min-height:var(--le-slot-dropzone-min-height);padding:var(--le-spacing-1, 4px);position:relative}:host(.admin-mode) .le-slot-dropzone:empty::before{content:'Drop content here';display:flex;align-items:center;justify-content:center;position:absolute;inset:8px;border:2px dashed var(--le-slot-dropzone-border-color);border-radius:4px;color:#999;font-size:12px;pointer-events:none}:host(.admin-mode.drag-over) .le-slot-container{border-color:#00cc66;background:rgba(0, 204, 102, 0.1)}:host(.admin-mode.drag-over) .le-slot-dropzone:empty::before{border-color:#00cc66;color:#00cc66;content:'Release to drop'}:host(.admin-mode) .le-slot-input{display:block;padding:var(--le-spacing-1, 4px)}:host(.admin-mode) .le-slot-input input,:host(.admin-mode) .le-slot-input textarea{display:block;width:100%;padding:8px 10px;border:1px solid var(--le-slot-dropzone-border-color);border-radius:4px;font-family:inherit;font-size:14px;line-height:1.4;background:#fff;color:#333;box-sizing:border-box;transition:border-color 0.2s, box-shadow 0.2s}:host(.admin-mode) .le-slot-input input:focus,:host(.admin-mode) .le-slot-input textarea:focus{outline:none;border-color:var(--le-slot-border-color);box-shadow:0 0 0 3px rgba(0, 136, 255, 0.15)}:host(.admin-mode) .le-slot-input input::placeholder,:host(.admin-mode) .le-slot-input textarea::placeholder{color:#999}:host(.admin-mode) .le-slot-input textarea{resize:vertical;min-height:60px}:host(.admin-mode) .le-slot-input slot{display:none}.le-slot-invalid{color:var(--le-slot-required-color);font-size:10px;margin-left:auto;font-weight:normal;text-transform:none}:host(.admin-mode) .le-slot-input.has-error input,:host(.admin-mode) .le-slot-input.has-error textarea{border-color:var(--le-slot-required-color);background:rgba(229, 57, 53, 0.05)}:host(.admin-mode) .le-slot-input.has-error input:focus,:host(.admin-mode) .le-slot-input.has-error textarea:focus{border-color:var(--le-slot-required-color);box-shadow:0 0 0 3px rgba(229, 57, 53, 0.15)}.le-slot-add-btn{font-size:24px;line-height:0px;width:12px;height:12px}.le-slot-header-no-label .le-slot-add-btn{font-size:16px}.le-slot-button{width:20px;height:20px}:host(.admin-mode) .le-slot-header-no-label.le-slot-header-text{height:0}`;
180
-
181
- const LeSlot = /*@__PURE__*/ proxyCustomElement(class LeSlot extends HTMLElement {
182
- constructor(registerHost) {
183
- super();
184
- if (registerHost !== false) {
185
- this.__registerHost();
186
- }
187
- this.__attachShadow();
188
- this.leSlotChange = createEvent(this, "leSlotChange", 7);
189
- }
190
- get el() { return this; }
191
- /**
192
- * The type of slot content.
193
- * - `slot`: Default, shows a dropzone for components (default)
194
- * - `text`: Shows a single-line text input
195
- * - `textarea`: Shows a multi-line text area
196
- */
197
- type = 'slot';
198
- /**
199
- * The name of the slot this placeholder represents.
200
- * Should match the slot name in the parent component.
201
- */
202
- name = '';
203
- /**
204
- * Label to display in admin mode.
205
- * If not provided, the slot name will be used.
206
- */
207
- label;
208
- /**
209
- * Description of what content this slot accepts.
210
- * Shown in admin mode to guide content editors.
211
- */
212
- description;
213
- /**
214
- * Comma-separated list of allowed component tags for this slot.
215
- * Used by CMS to filter available components.
216
- *
217
- * @example "le-card,le-button,le-text"
218
- */
219
- allowedComponents;
220
- /**
221
- * Whether multiple components can be dropped in this slot.
222
- */
223
- multiple = true;
224
- /**
225
- * Whether this slot is required to have content.
226
- */
227
- required = false;
228
- /**
229
- * Placeholder text for text/textarea inputs in admin mode.
230
- */
231
- placeholder;
232
- /**
233
- * The HTML tag to create when there's no slotted element.
234
- * Used with type="text" or type="textarea" to auto-create elements.
235
- *
236
- * @example "h3" - creates <h3 slot="header">content</h3>
237
- * @example "p" - creates <p slot="content">content</p>
238
- */
239
- tag;
240
- /**
241
- * CSS styles for the slot dropzone container.
242
- * Useful for layouts - e.g., "flex-direction: row" for horizontal stacks.
243
- * Only applies in admin mode for type="slot".
244
- */
245
- slotStyle;
246
- /**
247
- * Internal state to track admin mode
248
- */
249
- adminMode = false;
250
- /**
251
- * Internal state for text input value (synced from slot content)
252
- */
253
- textValue = '';
254
- /**
255
- * Whether the current textValue contains valid HTML
256
- */
257
- isValidHtml = true;
258
- /**
259
- * Available components loaded from Custom Elements Manifest
260
- */
261
- availableComponents = [];
262
- /**
263
- * Whether the component picker popover is open
264
- */
265
- pickerOpen = false;
266
- /**
267
- * Reference to the slot element to access assignedNodes
268
- */
269
- slotRef;
270
- /**
271
- * The original slotted element (e.g., <h3 slot="header">)
272
- */
273
- slottedElement;
274
- /**
275
- * Emitted when text content changes in admin mode.
276
- * The event detail contains the new text value and validity.
277
- */
278
- leSlotChange;
279
- disconnectModeObserver;
280
- connectedCallback() {
281
- this.disconnectModeObserver = observeModeChanges(this.el, mode => {
282
- const wasAdmin = this.adminMode;
283
- this.adminMode = mode === 'admin';
284
- // When entering admin mode, read content from slotted elements
285
- if (this.adminMode && !wasAdmin) {
286
- // Need to wait for render to access slot ref
287
- requestAnimationFrame(() => this.readSlottedContent());
288
- // Load available components for the component picker
289
- if (this.type === 'slot') {
290
- this.loadAvailableComponents();
291
- }
292
- }
293
- });
294
- }
295
- disconnectedCallback() {
296
- this.disconnectModeObserver?.();
297
- }
298
- /**
299
- * Flag to prevent re-reading content right after we updated it
300
- */
301
- isUpdating = false;
302
- /**
303
- * Read content from slotted elements via assignedNodes()
304
- */
305
- readSlottedContent() {
306
- if (!this.slotRef)
307
- return;
308
- // Skip if we just updated the content ourselves
309
- if (this.isUpdating) {
310
- this.isUpdating = false;
311
- return;
312
- }
313
- const assignedNodes = this.slotRef.assignedNodes({ flatten: true });
314
- // For text/textarea types, we want to edit the innerHTML of slotted elements
315
- if (this.type === 'text' || this.type === 'textarea') {
316
- // Find the first element node (skip text nodes that are just whitespace)
317
- const elementNode = assignedNodes.find(node => node.nodeType === Node.ELEMENT_NODE);
318
- if (elementNode) {
319
- // Only update textValue if slotted element changed or we don't have one yet
320
- if (this.slottedElement !== elementNode) {
321
- this.slottedElement = elementNode;
322
- this.textValue = elementNode.innerHTML?.trim() || '';
323
- // console.log(`[le-slot "${this.name}"] Read slotted content:`, this.textValue);
324
- }
325
- }
326
- else {
327
- // No element, check for direct text content
328
- const textContent = assignedNodes
329
- .filter(node => node.nodeType === Node.TEXT_NODE)
330
- .map(node => node.textContent)
331
- .join('')
332
- .trim();
333
- if (textContent && !this.textValue) {
334
- this.textValue = textContent;
335
- // console.log(`[le-slot "${this.name}"] Read text content:`, this.textValue);
336
- }
337
- }
338
- }
339
- }
340
- /**
341
- * Validates if a string contains valid HTML
342
- */
343
- validateHtml(html) {
344
- // Empty string is valid
345
- if (!html.trim())
346
- return true;
347
- // Create a template element to parse the HTML
348
- const template = document.createElement('template');
349
- template.innerHTML = html;
350
- // Check that we don't have obviously broken HTML
351
- // Count opening and closing tags for common elements
352
- const openTags = (html.match(/<[a-z][^>]*(?<!\/)>/gi) || []).length;
353
- const closeTags = (html.match(/<\/[a-z][^>]*>/gi) || []).length;
354
- const selfClosing = (html.match(/<[a-z][^>]*\/>/gi) || []).length;
355
- // Simple validation: opening tags (minus self-closing) should roughly match closing tags
356
- // Allow some tolerance for void elements like <br>, <img>, etc.
357
- const voidElements = (html.match(/<(br|hr|img|input|meta|link|area|base|col|embed|param|source|track|wbr)[^>]*>/gi) || []).length;
358
- const effectiveOpenTags = openTags - selfClosing - voidElements;
359
- // If difference is too large, HTML is likely broken
360
- if (Math.abs(effectiveOpenTags - closeTags) > 1) {
361
- return false;
362
- }
363
- return true;
364
- }
365
- handleTextInput = (event) => {
366
- const target = event.target;
367
- this.textValue = target.value;
368
- this.isValidHtml = this.validateHtml(this.textValue);
369
- if (this.isValidHtml) {
370
- // Set flag to prevent slotchange from re-reading what we just wrote
371
- this.isUpdating = true;
372
- console.log('Updating text value:', this.textValue, 'slottedElement:', this.slottedElement);
373
- if (this.slottedElement) {
374
- // Update existing slotted element's innerHTML
375
- this.slottedElement.innerHTML = this.textValue;
376
- }
377
- else if (this.tag && this.textValue) {
378
- // No slotted element exists
379
- // If the slot doesn't have a name, then it's the default slot
380
- // remove the existing non-slotted content (text nodes and elements without slot attribute)
381
- const rootNode = this.el.getRootNode();
382
- if (!this.name && rootNode instanceof ShadowRoot) {
383
- const hostComponent = rootNode.host;
384
- Array.from(hostComponent.childNodes).forEach(node => {
385
- if (node.nodeType === Node.TEXT_NODE || (node.nodeType === Node.ELEMENT_NODE && !node.hasAttribute('slot'))) {
386
- node.remove();
387
- }
388
- });
389
- }
390
- // create one using the specified tag
391
- this.createSlottedElement();
392
- }
393
- else if (this.textValue) {
394
- // no tag specified - just replace everything in the host component
395
- const rootNode = this.el.getRootNode();
396
- if (rootNode instanceof ShadowRoot) {
397
- const hostComponent = rootNode.host;
398
- hostComponent.innerHTML = this.textValue;
399
- }
400
- }
401
- }
402
- this.leSlotChange.emit({
403
- name: this.name,
404
- value: this.textValue,
405
- isValid: this.isValidHtml,
406
- });
407
- };
408
- /**
409
- * Create a new slotted element when none exists.
410
- * The element is appended to the host component's light DOM.
411
- */
412
- createSlottedElement() {
413
- if (!this.tag)
414
- return;
415
- // Find the host component (le-card, etc.) by traversing up through shadow DOM
416
- // le-slot is inside le-card's shadow DOM, so we need to find le-card's host
417
- const rootNode = this.el.getRootNode();
418
- if (!(rootNode instanceof ShadowRoot))
419
- return;
420
- const hostComponent = rootNode.host;
421
- if (!hostComponent)
422
- return;
423
- // Create the new element
424
- const newElement = document.createElement(this.tag);
425
- newElement.innerHTML = this.textValue;
426
- // Set the slot attribute if this is a named slot
427
- if (this.name) {
428
- newElement.setAttribute('slot', this.name);
429
- }
430
- // Append to the host component's light DOM
431
- hostComponent.appendChild(newElement);
432
- // Store reference to the new element
433
- this.slottedElement = newElement;
434
- // console.log(`[le-slot "${this.name}"] Created new <${this.tag}> element`);
435
- }
436
- /**
437
- * Load available components from Custom Elements Manifest
438
- */
439
- async loadAvailableComponents() {
440
- try {
441
- const { manifestFile } = getLeKitConfig();
442
- const manifestFileResolved = getAssetPath(`./assets/${manifestFile}`);
443
- const response = await fetch(manifestFileResolved);
444
- const manifest = await response.json();
445
- const components = [];
446
- const allowedList = this.allowedComponents?.split(',').map(s => s.trim()) || [];
447
- for (const module of manifest.modules) {
448
- for (const declaration of module.declarations || []) {
449
- if (declaration.tagName && declaration.customElement) {
450
- // Skip internal components (le-slot, le-component, le-popover)
451
- const isInternal = ['le-slot', 'le-component', 'le-popover'].includes(declaration.tagName);
452
- if (isInternal)
453
- continue;
454
- // If allowedComponents is specified, filter by it
455
- if (allowedList.length > 0 && !allowedList.includes(declaration.tagName)) {
456
- continue;
457
- }
458
- components.push({
459
- tagName: declaration.tagName,
460
- name: this.formatComponentName(declaration.tagName),
461
- description: declaration.description || '',
462
- });
463
- }
464
- }
465
- }
466
- this.availableComponents = components || [];
467
- }
468
- catch (error) {
469
- console.warn('[le-slot] Failed to load component manifest:', error);
470
- }
471
- }
472
- /**
473
- * Format a tag name into a display name
474
- * e.g., 'le-card' -> 'Card'
475
- */
476
- formatComponentName(tagName) {
477
- return tagName
478
- .replace(/^le-/, '')
479
- .split('-')
480
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
481
- .join(' ');
482
- }
483
- /**
484
- * Add a new component to the slot
485
- */
486
- addComponent(tagName) {
487
- // Find the host component by traversing up through shadow DOM
488
- const rootNode = this.el.getRootNode();
489
- if (!(rootNode instanceof ShadowRoot))
490
- return;
491
- const hostComponent = rootNode.host;
492
- if (!hostComponent)
493
- return;
494
- // Create the new component element
495
- const newElement = document.createElement(tagName);
496
- // Set the slot attribute if this is a named slot
497
- if (this.name) {
498
- newElement.setAttribute('slot', this.name);
499
- }
500
- // Append to the host component's light DOM
501
- hostComponent.appendChild(newElement);
502
- // Emit change event so the page can save
503
- this.leSlotChange.emit({
504
- name: this.name,
505
- value: hostComponent.innerHTML,
506
- isValid: true,
507
- });
508
- }
509
- /**
510
- * Handle slot change event to re-read content when nodes are assigned
511
- */
512
- handleSlotChange = () => {
513
- this.readSlottedContent();
514
- };
515
- render() {
516
- const displayLabel = this.label || this.name;
517
- // Always render the same structure, CSS handles visibility via .admin-mode class
518
- return (h(Host, { key: '8a48f7865340d9a2e201a2f878b2f1c66c55d86c', class: {
519
- 'admin-mode': this.adminMode,
520
- 'invalid-html': !this.isValidHtml,
521
- }, role: this.adminMode ? 'region' : undefined, "aria-label": this.adminMode ? `Slot: ${displayLabel}` : undefined, "data-slot-name": this.name, "data-slot-type": this.type, "data-allowed": this.allowedComponents, "data-multiple": this.multiple, "data-required": this.required }, this.adminMode ? (h("div", { class: "le-slot-container" }, h("div", { class: classnames('le-slot-header', {
522
- 'le-slot-header-no-label': !displayLabel,
523
- 'le-slot-header-text': this.type === 'text',
524
- 'le-slot-header-error': !this.isValidHtml,
525
- }) }, displayLabel && (h("span", { class: "le-slot-label" }, displayLabel, this.required && h("span", { class: "le-slot-required" }, "*"))), !this.isValidHtml && h("span", { class: "le-slot-invalid" }, "\u26A0 Invalid HTML"), this.type === 'slot' && this.adminMode && (h("le-popover", { mode: "default", showClose: true, align: "start", position: "right", popoverTitle: "Add Component", open: this.pickerOpen, onLePopoverOpen: () => (this.pickerOpen = true), onLePopoverClose: () => (this.pickerOpen = false) }, h("le-button", { type: "button", class: "le-slot-button", slot: "trigger", variant: "clear", size: "small", "aria-label": "Add component", "icon-only": true }, h("span", { class: "le-slot-add-btn", slot: "icon-only" }, "+")), h("div", { class: "le-slot-picker" }, this.availableComponents.length > 0 ? (h("ul", { class: "le-slot-picker-list" }, this.availableComponents.map(component => (h("li", { key: component.tagName }, h("button", { class: "le-slot-picker-item", onClick: () => {
526
- this.addComponent(component.tagName);
527
- this.pickerOpen = false;
528
- } }, h("span", { class: "le-slot-picker-name" }, component.name), component.description && h("span", { class: "le-slot-picker-desc" }, component.description))))))) : (h("div", { class: "le-slot-picker-empty" }, "No components available")))))), this.renderContent())) : (
529
- // In default mode, just pass through the slot - slotted content renders naturally
530
- // Note: We use unnamed slot here because named slots from parent component
531
- // are passed as le-slot's light DOM children
532
- h("slot", null))));
533
- }
534
- renderContent() {
535
- // Create the slot element with ref for reading assignedNodes
536
- // Wrap in a hidden div since slot elements can't have style prop in Stencil
537
- // Note: We use unnamed slot here because named slots from parent component
538
- // are passed as le-slot's light DOM children
539
- const slotElement = (h("div", { class: "hidden-slot" }, h("slot", { ref: el => (this.slotRef = el), onSlotchange: this.handleSlotChange })));
540
- switch (this.type) {
541
- case 'text':
542
- return (h("div", { class: { 'le-slot-input': true, 'has-error': !this.isValidHtml } }, h("le-string-input", { mode: "default", value: this.textValue, placeholder: this.placeholder || `Enter ${this.label || this.name || 'text'}...`, onChange: this.handleTextInput }), slotElement));
543
- case 'textarea':
544
- return (h("div", { class: { 'le-slot-input': true, 'has-error': !this.isValidHtml } }, h("textarea", { value: this.textValue, placeholder: this.placeholder || `Enter ${this.label || this.name || 'text'}...`, onInput: this.handleTextInput, required: this.required, rows: 3 }), slotElement));
545
- case 'slot':
546
- default:
547
- // Parse slotStyle string into style object if provided
548
- const dropzoneStyle = {};
549
- if (this.slotStyle) {
550
- this.slotStyle.split(';').forEach(rule => {
551
- const [prop, value] = rule.split(':').map(s => s.trim());
552
- if (prop && value) {
553
- // Convert kebab-case to camelCase for style object
554
- const camelProp = prop.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
555
- dropzoneStyle[camelProp] = value;
556
- }
557
- });
558
- }
559
- return (h("div", { class: "le-slot-dropzone", style: dropzoneStyle }, h("slot", { ref: el => (this.slotRef = el), onSlotchange: this.handleSlotChange })));
560
- }
561
- }
562
- static get style() { return leSlotDefaultCss(); }
563
- }, [769, "le-slot", {
564
- "type": [1],
565
- "name": [1],
566
- "label": [1],
567
- "description": [1],
568
- "allowedComponents": [1, "allowed-components"],
569
- "multiple": [4],
570
- "required": [4],
571
- "placeholder": [1],
572
- "tag": [1],
573
- "slotStyle": [1, "slot-style"],
574
- "adminMode": [32],
575
- "textValue": [32],
576
- "isValidHtml": [32],
577
- "availableComponents": [32],
578
- "pickerOpen": [32]
579
- }]);
580
- function defineCustomElement$5() {
581
- if (typeof customElements === "undefined") {
582
- return;
583
- }
584
- const components = ["le-slot", "le-button", "le-checkbox", "le-component", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
585
- components.forEach(tagName => { switch (tagName) {
586
- case "le-slot":
587
- if (!customElements.get(transformTag(tagName))) {
588
- customElements.define(transformTag(tagName), LeSlot);
589
- }
590
- break;
591
- case "le-button":
592
- if (!customElements.get(transformTag(tagName))) {
593
- defineCustomElement();
594
- }
595
- break;
596
- case "le-checkbox":
597
- if (!customElements.get(transformTag(tagName))) {
598
- defineCustomElement$1();
599
- }
600
- break;
601
- case "le-component":
602
- if (!customElements.get(transformTag(tagName))) {
603
- defineCustomElement$2();
604
- }
605
- break;
606
- case "le-popover":
607
- if (!customElements.get(transformTag(tagName))) {
608
- defineCustomElement$7();
609
- }
610
- break;
611
- case "le-popup":
612
- if (!customElements.get(transformTag(tagName))) {
613
- defineCustomElement$3();
614
- }
615
- break;
616
- case "le-select":
617
- if (!customElements.get(transformTag(tagName))) {
618
- defineCustomElement$4();
619
- }
620
- break;
621
- case "le-slot":
622
- if (!customElements.get(transformTag(tagName))) {
623
- defineCustomElement$5();
624
- }
625
- break;
626
- case "le-string-input":
627
- if (!customElements.get(transformTag(tagName))) {
628
- defineCustomElement$6();
629
- }
630
- break;
631
- } });
632
- }
633
-
634
- const leSelectCss = () => `:host{display:inline-block;min-width:150px;--le-select-color:var(--le-color-text, #1f2937);--le-select-border-radius:var(--le-radius-md);--le-select-content-padding:var(--le-spacing-2)}:host([disabled]){opacity:0.5;pointer-events:none}:host([full-width]){width:100%}.select-trigger{display:flex;align-items:center;gap:0.5rem;width:100%;padding:0;--le-button-padding:var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-1) var(--le-spacing-2);font-size:var(--le-select-font-size, 0.875rem);font-family:inherit;line-height:1.4;color:var(--le-select-color);background:var(--le-select-bg, var(--le-color-surface, #fff));border-radius:var(--le-select-border-radius);cursor:pointer;text-align:left;transition:border-color 0.15s ease, box-shadow 0.15s ease}.select-trigger:focus{outline:2px solid var(--le-color-focus);outline-offset:2px}.select-trigger:not(.has-value) .trigger-label{color:color-mix(in srgb, var(--le-color-text-secondary) 66%, transparent)}.trigger-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem}.trigger-icon-end{width:16px;height:16px}.trigger-icon img{width:100%;height:100%;object-fit:contain}.trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--le-color-text)}.trigger-label::not(.has-value){color:var(--le-color-text-disabled, #9ca3af)}le-button::part(icon-end){display:flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;transition:transform 0.2s ease}le-button::part(icon-end) svg{width:1rem;height:1rem}le-button.is-open::part(icon-end){transform:rotate(180deg)}.search-input::part(container):focus-within{outline:none !important}.search-input{--le-input-radius:var(--le-radius-md)}`;
635
-
636
- const LeSelect = /*@__PURE__*/ proxyCustomElement(class LeSelect extends HTMLElement {
637
- constructor(registerHost) {
638
- super();
639
- if (registerHost !== false) {
640
- this.__registerHost();
641
- }
642
- this.__attachShadow();
643
- this.leChange = createEvent(this, "change", 7);
644
- this.leOpen = createEvent(this, "leOpen", 7);
645
- this.leClose = createEvent(this, "leClose", 7);
646
- }
647
- get el() { return this; }
648
- /**
649
- * The options to display in the dropdown.
650
- */
651
- options = [];
652
- /**
653
- * The currently selected value.
654
- */
655
- value;
656
- /**
657
- * Placeholder text when no option is selected.
658
- */
659
- placeholder = 'Select an option';
660
- /**
661
- * Whether the select is disabled.
662
- */
663
- disabled = false;
664
- /**
665
- * Whether selection is required.
666
- */
667
- required = false;
668
- /**
669
- * Name attribute for form submission.
670
- */
671
- name;
672
- /**
673
- * Whether the select should take full width of its container.
674
- */
675
- fullWidth = false;
676
- /**
677
- * Size variant of the select.
678
- */
679
- size = 'medium';
680
- /**
681
- * Visual variant of the select.
682
- */
683
- variant = 'default';
684
- /**
685
- * Whether the input is searchable.
686
- */
687
- searchable = false;
688
- /**
689
- * Text to show when no options match the search.
690
- */
691
- emptyText = 'No results found';
692
- /**
693
- * Whether the dropdown is currently open.
694
- */
695
- open = false;
696
- /**
697
- * Emitted when the selected value changes.
698
- */
699
- leChange;
700
- /**
701
- * Emitted when the dropdown opens.
702
- */
703
- leOpen;
704
- /**
705
- * Emitted when the dropdown closes.
706
- */
707
- leClose;
708
- selectedOption;
709
- searchQuery = '';
710
- dropdownEl;
711
- inputEl;
712
- handleValueChange() {
713
- this.updateSelectedOption();
714
- }
715
- handleOptionsChange() {
716
- this.updateSelectedOption();
717
- }
718
- componentWillLoad() {
719
- this.updateSelectedOption();
720
- }
721
- get parsedOptions() {
722
- if (typeof this.options === 'string') {
723
- try {
724
- return JSON.parse(this.options);
725
- }
726
- catch {
727
- return [];
728
- }
729
- }
730
- return this.options;
731
- }
732
- updateSelectedOption() {
733
- if (this.value !== undefined) {
734
- this.selectedOption = this.parsedOptions.find(opt => (opt.value ?? opt.label) === this.value);
735
- }
736
- else {
737
- this.selectedOption = undefined;
738
- }
739
- }
740
- filterOption = (option, query) => {
741
- if (!query)
742
- return true;
743
- const searchLower = query.toLowerCase();
744
- return (option.label.toLowerCase().includes(searchLower) ||
745
- (option.description?.toLowerCase().includes(searchLower) ?? false));
746
- };
747
- handleOptionSelect = (e) => {
748
- this.value = e.detail.value;
749
- this.selectedOption = e.detail.option;
750
- this.leChange.emit(e.detail);
751
- };
752
- handleDropdownOpen = () => {
753
- this.open = true;
754
- this.leOpen.emit();
755
- // Focus search input if searchable
756
- if (this.searchable) {
757
- setTimeout(() => {
758
- this.inputEl?.focus();
759
- }, 50);
760
- }
761
- };
762
- handleDropdownClose = () => {
763
- this.open = false;
764
- this.leClose.emit();
765
- };
766
- handleTriggerClick = () => {
767
- if (!this.disabled) {
768
- this.dropdownEl?.toggle();
769
- }
770
- };
771
- handleTriggerKeyDown = (e) => {
772
- if (this.disabled)
773
- return;
774
- if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
775
- e.preventDefault();
776
- this.dropdownEl?.show();
777
- }
778
- };
779
- handleSearchInput = (e) => {
780
- const target = e.target;
781
- this.searchQuery = target.value;
782
- };
783
- /**
784
- * Opens the dropdown.
785
- */
786
- async showDropdown() {
787
- await this.dropdownEl?.show();
788
- }
789
- /**
790
- * Closes the dropdown.
791
- */
792
- async hideDropdown() {
793
- await this.dropdownEl?.hide();
794
- }
795
- renderIcon(icon) {
796
- if (!icon)
797
- return null;
798
- if (icon.startsWith('http') || icon.startsWith('/')) {
799
- return h("img", { class: "trigger-icon", src: icon, alt: "" });
800
- }
801
- return h("span", { class: "trigger-icon" }, icon);
802
- }
803
- render() {
804
- const hasValue = this.selectedOption !== undefined;
805
- return (h("le-component", { key: '670430a0ca8f310b7454c7dd93098b6b57f3bb82', component: "le-select" }, h("le-dropdown-base", { key: '58716c031b14513b67a1106b90b6174fa363c8b4', ref: el => (this.dropdownEl = el), options: this.parsedOptions, value: this.value, disabled: this.disabled, filterFn: this.searchable ? this.filterOption : undefined, filterQuery: this.searchQuery, onLeOptionSelect: this.handleOptionSelect, onLeDropdownOpen: this.handleDropdownOpen, onLeDropdownClose: this.handleDropdownClose, fullWidth: this.fullWidth }, h("le-button", { key: 'b9cb202179c8fbc6dea9bc7af5ccf11deeb7c0f1', variant: this.variant && this.variant !== 'default' ? this.variant : 'outlined', slot: "trigger", align: "space-between", class: {
806
- 'select-trigger': true,
807
- 'has-value': hasValue,
808
- 'is-open': this.open,
809
- }, mode: "default", size: this.size, disabled: this.disabled, "aria-haspopup": "listbox", "aria-expanded": this.open ? 'true' : 'false', onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown, fullWidth: this.fullWidth, iconStart: hasValue && this.selectedOption?.iconStart
810
- ? this.renderIcon(this.selectedOption.iconStart)
811
- : null, iconEnd: h("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("path", { d: "M4 6l4 4 4-4" })) }, h("span", { key: '592267788f6a02d6b501941863e91bcd68742233', class: "trigger-label" }, hasValue ? this.selectedOption.label : this.placeholder)), this.searchable && this.open && (h("div", { key: 'd4d2611e8b1f7fb243675cc11fa4982331b3c330', class: "multiselect-search", slot: "header" }, h("le-string-input", { key: 'f2a7e477eaf730173cfbca35b33d263eda860dc2', mode: "default", inputRef: el => (this.inputEl = el), class: "search-input", placeholder: "Search...", value: this.searchQuery, onInput: this.handleSearchInput })))), this.name && h("input", { key: 'bf9dc8141d02c272b0b81557dbc7c24a419ce558', type: "hidden", name: this.name, value: this.value?.toString() ?? '' })));
812
- }
813
- static get watchers() { return {
814
- "value": ["handleValueChange"],
815
- "options": ["handleOptionsChange"]
816
- }; }
817
- static get style() { return leSelectCss(); }
818
- }, [769, "le-select", {
819
- "options": [1],
820
- "value": [1032],
821
- "placeholder": [1],
822
- "disabled": [516],
823
- "required": [4],
824
- "name": [1],
825
- "fullWidth": [4, "full-width"],
826
- "size": [513],
827
- "variant": [513],
828
- "searchable": [4],
829
- "emptyText": [1, "empty-text"],
830
- "open": [1540],
831
- "selectedOption": [32],
832
- "searchQuery": [32],
833
- "showDropdown": [64],
834
- "hideDropdown": [64]
835
- }, undefined, {
836
- "value": ["handleValueChange"],
837
- "options": ["handleOptionsChange"]
838
- }]);
839
- function defineCustomElement$4() {
840
- if (typeof customElements === "undefined") {
841
- return;
842
- }
843
- const components = ["le-select", "le-button", "le-checkbox", "le-component", "le-dropdown-base", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
844
- components.forEach(tagName => { switch (tagName) {
845
- case "le-select":
846
- if (!customElements.get(transformTag(tagName))) {
847
- customElements.define(transformTag(tagName), LeSelect);
848
- }
849
- break;
850
- case "le-button":
851
- if (!customElements.get(transformTag(tagName))) {
852
- defineCustomElement();
853
- }
854
- break;
855
- case "le-checkbox":
856
- if (!customElements.get(transformTag(tagName))) {
857
- defineCustomElement$1();
858
- }
859
- break;
860
- case "le-component":
861
- if (!customElements.get(transformTag(tagName))) {
862
- defineCustomElement$2();
863
- }
864
- break;
865
- case "le-dropdown-base":
866
- if (!customElements.get(transformTag(tagName))) {
867
- defineCustomElement$8();
868
- }
869
- break;
870
- case "le-popover":
871
- if (!customElements.get(transformTag(tagName))) {
872
- defineCustomElement$7();
873
- }
874
- break;
875
- case "le-popup":
876
- if (!customElements.get(transformTag(tagName))) {
877
- defineCustomElement$3();
878
- }
879
- break;
880
- case "le-select":
881
- if (!customElements.get(transformTag(tagName))) {
882
- defineCustomElement$4();
883
- }
884
- break;
885
- case "le-slot":
886
- if (!customElements.get(transformTag(tagName))) {
887
- defineCustomElement$5();
888
- }
889
- break;
890
- case "le-string-input":
891
- if (!customElements.get(transformTag(tagName))) {
892
- defineCustomElement$6();
893
- }
894
- break;
895
- } });
896
- }
897
-
898
- const lePopupCss = () => `:host{display:contents}.le-popup-dialog{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;padding:0;border:none;background:transparent;max-width:none;max-height:none;overflow:visible;--_popup-min-width:var(--le-popup-min-width, 320px);--_popup-max-width:var(--le-popup-max-width, min(500px, 90vw));--_popup-min-height:var(--le-popup-min-height, auto)}.le-popup-dialog::backdrop{background:var(--le-popup-backdrop-color, rgba(0, 0, 0, 0.5));animation:le-popup-backdrop-fade 0.2s ease-out}@keyframes le-popup-backdrop-fade{from{opacity:0}to{opacity:1}}.le-popup-position-center{margin:auto}.le-popup-position-top{margin:var(--le-space-2xl, 48px) auto auto auto}.le-popup-position-top-left{margin:var(--le-space-lg, 24px) auto auto var(--le-space-lg, 24px)}.le-popup-position-top-right{margin:var(--le-space-lg, 24px) var(--le-space-lg, 24px) auto auto}.le-popup-position-bottom{margin:auto auto var(--le-space-2xl, 48px) auto}.le-popup-position-bottom-left{margin:auto auto var(--le-space-lg, 24px) var(--le-space-lg, 24px)}.le-popup-position-bottom-right{margin:auto var(--le-space-lg, 24px) var(--le-space-lg, 24px) auto}.le-popup-container{display:flex;flex-direction:column;min-width:var(--_popup-min-width);max-width:var(--_popup-max-width);min-height:var(--_popup-min-height);max-height:calc(100vh - var(--le-space-2xl, 48px) * 2);background:var(--le-color-surface, #ffffff);border:1px solid var(--le-color-border, #e0e0e0);border-radius:var(--le-radius-lg, 12px);box-shadow:var(--le-shadow-xl, 0 8px 32px rgba(0, 0, 0, 0.15));overflow:hidden;font-family:var(--le-font-family, system-ui, -apple-system, sans-serif);color:var(--le-color-text, #333);animation:le-popup-appear 0.2s ease-out}@keyframes le-popup-appear{from{opacity:0;transform:scale(0.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}.le-popup-header{flex-shrink:0;padding:var(--le-space-md, 16px) var(--le-space-lg, 24px);border-bottom:1px solid var(--le-color-border, #e0e0e0);background:var(--le-color-surface-alt, #f9f9f9);font-size:var(--le-font-size-lg, 1.125rem);font-weight:var(--le-font-weight-semibold, 600);color:var(--le-color-text, #333)}.le-popup-body{flex:1;padding:var(--le-space-lg, 24px);overflow-y:auto}.le-popup-message{margin:0;font-size:var(--le-font-size-md, 1rem);line-height:var(--le-line-height-relaxed, 1.6);color:var(--le-color-text, #333)}.le-popup-message+::slotted(*){margin-top:var(--le-space-md, 16px)}.le-popup-input{display:block;width:100%;margin-top:var(--le-space-md, 16px);padding:var(--le-space-sm, 8px) var(--le-space-md, 16px);font-family:inherit;font-size:var(--le-font-size-md, 1rem);color:var(--le-color-text, #333);background:var(--le-color-background, #fff);border:1px solid var(--le-color-border, #e0e0e0);border-radius:var(--le-radius-md, 8px);outline:none;transition:border-color var(--le-transition-fast, 0.15s ease),
899
- box-shadow var(--le-transition-fast, 0.15s ease);box-sizing:border-box}.le-popup-input:focus{border-color:var(--le-color-primary, #2196f3);box-shadow:0 0 0 3px var(--le-color-primary-light, rgba(33, 150, 243, 0.2))}.le-popup-input::placeholder{color:var(--le-color-text-muted, #999)}.le-popup-footer{flex-shrink:0;display:flex;justify-content:flex-end;gap:var(--le-space-sm, 8px);padding:var(--le-space-md, 16px) var(--le-space-lg, 24px);border-top:1px solid var(--le-color-border, #e0e0e0);background:var(--le-color-surface-alt, #f9f9f9)}.le-popup-btn{min-width:80px}@media (max-width: 480px){.le-popup-container{min-width:calc(100vw - var(--le-space-md, 16px) * 2);max-width:calc(100vw - var(--le-space-md, 16px) * 2)}.le-popup-footer{flex-direction:column-reverse}.le-popup-btn{width:100%}}`;
900
-
901
- const LePopup = /*@__PURE__*/ proxyCustomElement(class LePopup extends HTMLElement {
902
- constructor(registerHost) {
903
- super();
904
- if (registerHost !== false) {
905
- this.__registerHost();
906
- }
907
- this.__attachShadow();
908
- this.leConfirm = createEvent(this, "leConfirm", 7);
909
- this.leCancel = createEvent(this, "leCancel", 7);
910
- this.leOpen = createEvent(this, "leOpen", 7);
911
- this.leClose = createEvent(this, "leClose", 7);
912
- }
913
- get el() { return this; }
914
- /**
915
- * The mode of the Le Kit (e.g., 'default' or 'admin')
916
- */
917
- mode = 'default';
918
- /**
919
- * Whether the popup is currently visible
920
- */
921
- open = false;
922
- /**
923
- * Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom
924
- */
925
- type = 'alert';
926
- /**
927
- * Optional title for the popup header
928
- */
929
- popupTitle;
930
- /**
931
- * Message text to display (for alert/confirm/prompt types)
932
- */
933
- message;
934
- /**
935
- * Whether the popup is modal (blocks interaction with page behind)
936
- */
937
- modal = true;
938
- /**
939
- * Position of the popup on screen
940
- */
941
- position = 'center';
942
- /**
943
- * Text for the confirm/OK button
944
- */
945
- confirmText = 'OK';
946
- /**
947
- * Text for the cancel button
948
- */
949
- cancelText = 'Cancel';
950
- /**
951
- * Placeholder text for prompt input
952
- */
953
- placeholder = '';
954
- /**
955
- * Default value for prompt input
956
- */
957
- defaultValue = '';
958
- /**
959
- * Whether clicking the backdrop closes the popup (modal only)
960
- */
961
- closeOnBackdrop = true;
962
- /**
963
- * Internal state for prompt input value
964
- */
965
- inputValue = '';
966
- /**
967
- * Emitted when the popup is confirmed (OK clicked)
968
- */
969
- leConfirm;
970
- /**
971
- * Emitted when the popup is cancelled (Cancel clicked or dismissed)
972
- */
973
- leCancel;
974
- /**
975
- * Emitted when the popup opens
976
- */
977
- leOpen;
978
- /**
979
- * Emitted when the popup closes
980
- */
981
- leClose;
982
- dialogEl;
983
- inputEl;
984
- resolvePromise;
985
- componentWillLoad() {
986
- this.inputValue = this.defaultValue;
987
- }
988
- componentDidLoad() {
989
- // Native dialog handles Escape key automatically when modal
990
- // We just need to listen for the cancel event
991
- this.dialogEl?.addEventListener('cancel', this.handleDialogCancel);
992
- }
993
- disconnectedCallback() {
994
- this.dialogEl?.removeEventListener('cancel', this.handleDialogCancel);
995
- }
996
- handleDialogCancel = (e) => {
997
- e.preventDefault(); // Prevent default close to handle it ourselves
998
- this.handleCancel();
999
- };
1000
- /**
1001
- * Opens the popup and returns a promise that resolves when closed
1002
- */
1003
- async show() {
1004
- return new Promise(resolve => {
1005
- this.resolvePromise = resolve;
1006
- this.inputValue = this.defaultValue;
1007
- this.open = true;
1008
- // Use requestAnimationFrame to ensure the dialog element is rendered
1009
- requestAnimationFrame(() => {
1010
- if (this.dialogEl) {
1011
- if (this.modal) {
1012
- this.dialogEl.showModal();
1013
- }
1014
- else {
1015
- this.dialogEl.show();
1016
- }
1017
- this.leOpen.emit();
1018
- // Focus input for prompt type
1019
- if (this.type === 'prompt' && this.inputEl) {
1020
- this.inputEl.focus();
1021
- this.inputEl.select();
1022
- }
1023
- }
1024
- });
1025
- });
1026
- }
1027
- /**
1028
- * Closes the popup with a result
1029
- */
1030
- async hide(confirmed = false) {
1031
- const result = {
1032
- confirmed,
1033
- value: this.type === 'prompt' ? this.inputValue : undefined,
1034
- };
1035
- this.dialogEl?.close();
1036
- this.open = false;
1037
- this.leClose.emit(result);
1038
- if (this.resolvePromise) {
1039
- this.resolvePromise(result);
1040
- this.resolvePromise = undefined;
1041
- }
1042
- }
1043
- handleConfirm = () => {
1044
- const result = {
1045
- confirmed: true,
1046
- value: this.type === 'prompt' ? this.inputValue : undefined,
1047
- };
1048
- this.leConfirm.emit(result);
1049
- this.hide(true);
1050
- };
1051
- handleCancel = () => {
1052
- const result = {
1053
- confirmed: false,
1054
- value: undefined,
1055
- };
1056
- this.leCancel.emit(result);
1057
- this.hide(false);
1058
- };
1059
- handleBackdropClick = (e) => {
1060
- // Check if click was on the dialog backdrop (outside the dialog box)
1061
- if (this.closeOnBackdrop && e.target === this.dialogEl) {
1062
- const rect = this.dialogEl.getBoundingClientRect();
1063
- const clickedInDialog = e.clientX >= rect.left &&
1064
- e.clientX <= rect.right &&
1065
- e.clientY >= rect.top &&
1066
- e.clientY <= rect.bottom;
1067
- if (!clickedInDialog) {
1068
- this.handleCancel();
1069
- }
1070
- }
1071
- };
1072
- handleInputChange = (e) => {
1073
- this.inputValue = e.target.value;
1074
- };
1075
- handleKeyDown = (e) => {
1076
- if (e.key === 'Enter' && this.type !== 'custom') {
1077
- e.preventDefault();
1078
- this.handleConfirm();
1079
- }
1080
- };
1081
- hasSlot(name) {
1082
- return !!this.el.querySelector(`[slot="${name}"]`);
1083
- }
1084
- renderHeader() {
1085
- if (this.hasSlot('header')) {
1086
- return (h("div", { class: "le-popup-header", part: "header" }, h("slot", { name: "header" })));
1087
- }
1088
- if (this.popupTitle) {
1089
- return (h("div", { class: "le-popup-header", part: "header" }, this.popupTitle));
1090
- }
1091
- return null;
1092
- }
1093
- renderBody() {
1094
- return (h("div", { class: "le-popup-body", part: "body" }, this.message && h("p", { class: "le-popup-message" }, this.message), this.type === 'prompt' && (h("input", { type: "text", class: "le-popup-input", part: "input", placeholder: this.placeholder, value: this.inputValue, onInput: this.handleInputChange, onKeyDown: this.handleKeyDown, ref: el => (this.inputEl = el) })), h("le-slot", { name: "", tag: "div", description: "Custom popup content", type: "slot" }, h("slot", null))));
1095
- }
1096
- renderFooter() {
1097
- if (this.hasSlot('footer')) {
1098
- return (h("div", { class: "le-popup-footer", part: "footer" }, h("slot", { name: "footer" })));
1099
- }
1100
- // For custom type without footer slot, don't render default buttons
1101
- if (this.type === 'custom') {
1102
- return null;
1103
- }
1104
- return (h("div", { class: "le-popup-footer", part: "footer" }, (this.type === 'confirm' || this.type === 'prompt') && (h("le-button", { variant: "outlined", part: "button-cancel", class: "le-popup-btn", onClick: this.handleCancel }, this.cancelText)), h("le-button", { variant: "solid", part: "button-confirm", class: "le-popup-btn", onClick: this.handleConfirm }, this.confirmText)));
1105
- }
1106
- render() {
1107
- const positionClass = `le-popup-position-${this.position}`;
1108
- return (h("dialog", { key: '75ff06ac2532818f2951283fb455d165d1b13e89', class: `le-popup-dialog ${positionClass}`, part: "dialog", ref: el => (this.dialogEl = el), onClick: this.handleBackdropClick }, h("le-component", { key: '0fea1c4ea66d8457c66bf5e14b08b7ac3251a9cc', component: "le-popup" }, h("div", { key: 'eb95845004b27cdba2e817b2f296a59ae1d62552', class: "le-popup-container", part: "container" }, this.renderHeader(), this.renderBody(), this.renderFooter()))));
1109
- }
1110
- static get style() { return lePopupCss(); }
1111
- }, [769, "le-popup", {
1112
- "mode": [1537],
1113
- "open": [1540],
1114
- "type": [1],
1115
- "popupTitle": [1, "popup-title"],
1116
- "message": [1],
1117
- "modal": [4],
1118
- "position": [1],
1119
- "confirmText": [1, "confirm-text"],
1120
- "cancelText": [1, "cancel-text"],
1121
- "placeholder": [1],
1122
- "defaultValue": [1, "default-value"],
1123
- "closeOnBackdrop": [4, "close-on-backdrop"],
1124
- "inputValue": [32],
1125
- "show": [64],
1126
- "hide": [64]
1127
- }]);
1128
- function defineCustomElement$3() {
1129
- if (typeof customElements === "undefined") {
1130
- return;
1131
- }
1132
- const components = ["le-popup", "le-button", "le-checkbox", "le-component", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
1133
- components.forEach(tagName => { switch (tagName) {
1134
- case "le-popup":
1135
- if (!customElements.get(transformTag(tagName))) {
1136
- customElements.define(transformTag(tagName), LePopup);
1137
- }
1138
- break;
1139
- case "le-button":
1140
- if (!customElements.get(transformTag(tagName))) {
1141
- defineCustomElement();
1142
- }
1143
- break;
1144
- case "le-checkbox":
1145
- if (!customElements.get(transformTag(tagName))) {
1146
- defineCustomElement$1();
1147
- }
1148
- break;
1149
- case "le-component":
1150
- if (!customElements.get(transformTag(tagName))) {
1151
- defineCustomElement$2();
1152
- }
1153
- break;
1154
- case "le-popover":
1155
- if (!customElements.get(transformTag(tagName))) {
1156
- defineCustomElement$7();
1157
- }
1158
- break;
1159
- case "le-popup":
1160
- if (!customElements.get(transformTag(tagName))) {
1161
- defineCustomElement$3();
1162
- }
1163
- break;
1164
- case "le-select":
1165
- if (!customElements.get(transformTag(tagName))) {
1166
- defineCustomElement$4();
1167
- }
1168
- break;
1169
- case "le-slot":
1170
- if (!customElements.get(transformTag(tagName))) {
1171
- defineCustomElement$5();
1172
- }
1173
- break;
1174
- case "le-string-input":
1175
- if (!customElements.get(transformTag(tagName))) {
1176
- defineCustomElement$6();
1177
- }
1178
- break;
1179
- } });
1180
- }
1181
-
1182
- const leComponentCss = () => `:host{display:contents}:host(.admin-mode){display:block}.le-component-wrapper{position:relative;border:2px dashed var(--le-admin-border-color, #90caf9);border-radius:var(--le-radius-md, 8px);background:var(--le-admin-bg, rgba(144, 202, 249, 0.05));transition:border-color 0.2s ease, box-shadow 0.2s ease}.le-component-wrapper:hover{border-color:var(--le-admin-border-hover, #42a5f5);box-shadow:0 0 0 2px var(--le-admin-glow, rgba(66, 165, 245, 0.2))}.le-component-header{display:flex;align-items:center;justify-content:space-between;gap:var(--le-spacing-1, 4px);padding:0 0 0 var(--le-spacing-1, 4px);background:var(--le-admin-header-bg, rgba(144, 202, 249, 0.15));border-bottom:1px solid var(--le-admin-border-color, #90caf9);border-radius:var(--le-radius-md, 8px) var(--le-radius-md, 8px) 0 0;font-size:var(--le-font-size-xs, 11px)}.le-component-name{font-weight:var(--le-font-weight-medium, 500);color:var(--le-admin-text, #1976d2);text-transform:capitalize;text-align:start;overflow:hidden;width:0;flex:1 1 0%}.le-component-content{padding:var(--le-space-xs, 4px)}.le-component-trigger{font-size:24px;line-height:0px;width:12px;height:12px}.le-component-button{width:20px}.property-editor{display:flex;flex-direction:column;gap:var(--le-space-sm, 8px);max-width:380px}.property-field{display:flex;flex-direction:column;gap:var(--le-space-xs, 4px)}.property-field label{display:flex;flex-direction:column;gap:2px;font-size:var(--le-font-size-sm, 13px);font-weight:var(--le-font-weight-medium, 500);color:var(--le-color-text, #333)}.property-hint{font-size:var(--le-font-size-xs, 11px);font-weight:normal;color:var(--le-color-text-secondary, #666);line-height:1.3}.property-field input[type="text"],.property-field input[type="number"],.property-field select{padding:var(--le-space-xs, 4px) var(--le-space-sm, 8px);border:1px solid var(--le-color-border, #ddd);border-radius:var(--le-radius-md, 7px);font-size:var(--le-font-size-sm, 13px);font-family:inherit;background:var(--le-color-surface, #fff);color:var(--le-color-text, #333);transition:border-color 0.15s ease, box-shadow 0.15s ease}.property-field input:focus,.property-field select:focus{outline:none;border-color:var(--le-color-primary, #1976d2);box-shadow:0 0 0 2px var(--le-color-primary-light, rgba(25, 118, 210, 0.2))}.property-field--checkbox{flex-direction:column}.property-field--checkbox label{flex-direction:row;align-items:center;gap:var(--le-space-sm, 8px);cursor:pointer}.property-field--checkbox input[type="checkbox"]{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--le-color-primary, #1976d2)}.property-field--checkbox .property-hint{margin-left:24px}.no-properties{margin:0;padding:var(--le-space-sm, 8px);font-size:var(--le-font-size-sm, 13px);color:var(--le-color-text-secondary, #666);text-align:center}.property-editor-container{display:flex;flex-direction:column;gap:var(--le-space-md, 12px)}.property-editor-actions{padding-top:var(--le-space-sm, 8px);border-top:1px solid var(--le-color-border, #e5e5e5)}.delete-component-btn{display:flex;align-items:center;justify-content:center;gap:var(--le-space-xs, 4px);width:100%;padding:var(--le-space-sm, 8px) var(--le-space-md, 12px);border:1px solid var(--le-color-danger, #e53935);border-radius:var(--le-radius-md, 6px);background:transparent;color:var(--le-color-danger, #e53935);font-size:var(--le-font-size-sm, 13px);font-weight:500;cursor:pointer;transition:background-color 0.15s, color 0.15s}.delete-component-btn:hover{background:var(--le-color-danger, #e53935);color:white}.delete-component-btn:active{opacity:0.9}`;
1183
-
1184
- const LeComponent = /*@__PURE__*/ proxyCustomElement(class LeComponent extends HTMLElement {
1185
- constructor(registerHost) {
1186
- super();
1187
- if (registerHost !== false) {
1188
- this.__registerHost();
1189
- }
1190
- this.__attachShadow();
1191
- }
1192
- get el() { return this; }
1193
- /**
1194
- * The tag name of the component (e.g., 'le-card').
1195
- * Used to look up property metadata and display the component name.
1196
- */
1197
- component;
1198
- /**
1199
- * Optional display name for the component.
1200
- * If not provided, the tag name will be formatted as the display name.
1201
- */
1202
- displayName;
1203
- /**
1204
- * Classes to apply to the host element.
1205
- * Allows parent components to pass their styling classes.
1206
- */
1207
- hostClass;
1208
- /**
1209
- * Inline styles to apply to the host element.
1210
- * Allows parent components to pass dynamic styles (e.g., flex properties).
1211
- */
1212
- hostStyle;
1213
- /**
1214
- * Reference to the host element (found automatically from parent)
1215
- */
1216
- hostElement;
1217
- /**
1218
- * Internal state to track admin mode
1219
- */
1220
- adminMode = false;
1221
- /**
1222
- * Component metadata loaded from Custom Elements Manifest
1223
- */
1224
- componentMeta = null;
1225
- /**
1226
- * Current property values of the host component
1227
- */
1228
- propertyValues = {};
1229
- disconnectModeObserver;
1230
- connectedCallback() {
1231
- // Find the host element - le-component is rendered inside the component's shadow DOM,
1232
- // so we need to find the shadow root's host element
1233
- this.findHostElement();
1234
- this.disconnectModeObserver = observeModeChanges(this.el, mode => {
1235
- this.adminMode = mode === 'admin';
1236
- // Load metadata and refresh property values only when entering admin mode
1237
- if (this.adminMode) {
1238
- if (!this.componentMeta) {
1239
- this.loadComponentMetadata();
1240
- }
1241
- else {
1242
- this.readPropertyValues();
1243
- }
1244
- }
1245
- });
1246
- }
1247
- /**
1248
- * Find the host element by traversing up through shadow DOM
1249
- */
1250
- findHostElement() {
1251
- // Get the shadow root that contains this le-component
1252
- const rootNode = this.el.getRootNode();
1253
- if (rootNode instanceof ShadowRoot) {
1254
- // The host of this shadow root is our target component (e.g., le-card)
1255
- this.hostElement = rootNode.host;
1256
- }
1257
- }
1258
- componentDidLoad() {
1259
- // Read initial property values from the host element
1260
- this.readPropertyValues();
1261
- }
1262
- disconnectedCallback() {
1263
- this.disconnectModeObserver?.();
1264
- }
1265
- /**
1266
- * Formats a tag name into a display name
1267
- * e.g., 'le-card' -> 'Card'
1268
- */
1269
- formatDisplayName(tagName) {
1270
- if (!tagName || typeof tagName !== 'string')
1271
- return 'unknown';
1272
- return tagName
1273
- .replace(/^le-/, '') // Remove 'le-' prefix
1274
- .split('-')
1275
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
1276
- .join(' ');
1277
- }
1278
- /**
1279
- * Load component metadata from the Custom Elements Manifest
1280
- */
1281
- async loadComponentMetadata() {
1282
- try {
1283
- // Fetch the manifest from configured URL
1284
- const { manifestFile } = getLeKitConfig();
1285
- const manifestFileResolved = getAssetPath(`./assets/${manifestFile}`);
1286
- const response = await fetch(manifestFileResolved);
1287
- const manifest = await response.json();
1288
- // Find the component definition
1289
- for (const module of manifest.modules) {
1290
- for (const declaration of module.declarations || []) {
1291
- if (declaration.tagName === this.component) {
1292
- const attributes = (declaration.attributes || []).filter((attr) => !this.isInternalAttribute(attr.name));
1293
- this.componentMeta = {
1294
- tagName: declaration.tagName,
1295
- description: declaration.description,
1296
- attributes,
1297
- };
1298
- // console.log(`[le-component] Loaded metadata for ${this.component}:`, this.componentMeta);
1299
- // Read property values after metadata is loaded
1300
- this.readPropertyValues();
1301
- return;
1302
- }
1303
- }
1304
- }
1305
- // console.warn(`[le-component] No metadata found for component: ${this.component}`);
1306
- }
1307
- catch (error) {
1308
- // console.warn(`[le-component] Failed to load metadata for component: ${this.component}`, error);
1309
- }
1310
- }
1311
- /**
1312
- * Check if an attribute is internal (should not be shown in editor)
1313
- */
1314
- isInternalAttribute(name) {
1315
- const internalAttrs = ['mode', 'theme', 'class', 'style', 'id', 'slot'];
1316
- return internalAttrs.includes(name);
1317
- }
1318
- /**
1319
- * Read current property values from the host element
1320
- */
1321
- readPropertyValues() {
1322
- if (!this.hostElement || !this.componentMeta)
1323
- return;
1324
- const values = {};
1325
- for (const attr of this.componentMeta.attributes) {
1326
- const value = this.hostElement.getAttribute(attr.name);
1327
- values[attr.name] = this.parseAttributeValue(value, attr.type?.text);
1328
- }
1329
- this.propertyValues = values;
1330
- }
1331
- /**
1332
- * Parse an attribute value based on its type
1333
- */
1334
- parseAttributeValue(value, type) {
1335
- if (value === null)
1336
- return undefined;
1337
- if (type === 'boolean') {
1338
- return value !== null && value !== 'false';
1339
- }
1340
- if (type === 'number') {
1341
- return parseFloat(value);
1342
- }
1343
- return value;
1344
- }
1345
- /**
1346
- * Handle property value changes from the editor
1347
- */
1348
- handlePropertyChange(attrName, value, type) {
1349
- if (!this.hostElement)
1350
- return;
1351
- // Update the host element's attribute
1352
- if (type === 'boolean') {
1353
- if (value) {
1354
- this.hostElement.setAttribute(attrName, '');
1355
- }
1356
- else {
1357
- this.hostElement.removeAttribute(attrName);
1358
- }
1359
- }
1360
- else if (value === undefined || value === '') {
1361
- this.hostElement.removeAttribute(attrName);
1362
- }
1363
- else {
1364
- this.hostElement.setAttribute(attrName, String(value));
1365
- }
1366
- // Update local state
1367
- this.propertyValues = { ...this.propertyValues, [attrName]: value };
1368
- // update the host element the way the parent element mutation observer would catch it?
1369
- }
1370
- /**
1371
- * Delete this component from the DOM
1372
- */
1373
- deleteComponent() {
1374
- if (!this.hostElement)
1375
- return;
1376
- // Confirm deletion
1377
- const name = this.displayName || this.formatDisplayName(this.component);
1378
- if (!leConfirm(`Delete this ${name}?`))
1379
- return;
1380
- // Remove the host element from its parent
1381
- const parent = this.hostElement.parentElement;
1382
- if (parent) {
1383
- this.hostElement.remove();
1384
- }
1385
- }
1386
- /**
1387
- * Render the property editor form
1388
- */
1389
- renderPropertyEditor() {
1390
- const hasProperties = this.componentMeta && this.componentMeta.attributes.length > 0;
1391
- return (h("div", { class: "property-editor-container" }, hasProperties ? (h("form", { class: "property-editor", onSubmit: e => e.preventDefault() }, this.componentMeta.attributes.map(attr => this.renderPropertyField(attr)))) : (h("p", { class: "no-properties" }, "No editable properties")), h("div", { class: "property-editor-actions" }, h("le-button", { type: "button", variant: "outlined", color: "danger", "full-width": true, onClick: () => this.deleteComponent() }, h("span", { slot: "icon-start" }, "\uD83D\uDDD1\uFE0F"), h("span", null, "Delete Component")))));
1392
- }
1393
- /**
1394
- * Render a single property field based on its type
1395
- */
1396
- renderPropertyField(attr) {
1397
- const value = this.propertyValues[attr.name];
1398
- const type = attr.type?.text || 'string';
1399
- // Check if type is a union of string literals (e.g., "'default' | 'outlined' | 'elevated'")
1400
- const enumMatch = type.match(/^'[^']+'/);
1401
- if (enumMatch) {
1402
- const options = type.split('|').map(opt => opt.trim().replace(/'/g, ''));
1403
- return (h("div", { class: "property-field" }, h("label", { htmlFor: `prop-${attr.name}` }, attr.name, attr.description && h("span", { class: "property-hint" }, attr.description)), h("le-select", { options: [...options.map(opt => ({ label: opt, value: opt }))], "full-width": true, value: value ?? attr.default?.replace(/'/g, ''), placeholder: attr.default?.replace(/'/g, ''), onChange: (e) => this.handlePropertyChange(attr.name, e.detail.value, type) })));
1404
- }
1405
- // Boolean type
1406
- if (type === 'boolean') {
1407
- return (h("div", { class: "property-field property-field--checkbox" }, h("le-checkbox", { name: `prop-${attr.name}`, checked: value === true || value === '', onChange: e => this.handlePropertyChange(attr.name, e.target.checked, type) }, attr.name, attr.description && h("div", { slot: "description" }, attr.description))));
1408
- }
1409
- // Number type
1410
- if (type === 'number') {
1411
- return (h("div", { class: "property-field" }, h("label", { htmlFor: `prop-${attr.name}` }, attr.name, attr.description && h("span", { class: "property-hint" }, attr.description)), h("input", { type: "number", id: `prop-${attr.name}`, value: value ?? '', placeholder: attr.default, onChange: e => this.handlePropertyChange(attr.name, e.target.value, type) })));
1412
- }
1413
- // Default: string/text input
1414
- return (h("div", { class: "property-field" }, h("le-string-input", { name: `prop-${attr.name}`, label: attr.name, value: value ?? '', placeholder: attr.default?.replace(/'/g, ''), onChange: (e) => this.handlePropertyChange(attr.name, e.detail.value, type) }, h("span", { slot: "description" }, attr.description))));
1415
- }
1416
- render() {
1417
- const name = this.displayName || this.formatDisplayName(this.component);
1418
- // In default mode, just pass through content with host classes
1419
- if (!this.adminMode) {
1420
- return (h(Host, { class: classnames(this.component, this.hostClass), style: this.hostStyle }, h("slot", null)));
1421
- }
1422
- // In admin mode, show wrapper with header and settings
1423
- return (h(Host, { class: classnames(this.component, this.hostClass, 'admin-mode'), style: this.hostStyle }, h("div", { class: "le-component-wrapper" }, h("div", { class: "le-component-header" }, h("span", { class: "le-component-name" }, name), h("le-popover", { popoverTitle: `${name} Settings`, position: "right", align: "start", "min-width": "300px", mode: "default" }, h("le-button", { type: "button", class: "le-component-button", slot: "trigger", variant: "clear", size: "small", "aria-label": "Edit component properties", "icon-only": true }, h("span", { class: "le-component-trigger", slot: "icon-only" }, "\u2699")), this.renderPropertyEditor())), h("div", { class: "le-component-content" }, h("slot", null)))));
1424
- }
1425
- static get assetsDirs() { return ["assets"]; }
1426
- static get style() { return leComponentCss(); }
1427
- }, [769, "le-component", {
1428
- "component": [1],
1429
- "displayName": [1, "display-name"],
1430
- "hostClass": [1, "host-class"],
1431
- "hostStyle": [16],
1432
- "adminMode": [32],
1433
- "componentMeta": [32],
1434
- "propertyValues": [32]
1435
- }]);
1436
- function defineCustomElement$2() {
1437
- if (typeof customElements === "undefined") {
1438
- return;
1439
- }
1440
- const components = ["le-component", "le-button", "le-checkbox", "le-component", "le-dropdown-base", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
1441
- components.forEach(tagName => { switch (tagName) {
1442
- case "le-component":
1443
- if (!customElements.get(transformTag(tagName))) {
1444
- customElements.define(transformTag(tagName), LeComponent);
1445
- }
1446
- break;
1447
- case "le-button":
1448
- if (!customElements.get(transformTag(tagName))) {
1449
- defineCustomElement();
1450
- }
1451
- break;
1452
- case "le-checkbox":
1453
- if (!customElements.get(transformTag(tagName))) {
1454
- defineCustomElement$1();
1455
- }
1456
- break;
1457
- case "le-component":
1458
- if (!customElements.get(transformTag(tagName))) {
1459
- defineCustomElement$2();
1460
- }
1461
- break;
1462
- case "le-dropdown-base":
1463
- if (!customElements.get(transformTag(tagName))) {
1464
- defineCustomElement$8();
1465
- }
1466
- break;
1467
- case "le-popover":
1468
- if (!customElements.get(transformTag(tagName))) {
1469
- defineCustomElement$7();
1470
- }
1471
- break;
1472
- case "le-popup":
1473
- if (!customElements.get(transformTag(tagName))) {
1474
- defineCustomElement$3();
1475
- }
1476
- break;
1477
- case "le-select":
1478
- if (!customElements.get(transformTag(tagName))) {
1479
- defineCustomElement$4();
1480
- }
1481
- break;
1482
- case "le-slot":
1483
- if (!customElements.get(transformTag(tagName))) {
1484
- defineCustomElement$5();
1485
- }
1486
- break;
1487
- case "le-string-input":
1488
- if (!customElements.get(transformTag(tagName))) {
1489
- defineCustomElement$6();
1490
- }
1491
- break;
1492
- } });
1493
- }
1494
-
1495
- const leCheckboxCss = () => `:host{display:block;--le-checkbox-size:18px;--le-checkbox-color:var(--le-color-primary, #007bff);--le-checkbox-label-color:var(--le-color-text-primary, #333);--le-checkbox-desc-color:var(--le-color-text-secondary, #666);--le-checkbox-border-radius:var(--le-radius-sm, 2px);--le-checkbox-marker-color:var(--le-color-surface, #fff)}.le-checkbox-wrapper{display:flex;flex-direction:column;gap:4px}.le-checkbox-label{display:inline-flex;align-items:flex-start;gap:8px;cursor:pointer;user-select:none}:host([disabled]) .le-checkbox-label{cursor:not-allowed;opacity:0.6}.le-checkbox-input{display:flex;align-items:center;justify-content:center;min-height:1.4em}input[type="checkbox"]{appearance:none;-webkit-appearance:none;width:var(--le-checkbox-size);height:var(--le-checkbox-size);border:var(--le-border-width, 2px) solid var(--le-checkbox-color);border-radius:var(--le-checkbox-border-radius);margin:0;margin-top:2px;position:relative;cursor:inherit;background-color:transparent;transition:background-color 0.2s, border-color 0.2s}input[type="checkbox"]:checked{background-color:var(--le-checkbox-color)}input[type="checkbox"]:checked::after{content:'';position:absolute;left:0;top:0;bottom:calc(var(--le-checkbox-size) / 5);right:0;margin:auto;width:calc(var(--le-checkbox-size) / 4);height:calc(var(--le-checkbox-size) / 2);border:solid var(--le-checkbox-marker-color, #fff);border-width:0 calc(var(--le-checkbox-size) / 10) calc(var(--le-checkbox-size) / 10) 0;transform:rotate(45deg)}input[type="checkbox"]:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.le-checkbox-text{flex:1;flex-wrap:wrap;color:var(--le-checkbox-label-color);line-height:1.5;text-align:start}.le-checkbox-description{margin-left:calc(var(--le-checkbox-size) + 8px);font-size:0.875em;color:var(--le-checkbox-desc-color);line-height:1.4}:host [slot="description"]{margin:0}`;
1496
-
1497
- const LeCheckbox = /*@__PURE__*/ proxyCustomElement(class LeCheckbox extends HTMLElement {
1498
- constructor(registerHost) {
1499
- super();
1500
- if (registerHost !== false) {
1501
- this.__registerHost();
1502
- }
1503
- this.__attachShadow();
1504
- this.leChange = createEvent(this, "change", 7);
1505
- }
1506
- get el() { return this; }
1507
- /**
1508
- * Whether the checkbox is checked
1509
- */
1510
- checked = false;
1511
- /**
1512
- * Whether the checkbox is disabled
1513
- */
1514
- disabled = false;
1515
- /**
1516
- * The name of the checkbox input
1517
- */
1518
- name;
1519
- /**
1520
- * The value of the checkbox input
1521
- */
1522
- value;
1523
- /**
1524
- * External ID for linking with external systems (e.g. database ID, PDF form field ID)
1525
- */
1526
- externalId;
1527
- /**
1528
- * Emitted when the checked state changes
1529
- */
1530
- leChange;
1531
- handleChange = (event) => {
1532
- // We stop the internal button click from bubbling up
1533
- event.stopPropagation();
1534
- if (this.disabled) {
1535
- event.preventDefault();
1536
- return;
1537
- }
1538
- const input = event.target;
1539
- this.checked = input.checked;
1540
- this.leChange.emit({
1541
- checked: this.checked,
1542
- value: this.value,
1543
- name: this.name,
1544
- externalId: this.externalId
1545
- });
1546
- };
1547
- render() {
1548
- return (h("le-component", { key: 'cb04cc6a990ee321dd7e8fca2f0bf56c76a865fa', component: "le-checkbox", hostClass: classnames({ 'disabled': this.disabled }) }, h("div", { key: '1b8737eb0d572ba5fdf8c2cfc5ced4af5ef30997', class: "le-checkbox-wrapper" }, h("label", { key: '1d26d68565ade32489f2fade8120c7b8ad75b251', class: "le-checkbox-label" }, h("span", { key: '7e6b5e610c9f16c36b93c57284891366e6b3b756', class: "le-checkbox-input" }, h("input", { key: 'a12a374aa69526d802f36f00b0ae4bcd4ed27bc3', type: "checkbox", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, onChange: this.handleChange })), h("span", { key: 'e4ea1f85102c99751f9853b8e23fbd40ebd24780', class: "le-checkbox-text" }, h("le-slot", { key: 'cdda2111e4dfa6d7270280bac305255980842d48', name: "", type: "text", tag: "span" }, h("slot", { key: '32f57155d7a56f48e5780e37ea1ccac308db6848' })))), h("div", { key: '37d54d8c87b90987653f66a319958849893e7d91', class: "le-checkbox-description" }, h("le-slot", { key: 'fceedc24ef6a3561120456e9b387801a40c5919c', name: "description", type: "text", tag: "div", label: "Description" }, h("slot", { key: 'f1f87b7192565831a2f20428e8e2c0a974166dfd', name: "description" }))))));
1549
- }
1550
- static get style() { return leCheckboxCss(); }
1551
- }, [769, "le-checkbox", {
1552
- "checked": [1540],
1553
- "disabled": [4],
1554
- "name": [1],
1555
- "value": [1],
1556
- "externalId": [1, "external-id"]
1557
- }]);
1558
- function defineCustomElement$1() {
1559
- if (typeof customElements === "undefined") {
1560
- return;
1561
- }
1562
- const components = ["le-checkbox", "le-button", "le-checkbox", "le-component", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
1563
- components.forEach(tagName => { switch (tagName) {
1564
- case "le-checkbox":
1565
- if (!customElements.get(transformTag(tagName))) {
1566
- customElements.define(transformTag(tagName), LeCheckbox);
1567
- }
1568
- break;
1569
- case "le-button":
1570
- if (!customElements.get(transformTag(tagName))) {
1571
- defineCustomElement();
1572
- }
1573
- break;
1574
- case "le-checkbox":
1575
- if (!customElements.get(transformTag(tagName))) {
1576
- defineCustomElement$1();
1577
- }
1578
- break;
1579
- case "le-component":
1580
- if (!customElements.get(transformTag(tagName))) {
1581
- defineCustomElement$2();
1582
- }
1583
- break;
1584
- case "le-popover":
1585
- if (!customElements.get(transformTag(tagName))) {
1586
- defineCustomElement$7();
1587
- }
1588
- break;
1589
- case "le-popup":
1590
- if (!customElements.get(transformTag(tagName))) {
1591
- defineCustomElement$3();
1592
- }
1593
- break;
1594
- case "le-select":
1595
- if (!customElements.get(transformTag(tagName))) {
1596
- defineCustomElement$4();
1597
- }
1598
- break;
1599
- case "le-slot":
1600
- if (!customElements.get(transformTag(tagName))) {
1601
- defineCustomElement$5();
1602
- }
1603
- break;
1604
- case "le-string-input":
1605
- if (!customElements.get(transformTag(tagName))) {
1606
- defineCustomElement$6();
1607
- }
1608
- break;
1609
- } });
1610
- }
1611
-
1612
- const leButtonCss = () => `:host{display:inline-block;--le-button-border-radius:var(--le-radius-md);--le-button-padding-x:var(--le-spacing-3);--le-button-padding-y:var(--le-spacing-1);--le-button-padding:var(--le-button-padding-y) var(--le-button-padding-x);--le-button-small-padding:0.25rem;--le-button-font-size:var(--le-font-size-md);--le-button-font-weight:var(--le-font-weight-medium);--le-button-transition:var(--le-transition-fast);--le-transition-easing:ease-in-out;--le-button-icon-aspect-ratio:1;--le-button-color:var(--le-color-primary-contrast);--_btn-bg:var(--le-color-primary);--_btn-bg-hover:var(--le-color-primary-dark);--_btn-bg-system:var(--le-color-black);--_btn-color:var(--le-button-color);--_btn-border-color:var(--le-color-primary)}:host([full-width]){display:block;width:100%}.le-button-container{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--le-spacing-3);width:100%;padding:var(--le-button-padding);border:1px solid var(--_btn-border-color);border-radius:var(--le-button-border-radius);background:var(--_btn-bg);color:var(--_btn-color);font-family:var(--le-font-family-base);font-size:var(--le-button-font-size);font-weight:var(--le-button-font-weight);line-height:var(--le-line-height-tight);text-decoration:none;cursor:pointer;transition:background-color var(--le-button-transition) var(--le-transition-easing),
1613
- border-color var(--le-button-transition) var(--le-transition-easing),
1614
- box-shadow var(--le-button-transition) var(--le-transition-easing),
1615
- transform var(--le-button-transition) var(--le-transition-easing)}.le-button-container:hover:not(:disabled){background:var(--_btn-bg-hover);border-color:var(--_btn-bg-hover)}.le-button-container:active:not(:disabled){box-shadow:inset 0 0 5px color-mix(in srgb, var(--_btn-bg) 50%, transparent)}.le-button-container:focus-visible{outline:2px solid var(--le-color-focus);outline-offset:2px}.le-button-container:disabled{opacity:0.5;cursor:not-allowed}.le-button-label{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--le-spacing-2)}:host(.color-primary){--_btn-bg:var(--le-color-primary);--_btn-bg-hover:var(--le-color-primary-dark);--_btn-color:var(--le-button-color);--_btn-border-color:var(--le-color-primary)}:host(.color-secondary){--_btn-bg:var(--le-color-secondary);--_btn-bg-hover:var(--le-color-secondary-dark);--_btn-color:var(--le-color-secondary-contrast);--_btn-border-color:var(--le-color-secondary)}:host(.color-success){--_btn-bg:var(--le-color-success);--_btn-bg-hover:var(--le-color-success-dark);--_btn-color:var(--le-color-success-contrast);--_btn-border-color:var(--le-color-success)}:host(.color-warning){--_btn-bg:var(--le-color-warning);--_btn-bg-hover:var(--le-color-warning-dark);--_btn-color:var(--le-color-warning-contrast);--_btn-border-color:var(--le-color-warning)}:host(.color-danger){--_btn-bg:var(--le-color-danger);--_btn-bg-hover:var(--le-color-danger-dark);--_btn-color:var(--le-color-danger-contrast);--_btn-border-color:var(--le-color-danger)}:host(.color-info){--_btn-bg:var(--le-color-info);--_btn-bg-hover:var(--le-color-info-dark);--_btn-color:var(--le-color-info-contrast);--_btn-border-color:var(--le-color-info)}:host(.variant-solid) .le-button-container{box-shadow:var(--le-shadow-sm)}:host(.variant-solid) .le-button-container:hover:not(:disabled){box-shadow:var(--le-shadow-md)}:host(.variant-outlined) .le-button-container{background:transparent;color:var(--_btn-bg);border-color:color-mix(in srgb, var(--_btn-border-color) 33%, transparent)}:host(.variant-outlined) .le-button-container:hover:not(:disabled){border-color:var(--_btn-border-color)}:host(.variant-clear) .le-button-container{background:transparent;color:var(--_btn-bg);border-color:transparent}:host(.variant-clear) .le-button-container:hover:not(:disabled){background:var(--le-color-gray-100);border-color:transparent}:host(.variant-system) .le-button-container{background:transparent;color:var(--_btn-bg-system);border-color:transparent}:host(.size-small){--le-button-padding-x:0.4rem;--le-button-padding-y:0.3rem;--le-button-padding-top:0.35rem;--le-button-font-size:var(--le-button-small-font-size, var(--le-font-size-xs))}:host(.size-large){--le-button-padding-x:0.9rem;--le-button-padding-y:0.6rem;--le-button-font-size:var(--le-font-size-xl)}:host(.full-width){display:block;width:100%}:host(.selected) .le-button-container{box-shadow:inset 0 0 4px var(--le-color-shadow)}:host(.variant-outlined.selected) .le-button-container,:host(.variant-clear.selected) .le-button-container{background:var(--_btn-bg);color:var(--_btn-color)}:host(.icon-only) .le-button-container{padding:var(--le-button-icon-only-padding, 0.5rem);padding-bottom:var(--le-button-icon-only-padding, 0.6rem);aspect-ratio:var(--le-button-icon-aspect-ratio, 1)}:host(.icon-only.size-small) .le-button-container{padding:var(--le-button-small-padding, 0.25rem)}:host(.icon-only.size-large) .le-button-container{padding:0.75rem}:host(.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-button-align-start{justify-content:flex-start}.le-button-align-center{justify-content:center}.le-button-align-space-between{justify-content:space-between}.le-button-align-end{justify-content:flex-end}`;
1616
-
1617
- const LeButton = /*@__PURE__*/ proxyCustomElement(class LeButton extends HTMLElement {
1618
- constructor(registerHost) {
1619
- super();
1620
- if (registerHost !== false) {
1621
- this.__registerHost();
1622
- }
1623
- this.__attachShadow();
1624
- this.leClick = createEvent(this, "click", 7);
1625
- }
1626
- get el() { return this; }
1627
- /**
1628
- * Mode of the popover should be 'default' for internal use
1629
- */
1630
- mode;
1631
- /**
1632
- * Button variant style
1633
- * @allowedValues solid | outlined | clear
1634
- */
1635
- variant = 'solid';
1636
- /**
1637
- * Button color theme (uses theme semantic colors)
1638
- * @allowedValues primary | secondary | success | warning | danger | info
1639
- */
1640
- color = 'primary';
1641
- /**
1642
- * Button size
1643
- * @allowedValues small | medium | large
1644
- */
1645
- size = 'medium';
1646
- /**
1647
- * Whether the button is in a selected/active state
1648
- */
1649
- selected = false;
1650
- /**
1651
- * Whether the button takes full width of its container
1652
- */
1653
- fullWidth = false;
1654
- /**
1655
- * Icon only button image or emoji
1656
- * if this prop is set, the button will render only the icon slot
1657
- */
1658
- iconOnly;
1659
- /**
1660
- * Start icon image or emoji
1661
- */
1662
- iconStart;
1663
- /**
1664
- * End icon image or emoji
1665
- */
1666
- iconEnd;
1667
- /**
1668
- * Whether the button is disabled
1669
- */
1670
- disabled = false;
1671
- /**
1672
- * The button type attribute
1673
- * @allowedValues button | submit | reset
1674
- */
1675
- type = 'button';
1676
- /**
1677
- * Optional href to make the button act as a link
1678
- */
1679
- href;
1680
- /**
1681
- * Link target when href is set
1682
- */
1683
- target;
1684
- /**
1685
- * Alignment of the button label without the end icon
1686
- * @allowedValues start | center | space-between | end
1687
- */
1688
- align = 'center';
1689
- /**
1690
- * Emitted when the button is clicked.
1691
- * This is a custom event that wraps the native click but ensures the target is the le-button.
1692
- */
1693
- leClick;
1694
- handleClick = (event) => {
1695
- // We stop the internal button click from bubbling up
1696
- event.stopPropagation();
1697
- if (this.disabled) {
1698
- event.preventDefault();
1699
- return;
1700
- }
1701
- // And emit our own click event from the host element
1702
- this.leClick.emit(event);
1703
- };
1704
- render() {
1705
- const classes = classnames(`variant-${this.variant}`, `color-${this.color}`, `size-${this.size}`, {
1706
- 'selected': this.selected,
1707
- 'full-width': this.fullWidth,
1708
- 'icon-only': this.iconOnly,
1709
- 'disabled': this.disabled,
1710
- });
1711
- const TagType = this.href ? 'a' : 'button';
1712
- const attrs = this.href
1713
- ? { href: this.href, target: this.target, role: 'button' }
1714
- : { type: this.type, disabled: this.disabled };
1715
- return (h(Host, { key: 'a42aef03b5faf34f47b50dff799316a6815babd5', class: classes }, h("le-component", { key: '86ef8acf04d43e829b83d3e225f210acefc99515', component: "le-button" }, h(TagType, { key: '44145a5244577aab167c103501b788f0088799e3', class: classnames('le-button-container', `le-button-align-${this.align}`), part: "button", ...attrs, onClick: this.handleClick }, this.iconOnly !== undefined ? (h("slot", { name: "icon-only" }, typeof this.iconOnly === 'string' ? this.iconOnly : null)) : (h(Fragment, null, h("span", { class: "le-button-label" }, this.iconStart && (h("span", { class: "icon-start", part: "icon-start" }, this.iconStart)), h("le-slot", { name: "", description: "Button text", type: "text", class: "content", part: "content" }, h("slot", null))), this.iconEnd && (h("span", { class: "icon-end", part: "icon-end" }, this.iconEnd))))))));
1716
- }
1717
- static get style() { return leButtonCss(); }
1718
- }, [769, "le-button", {
1719
- "mode": [1537],
1720
- "variant": [1],
1721
- "color": [1],
1722
- "size": [1],
1723
- "selected": [4],
1724
- "fullWidth": [516, "full-width"],
1725
- "iconOnly": [1, "icon-only"],
1726
- "iconStart": [1, "icon-start"],
1727
- "iconEnd": [1, "icon-end"],
1728
- "disabled": [4],
1729
- "type": [1],
1730
- "href": [1],
1731
- "target": [1],
1732
- "align": [1]
1733
- }]);
1734
- function defineCustomElement() {
1735
- if (typeof customElements === "undefined") {
1736
- return;
1737
- }
1738
- const components = ["le-button", "le-button", "le-checkbox", "le-component", "le-popover", "le-popup", "le-select", "le-slot", "le-string-input"];
1739
- components.forEach(tagName => { switch (tagName) {
1740
- case "le-button":
1741
- if (!customElements.get(transformTag(tagName))) {
1742
- customElements.define(transformTag(tagName), LeButton);
1743
- }
1744
- break;
1745
- case "le-button":
1746
- if (!customElements.get(transformTag(tagName))) {
1747
- defineCustomElement();
1748
- }
1749
- break;
1750
- case "le-checkbox":
1751
- if (!customElements.get(transformTag(tagName))) {
1752
- defineCustomElement$1();
1753
- }
1754
- break;
1755
- case "le-component":
1756
- if (!customElements.get(transformTag(tagName))) {
1757
- defineCustomElement$2();
1758
- }
1759
- break;
1760
- case "le-popover":
1761
- if (!customElements.get(transformTag(tagName))) {
1762
- defineCustomElement$7();
1763
- }
1764
- break;
1765
- case "le-popup":
1766
- if (!customElements.get(transformTag(tagName))) {
1767
- defineCustomElement$3();
1768
- }
1769
- break;
1770
- case "le-select":
1771
- if (!customElements.get(transformTag(tagName))) {
1772
- defineCustomElement$4();
1773
- }
1774
- break;
1775
- case "le-slot":
1776
- if (!customElements.get(transformTag(tagName))) {
1777
- defineCustomElement$5();
1778
- }
1779
- break;
1780
- case "le-string-input":
1781
- if (!customElements.get(transformTag(tagName))) {
1782
- defineCustomElement$6();
1783
- }
1784
- break;
1785
- } });
1786
- }
1787
-
1788
- export { LeButton as L, defineCustomElement$5 as a, defineCustomElement$4 as b, defineCustomElement$3 as c, defineCustomElement$6 as d, defineCustomElement$2 as e, defineCustomElement$1 as f, defineCustomElement as g, LeCheckbox as h, LeComponent as i, LePopup as j, LeSelect as k, LeSlot as l, LeStringInput as m };
1789
- //# sourceMappingURL=le-button2.js.map
1790
-
1791
- //# sourceMappingURL=le-button2.js.map