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,29 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CO4npcak.js');
4
+ var utils = require('./utils-BeT0iyCQ.js');
5
+
6
+ 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}";
7
+
8
+ const LeCard = class {
9
+ constructor(hostRef) {
10
+ index.registerInstance(this, hostRef);
11
+ }
12
+ get el() { return index.getElement(this); }
13
+ /**
14
+ * Card variant style
15
+ * @allowedValues default | outlined | elevated
16
+ */
17
+ variant = 'default';
18
+ /**
19
+ * Whether the card is interactive (clickable)
20
+ */
21
+ interactive = false;
22
+ render() {
23
+ return (index.h("le-component", { key: '3878b21dafb24349fd9c178c784028302fb95214', component: "le-card", hostClass: utils.classnames(`variant-${this.variant}`, { 'interactive': this.interactive }) }, index.h("div", { key: '41470ad363928c5a5f70947a1fc859db03cf7619', class: "card", part: "card" }, index.h("div", { key: '9e0d85016f98ee15eba90bbd4db004f9210b1bf3', class: "card-header", part: "header" }, index.h("le-slot", { key: 'dcd23b7da86e4026f2cc7fb62b410d7317ab2e2b', name: "header", label: "Header", description: "Card title", type: "text", tag: "h3" }, index.h("slot", { key: '0f2f616c950d7548484bd8c87befa7ecff6d374f', name: "header" }))), index.h("div", { key: '1d77598852e8755e477a505d29c77643cea446d4', class: "card-content", part: "content" }, index.h("le-slot", { key: 'fd94892b8489f727a3e951f1771cab53b0667799', name: "", label: "Content", description: "Card content", type: "textarea", tag: "p", required: true }, index.h("slot", { key: 'dc1c2deff9405fd838aee733bc6e4394f60fefd7' }))), index.h("div", { key: '2944fa4515119b1868567545fa131fe178d7a3cf', class: "card-footer", part: "footer" }, index.h("le-slot", { key: 'bdd9b5a1baf2ebf487120afa458ae85285b05fcf', name: "footer", label: "Footer", description: "Card footer with actions", "allowed-components": "le-button,le-link" }, index.h("slot", { key: '8a79b1baaf6720f1397c0bacf5f71dc97dff2777', name: "footer" }))))));
24
+ }
25
+ };
26
+ LeCard.style = leCardDefaultCss;
27
+
28
+ exports.le_card = LeCard;
29
+ //# sourceMappingURL=le-card.entry.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-card.entry.cjs.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":["h","classnames"],"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,QACEA,2EAAc,SAAS,EAAC,SAAS,EAAC,SAAS,EAAEC,gBAAU,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,CAAA,CAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAA,EACrHD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAA,EAC3BA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,QAAQ,EAAA,EACpCA,OAAA,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,EACjFA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,QAAQ,EAAA,CAAQ,CACnB,CACN,EAENA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,SAAS,EAAA,EACtCA,OAAS,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,EAC1FA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACL,CACN,EAENA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,QAAQ,EAAA,EACpCA,OAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,0BAA0B,EAAA,oBAAA,EAAoB,mBAAmB,EAAA,EACjHA,OAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,QAAQ,EAAA,CAAQ,CACnB,CACN,CACF,CACO;;;;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CO4npcak.js');
4
+
5
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
6
+ /*
7
+ Stencil Client Patch Browser v4.38.3 | MIT Licensed | https://stenciljs.com
8
+ */
9
+
10
+ var patchBrowser = () => {
11
+ const importMeta = (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('le-kit.cjs.js', document.baseURI).href));
12
+ const opts = {};
13
+ if (importMeta !== "") {
14
+ opts.resourcesUrl = new URL(".", importMeta).href;
15
+ }
16
+ return index.promiseResolve(opts);
17
+ };
18
+
19
+ patchBrowser().then(async (options) => {
20
+ await index.globalScripts();
21
+ return index.bootstrapLazy([["le-button_6.cjs",[[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.cjs",[[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.cjs",[[769,"le-card",{"variant":[1],"interactive":[4]}]]],["le-number-input.cjs",[[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.cjs",[[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.cjs",[[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.cjs",[[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.cjs",[[769,"le-round-progress",{"value":[2],"padding":[2],"paths":[1],"params":[32]},null,{"value":["updateValue"],"padding":["updatePadding"],"paths":["updateProgressBackgrounds"]}]]],["le-turntable.cjs",[[769,"le-turntable",{"center":[1],"value":[2]},[[9,"mousemove","handleMouseMove"],[9,"mouseup","handleMouseUp"],[9,"resize","handleWindowResize"]],{"value":["updateValue"]}]]]], options);
22
+ });
23
+
24
+ exports.setNonce = index.setNonce;
25
+ //# sourceMappingURL=le-kit.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-kit.cjs.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":["promiseResolve","globalScripts","bootstrapLazy"],"mappings":";;;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,+PAAe;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,OAAOA,oBAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAMC,mBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,202 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CO4npcak.js');
4
+ var utils = require('./utils-BeT0iyCQ.js');
5
+
6
+ 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}";
7
+
8
+ const LeNumberInput = class {
9
+ constructor(hostRef) {
10
+ index.registerInstance(this, hostRef);
11
+ this.leChange = index.createEvent(this, "leChange");
12
+ this.leInput = index.createEvent(this, "leInput");
13
+ }
14
+ get el() { return index.getElement(this); }
15
+ /**
16
+ * The value of the input
17
+ */
18
+ value;
19
+ /**
20
+ * The name of the input
21
+ */
22
+ name;
23
+ /**
24
+ * Label for the input
25
+ */
26
+ label;
27
+ /**
28
+ * Placeholder text
29
+ */
30
+ placeholder;
31
+ /**
32
+ * Minimum allowed value
33
+ */
34
+ min;
35
+ /**
36
+ * Maximum allowed value
37
+ */
38
+ max;
39
+ /**
40
+ * Step value for increment/decrement
41
+ */
42
+ step = 1;
43
+ /**
44
+ * Whether the input is required
45
+ */
46
+ required = false;
47
+ /**
48
+ * Whether the input is disabled
49
+ */
50
+ disabled = false;
51
+ /**
52
+ * Whether the input is read-only
53
+ */
54
+ readonly = false;
55
+ /**
56
+ * Icon for the start icon
57
+ */
58
+ iconStart;
59
+ /**
60
+ * Whether to show the spinner controls
61
+ */
62
+ showSpinners = true;
63
+ /**
64
+ * External ID for linking with external systems
65
+ */
66
+ externalId;
67
+ /**
68
+ * Internal validation state
69
+ */
70
+ isValid = true;
71
+ validationMessage = '';
72
+ /**
73
+ * Emitted when the value changes (on blur or Enter)
74
+ */
75
+ leChange;
76
+ /**
77
+ * Emitted when the input value changes (on keystroke/spin)
78
+ */
79
+ leInput;
80
+ valueChanged() {
81
+ this.validate();
82
+ }
83
+ validate() {
84
+ if (this.required && (this.value === undefined || this.value === null || isNaN(this.value))) {
85
+ this.isValid = false;
86
+ this.validationMessage = 'This field is required';
87
+ return;
88
+ }
89
+ if (this.value !== undefined && this.value !== null && !isNaN(this.value)) {
90
+ if (this.min !== undefined && this.value < this.min) {
91
+ this.isValid = false;
92
+ this.validationMessage = `Value must be at least ${this.min}`;
93
+ return;
94
+ }
95
+ if (this.max !== undefined && this.value > this.max) {
96
+ this.isValid = false;
97
+ this.validationMessage = `Value must be at most ${this.max}`;
98
+ return;
99
+ }
100
+ }
101
+ this.isValid = true;
102
+ this.validationMessage = '';
103
+ }
104
+ emitChange() {
105
+ this.leChange.emit({
106
+ value: this.value,
107
+ name: this.name,
108
+ externalId: this.externalId,
109
+ isValid: this.isValid
110
+ });
111
+ }
112
+ emitInput() {
113
+ this.leInput.emit({
114
+ value: this.value,
115
+ name: this.name,
116
+ externalId: this.externalId,
117
+ isValid: this.isValid
118
+ });
119
+ }
120
+ updateValue(newValue) {
121
+ if (this.disabled || this.readonly)
122
+ return;
123
+ // Round to avoid floating point errors
124
+ const precision = this.step.toString().split('.')[1]?.length || 0;
125
+ const rounded = parseFloat(newValue.toFixed(precision));
126
+ this.value = rounded;
127
+ this.validate();
128
+ this.emitInput();
129
+ }
130
+ handleInput = (ev) => {
131
+ const input = ev.target;
132
+ const val = parseFloat(input.value);
133
+ if (input.value === '') {
134
+ this.value = undefined;
135
+ }
136
+ else if (!isNaN(val)) {
137
+ this.value = val;
138
+ }
139
+ this.validate();
140
+ this.emitInput();
141
+ };
142
+ handleChange = () => {
143
+ this.validate();
144
+ this.emitChange();
145
+ };
146
+ handleKeyDown = (ev) => {
147
+ if (this.disabled || this.readonly)
148
+ return;
149
+ let multiplier = 1;
150
+ if (ev.shiftKey)
151
+ multiplier = 10;
152
+ if (ev.altKey)
153
+ multiplier = 0.1;
154
+ const current = this.value || 0;
155
+ if (ev.key === 'ArrowUp') {
156
+ ev.preventDefault();
157
+ this.updateValue(current + (this.step * multiplier));
158
+ }
159
+ else if (ev.key === 'ArrowDown') {
160
+ ev.preventDefault();
161
+ this.updateValue(current - (this.step * multiplier));
162
+ }
163
+ };
164
+ handleWheel = (ev) => {
165
+ if (this.disabled || this.readonly)
166
+ return;
167
+ // Only handle if input is focused to prevent accidental scrolling
168
+ if (document.activeElement !== ev.target)
169
+ return;
170
+ ev.preventDefault();
171
+ const current = this.value || 0;
172
+ if (ev.deltaY < 0) {
173
+ this.updateValue(current + this.step);
174
+ }
175
+ else {
176
+ this.updateValue(current - this.step);
177
+ }
178
+ };
179
+ increment = (ev) => {
180
+ ev.preventDefault(); // Prevent focus loss
181
+ const current = this.value || 0;
182
+ this.updateValue(current + this.step);
183
+ // Trigger change event for buttons as they are "final" actions usually
184
+ this.emitChange();
185
+ };
186
+ decrement = (ev) => {
187
+ ev.preventDefault();
188
+ const current = this.value || 0;
189
+ this.updateValue(current - this.step);
190
+ this.emitChange();
191
+ };
192
+ render() {
193
+ return (index.h("le-component", { key: '6af8d1fd4c89597f7da3be391cabccbb9d1f9800', component: "le-number-input", hostClass: utils.classnames({ 'disabled': this.disabled }) }, index.h("div", { key: 'e4e0ad02f89b2eb8dd7649d2f2e70bc821cb2774', class: "le-input-wrapper" }, this.label && (index.h("label", { key: '30ad120d5571018ea9891340b5406f6939a1fe0e', class: "le-input-label", htmlFor: this.name }, this.label)), index.h("div", { key: '27b835ad1559a1ea4366c4b7c2b31d412e8b8ef7', class: utils.classnames('le-input-container', { 'has-error': !this.isValid }) }, this.iconStart && (index.h("span", { key: '0164cbb985b900b4b3136061a2609987a2c06e9f', class: "icon-start" }, this.iconStart)), index.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 && (index.h("div", { key: '7ed04341c0c27a7d37afd4baf9698ea7776702f6', class: "le-input-controls" }, index.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" }, index.h("span", { key: 'd56b463073ce8174c668138179f1bbc16c700d9f', slot: "icon-only" }, "\u2191")), index.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" }, index.h("span", { key: 'e2330cdf9f431b2c9f0953e42f71e897879d10fe', slot: "icon-only" }, "\u2193"))))), !this.isValid && index.h("div", { key: 'ba9bb8af8c4814b4316c1f0947c50a99fd24634c', class: "le-input-error" }, this.validationMessage), index.h("div", { key: '30e43ac088f995fe24ab47678ca70fe771b6f1ab', class: "le-input-description" }, index.h("le-slot", { key: '94f4bd21e32595470781eb6b004c9acbee72b81a', name: "description", type: "text", tag: "p", label: "Description" }, index.h("slot", { key: 'def94a79248d1887c5416ff95b2c625df85c68d0', name: "description" }))))));
194
+ }
195
+ static get watchers() { return {
196
+ "value": ["valueChanged"]
197
+ }; }
198
+ };
199
+ LeNumberInput.style = leNumberInputCss;
200
+
201
+ exports.le_number_input = LeNumberInput;
202
+ //# sourceMappingURL=le-number-input.entry.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-number-input.entry.cjs.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":["h","classnames"],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CO4npcak.js');
4
+
5
+ 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%}}";
6
+
7
+ const LePopup = class {
8
+ constructor(hostRef) {
9
+ index.registerInstance(this, hostRef);
10
+ this.leConfirm = index.createEvent(this, "leConfirm");
11
+ this.leCancel = index.createEvent(this, "leCancel");
12
+ this.leOpen = index.createEvent(this, "leOpen");
13
+ this.leClose = index.createEvent(this, "leClose");
14
+ }
15
+ get el() { return index.getElement(this); }
16
+ /**
17
+ * Whether the popup is currently visible
18
+ */
19
+ open = false;
20
+ /**
21
+ * Type of popup: alert (OK only), confirm (OK/Cancel), prompt (input + OK/Cancel), custom
22
+ */
23
+ type = 'alert';
24
+ /**
25
+ * Optional title for the popup header
26
+ */
27
+ popupTitle;
28
+ /**
29
+ * Message text to display (for alert/confirm/prompt types)
30
+ */
31
+ message;
32
+ /**
33
+ * Whether the popup is modal (blocks interaction with page behind)
34
+ */
35
+ modal = true;
36
+ /**
37
+ * Position of the popup on screen
38
+ */
39
+ position = 'center';
40
+ /**
41
+ * Text for the confirm/OK button
42
+ */
43
+ confirmText = 'OK';
44
+ /**
45
+ * Text for the cancel button
46
+ */
47
+ cancelText = 'Cancel';
48
+ /**
49
+ * Placeholder text for prompt input
50
+ */
51
+ placeholder = '';
52
+ /**
53
+ * Default value for prompt input
54
+ */
55
+ defaultValue = '';
56
+ /**
57
+ * Whether clicking the backdrop closes the popup (modal only)
58
+ */
59
+ closeOnBackdrop = true;
60
+ /**
61
+ * Internal state for prompt input value
62
+ */
63
+ inputValue = '';
64
+ /**
65
+ * Emitted when the popup is confirmed (OK clicked)
66
+ */
67
+ leConfirm;
68
+ /**
69
+ * Emitted when the popup is cancelled (Cancel clicked or dismissed)
70
+ */
71
+ leCancel;
72
+ /**
73
+ * Emitted when the popup opens
74
+ */
75
+ leOpen;
76
+ /**
77
+ * Emitted when the popup closes
78
+ */
79
+ leClose;
80
+ dialogEl;
81
+ inputEl;
82
+ resolvePromise;
83
+ componentWillLoad() {
84
+ this.inputValue = this.defaultValue;
85
+ }
86
+ componentDidLoad() {
87
+ // Native dialog handles Escape key automatically when modal
88
+ // We just need to listen for the cancel event
89
+ this.dialogEl?.addEventListener('cancel', this.handleDialogCancel);
90
+ }
91
+ disconnectedCallback() {
92
+ this.dialogEl?.removeEventListener('cancel', this.handleDialogCancel);
93
+ }
94
+ handleDialogCancel = (e) => {
95
+ e.preventDefault(); // Prevent default close to handle it ourselves
96
+ this.handleCancel();
97
+ };
98
+ /**
99
+ * Opens the popup and returns a promise that resolves when closed
100
+ */
101
+ async show() {
102
+ return new Promise((resolve) => {
103
+ this.resolvePromise = resolve;
104
+ this.inputValue = this.defaultValue;
105
+ this.open = true;
106
+ // Use requestAnimationFrame to ensure the dialog element is rendered
107
+ requestAnimationFrame(() => {
108
+ if (this.dialogEl) {
109
+ if (this.modal) {
110
+ this.dialogEl.showModal();
111
+ }
112
+ else {
113
+ this.dialogEl.show();
114
+ }
115
+ this.leOpen.emit();
116
+ // Focus input for prompt type
117
+ if (this.type === 'prompt' && this.inputEl) {
118
+ this.inputEl.focus();
119
+ this.inputEl.select();
120
+ }
121
+ }
122
+ });
123
+ });
124
+ }
125
+ /**
126
+ * Closes the popup with a result
127
+ */
128
+ async hide(confirmed = false) {
129
+ const result = {
130
+ confirmed,
131
+ value: this.type === 'prompt' ? this.inputValue : undefined,
132
+ };
133
+ this.dialogEl?.close();
134
+ this.open = false;
135
+ this.leClose.emit(result);
136
+ if (this.resolvePromise) {
137
+ this.resolvePromise(result);
138
+ this.resolvePromise = undefined;
139
+ }
140
+ }
141
+ handleConfirm = () => {
142
+ const result = {
143
+ confirmed: true,
144
+ value: this.type === 'prompt' ? this.inputValue : undefined,
145
+ };
146
+ this.leConfirm.emit(result);
147
+ this.hide(true);
148
+ };
149
+ handleCancel = () => {
150
+ const result = {
151
+ confirmed: false,
152
+ value: undefined,
153
+ };
154
+ this.leCancel.emit(result);
155
+ this.hide(false);
156
+ };
157
+ handleBackdropClick = (e) => {
158
+ // Check if click was on the dialog backdrop (outside the dialog box)
159
+ if (this.closeOnBackdrop && e.target === this.dialogEl) {
160
+ const rect = this.dialogEl.getBoundingClientRect();
161
+ const clickedInDialog = (e.clientX >= rect.left &&
162
+ e.clientX <= rect.right &&
163
+ e.clientY >= rect.top &&
164
+ e.clientY <= rect.bottom);
165
+ if (!clickedInDialog) {
166
+ this.handleCancel();
167
+ }
168
+ }
169
+ };
170
+ handleInputChange = (e) => {
171
+ this.inputValue = e.target.value;
172
+ };
173
+ handleKeyDown = (e) => {
174
+ if (e.key === 'Enter' && this.type !== 'custom') {
175
+ e.preventDefault();
176
+ this.handleConfirm();
177
+ }
178
+ };
179
+ hasSlot(name) {
180
+ return !!this.el.querySelector(`[slot="${name}"]`);
181
+ }
182
+ renderHeader() {
183
+ if (this.hasSlot('header')) {
184
+ return (index.h("div", { class: "le-popup-header", part: "header" }, index.h("slot", { name: "header" })));
185
+ }
186
+ if (this.popupTitle) {
187
+ return (index.h("div", { class: "le-popup-header", part: "header" }, this.popupTitle));
188
+ }
189
+ return null;
190
+ }
191
+ renderBody() {
192
+ return (index.h("div", { class: "le-popup-body", part: "body" }, this.message && index.h("p", { class: "le-popup-message" }, this.message), this.type === 'prompt' && (index.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) })), index.h("le-slot", { name: "", tag: "div", description: "Custom popup content", type: "slot" }, index.h("slot", null))));
193
+ }
194
+ renderFooter() {
195
+ if (this.hasSlot('footer')) {
196
+ return (index.h("div", { class: "le-popup-footer", part: "footer" }, index.h("slot", { name: "footer" })));
197
+ }
198
+ // For custom type without footer slot, don't render default buttons
199
+ if (this.type === 'custom') {
200
+ return null;
201
+ }
202
+ return (index.h("div", { class: "le-popup-footer", part: "footer" }, (this.type === 'confirm' || this.type === 'prompt') && (index.h("le-button", { variant: "outlined", part: "button-cancel", class: "le-popup-btn", onClick: this.handleCancel }, this.cancelText)), index.h("le-button", { variant: "solid", part: "button-confirm", class: "le-popup-btn", onClick: this.handleConfirm }, this.confirmText)));
203
+ }
204
+ render() {
205
+ const positionClass = `le-popup-position-${this.position}`;
206
+ return (index.h("dialog", { key: '1c38c82d3f466449ff57f731fc22936a7e5af0eb', class: `le-popup-dialog ${positionClass}`, part: "dialog", ref: (el) => (this.dialogEl = el), onClick: this.handleBackdropClick }, index.h("le-component", { key: '8f82316129786f9fe17ae6cc5f5a8cf7cbc3a9b5', component: "le-popup" }, index.h("div", { key: 'e5fef42ae8b41ea52db123b4576849407be33c65', class: "le-popup-container", part: "container" }, this.renderHeader(), this.renderBody(), this.renderFooter()))));
207
+ }
208
+ };
209
+ LePopup.style = lePopupCss;
210
+
211
+ exports.le_popup = LePopup;
212
+ //# sourceMappingURL=le-popup.entry.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"le-popup.entry.cjs.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":["h"],"mappings":"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"}