le-kit 0.0.3 → 0.1.0

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 (361) hide show
  1. package/LICENSE +1 -1
  2. package/dist/admin/index.d.ts +23 -0
  3. package/dist/admin/index.js +74 -0
  4. package/dist/cjs/index-CO4npcak.js +1796 -0
  5. package/dist/cjs/index-CO4npcak.js.map +1 -0
  6. package/dist/cjs/index.cjs.js +117 -0
  7. package/dist/cjs/index.cjs.js.map +1 -0
  8. package/dist/cjs/le-box.cjs.entry.js +184 -0
  9. package/dist/cjs/le-box.entry.cjs.js.map +1 -0
  10. package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +1 -0
  11. package/dist/cjs/le-button_6.cjs.entry.js +1199 -0
  12. package/dist/cjs/le-card.cjs.entry.js +29 -0
  13. package/dist/cjs/le-card.entry.cjs.js.map +1 -0
  14. package/dist/cjs/le-kit.cjs.js +25 -0
  15. package/dist/cjs/le-kit.cjs.js.map +1 -0
  16. package/dist/cjs/le-number-input.cjs.entry.js +202 -0
  17. package/dist/cjs/le-number-input.entry.cjs.js.map +1 -0
  18. package/dist/cjs/le-popup.cjs.entry.js +212 -0
  19. package/dist/cjs/le-popup.entry.cjs.js.map +1 -0
  20. package/dist/cjs/le-round-progress.cjs.entry.js +106 -0
  21. package/dist/cjs/le-round-progress.entry.cjs.js.map +1 -0
  22. package/dist/cjs/le-stack.cjs.entry.js +135 -0
  23. package/dist/cjs/le-stack.entry.cjs.js.map +1 -0
  24. package/dist/cjs/le-text.cjs.entry.js +335 -0
  25. package/dist/cjs/le-text.entry.cjs.js.map +1 -0
  26. package/dist/cjs/le-turntable.cjs.entry.js +139 -0
  27. package/dist/cjs/le-turntable.entry.cjs.js.map +1 -0
  28. package/dist/cjs/loader.cjs.js +13 -0
  29. package/dist/cjs/loader.cjs.js.map +1 -0
  30. package/dist/cjs/utils-BeT0iyCQ.js +152 -0
  31. package/dist/cjs/utils-BeT0iyCQ.js.map +1 -0
  32. package/dist/collection/collection-manifest.json +20 -102
  33. package/dist/collection/components/le-box/le-box.default.css +37 -0
  34. package/dist/collection/components/le-box/le-box.js +614 -0
  35. package/dist/collection/components/le-box/le-box.js.map +1 -0
  36. package/dist/collection/components/le-button/le-button.default.css +263 -0
  37. package/dist/collection/components/le-button/le-button.js +368 -0
  38. package/dist/collection/components/le-button/le-button.js.map +1 -0
  39. package/dist/collection/components/le-card/le-card.default.css +74 -0
  40. package/dist/collection/components/le-card/le-card.js +102 -0
  41. package/dist/collection/components/le-card/le-card.js.map +1 -0
  42. package/dist/collection/components/le-checkbox/le-checkbox.css +93 -0
  43. package/dist/collection/components/le-checkbox/le-checkbox.js +192 -0
  44. package/dist/collection/components/le-checkbox/le-checkbox.js.map +1 -0
  45. package/dist/collection/components/le-component/le-component.css +189 -0
  46. package/dist/collection/components/le-component/le-component.js +359 -0
  47. package/dist/collection/components/le-component/le-component.js.map +1 -0
  48. package/dist/collection/components/le-number-input/le-number-input.css +135 -0
  49. package/dist/collection/components/le-number-input/le-number-input.js +515 -0
  50. package/dist/collection/components/le-number-input/le-number-input.js.map +1 -0
  51. package/dist/collection/components/le-popover/le-popover.css +143 -0
  52. package/dist/collection/components/le-popover/le-popover.js +693 -0
  53. package/dist/collection/components/le-popover/le-popover.js.map +1 -0
  54. package/dist/collection/components/le-popup/le-popup.api.js +101 -0
  55. package/dist/collection/components/le-popup/le-popup.api.js.map +1 -0
  56. package/dist/collection/components/le-popup/le-popup.css +222 -0
  57. package/dist/collection/components/le-popup/le-popup.js +596 -0
  58. package/dist/collection/components/le-popup/le-popup.js.map +1 -0
  59. package/dist/collection/components/le-round-progress/le-round-progress.js +184 -84
  60. package/dist/collection/components/le-round-progress/le-round-progress.js.map +1 -0
  61. package/dist/collection/components/le-slot/le-slot.default.css +222 -0
  62. package/dist/collection/components/le-slot/le-slot.js +636 -0
  63. package/dist/collection/components/le-slot/le-slot.js.map +1 -0
  64. package/dist/collection/components/le-stack/le-stack.default.css +37 -0
  65. package/dist/collection/components/le-stack/le-stack.js +389 -0
  66. package/dist/collection/components/le-stack/le-stack.js.map +1 -0
  67. package/dist/collection/components/le-string-input/le-string-input.css +83 -0
  68. package/dist/collection/components/le-string-input/le-string-input.js +359 -0
  69. package/dist/collection/components/le-string-input/le-string-input.js.map +1 -0
  70. package/dist/collection/components/le-text/le-text.default.css +169 -0
  71. package/dist/collection/components/le-text/le-text.js +475 -0
  72. package/dist/collection/components/le-text/le-text.js.map +1 -0
  73. package/dist/collection/components/le-turntable/le-turntable.js +210 -102
  74. package/dist/collection/components/le-turntable/le-turntable.js.map +1 -0
  75. package/dist/collection/global/app.js +130 -0
  76. package/dist/collection/global/app.js.map +1 -0
  77. package/dist/collection/index-admin.js +27 -0
  78. package/dist/collection/index-admin.js.map +1 -0
  79. package/dist/collection/index-core.js +25 -0
  80. package/dist/collection/index-core.js.map +1 -0
  81. package/dist/collection/index.js +15 -0
  82. package/dist/collection/index.js.map +1 -0
  83. package/dist/collection/types/blocks.js +115 -0
  84. package/dist/collection/types/blocks.js.map +1 -0
  85. package/dist/collection/types/options.js +2 -0
  86. package/dist/collection/types/options.js.map +1 -0
  87. package/dist/collection/utils/utils.js +141 -5
  88. package/dist/collection/utils/utils.js.map +1 -0
  89. package/dist/components/index.d.ts +64 -0
  90. package/dist/components/index.js +122 -0
  91. package/dist/components/index.js.map +1 -0
  92. package/dist/components/le-box.d.ts +11 -0
  93. package/dist/components/le-box.js +256 -0
  94. package/dist/components/le-box.js.map +1 -0
  95. package/dist/components/le-button.d.ts +11 -0
  96. package/dist/components/le-button.js +9 -0
  97. package/dist/components/le-button.js.map +1 -0
  98. package/dist/components/le-card.d.ts +11 -0
  99. package/dist/components/le-card.js +83 -0
  100. package/dist/components/le-card.js.map +1 -0
  101. package/dist/components/le-checkbox.d.ts +11 -0
  102. package/dist/components/le-checkbox.js +9 -0
  103. package/dist/components/le-checkbox.js.map +1 -0
  104. package/dist/components/le-component.d.ts +11 -0
  105. package/dist/components/le-component.js +9 -0
  106. package/dist/components/le-component.js.map +1 -0
  107. package/dist/components/le-number-input.d.ts +11 -0
  108. package/dist/components/le-number-input.js +271 -0
  109. package/dist/components/le-number-input.js.map +1 -0
  110. package/dist/components/le-popover.d.ts +11 -0
  111. package/dist/components/le-popover.js +9 -0
  112. package/dist/components/le-popover.js.map +1 -0
  113. package/dist/components/le-popup.d.ts +11 -0
  114. package/dist/components/le-popup.js +279 -0
  115. package/dist/components/le-popup.js.map +1 -0
  116. package/dist/components/le-round-progress.d.ts +11 -0
  117. package/dist/components/le-round-progress.js +135 -0
  118. package/dist/components/le-round-progress.js.map +1 -0
  119. package/dist/components/le-slot.d.ts +11 -0
  120. package/dist/components/le-slot.js +9 -0
  121. package/dist/components/le-slot.js.map +1 -0
  122. package/dist/components/le-stack.d.ts +11 -0
  123. package/dist/components/le-stack.js +198 -0
  124. package/dist/components/le-stack.js.map +1 -0
  125. package/dist/components/le-string-input.d.ts +11 -0
  126. package/dist/components/le-string-input.js +9 -0
  127. package/dist/components/le-string-input.js.map +1 -0
  128. package/dist/components/le-text.d.ts +11 -0
  129. package/dist/components/le-text.js +398 -0
  130. package/dist/components/le-text.js.map +1 -0
  131. package/dist/components/le-turntable.d.ts +11 -0
  132. package/dist/components/le-turntable.js +164 -0
  133. package/dist/components/le-turntable.js.map +1 -0
  134. package/dist/components/p-CXeWQG7d.js +382 -0
  135. package/dist/components/p-CXeWQG7d.js.map +1 -0
  136. package/dist/components/p-DxxFRStS.js +1370 -0
  137. package/dist/components/p-DxxFRStS.js.map +1 -0
  138. package/dist/components/p-IPZGv1ea.js +1442 -0
  139. package/dist/components/p-IPZGv1ea.js.map +1 -0
  140. package/dist/core/components/index.d.ts +64 -0
  141. package/dist/core/components/index.js +122 -0
  142. package/dist/core/components/index.js.map +1 -0
  143. package/dist/core/components/le-box.d.ts +11 -0
  144. package/dist/core/components/le-box.js +246 -0
  145. package/dist/core/components/le-box.js.map +1 -0
  146. package/dist/core/components/le-button.d.ts +11 -0
  147. package/dist/core/components/le-button.js +9 -0
  148. package/dist/core/components/le-button.js.map +1 -0
  149. package/dist/core/components/le-card.d.ts +11 -0
  150. package/dist/core/components/le-card.js +73 -0
  151. package/dist/core/components/le-card.js.map +1 -0
  152. package/dist/core/components/le-checkbox.d.ts +11 -0
  153. package/dist/core/components/le-checkbox.js +9 -0
  154. package/dist/core/components/le-checkbox.js.map +1 -0
  155. package/dist/core/components/le-component.js.map +1 -0
  156. package/dist/core/components/le-number-input.d.ts +11 -0
  157. package/dist/core/components/le-number-input.js +261 -0
  158. package/dist/core/components/le-number-input.js.map +1 -0
  159. package/dist/core/components/le-popover.d.ts +11 -0
  160. package/dist/core/components/le-popover.js +9 -0
  161. package/dist/core/components/le-popover.js.map +1 -0
  162. package/dist/core/components/le-popup.d.ts +11 -0
  163. package/dist/core/components/le-popup.js +269 -0
  164. package/dist/core/components/le-popup.js.map +1 -0
  165. package/dist/core/components/le-round-progress.d.ts +11 -0
  166. package/dist/core/components/le-round-progress.js +135 -0
  167. package/dist/core/components/le-round-progress.js.map +1 -0
  168. package/dist/core/components/le-slot.js.map +1 -0
  169. package/dist/core/components/le-stack.d.ts +11 -0
  170. package/dist/core/components/le-stack.js +188 -0
  171. package/dist/core/components/le-stack.js.map +1 -0
  172. package/dist/core/components/le-string-input.d.ts +11 -0
  173. package/dist/core/components/le-string-input.js +9 -0
  174. package/dist/core/components/le-string-input.js.map +1 -0
  175. package/dist/core/components/le-text.d.ts +11 -0
  176. package/dist/core/components/le-text.js +388 -0
  177. package/dist/core/components/le-text.js.map +1 -0
  178. package/dist/core/components/le-turntable.d.ts +11 -0
  179. package/dist/core/components/le-turntable.js +164 -0
  180. package/dist/core/components/le-turntable.js.map +1 -0
  181. package/dist/core/components/p-CXeWQG7d.js +382 -0
  182. package/dist/core/components/p-CXeWQG7d.js.map +1 -0
  183. package/dist/core/components/p-DxxFRStS.js +1370 -0
  184. package/dist/core/components/p-DxxFRStS.js.map +1 -0
  185. package/dist/core/components/p-IPZGv1ea.js +1442 -0
  186. package/dist/core/components/p-IPZGv1ea.js.map +1 -0
  187. package/dist/core/index.d.ts +21 -0
  188. package/dist/core/index.js +68 -0
  189. package/dist/core/stencil-runtime.js +1 -0
  190. package/dist/docs.d.ts +443 -0
  191. package/dist/docs.json +5183 -0
  192. package/dist/esm/index-D71TXvJa.js +1781 -0
  193. package/dist/esm/index-D71TXvJa.js.map +1 -0
  194. package/dist/esm/index.js +105 -5
  195. package/dist/esm/index.js.map +1 -0
  196. package/dist/esm/le-box.entry.js +182 -0
  197. package/dist/esm/le-box.entry.js.map +1 -0
  198. package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +1 -0
  199. package/dist/esm/le-button_6.entry.js +1192 -0
  200. package/dist/esm/le-card.entry.js +27 -0
  201. package/dist/esm/le-card.entry.js.map +1 -0
  202. package/dist/esm/le-kit.js +21 -0
  203. package/dist/esm/le-kit.js.map +1 -0
  204. package/dist/esm/le-number-input.entry.js +200 -0
  205. package/dist/esm/le-number-input.entry.js.map +1 -0
  206. package/dist/esm/le-popup.entry.js +210 -0
  207. package/dist/esm/le-popup.entry.js.map +1 -0
  208. package/dist/esm/le-round-progress.entry.js +104 -0
  209. package/dist/esm/le-round-progress.entry.js.map +1 -0
  210. package/dist/esm/le-stack.entry.js +133 -0
  211. package/dist/esm/le-stack.entry.js.map +1 -0
  212. package/dist/esm/le-text.entry.js +333 -0
  213. package/dist/esm/le-text.entry.js.map +1 -0
  214. package/dist/esm/le-turntable.entry.js +137 -0
  215. package/dist/esm/le-turntable.entry.js.map +1 -0
  216. package/dist/esm/loader.js +11 -0
  217. package/dist/esm/loader.js.map +1 -0
  218. package/dist/esm/utils-CJLZrrdC.js +146 -0
  219. package/dist/esm/utils-CJLZrrdC.js.map +1 -0
  220. package/dist/index.cjs.js +1 -0
  221. package/dist/index.js +1 -2
  222. package/dist/le-kit/index-D21JjI31.js.map +1 -0
  223. package/dist/le-kit/index.esm.js +2 -0
  224. package/dist/le-kit/index.esm.js.map +1 -0
  225. package/dist/le-kit/le-box.entry.esm.js.map +1 -0
  226. package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +1 -0
  227. package/dist/le-kit/le-card.entry.esm.js.map +1 -0
  228. package/dist/le-kit/le-kit.css +1 -0
  229. package/dist/le-kit/le-kit.esm.js +2 -0
  230. package/dist/le-kit/le-kit.esm.js.map +1 -0
  231. package/dist/le-kit/le-number-input.entry.esm.js.map +1 -0
  232. package/dist/le-kit/le-popup.entry.esm.js.map +1 -0
  233. package/dist/le-kit/le-round-progress.entry.esm.js.map +1 -0
  234. package/dist/le-kit/le-stack.entry.esm.js.map +1 -0
  235. package/dist/le-kit/le-text.entry.esm.js.map +1 -0
  236. package/dist/le-kit/le-turntable.entry.esm.js.map +1 -0
  237. package/dist/le-kit/loader.esm.js.map +1 -0
  238. package/dist/le-kit/p-024a764e.entry.js +2 -0
  239. package/dist/le-kit/p-024a764e.entry.js.map +1 -0
  240. package/dist/le-kit/p-073cf0b9.entry.js +2 -0
  241. package/dist/le-kit/p-073cf0b9.entry.js.map +1 -0
  242. package/dist/le-kit/p-0955b105.entry.js +2 -0
  243. package/dist/le-kit/p-0955b105.entry.js.map +1 -0
  244. package/dist/le-kit/p-18d79ee2.entry.js +2 -0
  245. package/dist/le-kit/p-18d79ee2.entry.js.map +1 -0
  246. package/dist/le-kit/p-4b1d3b6d.entry.js +2 -0
  247. package/dist/le-kit/p-4b1d3b6d.entry.js.map +1 -0
  248. package/dist/le-kit/p-79d179bd.entry.js +2 -0
  249. package/dist/le-kit/p-79d179bd.entry.js.map +1 -0
  250. package/dist/le-kit/p-D71TXvJa.js +3 -0
  251. package/dist/le-kit/p-D71TXvJa.js.map +1 -0
  252. package/dist/le-kit/p-c8a9288e.entry.js +2 -0
  253. package/dist/le-kit/p-c8a9288e.entry.js.map +1 -0
  254. package/dist/le-kit/p-cfc35bd3.entry.js +2 -0
  255. package/dist/le-kit/p-cfc35bd3.entry.js.map +1 -0
  256. package/dist/le-kit/p-d04da1f5.entry.js +2 -0
  257. package/dist/le-kit/p-d04da1f5.entry.js.map +1 -0
  258. package/dist/le-kit/p-qIai5-eB.js +2 -0
  259. package/dist/le-kit/p-qIai5-eB.js.map +1 -0
  260. package/dist/le-kit/utils-apol-Xc_.js.map +1 -0
  261. package/dist/themes/base.css +89 -0
  262. package/dist/themes/dark.css +100 -0
  263. package/dist/themes/default.css +108 -0
  264. package/dist/themes/gradient.css +100 -0
  265. package/dist/themes/index.css +413 -0
  266. package/dist/themes/minimal.css +100 -0
  267. package/dist/themes/warm.css +100 -0
  268. package/dist/types/components/le-box/le-box.d.ts +111 -0
  269. package/dist/types/components/le-button/le-button.d.ts +78 -0
  270. package/dist/types/components/le-card/le-card.d.ts +37 -0
  271. package/dist/types/components/le-checkbox/le-checkbox.d.ts +46 -0
  272. package/dist/types/components/le-component/le-component.d.ts +115 -0
  273. package/dist/types/components/le-number-input/le-number-input.d.ts +106 -0
  274. package/dist/types/components/le-popover/le-popover.d.ts +109 -0
  275. package/dist/types/components/le-popup/le-popup.api.d.ts +73 -0
  276. package/dist/types/components/le-popup/le-popup.d.ts +122 -0
  277. package/dist/types/components/le-round-progress/le-round-progress.d.ts +2 -3
  278. package/dist/types/components/le-slot/le-slot.d.ts +149 -0
  279. package/dist/types/components/le-stack/le-stack.d.ts +73 -0
  280. package/dist/types/components/le-string-input/le-string-input.d.ts +83 -0
  281. package/dist/types/components/le-text/le-text.d.ts +141 -0
  282. package/dist/types/components/le-turntable/le-turntable.d.ts +1 -2
  283. package/dist/types/components.d.ts +2030 -62
  284. package/dist/types/global/app.d.ts +40 -0
  285. package/dist/types/index-admin.d.ts +29 -0
  286. package/dist/types/index-core.d.ts +27 -0
  287. package/dist/types/index.d.ts +15 -0
  288. package/dist/types/stencil-public-runtime.d.ts +1756 -0
  289. package/dist/types/types/blocks.d.ts +136 -0
  290. package/dist/types/types/options.d.ts +124 -0
  291. package/dist/types/utils/utils.d.ts +54 -1
  292. package/loader/cdn.js +1 -0
  293. package/loader/index.cjs.js +1 -0
  294. package/loader/index.d.ts +24 -0
  295. package/loader/index.es2017.js +1 -0
  296. package/loader/index.js +2 -0
  297. package/package.json +64 -13
  298. package/readme.md +177 -46
  299. package/dist/cjs/es5/build/jqoqzji9.entry.js +0 -6
  300. package/dist/cjs/es5/build/jqoqzji9.sc.entry.js +0 -6
  301. package/dist/cjs/es5/build/novg0vs0.entry.js +0 -9
  302. package/dist/cjs/es5/build/novg0vs0.sc.entry.js +0 -9
  303. package/dist/cjs/es5/index.js +0 -1
  304. package/dist/cjs/es5/le-kit.components.js +0 -4
  305. package/dist/cjs/es5/le-kit.core.js +0 -459
  306. package/dist/cjs/es5/le-kit.define.js +0 -9
  307. package/dist/cjs/es5/polyfills/array.js +0 -63
  308. package/dist/cjs/es5/polyfills/css-shim.js +0 -178
  309. package/dist/cjs/es5/polyfills/dom.js +0 -125
  310. package/dist/cjs/es5/polyfills/fetch.js +0 -186
  311. package/dist/cjs/es5/polyfills/map.js +0 -54
  312. package/dist/cjs/es5/polyfills/object.js +0 -27
  313. package/dist/cjs/es5/polyfills/promise.js +0 -80
  314. package/dist/cjs/es5/polyfills/string.js +0 -15
  315. package/dist/cjs/es5/polyfills/tslib.js +0 -244
  316. package/dist/cjs/es5/polyfills/url.js +0 -68
  317. package/dist/collection/interface.js +0 -0
  318. package/dist/esm/es2017/build/jqoqzji9.entry.js +0 -88
  319. package/dist/esm/es2017/build/jqoqzji9.sc.entry.js +0 -88
  320. package/dist/esm/es2017/build/novg0vs0.entry.js +0 -106
  321. package/dist/esm/es2017/build/novg0vs0.sc.entry.js +0 -106
  322. package/dist/esm/es2017/index.js +0 -1
  323. package/dist/esm/es2017/le-kit.components.js +0 -2
  324. package/dist/esm/es2017/le-kit.core.js +0 -5
  325. package/dist/esm/es2017/le-kit.define.js +0 -9
  326. package/dist/esm/es5/build/jqoqzji9.entry.js +0 -1
  327. package/dist/esm/es5/build/jqoqzji9.sc.entry.js +0 -1
  328. package/dist/esm/es5/build/novg0vs0.entry.js +0 -1
  329. package/dist/esm/es5/build/novg0vs0.sc.entry.js +0 -1
  330. package/dist/esm/es5/index.js +0 -1
  331. package/dist/esm/es5/le-kit.components.js +0 -2
  332. package/dist/esm/es5/le-kit.core.js +0 -5
  333. package/dist/esm/es5/le-kit.define.js +0 -9
  334. package/dist/esm/es5/polyfills/array.js +0 -23
  335. package/dist/esm/es5/polyfills/css-shim.js +0 -8
  336. package/dist/esm/es5/polyfills/dom.js +0 -22
  337. package/dist/esm/es5/polyfills/fetch.js +0 -20
  338. package/dist/esm/es5/polyfills/map.js +0 -7
  339. package/dist/esm/es5/polyfills/object.js +0 -20
  340. package/dist/esm/es5/polyfills/promise.js +0 -8
  341. package/dist/esm/es5/polyfills/string.js +0 -12
  342. package/dist/esm/es5/polyfills/tslib.js +0 -160
  343. package/dist/esm/es5/polyfills/url.js +0 -7
  344. package/dist/le-kit/jqoqzji9.entry.js +0 -1
  345. package/dist/le-kit/jqoqzji9.es5.entry.js +0 -1
  346. package/dist/le-kit/jqoqzji9.sc.entry.js +0 -1
  347. package/dist/le-kit/jqoqzji9.sc.es5.entry.js +0 -1
  348. package/dist/le-kit/le-kit.lfyfa4jd.js +0 -123
  349. package/dist/le-kit/le-kit.rzqb8hph.js +0 -4
  350. package/dist/le-kit/novg0vs0.entry.js +0 -1
  351. package/dist/le-kit/novg0vs0.es5.entry.js +0 -1
  352. package/dist/le-kit/novg0vs0.sc.entry.js +0 -1
  353. package/dist/le-kit/novg0vs0.sc.es5.entry.js +0 -1
  354. package/dist/le-kit.js +0 -1
  355. package/dist/loader/index.cjs.js +0 -1
  356. package/dist/loader/index.d.ts +0 -1
  357. package/dist/loader/index.es2017.js +0 -1
  358. package/dist/loader/index.js +0 -1
  359. package/dist/loader/package.json +0 -9
  360. package/dist/types/stencil.core.d.ts +0 -1203
  361. package/dist/web-components.json +0 -41
@@ -0,0 +1,27 @@
1
+ import { r as registerInstance, h as getElement, i as h } from './index-D71TXvJa.js';
2
+ import { c as classnames } from './utils-CJLZrrdC.js';
3
+
4
+ const leCardDefaultCss = ":host{display:block;--le-card-bg:var(--le-color-surface);--le-card-border-radius:var(--le-radius-lg);--le-card-shadow:var(--le-shadow-md);--le-card-shadow-elevated:var(--le-shadow-lg);--le-card-shadow-hover:var(--le-shadow-xl);--le-card-padding:var(--le-space-md);--le-card-border-color:var(--le-color-border);--le-card-transition:var(--le-transition-normal)}.card{background:var(--le-card-bg);border-radius:var(--le-card-border-radius);overflow:hidden;color:var(--le-color-text);box-shadow:var(--le-card-shadow)}:host>le-component.variant-outlined .card{border:1px solid var(--le-card-border-color);box-shadow:none}:host>le-component.variant-elevated .card{box-shadow:var(--le-card-shadow-elevated)}:host>le-component.interactive .card{cursor:pointer;transition:transform var(--le-card-transition), box-shadow var(--le-card-transition)}:host>le-component.interactive .card:hover{transform:translateY(-2px);box-shadow:var(--le-card-shadow-hover)}:host>le-component.interactive .card:focus-visible{outline:2px solid var(--le-color-border-focus);outline-offset:2px}.card-header{padding:var(--le-card-padding);padding-bottom:0}.card-header:empty{display:none}.card-content{padding:var(--le-card-padding)}.card-footer{padding:var(--le-card-padding);padding-top:0}.card-footer:empty{display:none}";
5
+
6
+ const LeCard = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ }
10
+ get el() { return getElement(this); }
11
+ /**
12
+ * Card variant style
13
+ * @allowedValues default | outlined | elevated
14
+ */
15
+ variant = 'default';
16
+ /**
17
+ * Whether the card is interactive (clickable)
18
+ */
19
+ interactive = false;
20
+ render() {
21
+ return (h("le-component", { key: '3878b21dafb24349fd9c178c784028302fb95214', component: "le-card", hostClass: classnames(`variant-${this.variant}`, { 'interactive': this.interactive }) }, h("div", { key: '41470ad363928c5a5f70947a1fc859db03cf7619', class: "card", part: "card" }, h("div", { key: '9e0d85016f98ee15eba90bbd4db004f9210b1bf3', class: "card-header", part: "header" }, h("le-slot", { key: 'dcd23b7da86e4026f2cc7fb62b410d7317ab2e2b', name: "header", label: "Header", description: "Card title", type: "text", tag: "h3" }, h("slot", { key: '0f2f616c950d7548484bd8c87befa7ecff6d374f', name: "header" }))), h("div", { key: '1d77598852e8755e477a505d29c77643cea446d4', class: "card-content", part: "content" }, h("le-slot", { key: 'fd94892b8489f727a3e951f1771cab53b0667799', name: "", label: "Content", description: "Card content", type: "textarea", tag: "p", required: true }, h("slot", { key: 'dc1c2deff9405fd838aee733bc6e4394f60fefd7' }))), h("div", { key: '2944fa4515119b1868567545fa131fe178d7a3cf', class: "card-footer", part: "footer" }, h("le-slot", { key: 'bdd9b5a1baf2ebf487120afa458ae85285b05fcf', name: "footer", label: "Footer", description: "Card footer with actions", "allowed-components": "le-button,le-link" }, h("slot", { key: '8a79b1baaf6720f1397c0bacf5f71dc97dff2777', name: "footer" }))))));
22
+ }
23
+ };
24
+ LeCard.style = leCardDefaultCss;
25
+
26
+ export { LeCard as le_card };
27
+ //# sourceMappingURL=le-card.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-card.entry.js","sources":["src/components/le-card/le-card.default.css?tag=le-card&encapsulation=shadow","src/components/le-card/le-card.tsx"],"sourcesContent":["/**\n * Default mode styles for le-card\n * Uses global design tokens with component-specific overrides\n */\n:host {\n display: block;\n \n /* Component-specific tokens that map to global tokens */\n --le-card-bg: var(--le-color-surface);\n --le-card-border-radius: var(--le-radius-lg);\n --le-card-shadow: var(--le-shadow-md);\n --le-card-shadow-elevated: var(--le-shadow-lg);\n --le-card-shadow-hover: var(--le-shadow-xl);\n --le-card-padding: var(--le-space-md);\n --le-card-border-color: var(--le-color-border);\n --le-card-transition: var(--le-transition-normal);\n}\n\n.card {\n background: var(--le-card-bg);\n border-radius: var(--le-card-border-radius);\n overflow: hidden;\n color: var(--le-color-text);\n box-shadow: var(--le-card-shadow);\n}\n\n/* Variants - le-component gets the hostClass, so we use :host > le-component */\n:host > le-component.variant-outlined .card {\n border: 1px solid var(--le-card-border-color);\n box-shadow: none;\n}\n\n:host > le-component.variant-elevated .card {\n box-shadow: var(--le-card-shadow-elevated);\n}\n\n/* Interactive state */\n:host > le-component.interactive .card {\n cursor: pointer;\n transition: transform var(--le-card-transition), box-shadow var(--le-card-transition);\n}\n\n:host > le-component.interactive .card:hover {\n transform: translateY(-2px);\n box-shadow: var(--le-card-shadow-hover);\n}\n\n:host > le-component.interactive .card:focus-visible {\n outline: 2px solid var(--le-color-border-focus);\n outline-offset: 2px;\n}\n\n/* Sections */\n.card-header {\n padding: var(--le-card-padding);\n padding-bottom: 0;\n}\n\n.card-header:empty {\n display: none;\n}\n\n.card-content {\n padding: var(--le-card-padding);\n}\n\n.card-footer {\n padding: var(--le-card-padding);\n padding-top: 0;\n}\n\n.card-footer:empty {\n display: none;\n}\n","import { Component, Prop, h, Element } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A flexible card component with header, content, and footer slots.\n *\n * The card uses le-slot wrappers for each slot area. In admin mode,\n * le-slot shows placeholders for CMS editing. In default mode,\n * le-slot acts as a transparent passthrough.\n *\n * @slot header - Card header content (title, actions)\n * @slot - Default slot for main card content\n * @slot footer - Card footer content (buttons, links)\n *\n * @cssprop --le-card-bg - Card background color\n * @cssprop --le-card-border-radius - Card border radius\n * @cssprop --le-card-shadow - Card box shadow\n * @cssprop --le-card-padding - Card content padding\n *\n * @csspart card - The main card container\n * @csspart header - The card header section\n * @csspart content - The card content section\n * @csspart footer - The card footer section\n *\n * @cmsEditable true\n * @cmsCategory Layout\n */\n@Component({\n tag: 'le-card',\n styleUrl: 'le-card.default.css',\n shadow: true,\n})\nexport class LeCard {\n @Element() el: HTMLElement;\n\n /**\n * Card variant style\n * @allowedValues default | outlined | elevated\n */\n @Prop() variant: 'default' | 'outlined' | 'elevated' = 'default';\n\n /**\n * Whether the card is interactive (clickable)\n */\n @Prop() interactive: boolean = false;\n\n render() {\n return (\n <le-component component=\"le-card\" hostClass={classnames(`variant-${this.variant}`, { 'interactive': this.interactive })}>\n <div class=\"card\" part=\"card\">\n <div class=\"card-header\" part=\"header\">\n <le-slot name=\"header\" label=\"Header\" description=\"Card title\" type=\"text\" tag=\"h3\">\n <slot name=\"header\"></slot>\n </le-slot>\n </div>\n\n <div class=\"card-content\" part=\"content\">\n <le-slot name=\"\" label=\"Content\" description=\"Card content\" type=\"textarea\" tag=\"p\" required>\n <slot></slot>\n </le-slot>\n </div>\n\n <div class=\"card-footer\" part=\"footer\">\n <le-slot name=\"footer\" label=\"Footer\" description=\"Card footer with actions\" allowed-components=\"le-button,le-link\">\n <slot name=\"footer\"></slot>\n </le-slot>\n </div>\n </div>\n </le-component>\n );\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,gBAAgB,GAAG,6wCAA6wC;;MCgCzxC,MAAM,GAAA,MAAA;;;;;AAGjB;;;AAGG;IACK,OAAO,GAAwC,SAAS;AAEhE;;AAEG;IACK,WAAW,GAAY,KAAK;IAEpC,MAAM,GAAA;QACJ,QACE,qEAAc,SAAS,EAAC,SAAS,EAAC,SAAS,EAAE,UAAU,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,CAAA,CAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAA,EACrH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAA,EAC3B,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,QAAQ,EAAA,EACpC,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,YAAY,EAAC,IAAI,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAA,EACjF,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,QAAQ,EAAA,CAAQ,CACnB,CACN,EAEN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,SAAS,EAAA,EACtC,CAAS,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,WAAW,EAAC,cAAc,EAAC,IAAI,EAAC,UAAU,EAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAA,IAAA,EAAA,EAC1F,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACL,CACN,EAEN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,QAAQ,EAAA,EACpC,CAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,0BAA0B,EAAA,oBAAA,EAAoB,mBAAmB,EAAA,EACjH,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,QAAQ,EAAA,CAAQ,CACnB,CACN,CACF,CACO;;;;;;;"}
@@ -0,0 +1,21 @@
1
+ import { p as promiseResolve, g as globalScripts, b as bootstrapLazy } from './index-D71TXvJa.js';
2
+ export { s as setNonce } from './index-D71TXvJa.js';
3
+
4
+ /*
5
+ Stencil Client Patch Browser v4.38.3 | MIT Licensed | https://stenciljs.com
6
+ */
7
+
8
+ var patchBrowser = () => {
9
+ const importMeta = import.meta.url;
10
+ const opts = {};
11
+ if (importMeta !== "") {
12
+ opts.resourcesUrl = new URL(".", importMeta).href;
13
+ }
14
+ return promiseResolve(opts);
15
+ };
16
+
17
+ patchBrowser().then(async (options) => {
18
+ await globalScripts();
19
+ return bootstrapLazy([["le-button_6",[[769,"le-button",{"mode":[1537],"variant":[1],"color":[1],"size":[1],"selected":[4],"fullWidth":[516,"full-width"],"iconOnly":[4,"icon-only"],"disabled":[4],"type":[1],"href":[1],"target":[1]}],[769,"le-checkbox",{"checked":[1540],"disabled":[4],"name":[1],"value":[1],"externalId":[1,"external-id"]}],[769,"le-component",{"component":[1],"displayName":[1,"display-name"],"hostClass":[1,"host-class"],"hostStyle":[16],"adminMode":[32],"componentMeta":[32],"propertyValues":[32]}],[769,"le-slot",{"type":[1],"name":[1],"label":[1],"description":[1],"allowedComponents":[1,"allowed-components"],"multiple":[4],"required":[4],"placeholder":[1],"tag":[1],"slotStyle":[1,"slot-style"],"adminMode":[32],"textValue":[32],"isValidHtml":[32],"availableComponents":[32],"pickerOpen":[32]}],[769,"le-string-input",{"mode":[1537],"value":[1537],"name":[1],"type":[1],"label":[1],"iconStart":[1,"icon-start"],"iconEnd":[1,"icon-end"],"placeholder":[1],"disabled":[4],"readonly":[4],"externalId":[1,"external-id"]}],[769,"le-popover",{"mode":[1537],"open":[1540],"position":[1],"align":[1],"popoverTitle":[1,"popover-title"],"showClose":[4,"show-close"],"closeOnClickOutside":[4,"close-on-click-outside"],"closeOnEscape":[4,"close-on-escape"],"offset":[2],"width":[1],"minWidth":[1,"min-width"],"maxWidth":[1,"max-width"],"isPositioned":[32],"show":[64],"hide":[64],"toggle":[64]}]]],["le-box",[[769,"le-box",{"grow":[2],"shrink":[2],"basis":[1],"width":[1],"height":[1],"minWidth":[1,"min-width"],"maxWidth":[1,"max-width"],"minHeight":[1,"min-height"],"maxHeight":[1,"max-height"],"background":[1],"borderRadius":[1,"border-radius"],"border":[1],"alignSelf":[1,"align-self"],"alignContent":[1,"align-content"],"justifyContent":[1,"justify-content"],"padding":[1],"order":[2],"displayFlex":[4,"display-flex"],"innerDirection":[1,"inner-direction"],"innerGap":[1,"inner-gap"]}]]],["le-card",[[769,"le-card",{"variant":[1],"interactive":[4]}]]],["le-number-input",[[769,"le-number-input",{"value":[1538],"name":[1],"label":[1],"placeholder":[1],"min":[2],"max":[2],"step":[2],"required":[4],"disabled":[4],"readonly":[4],"iconStart":[1,"icon-start"],"showSpinners":[4,"show-spinners"],"externalId":[1,"external-id"],"isValid":[32],"validationMessage":[32]},null,{"value":["valueChanged"]}]]],["le-popup",[[769,"le-popup",{"open":[1540],"type":[1],"popupTitle":[1,"popup-title"],"message":[1],"modal":[4],"position":[1],"confirmText":[1,"confirm-text"],"cancelText":[1,"cancel-text"],"placeholder":[1],"defaultValue":[1,"default-value"],"closeOnBackdrop":[4,"close-on-backdrop"],"inputValue":[32],"show":[64],"hide":[64]}]]],["le-stack",[[769,"le-stack",{"direction":[1],"gap":[1],"align":[1],"justify":[1],"wrap":[4],"alignContent":[1,"align-content"],"reverse":[4],"maxItems":[2,"max-items"],"fullWidth":[4,"full-width"],"fullHeight":[4,"full-height"],"padding":[1]}]]],["le-text",[[769,"le-text",{"variant":[1537],"align":[513],"color":[1],"truncate":[4],"maxLines":[2,"max-lines"],"adminMode":[32],"content":[32],"isFocused":[32],"selectionState":[32]},null,{"variant":["onVariantChange"]}]]],["le-round-progress",[[769,"le-round-progress",{"value":[2],"padding":[2],"paths":[1],"params":[32]},null,{"value":["updateValue"],"padding":["updatePadding"],"paths":["updateProgressBackgrounds"]}]]],["le-turntable",[[769,"le-turntable",{"center":[1],"value":[2]},[[9,"mousemove","handleMouseMove"],[9,"mouseup","handleMouseUp"],[9,"resize","handleWindowResize"]],{"value":["updateValue"]}]]]], options);
20
+ });
21
+ //# sourceMappingURL=le-kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-kit.js","sources":["node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.38.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[0]}
@@ -0,0 +1,200 @@
1
+ import { r as registerInstance, f as createEvent, h as getElement, i as h } from './index-D71TXvJa.js';
2
+ import { c as classnames } from './utils-CJLZrrdC.js';
3
+
4
+ const leNumberInputCss = ":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-border-error:2px solid var(--le-color-danger, #dc3545);--le-input-error-color:var(--le-color-danger, #dc3545)}.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}.le-input-container.has-error{border:var(--le-input-border-error)}:host([disabled]) .le-input-container{opacity:0.6;background-color:rgba(0,0,0,0.05);cursor:not-allowed}input{flex:1;width:100%;height:calc(var(--le-input-height) - 2px);padding:var(--le-input-padding);border:none;background:transparent;color:var(--le-input-color);font-family:inherit;font-size:inherit;outline:none;text-align:right;-moz-appearance:textfield;}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}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-controls{display:flex;flex-direction:column;border-left:1px solid var(--le-color-border, #cccccc);height:100%}.le-input-control-btn{--le-button-border-radius:0;--le-button-padding-x:0;--le-button-padding-y:0;--le-button-small-font-size:9.5px;--le-button-small-padding:0 0.2rem;--le-button-icon-aspect-ratio:2;display:flex;align-items:center;justify-content:center;height:50%;cursor:pointer;background:none;border:none;color:var(--le-input-desc-color);font-size:10px;line-height:1}.le-input-control-btn:hover{background-color:rgba(0,0,0,0.05);color:var(--le-color-primary, #007bff)}.le-input-control-btn:active{background-color:rgba(0,0,0,0.1)}.le-input-description{font-size:0.85em;color:var(--le-input-desc-color);margin-top:2px}.le-input-error{font-size:0.85em;color:var(--le-input-error-color);margin-top:2px}";
5
+
6
+ const LeNumberInput = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ this.leChange = createEvent(this, "leChange");
10
+ this.leInput = createEvent(this, "leInput");
11
+ }
12
+ get el() { return getElement(this); }
13
+ /**
14
+ * The value of the input
15
+ */
16
+ value;
17
+ /**
18
+ * The name of the input
19
+ */
20
+ name;
21
+ /**
22
+ * Label for the input
23
+ */
24
+ label;
25
+ /**
26
+ * Placeholder text
27
+ */
28
+ placeholder;
29
+ /**
30
+ * Minimum allowed value
31
+ */
32
+ min;
33
+ /**
34
+ * Maximum allowed value
35
+ */
36
+ max;
37
+ /**
38
+ * Step value for increment/decrement
39
+ */
40
+ step = 1;
41
+ /**
42
+ * Whether the input is required
43
+ */
44
+ required = false;
45
+ /**
46
+ * Whether the input is disabled
47
+ */
48
+ disabled = false;
49
+ /**
50
+ * Whether the input is read-only
51
+ */
52
+ readonly = false;
53
+ /**
54
+ * Icon for the start icon
55
+ */
56
+ iconStart;
57
+ /**
58
+ * Whether to show the spinner controls
59
+ */
60
+ showSpinners = true;
61
+ /**
62
+ * External ID for linking with external systems
63
+ */
64
+ externalId;
65
+ /**
66
+ * Internal validation state
67
+ */
68
+ isValid = true;
69
+ validationMessage = '';
70
+ /**
71
+ * Emitted when the value changes (on blur or Enter)
72
+ */
73
+ leChange;
74
+ /**
75
+ * Emitted when the input value changes (on keystroke/spin)
76
+ */
77
+ leInput;
78
+ valueChanged() {
79
+ this.validate();
80
+ }
81
+ validate() {
82
+ if (this.required && (this.value === undefined || this.value === null || isNaN(this.value))) {
83
+ this.isValid = false;
84
+ this.validationMessage = 'This field is required';
85
+ return;
86
+ }
87
+ if (this.value !== undefined && this.value !== null && !isNaN(this.value)) {
88
+ if (this.min !== undefined && this.value < this.min) {
89
+ this.isValid = false;
90
+ this.validationMessage = `Value must be at least ${this.min}`;
91
+ return;
92
+ }
93
+ if (this.max !== undefined && this.value > this.max) {
94
+ this.isValid = false;
95
+ this.validationMessage = `Value must be at most ${this.max}`;
96
+ return;
97
+ }
98
+ }
99
+ this.isValid = true;
100
+ this.validationMessage = '';
101
+ }
102
+ emitChange() {
103
+ this.leChange.emit({
104
+ value: this.value,
105
+ name: this.name,
106
+ externalId: this.externalId,
107
+ isValid: this.isValid
108
+ });
109
+ }
110
+ emitInput() {
111
+ this.leInput.emit({
112
+ value: this.value,
113
+ name: this.name,
114
+ externalId: this.externalId,
115
+ isValid: this.isValid
116
+ });
117
+ }
118
+ updateValue(newValue) {
119
+ if (this.disabled || this.readonly)
120
+ return;
121
+ // Round to avoid floating point errors
122
+ const precision = this.step.toString().split('.')[1]?.length || 0;
123
+ const rounded = parseFloat(newValue.toFixed(precision));
124
+ this.value = rounded;
125
+ this.validate();
126
+ this.emitInput();
127
+ }
128
+ handleInput = (ev) => {
129
+ const input = ev.target;
130
+ const val = parseFloat(input.value);
131
+ if (input.value === '') {
132
+ this.value = undefined;
133
+ }
134
+ else if (!isNaN(val)) {
135
+ this.value = val;
136
+ }
137
+ this.validate();
138
+ this.emitInput();
139
+ };
140
+ handleChange = () => {
141
+ this.validate();
142
+ this.emitChange();
143
+ };
144
+ handleKeyDown = (ev) => {
145
+ if (this.disabled || this.readonly)
146
+ return;
147
+ let multiplier = 1;
148
+ if (ev.shiftKey)
149
+ multiplier = 10;
150
+ if (ev.altKey)
151
+ multiplier = 0.1;
152
+ const current = this.value || 0;
153
+ if (ev.key === 'ArrowUp') {
154
+ ev.preventDefault();
155
+ this.updateValue(current + (this.step * multiplier));
156
+ }
157
+ else if (ev.key === 'ArrowDown') {
158
+ ev.preventDefault();
159
+ this.updateValue(current - (this.step * multiplier));
160
+ }
161
+ };
162
+ handleWheel = (ev) => {
163
+ if (this.disabled || this.readonly)
164
+ return;
165
+ // Only handle if input is focused to prevent accidental scrolling
166
+ if (document.activeElement !== ev.target)
167
+ return;
168
+ ev.preventDefault();
169
+ const current = this.value || 0;
170
+ if (ev.deltaY < 0) {
171
+ this.updateValue(current + this.step);
172
+ }
173
+ else {
174
+ this.updateValue(current - this.step);
175
+ }
176
+ };
177
+ increment = (ev) => {
178
+ ev.preventDefault(); // Prevent focus loss
179
+ const current = this.value || 0;
180
+ this.updateValue(current + this.step);
181
+ // Trigger change event for buttons as they are "final" actions usually
182
+ this.emitChange();
183
+ };
184
+ decrement = (ev) => {
185
+ ev.preventDefault();
186
+ const current = this.value || 0;
187
+ this.updateValue(current - this.step);
188
+ this.emitChange();
189
+ };
190
+ render() {
191
+ return (h("le-component", { key: '6af8d1fd4c89597f7da3be391cabccbb9d1f9800', component: "le-number-input", hostClass: classnames({ 'disabled': this.disabled }) }, h("div", { key: 'e4e0ad02f89b2eb8dd7649d2f2e70bc821cb2774', class: "le-input-wrapper" }, this.label && (h("label", { key: '30ad120d5571018ea9891340b5406f6939a1fe0e', class: "le-input-label", htmlFor: this.name }, this.label)), h("div", { key: '27b835ad1559a1ea4366c4b7c2b31d412e8b8ef7', class: classnames('le-input-container', { 'has-error': !this.isValid }) }, this.iconStart && (h("span", { key: '0164cbb985b900b4b3136061a2609987a2c06e9f', class: "icon-start" }, this.iconStart)), h("input", { key: '6d68b764f45d61b7dd4ffe435bd9e9da04c4d87a', id: this.name, type: "number", name: this.name, placeholder: this.placeholder, min: this.min, max: this.max, step: this.step, value: this.value, disabled: this.disabled, readOnly: this.readonly, required: this.required, onInput: this.handleInput, onChange: this.handleChange, onKeyDown: this.handleKeyDown, onWheel: this.handleWheel }), this.showSpinners && (h("div", { key: '7ed04341c0c27a7d37afd4baf9698ea7776702f6', class: "le-input-controls" }, h("le-button", { key: '80c96f7cbee40efd2b79f33e8401a13f187092a6', mode: "default", variant: "clear", size: "small", "icon-only": true, class: "le-input-control-btn", onClick: this.increment, disabled: this.disabled || this.readonly || (this.max !== undefined && this.value >= this.max), tabindex: "-1" }, h("span", { key: 'd56b463073ce8174c668138179f1bbc16c700d9f', slot: "icon-only" }, "\u2191")), h("le-button", { key: '74e70e65d6668cc1cee7abfaf464a60a29efa3f9', mode: "default", variant: "clear", size: "small", "icon-only": true, class: "le-input-control-btn", onClick: this.decrement, disabled: this.disabled || this.readonly || (this.min !== undefined && this.value <= this.min), tabindex: "-1" }, h("span", { key: 'e2330cdf9f431b2c9f0953e42f71e897879d10fe', slot: "icon-only" }, "\u2193"))))), !this.isValid && h("div", { key: 'ba9bb8af8c4814b4316c1f0947c50a99fd24634c', class: "le-input-error" }, this.validationMessage), h("div", { key: '30e43ac088f995fe24ab47678ca70fe771b6f1ab', class: "le-input-description" }, h("le-slot", { key: '94f4bd21e32595470781eb6b004c9acbee72b81a', name: "description", type: "text", tag: "p", label: "Description" }, h("slot", { key: 'def94a79248d1887c5416ff95b2c625df85c68d0', name: "description" }))))));
192
+ }
193
+ static get watchers() { return {
194
+ "value": ["valueChanged"]
195
+ }; }
196
+ };
197
+ LeNumberInput.style = leNumberInputCss;
198
+
199
+ export { LeNumberInput as le_number_input };
200
+ //# sourceMappingURL=le-number-input.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-number-input.entry.js","sources":["src/components/le-number-input/le-number-input.css?tag=le-number-input&encapsulation=shadow","src/components/le-number-input/le-number-input.tsx"],"sourcesContent":[":host {\n display: block;\n --le-input-bg: var(--le-color-surface, #ffffff);\n --le-input-color: var(--le-color-text-primary, #333333);\n --le-input-border: var(--le-border-width, 2px) solid var(--le-color-border-input, #007bff);\n --le-input-radius: var(--le-radius-sm, 4px);\n --le-input-padding: 2px 6px;\n --le-input-height: 1.5rem;\n --le-input-label-color: var(--le-color-text-primary, #333333);\n --le-input-desc-color: var(--le-color-text-secondary, #666666);\n --le-input-placeholder-color: #999999;\n --le-input-border-error: 2px solid var(--le-color-danger, #dc3545);\n --le-input-error-color: var(--le-color-danger, #dc3545);\n}\n\n.le-input-wrapper {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.le-input-label {\n display: block;\n font-size: 0.9em;\n font-weight: 500;\n color: var(--le-input-label-color);\n margin-bottom: 2px;\n}\n\n.le-input-container {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--le-input-bg);\n border: var(--le-input-border);\n border-radius: var(--le-input-radius);\n transition: border-color 0.2s;\n}\n\n.le-input-container:focus-within {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.le-input-container.has-error {\n border: var(--le-input-border-error);\n}\n\n:host([disabled]) .le-input-container {\n opacity: 0.6;\n background-color: rgba(0,0,0,0.05);\n cursor: not-allowed;\n}\n\ninput {\n flex: 1;\n width: 100%;\n height: calc(var(--le-input-height) - 2px);\n padding: var(--le-input-padding);\n border: none;\n background: transparent;\n color: var(--le-input-color);\n font-family: inherit;\n font-size: inherit;\n outline: none;\n text-align: right; /* Aligned to end */\n -moz-appearance: textfield; /* Remove default spinners in Firefox */\n}\n\n/* Remove default spinners in Chrome/Safari/Edge */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput::placeholder {\n color: var(--le-input-placeholder-color);\n}\n\n.icon-start, .icon-end {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 8px;\n color: var(--le-input-desc-color);\n}\n\n.le-input-controls {\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--le-color-border, #cccccc);\n height: 100%;\n}\n\n.le-input-control-btn {\n --le-button-border-radius: 0;\n --le-button-padding-x: 0;\n --le-button-padding-y: 0;\n --le-button-small-font-size: 9.5px;\n --le-button-small-padding: 0 0.2rem;\n --le-button-icon-aspect-ratio: 2;\n\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50%;\n cursor: pointer;\n background: none;\n border: none;\n color: var(--le-input-desc-color);\n font-size: 10px;\n line-height: 1;\n}\n\n.le-input-control-btn:hover {\n background-color: rgba(0,0,0,0.05);\n color: var(--le-color-primary, #007bff);\n}\n\n.le-input-control-btn:active {\n background-color: rgba(0,0,0,0.1);\n}\n\n.le-input-description {\n font-size: 0.85em;\n color: var(--le-input-desc-color);\n margin-top: 2px;\n}\n\n.le-input-error {\n font-size: 0.85em;\n color: var(--le-input-error-color);\n margin-top: 2px;\n}\n","import { Component, Prop, Event, EventEmitter, State, h, Element, Watch } from '@stencil/core';\nimport { classnames } from '../../utils/utils';\n\n/**\n * A number input component with validation, keyboard controls, and custom spinners.\n *\n * @slot - The label text for the input\n * @slot description - Additional description text displayed below the input\n * @slot icon-start - Icon to display at the start of the input\n *\n * @cssprop --le-input-bg - Input background color\n * @cssprop --le-input-color - Input text color\n * @cssprop --le-input-border - Input border style\n * @cssprop --le-input-border-focus - Input border style when focused\n * @cssprop --le-input-border-error - Input border style when invalid\n * @cssprop --le-input-radius - Input border radius\n * @cssprop --le-input-padding - Input padding\n */\n@Component({\n tag: 'le-number-input',\n styleUrl: 'le-number-input.css',\n shadow: true,\n})\nexport class LeNumberInput {\n @Element() el: HTMLElement;\n\n /**\n * The value of the input\n */\n @Prop({ mutable: true, reflect: true }) value: number;\n\n /**\n * The name of the input\n */\n @Prop() name: string;\n\n /**\n * Label for the input\n */\n @Prop() label: string;\n\n /**\n * Placeholder text\n */\n @Prop() placeholder: string;\n\n /**\n * Minimum allowed value\n */\n @Prop() min?: number;\n\n /**\n * Maximum allowed value\n */\n @Prop() max?: number;\n\n /**\n * Step value for increment/decrement\n */\n @Prop() step: number = 1;\n\n /**\n * Whether the input is required\n */\n @Prop() required: boolean = false;\n\n /**\n * Whether the input is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether the input is read-only\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Icon for the start icon\n */\n @Prop() iconStart?: string;\n\n /**\n * Whether to show the spinner controls\n */\n @Prop() showSpinners: boolean = true;\n\n /**\n * External ID for linking with external systems\n */\n @Prop() externalId: string;\n\n /**\n * Internal validation state\n */\n @State() private isValid: boolean = true;\n @State() private validationMessage: string = '';\n\n /**\n * Emitted when the value changes (on blur or Enter)\n */\n @Event() leChange: EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>;\n\n /**\n * Emitted when the input value changes (on keystroke/spin)\n */\n @Event() leInput: EventEmitter<{ value: number; name: string; externalId: string; isValid: boolean }>;\n\n @Watch('value')\n valueChanged() {\n this.validate();\n }\n\n private validate() {\n if (this.required && (this.value === undefined || this.value === null || isNaN(this.value))) {\n this.isValid = false;\n this.validationMessage = 'This field is required';\n return;\n }\n\n if (this.value !== undefined && this.value !== null && !isNaN(this.value)) {\n if (this.min !== undefined && this.value < this.min) {\n this.isValid = false;\n this.validationMessage = `Value must be at least ${this.min}`;\n return;\n }\n if (this.max !== undefined && this.value > this.max) {\n this.isValid = false;\n this.validationMessage = `Value must be at most ${this.max}`;\n return;\n }\n }\n\n this.isValid = true;\n this.validationMessage = '';\n }\n\n private emitChange() {\n this.leChange.emit({\n value: this.value,\n name: this.name,\n externalId: this.externalId,\n isValid: this.isValid\n });\n }\n\n private emitInput() {\n this.leInput.emit({\n value: this.value,\n name: this.name,\n externalId: this.externalId,\n isValid: this.isValid\n });\n }\n\n private updateValue(newValue: number) {\n if (this.disabled || this.readonly) return;\n \n // Round to avoid floating point errors\n const precision = this.step.toString().split('.')[1]?.length || 0;\n const rounded = parseFloat(newValue.toFixed(precision));\n \n this.value = rounded;\n this.validate();\n this.emitInput();\n }\n\n private handleInput = (ev: Event) => {\n const input = ev.target as HTMLInputElement;\n const val = parseFloat(input.value);\n \n if (input.value === '') {\n this.value = undefined;\n } else if (!isNaN(val)) {\n this.value = val;\n }\n \n this.validate();\n this.emitInput();\n };\n\n private handleChange = () => {\n this.validate();\n this.emitChange();\n };\n\n private handleKeyDown = (ev: KeyboardEvent) => {\n if (this.disabled || this.readonly) return;\n\n let multiplier = 1;\n if (ev.shiftKey) multiplier = 10;\n if (ev.altKey) multiplier = 0.1;\n\n const current = this.value || 0;\n\n if (ev.key === 'ArrowUp') {\n ev.preventDefault();\n this.updateValue(current + (this.step * multiplier));\n } else if (ev.key === 'ArrowDown') {\n ev.preventDefault();\n this.updateValue(current - (this.step * multiplier));\n }\n };\n\n private handleWheel = (ev: WheelEvent) => {\n if (this.disabled || this.readonly) return;\n // Only handle if input is focused to prevent accidental scrolling\n if (document.activeElement !== ev.target) return;\n\n ev.preventDefault();\n const current = this.value || 0;\n \n if (ev.deltaY < 0) {\n this.updateValue(current + this.step);\n } else {\n this.updateValue(current - this.step);\n }\n };\n\n private increment = (ev: Event) => {\n ev.preventDefault(); // Prevent focus loss\n const current = this.value || 0;\n this.updateValue(current + this.step);\n // Trigger change event for buttons as they are \"final\" actions usually\n this.emitChange();\n };\n\n private decrement = (ev: Event) => {\n ev.preventDefault();\n const current = this.value || 0;\n this.updateValue(current - this.step);\n this.emitChange();\n };\n\n render() {\n return (\n <le-component component=\"le-number-input\" hostClass={classnames({ 'disabled': this.disabled })}>\n <div class=\"le-input-wrapper\">\n {this.label && (\n <label class=\"le-input-label\" htmlFor={this.name}>{this.label}</label>\n )}\n \n <div class={classnames('le-input-container', { 'has-error': !this.isValid })}>\n {this.iconStart && (\n <span class=\"icon-start\">{this.iconStart}</span>\n )}\n \n <input\n id={this.name}\n type=\"number\"\n name={this.name}\n placeholder={this.placeholder}\n min={this.min}\n max={this.max}\n step={this.step}\n value={this.value}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onWheel={this.handleWheel}\n />\n \n {this.showSpinners && (\n <div class=\"le-input-controls\">\n <le-button\n mode=\"default\"\n variant=\"clear\" \n size=\"small\"\n icon-only\n class=\"le-input-control-btn\" \n onClick={this.increment}\n disabled={this.disabled || this.readonly || (this.max !== undefined && this.value >= this.max)}\n tabindex=\"-1\"\n >\n <span slot=\"icon-only\">↑</span>\n </le-button>\n <le-button\n mode=\"default\"\n variant=\"clear\" \n size=\"small\" \n icon-only \n class=\"le-input-control-btn\" \n onClick={this.decrement}\n disabled={this.disabled || this.readonly || (this.min !== undefined && this.value <= this.min)}\n tabindex=\"-1\"\n >\n <span slot=\"icon-only\">↓</span>\n </le-button>\n </div>\n )}\n </div>\n\n {!this.isValid && <div class=\"le-input-error\">{this.validationMessage}</div>}\n\n <div class=\"le-input-description\">\n <le-slot name=\"description\" type=\"text\" tag=\"p\" label=\"Description\">\n <slot name=\"description\"></slot>\n </le-slot>\n </div>\n </div>\n </le-component>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ import { r as registerInstance, f as createEvent, h as getElement, i as h } from './index-D71TXvJa.js';
2
+
3
+ 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),\n 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%}}";
4
+
5
+ const LePopup = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ this.leConfirm = createEvent(this, "leConfirm");
9
+ this.leCancel = createEvent(this, "leCancel");
10
+ this.leOpen = createEvent(this, "leOpen");
11
+ this.leClose = createEvent(this, "leClose");
12
+ }
13
+ get el() { return getElement(this); }
14
+ /**
15
+ * Whether the popup is currently visible
16
+ */
17
+ open = false;
18
+ /**
19
+ * Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom
20
+ */
21
+ type = 'alert';
22
+ /**
23
+ * Optional title for the popup header
24
+ */
25
+ popupTitle;
26
+ /**
27
+ * Message text to display (for alert/confirm/prompt types)
28
+ */
29
+ message;
30
+ /**
31
+ * Whether the popup is modal (blocks interaction with page behind)
32
+ */
33
+ modal = true;
34
+ /**
35
+ * Position of the popup on screen
36
+ */
37
+ position = 'center';
38
+ /**
39
+ * Text for the confirm/OK button
40
+ */
41
+ confirmText = 'OK';
42
+ /**
43
+ * Text for the cancel button
44
+ */
45
+ cancelText = 'Cancel';
46
+ /**
47
+ * Placeholder text for prompt input
48
+ */
49
+ placeholder = '';
50
+ /**
51
+ * Default value for prompt input
52
+ */
53
+ defaultValue = '';
54
+ /**
55
+ * Whether clicking the backdrop closes the popup (modal only)
56
+ */
57
+ closeOnBackdrop = true;
58
+ /**
59
+ * Internal state for prompt input value
60
+ */
61
+ inputValue = '';
62
+ /**
63
+ * Emitted when the popup is confirmed (OK clicked)
64
+ */
65
+ leConfirm;
66
+ /**
67
+ * Emitted when the popup is cancelled (Cancel clicked or dismissed)
68
+ */
69
+ leCancel;
70
+ /**
71
+ * Emitted when the popup opens
72
+ */
73
+ leOpen;
74
+ /**
75
+ * Emitted when the popup closes
76
+ */
77
+ leClose;
78
+ dialogEl;
79
+ inputEl;
80
+ resolvePromise;
81
+ componentWillLoad() {
82
+ this.inputValue = this.defaultValue;
83
+ }
84
+ componentDidLoad() {
85
+ // Native dialog handles Escape key automatically when modal
86
+ // We just need to listen for the cancel event
87
+ this.dialogEl?.addEventListener('cancel', this.handleDialogCancel);
88
+ }
89
+ disconnectedCallback() {
90
+ this.dialogEl?.removeEventListener('cancel', this.handleDialogCancel);
91
+ }
92
+ handleDialogCancel = (e) => {
93
+ e.preventDefault(); // Prevent default close to handle it ourselves
94
+ this.handleCancel();
95
+ };
96
+ /**
97
+ * Opens the popup and returns a promise that resolves when closed
98
+ */
99
+ async show() {
100
+ return new Promise((resolve) => {
101
+ this.resolvePromise = resolve;
102
+ this.inputValue = this.defaultValue;
103
+ this.open = true;
104
+ // Use requestAnimationFrame to ensure the dialog element is rendered
105
+ requestAnimationFrame(() => {
106
+ if (this.dialogEl) {
107
+ if (this.modal) {
108
+ this.dialogEl.showModal();
109
+ }
110
+ else {
111
+ this.dialogEl.show();
112
+ }
113
+ this.leOpen.emit();
114
+ // Focus input for prompt type
115
+ if (this.type === 'prompt' && this.inputEl) {
116
+ this.inputEl.focus();
117
+ this.inputEl.select();
118
+ }
119
+ }
120
+ });
121
+ });
122
+ }
123
+ /**
124
+ * Closes the popup with a result
125
+ */
126
+ async hide(confirmed = false) {
127
+ const result = {
128
+ confirmed,
129
+ value: this.type === 'prompt' ? this.inputValue : undefined,
130
+ };
131
+ this.dialogEl?.close();
132
+ this.open = false;
133
+ this.leClose.emit(result);
134
+ if (this.resolvePromise) {
135
+ this.resolvePromise(result);
136
+ this.resolvePromise = undefined;
137
+ }
138
+ }
139
+ handleConfirm = () => {
140
+ const result = {
141
+ confirmed: true,
142
+ value: this.type === 'prompt' ? this.inputValue : undefined,
143
+ };
144
+ this.leConfirm.emit(result);
145
+ this.hide(true);
146
+ };
147
+ handleCancel = () => {
148
+ const result = {
149
+ confirmed: false,
150
+ value: undefined,
151
+ };
152
+ this.leCancel.emit(result);
153
+ this.hide(false);
154
+ };
155
+ handleBackdropClick = (e) => {
156
+ // Check if click was on the dialog backdrop (outside the dialog box)
157
+ if (this.closeOnBackdrop && e.target === this.dialogEl) {
158
+ const rect = this.dialogEl.getBoundingClientRect();
159
+ const clickedInDialog = (e.clientX >= rect.left &&
160
+ e.clientX <= rect.right &&
161
+ e.clientY >= rect.top &&
162
+ e.clientY <= rect.bottom);
163
+ if (!clickedInDialog) {
164
+ this.handleCancel();
165
+ }
166
+ }
167
+ };
168
+ handleInputChange = (e) => {
169
+ this.inputValue = e.target.value;
170
+ };
171
+ handleKeyDown = (e) => {
172
+ if (e.key === 'Enter' && this.type !== 'custom') {
173
+ e.preventDefault();
174
+ this.handleConfirm();
175
+ }
176
+ };
177
+ hasSlot(name) {
178
+ return !!this.el.querySelector(`[slot="${name}"]`);
179
+ }
180
+ renderHeader() {
181
+ if (this.hasSlot('header')) {
182
+ return (h("div", { class: "le-popup-header", part: "header" }, h("slot", { name: "header" })));
183
+ }
184
+ if (this.popupTitle) {
185
+ return (h("div", { class: "le-popup-header", part: "header" }, this.popupTitle));
186
+ }
187
+ return null;
188
+ }
189
+ renderBody() {
190
+ 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))));
191
+ }
192
+ renderFooter() {
193
+ if (this.hasSlot('footer')) {
194
+ return (h("div", { class: "le-popup-footer", part: "footer" }, h("slot", { name: "footer" })));
195
+ }
196
+ // For custom type without footer slot, don't render default buttons
197
+ if (this.type === 'custom') {
198
+ return null;
199
+ }
200
+ 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)));
201
+ }
202
+ render() {
203
+ const positionClass = `le-popup-position-${this.position}`;
204
+ return (h("dialog", { key: '1c38c82d3f466449ff57f731fc22936a7e5af0eb', class: `le-popup-dialog ${positionClass}`, part: "dialog", ref: (el) => (this.dialogEl = el), onClick: this.handleBackdropClick }, h("le-component", { key: '8f82316129786f9fe17ae6cc5f5a8cf7cbc3a9b5', component: "le-popup" }, h("div", { key: 'e5fef42ae8b41ea52db123b4576849407be33c65', class: "le-popup-container", part: "container" }, this.renderHeader(), this.renderBody(), this.renderFooter()))));
205
+ }
206
+ };
207
+ LePopup.style = lePopupCss;
208
+
209
+ export { LePopup as le_popup };
210
+ //# sourceMappingURL=le-popup.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-popup.entry.js","sources":["src/components/le-popup/le-popup.css?tag=le-popup&encapsulation=shadow","src/components/le-popup/le-popup.tsx"],"sourcesContent":["/* ============================================\n le-popup.css\n Popup/Dialog component using native <dialog>\n Uses CSS variables for easy theming\n ============================================ */\n\n:host {\n display: contents;\n}\n\n/* ============================================\n Native Dialog Element\n ============================================ */\n\n.le-popup-dialog {\n /* Reset default dialog styles */\n position: fixed;\n z-index: 100;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 0;\n border: none;\n background: transparent;\n max-width: none;\n max-height: none;\n overflow: visible;\n \n /* Sizing variables */\n --_popup-min-width: var(--le-popup-min-width, 320px);\n --_popup-max-width: var(--le-popup-max-width, min(500px, 90vw));\n --_popup-min-height: var(--le-popup-min-height, auto);\n}\n\n/* Backdrop styling (native ::backdrop pseudo-element) */\n.le-popup-dialog::backdrop {\n background: var(--le-popup-backdrop-color, rgba(0, 0, 0, 0.5));\n animation: le-popup-backdrop-fade 0.2s ease-out;\n}\n\n@keyframes le-popup-backdrop-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* ============================================\n Position Variants\n Using margin to position within viewport\n ============================================ */\n\n/* Center (default) */\n.le-popup-position-center {\n margin: auto;\n}\n\n/* Top positions */\n.le-popup-position-top {\n margin: var(--le-space-2xl, 48px) auto auto auto;\n}\n\n.le-popup-position-top-left {\n margin: var(--le-space-lg, 24px) auto auto var(--le-space-lg, 24px);\n}\n\n.le-popup-position-top-right {\n margin: var(--le-space-lg, 24px) var(--le-space-lg, 24px) auto auto;\n}\n\n/* Bottom positions */\n.le-popup-position-bottom {\n margin: auto auto var(--le-space-2xl, 48px) auto;\n}\n\n.le-popup-position-bottom-left {\n margin: auto auto var(--le-space-lg, 24px) var(--le-space-lg, 24px);\n}\n\n.le-popup-position-bottom-right {\n margin: auto var(--le-space-lg, 24px) var(--le-space-lg, 24px) auto;\n}\n\n/* ============================================\n Container (the visible dialog box)\n ============================================ */\n\n.le-popup-container {\n display: flex;\n flex-direction: column;\n min-width: var(--_popup-min-width);\n max-width: var(--_popup-max-width);\n min-height: var(--_popup-min-height);\n max-height: calc(100vh - var(--le-space-2xl, 48px) * 2);\n background: var(--le-color-surface, #ffffff);\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-lg, 12px);\n box-shadow: var(--le-shadow-xl, 0 8px 32px rgba(0, 0, 0, 0.15));\n overflow: hidden;\n font-family: var(--le-font-family, system-ui, -apple-system, sans-serif);\n color: var(--le-color-text, #333);\n \n /* Animation */\n animation: le-popup-appear 0.2s ease-out;\n}\n\n@keyframes le-popup-appear {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* ============================================\n Header\n ============================================ */\n\n.le-popup-header {\n flex-shrink: 0;\n padding: var(--le-space-md, 16px) var(--le-space-lg, 24px);\n border-bottom: 1px solid var(--le-color-border, #e0e0e0);\n background: var(--le-color-surface-alt, #f9f9f9);\n font-size: var(--le-font-size-lg, 1.125rem);\n font-weight: var(--le-font-weight-semibold, 600);\n color: var(--le-color-text, #333);\n}\n\n/* ============================================\n Body\n ============================================ */\n\n.le-popup-body {\n flex: 1;\n padding: var(--le-space-lg, 24px);\n overflow-y: auto;\n}\n\n.le-popup-message {\n margin: 0;\n font-size: var(--le-font-size-md, 1rem);\n line-height: var(--le-line-height-relaxed, 1.6);\n color: var(--le-color-text, #333);\n}\n\n/* When there's both message and slot content */\n.le-popup-message + ::slotted(*) {\n margin-top: var(--le-space-md, 16px);\n}\n\n/* ============================================\n Input (for prompt type)\n ============================================ */\n\n.le-popup-input {\n display: block;\n width: 100%;\n margin-top: var(--le-space-md, 16px);\n padding: var(--le-space-sm, 8px) var(--le-space-md, 16px);\n font-family: inherit;\n font-size: var(--le-font-size-md, 1rem);\n color: var(--le-color-text, #333);\n background: var(--le-color-background, #fff);\n border: 1px solid var(--le-color-border, #e0e0e0);\n border-radius: var(--le-radius-md, 8px);\n outline: none;\n transition: border-color var(--le-transition-fast, 0.15s ease),\n box-shadow var(--le-transition-fast, 0.15s ease);\n box-sizing: border-box;\n}\n\n.le-popup-input:focus {\n border-color: var(--le-color-primary, #2196f3);\n box-shadow: 0 0 0 3px var(--le-color-primary-light, rgba(33, 150, 243, 0.2));\n}\n\n.le-popup-input::placeholder {\n color: var(--le-color-text-muted, #999);\n}\n\n/* ============================================\n Footer (buttons)\n ============================================ */\n\n.le-popup-footer {\n flex-shrink: 0;\n display: flex;\n justify-content: flex-end;\n gap: var(--le-space-sm, 8px);\n padding: var(--le-space-md, 16px) var(--le-space-lg, 24px);\n border-top: 1px solid var(--le-color-border, #e0e0e0);\n background: var(--le-color-surface-alt, #f9f9f9);\n}\n\n/* ============================================\n Buttons\n ============================================ */\n\n.le-popup-btn {\n min-width: 80px;\n}\n\n/* ============================================\n Responsive adjustments\n ============================================ */\n\n@media (max-width: 480px) {\n .le-popup-container {\n min-width: calc(100vw - var(--le-space-md, 16px) * 2);\n max-width: calc(100vw - var(--le-space-md, 16px) * 2);\n }\n \n .le-popup-footer {\n flex-direction: column-reverse;\n }\n \n .le-popup-btn {\n width: 100%;\n }\n}","import { Component, Prop, Method, Event, EventEmitter, State, Element, h } from '@stencil/core';\n\n/**\n * Popup type determines the buttons shown\n */\nexport type PopupType = 'alert' | 'confirm' | 'prompt' | 'custom';\n\n/**\n * Popup position on the screen\n */\nexport type PopupPosition = 'center' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/**\n * Result returned by the popup when closed\n */\nexport interface PopupResult {\n confirmed: boolean;\n value?: string;\n}\n\n/**\n * A flexible popup/dialog component for alerts, confirms, prompts, and custom content.\n * \n * Uses the native HTML <dialog> element for proper modal behavior, accessibility,\n * and focus management. Can be used declaratively in HTML or programmatically \n * via leAlert(), leConfirm(), lePrompt().\n *\n * @slot - Default slot for custom body content\n * @slot header - Custom header content (replaces title)\n * @slot footer - Custom footer content (replaces default buttons)\n * \n * @cmsInternal true\n * @cmsCategory System\n */\n@Component({\n tag: 'le-popup',\n styleUrl: 'le-popup.css',\n shadow: true,\n})\nexport class LePopup {\n @Element() el: HTMLElement;\n\n /**\n * Whether the popup is currently visible\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom\n */\n @Prop() type: PopupType = 'alert';\n\n /**\n * Optional title for the popup header\n */\n @Prop() popupTitle?: string;\n\n /**\n * Message text to display (for alert/confirm/prompt types)\n */\n @Prop() message?: string;\n\n /**\n * Whether the popup is modal (blocks interaction with page behind)\n */\n @Prop() modal: boolean = true;\n\n /**\n * Position of the popup on screen\n */\n @Prop() position: PopupPosition = 'center';\n\n /**\n * Text for the confirm/OK button\n */\n @Prop() confirmText: string = 'OK';\n\n /**\n * Text for the cancel button\n */\n @Prop() cancelText: string = 'Cancel';\n\n /**\n * Placeholder text for prompt input\n */\n @Prop() placeholder: string = '';\n\n /**\n * Default value for prompt input\n */\n @Prop() defaultValue: string = '';\n\n /**\n * Whether clicking the backdrop closes the popup (modal only)\n */\n @Prop() closeOnBackdrop: boolean = true;\n\n /**\n * Internal state for prompt input value\n */\n @State() inputValue: string = '';\n\n /**\n * Emitted when the popup is confirmed (OK clicked)\n */\n @Event() leConfirm: EventEmitter<PopupResult>;\n\n /**\n * Emitted when the popup is cancelled (Cancel clicked or dismissed)\n */\n @Event() leCancel: EventEmitter<PopupResult>;\n\n /**\n * Emitted when the popup opens\n */\n @Event() leOpen: EventEmitter<void>;\n\n /**\n * Emitted when the popup closes\n */\n @Event() leClose: EventEmitter<PopupResult>;\n\n private dialogEl?: HTMLDialogElement;\n private inputEl?: HTMLInputElement;\n private resolvePromise?: (result: PopupResult) => void;\n\n componentWillLoad() {\n this.inputValue = this.defaultValue;\n }\n\n componentDidLoad() {\n // Native dialog handles Escape key automatically when modal\n // We just need to listen for the cancel event\n this.dialogEl?.addEventListener('cancel', this.handleDialogCancel);\n }\n\n disconnectedCallback() {\n this.dialogEl?.removeEventListener('cancel', this.handleDialogCancel);\n }\n\n private handleDialogCancel = (e: Event) => {\n e.preventDefault(); // Prevent default close to handle it ourselves\n this.handleCancel();\n };\n\n /**\n * Opens the popup and returns a promise that resolves when closed\n */\n @Method()\n async show(): Promise<PopupResult> {\n return new Promise((resolve) => {\n this.resolvePromise = resolve;\n this.inputValue = this.defaultValue;\n this.open = true;\n \n // Use requestAnimationFrame to ensure the dialog element is rendered\n requestAnimationFrame(() => {\n if (this.dialogEl) {\n if (this.modal) {\n this.dialogEl.showModal();\n } else {\n this.dialogEl.show();\n }\n \n this.leOpen.emit();\n \n // Focus input for prompt type\n if (this.type === 'prompt' && this.inputEl) {\n this.inputEl.focus();\n this.inputEl.select();\n }\n }\n });\n });\n }\n\n /**\n * Closes the popup with a result\n */\n @Method()\n async hide(confirmed: boolean = false) {\n const result: PopupResult = {\n confirmed,\n value: this.type === 'prompt' ? this.inputValue : undefined,\n };\n \n this.dialogEl?.close();\n this.open = false;\n this.leClose.emit(result);\n \n if (this.resolvePromise) {\n this.resolvePromise(result);\n this.resolvePromise = undefined;\n }\n }\n\n private handleConfirm = () => {\n const result: PopupResult = {\n confirmed: true,\n value: this.type === 'prompt' ? this.inputValue : undefined,\n };\n this.leConfirm.emit(result);\n this.hide(true);\n };\n\n private handleCancel = () => {\n const result: PopupResult = {\n confirmed: false,\n value: undefined,\n };\n this.leCancel.emit(result);\n this.hide(false);\n };\n\n private handleBackdropClick = (e: MouseEvent) => {\n // Check if click was on the dialog backdrop (outside the dialog box)\n if (this.closeOnBackdrop && e.target === this.dialogEl) {\n const rect = this.dialogEl.getBoundingClientRect();\n const clickedInDialog = (\n e.clientX >= rect.left &&\n e.clientX <= rect.right &&\n e.clientY >= rect.top &&\n e.clientY <= rect.bottom\n );\n if (!clickedInDialog) {\n this.handleCancel();\n }\n }\n };\n\n private handleInputChange = (e: Event) => {\n this.inputValue = (e.target as HTMLInputElement).value;\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && this.type !== 'custom') {\n e.preventDefault();\n this.handleConfirm();\n }\n };\n\n private hasSlot(name: string): boolean {\n return !!this.el.querySelector(`[slot=\"${name}\"]`);\n }\n\n private renderHeader() {\n if (this.hasSlot('header')) {\n return (\n <div class=\"le-popup-header\" part=\"header\">\n <slot name=\"header\"></slot>\n </div>\n );\n }\n \n if (this.popupTitle) {\n return (\n <div class=\"le-popup-header\" part=\"header\">\n {this.popupTitle}\n </div>\n );\n }\n \n return null;\n }\n\n private renderBody() {\n return (\n <div class=\"le-popup-body\" part=\"body\">\n {this.message && <p class=\"le-popup-message\">{this.message}</p>}\n \n {this.type === 'prompt' && (\n <input\n type=\"text\"\n class=\"le-popup-input\"\n part=\"input\"\n placeholder={this.placeholder}\n value={this.inputValue}\n onInput={this.handleInputChange}\n onKeyDown={this.handleKeyDown}\n ref={(el) => (this.inputEl = el)}\n />\n )}\n \n {/* Default slot for custom content */}\n <le-slot name=\"\" tag=\"div\" description=\"Custom popup content\" type=\"slot\">\n <slot></slot>\n </le-slot>\n </div>\n );\n }\n\n private renderFooter() {\n if (this.hasSlot('footer')) {\n return (\n <div class=\"le-popup-footer\" part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n );\n }\n \n // For custom type without footer slot, don't render default buttons\n if (this.type === 'custom') {\n return null;\n }\n \n return (\n <div class=\"le-popup-footer\" part=\"footer\">\n {(this.type === 'confirm' || this.type === 'prompt') && (\n <le-button\n variant=\"outlined\"\n part=\"button-cancel\"\n class=\"le-popup-btn\"\n onClick={this.handleCancel}\n >\n {this.cancelText}\n </le-button>\n )}\n <le-button\n variant=\"solid\"\n part=\"button-confirm\"\n class=\"le-popup-btn\"\n onClick={this.handleConfirm}\n >\n {this.confirmText}\n </le-button>\n </div>\n );\n }\n\n render() {\n const positionClass = `le-popup-position-${this.position}`;\n \n return (\n <dialog\n class={`le-popup-dialog ${positionClass}`}\n part=\"dialog\"\n ref={(el) => (this.dialogEl = el)}\n onClick={this.handleBackdropClick}\n >\n <le-component component=\"le-popup\">\n <div class=\"le-popup-container\" part=\"container\">\n {this.renderHeader()}\n {this.renderBody()}\n {this.renderFooter()}\n </div>\n </le-component>\n </dialog>\n );\n }\n}\n"],"names":[],"mappings":"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"}