le-kit 0.1.12 → 0.1.14

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 (313) hide show
  1. package/dist/components/index.d.ts +33 -0
  2. package/dist/components/le-box.d.ts +11 -0
  3. package/dist/components/le-button.d.ts +11 -0
  4. package/dist/components/le-card.d.ts +11 -0
  5. package/dist/components/le-checkbox.d.ts +11 -0
  6. package/dist/components/le-component.d.ts +11 -0
  7. package/dist/components/le-number-input.d.ts +11 -0
  8. package/dist/components/le-popover.d.ts +11 -0
  9. package/dist/components/le-popup.d.ts +11 -0
  10. package/dist/components/le-round-progress.d.ts +11 -0
  11. package/dist/components/le-slot.d.ts +11 -0
  12. package/dist/components/le-stack.d.ts +11 -0
  13. package/dist/components/le-string-input.d.ts +11 -0
  14. package/dist/components/le-text.d.ts +11 -0
  15. package/dist/components/le-turntable.d.ts +11 -0
  16. package/dist/core/cjs/{index-BsRb_UTe.js → index-B0mg71He.js} +6 -6
  17. package/dist/core/cjs/index-B0mg71He.js.map +1 -0
  18. package/dist/core/cjs/index.cjs.js +2 -2
  19. package/dist/core/cjs/le-box.cjs.entry.js +2 -2
  20. package/dist/core/cjs/le-button.cjs.entry.js +2 -2
  21. package/dist/core/cjs/le-card.cjs.entry.js +2 -2
  22. package/dist/core/cjs/le-checkbox.cjs.entry.js +2 -2
  23. package/dist/core/cjs/le-kit.cjs.js +1 -1
  24. package/dist/core/cjs/le-number-input.cjs.entry.js +2 -2
  25. package/dist/core/cjs/le-popover.cjs.entry.js +1 -1
  26. package/dist/core/cjs/le-popup.cjs.entry.js +1 -1
  27. package/dist/core/cjs/le-round-progress.cjs.entry.js +1 -1
  28. package/dist/core/cjs/le-stack.cjs.entry.js +2 -2
  29. package/dist/core/cjs/le-string-input.cjs.entry.js +2 -2
  30. package/dist/core/cjs/le-text.cjs.entry.js +2 -2
  31. package/dist/core/cjs/le-turntable.cjs.entry.js +1 -1
  32. package/dist/core/cjs/loader.cjs.js +1 -1
  33. package/dist/{cjs/utils-DqhadIxH.js → core/cjs/utils-jdqP71LP.js} +3 -3
  34. package/dist/core/cjs/{utils-nsP8_w8_.js.map → utils-jdqP71LP.js.map} +1 -1
  35. package/dist/core/collection/global/app.js +4 -4
  36. package/dist/core/collection/global/app.js.map +1 -1
  37. package/dist/core/components/index.d.ts +33 -0
  38. package/dist/{esm → core/components}/index.js +9 -2
  39. package/dist/core/components/index.js.map +1 -0
  40. package/dist/core/components/le-box.d.ts +11 -0
  41. package/dist/{cjs/le-box.cjs.entry.js → core/components/le-box.js} +87 -14
  42. package/dist/core/components/le-box.js.map +1 -0
  43. package/dist/core/components/le-button.d.ts +11 -0
  44. package/dist/core/components/le-button.js +9 -0
  45. package/dist/core/components/le-button.js.map +1 -0
  46. package/dist/{esm/le-button_6.entry.js → core/components/le-button2.js} +919 -972
  47. package/dist/core/components/le-button2.js.map +1 -0
  48. package/dist/core/components/le-card.d.ts +11 -0
  49. package/dist/core/components/le-card.js +84 -0
  50. package/dist/core/components/le-card.js.map +1 -0
  51. package/dist/core/components/le-checkbox.d.ts +11 -0
  52. package/dist/core/components/le-checkbox.js +9 -0
  53. package/dist/core/components/le-checkbox.js.map +1 -0
  54. package/dist/core/components/le-component.d.ts +11 -0
  55. package/dist/core/components/le-component.js +9 -0
  56. package/dist/core/components/le-component.js.map +1 -0
  57. package/dist/core/components/le-number-input.d.ts +11 -0
  58. package/dist/{cjs/le-number-input.cjs.entry.js → core/components/le-number-input.js} +85 -15
  59. package/dist/core/components/le-number-input.js.map +1 -0
  60. package/dist/core/components/le-popover.d.ts +11 -0
  61. package/dist/core/components/le-popover.js +9 -0
  62. package/dist/core/components/le-popover.js.map +1 -0
  63. package/dist/{collection/components/le-popover/le-popover.js → core/components/le-popover2.js} +49 -360
  64. package/dist/core/components/le-popover2.js.map +1 -0
  65. package/dist/core/components/le-popup.d.ts +11 -0
  66. package/dist/{cjs/le-popup.cjs.entry.js → core/components/le-popup.js} +88 -21
  67. package/dist/core/components/le-popup.js.map +1 -0
  68. package/dist/core/components/le-round-progress.d.ts +11 -0
  69. package/dist/{cjs/le-round-progress.cjs.entry.js → core/components/le-round-progress.js} +43 -14
  70. package/dist/core/components/le-round-progress.js.map +1 -0
  71. package/dist/core/components/le-slot.d.ts +11 -0
  72. package/dist/core/components/le-slot.js +9 -0
  73. package/dist/core/components/le-slot.js.map +1 -0
  74. package/dist/core/components/le-stack.d.ts +11 -0
  75. package/dist/{cjs/le-stack.cjs.entry.js → core/components/le-stack.js} +78 -14
  76. package/dist/core/components/le-stack.js.map +1 -0
  77. package/dist/core/components/le-string-input.d.ts +11 -0
  78. package/dist/core/components/le-string-input.js +9 -0
  79. package/dist/core/components/le-string-input.js.map +1 -0
  80. package/dist/core/components/le-text.d.ts +11 -0
  81. package/dist/{cjs/le-text.cjs.entry.js → core/components/le-text.js} +80 -16
  82. package/dist/core/components/le-text.js.map +1 -0
  83. package/dist/core/components/le-turntable.d.ts +11 -0
  84. package/dist/{cjs/le-turntable.cjs.entry.js → core/components/le-turntable.js} +37 -12
  85. package/dist/core/components/le-turntable.js.map +1 -0
  86. package/dist/core/components/utils.js +310 -0
  87. package/dist/core/components/utils.js.map +1 -0
  88. package/dist/core/esm/{index-CJ-z5Zj1.js → index-SKsXnjWI.js} +6 -6
  89. package/dist/core/{le-kit/p-CJ-z5Zj1.js.map → esm/index-SKsXnjWI.js.map} +1 -1
  90. package/dist/core/esm/index.js +2 -2
  91. package/dist/core/esm/le-box.entry.js +2 -2
  92. package/dist/core/esm/le-button.entry.js +2 -2
  93. package/dist/core/esm/le-card.entry.js +2 -2
  94. package/dist/core/esm/le-checkbox.entry.js +2 -2
  95. package/dist/core/esm/le-kit.js +2 -2
  96. package/dist/core/esm/le-number-input.entry.js +2 -2
  97. package/dist/core/esm/le-popover.entry.js +1 -1
  98. package/dist/core/esm/le-popup.entry.js +1 -1
  99. package/dist/core/esm/le-round-progress.entry.js +1 -1
  100. package/dist/core/esm/le-stack.entry.js +2 -2
  101. package/dist/core/esm/le-string-input.entry.js +2 -2
  102. package/dist/core/esm/le-text.entry.js +2 -2
  103. package/dist/core/esm/le-turntable.entry.js +1 -1
  104. package/dist/core/esm/loader.js +2 -2
  105. package/dist/{esm/utils-Cf7fMI0j.js → core/esm/utils-DZdP1JiG.js} +3 -3
  106. package/dist/core/esm/{utils-Bxmld82M.js.map → utils-DZdP1JiG.js.map} +1 -1
  107. package/dist/core/le-kit/index.esm.js +1 -1
  108. package/dist/core/le-kit/le-kit.esm.js +1 -1
  109. package/dist/core/le-kit/p--VxUdzYV.js +2 -0
  110. package/dist/core/le-kit/{p-Drz36PDp.js.map → p--VxUdzYV.js.map} +1 -1
  111. package/dist/core/le-kit/{p-2ac4789a.entry.js → p-189cb775.entry.js} +2 -2
  112. package/dist/core/le-kit/{p-556086ca.entry.js → p-35c1d413.entry.js} +2 -2
  113. package/dist/core/le-kit/{p-aa6e906f.entry.js → p-4f133e72.entry.js} +2 -2
  114. package/dist/core/le-kit/{p-df552906.entry.js → p-55f70091.entry.js} +2 -2
  115. package/dist/core/le-kit/{p-e0861e82.entry.js → p-5fd7b23a.entry.js} +2 -2
  116. package/dist/core/le-kit/{p-5ef81068.entry.js → p-6e414a5c.entry.js} +2 -2
  117. package/dist/core/le-kit/{p-d75214f9.entry.js → p-7b121ca7.entry.js} +2 -2
  118. package/dist/core/le-kit/{p-45eace7c.entry.js → p-8c81fa95.entry.js} +2 -2
  119. package/dist/core/le-kit/{p-257495cc.entry.js → p-9aa81442.entry.js} +2 -2
  120. package/dist/core/le-kit/p-SKsXnjWI.js +3 -0
  121. package/dist/core/le-kit/p-SKsXnjWI.js.map +1 -0
  122. package/dist/core/le-kit/{p-66d35f48.entry.js → p-a9d05ef6.entry.js} +2 -2
  123. package/dist/core/le-kit/{p-73682c5e.entry.js → p-b2bd2a80.entry.js} +2 -2
  124. package/dist/core/le-kit/{p-0308bd1f.entry.js → p-ccac9611.entry.js} +2 -2
  125. package/dist/core/types/global/app.d.ts +4 -4
  126. package/dist/le-kit/assets/custom-elements.json +1230 -1230
  127. package/dist/le-kit/index-CAY3Hk_i.js +4559 -0
  128. package/dist/le-kit/index-CAY3Hk_i.js.map +1 -0
  129. package/dist/le-kit/index.esm.js +116 -2
  130. package/dist/le-kit/index.esm.js.map +1 -1
  131. package/dist/{esm → le-kit}/le-box.entry.js +3 -3
  132. package/dist/le-kit/le-button.entry.esm.js.map +1 -0
  133. package/dist/le-kit/le-button.entry.js +90 -0
  134. package/dist/{esm → le-kit}/le-card.entry.js +3 -3
  135. package/dist/le-kit/le-checkbox.entry.esm.js.map +1 -0
  136. package/dist/le-kit/le-checkbox.entry.js +59 -0
  137. package/dist/le-kit/le-component.entry.esm.js.map +1 -0
  138. package/dist/{collection/components/le-component/le-component.js → le-kit/le-component.entry.js} +19 -138
  139. package/dist/le-kit/le-kit.css +1010 -1
  140. package/dist/le-kit/le-kit.esm.js +48 -2
  141. package/dist/le-kit/le-kit.esm.js.map +1 -1
  142. package/dist/{esm → le-kit}/le-number-input.entry.js +5 -5
  143. package/dist/le-kit/le-popover.entry.esm.js.map +1 -0
  144. package/dist/le-kit/le-popover.entry.js +346 -0
  145. package/dist/{esm → le-kit}/le-popup.entry.js +6 -6
  146. package/dist/{esm → le-kit}/le-round-progress.entry.js +2 -2
  147. package/dist/le-kit/le-slot.entry.esm.js.map +1 -0
  148. package/dist/{collection/components/le-slot/le-slot.js → le-kit/le-slot.entry.js} +20 -273
  149. package/dist/{esm → le-kit}/le-stack.entry.js +3 -3
  150. package/dist/le-kit/le-string-input.entry.esm.js.map +1 -0
  151. package/dist/le-kit/le-string-input.entry.js +93 -0
  152. package/dist/{esm → le-kit}/le-text.entry.js +3 -3
  153. package/dist/{esm → le-kit}/le-turntable.entry.js +2 -2
  154. package/dist/{core/esm/utils-Bxmld82M.js → le-kit/utils-cwSNy7ZS.js} +3 -3
  155. package/dist/{esm/utils-Cf7fMI0j.js.map → le-kit/utils-cwSNy7ZS.js.map} +1 -1
  156. package/dist/types/global/app.d.ts +4 -4
  157. package/package.json +4 -5
  158. package/readme.md +2 -2
  159. package/custom-elements.json +0 -4305
  160. package/dist/cjs/index-o1DRKw1g.js +0 -1842
  161. package/dist/cjs/index-o1DRKw1g.js.map +0 -1
  162. package/dist/cjs/index.cjs.js +0 -119
  163. package/dist/cjs/index.cjs.js.map +0 -1
  164. package/dist/cjs/le-box.entry.cjs.js.map +0 -1
  165. package/dist/cjs/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.cjs.js.map +0 -1
  166. package/dist/cjs/le-button_6.cjs.entry.js +0 -1206
  167. package/dist/cjs/le-card.cjs.entry.js +0 -29
  168. package/dist/cjs/le-card.entry.cjs.js.map +0 -1
  169. package/dist/cjs/le-kit.cjs.js +0 -25
  170. package/dist/cjs/le-kit.cjs.js.map +0 -1
  171. package/dist/cjs/le-number-input.entry.cjs.js.map +0 -1
  172. package/dist/cjs/le-popup.entry.cjs.js.map +0 -1
  173. package/dist/cjs/le-round-progress.entry.cjs.js.map +0 -1
  174. package/dist/cjs/le-stack.entry.cjs.js.map +0 -1
  175. package/dist/cjs/le-text.entry.cjs.js.map +0 -1
  176. package/dist/cjs/le-turntable.entry.cjs.js.map +0 -1
  177. package/dist/cjs/loader.cjs.js +0 -13
  178. package/dist/cjs/loader.cjs.js.map +0 -1
  179. package/dist/cjs/utils-DqhadIxH.js.map +0 -1
  180. package/dist/collection/assets/custom-elements.json +0 -4305
  181. package/dist/collection/collection-manifest.json +0 -26
  182. package/dist/collection/components/le-box/le-box.default.css +0 -37
  183. package/dist/collection/components/le-box/le-box.js +0 -614
  184. package/dist/collection/components/le-box/le-box.js.map +0 -1
  185. package/dist/collection/components/le-button/le-button.default.css +0 -263
  186. package/dist/collection/components/le-button/le-button.js +0 -368
  187. package/dist/collection/components/le-button/le-button.js.map +0 -1
  188. package/dist/collection/components/le-card/le-card.default.css +0 -74
  189. package/dist/collection/components/le-card/le-card.js +0 -102
  190. package/dist/collection/components/le-card/le-card.js.map +0 -1
  191. package/dist/collection/components/le-checkbox/le-checkbox.css +0 -93
  192. package/dist/collection/components/le-checkbox/le-checkbox.js +0 -192
  193. package/dist/collection/components/le-checkbox/le-checkbox.js.map +0 -1
  194. package/dist/collection/components/le-component/le-component.css +0 -189
  195. package/dist/collection/components/le-component/le-component.js.map +0 -1
  196. package/dist/collection/components/le-number-input/le-number-input.css +0 -135
  197. package/dist/collection/components/le-number-input/le-number-input.js +0 -515
  198. package/dist/collection/components/le-number-input/le-number-input.js.map +0 -1
  199. package/dist/collection/components/le-popover/le-popover.css +0 -143
  200. package/dist/collection/components/le-popover/le-popover.js.map +0 -1
  201. package/dist/collection/components/le-popup/le-popup.api.js +0 -101
  202. package/dist/collection/components/le-popup/le-popup.api.js.map +0 -1
  203. package/dist/collection/components/le-popup/le-popup.css +0 -222
  204. package/dist/collection/components/le-popup/le-popup.js +0 -596
  205. package/dist/collection/components/le-popup/le-popup.js.map +0 -1
  206. package/dist/collection/components/le-round-progress/le-round-progress.css +0 -34
  207. package/dist/collection/components/le-round-progress/le-round-progress.js +0 -184
  208. package/dist/collection/components/le-round-progress/le-round-progress.js.map +0 -1
  209. package/dist/collection/components/le-slot/le-slot.default.css +0 -222
  210. package/dist/collection/components/le-slot/le-slot.js.map +0 -1
  211. package/dist/collection/components/le-stack/le-stack.default.css +0 -37
  212. package/dist/collection/components/le-stack/le-stack.js +0 -389
  213. package/dist/collection/components/le-stack/le-stack.js.map +0 -1
  214. package/dist/collection/components/le-string-input/le-string-input.css +0 -83
  215. package/dist/collection/components/le-string-input/le-string-input.js +0 -359
  216. package/dist/collection/components/le-string-input/le-string-input.js.map +0 -1
  217. package/dist/collection/components/le-text/le-text.default.css +0 -169
  218. package/dist/collection/components/le-text/le-text.js +0 -475
  219. package/dist/collection/components/le-text/le-text.js.map +0 -1
  220. package/dist/collection/components/le-turntable/le-turntable.css +0 -10
  221. package/dist/collection/components/le-turntable/le-turntable.js +0 -210
  222. package/dist/collection/components/le-turntable/le-turntable.js.map +0 -1
  223. package/dist/collection/global/app.js +0 -167
  224. package/dist/collection/global/app.js.map +0 -1
  225. package/dist/collection/index.js +0 -15
  226. package/dist/collection/index.js.map +0 -1
  227. package/dist/collection/types/blocks.js +0 -115
  228. package/dist/collection/types/blocks.js.map +0 -1
  229. package/dist/collection/types/options.js +0 -2
  230. package/dist/collection/types/options.js.map +0 -1
  231. package/dist/collection/utils/utils.js +0 -141
  232. package/dist/collection/utils/utils.js.map +0 -1
  233. package/dist/core/cjs/index-BsRb_UTe.js.map +0 -1
  234. package/dist/core/cjs/utils-nsP8_w8_.js +0 -152
  235. package/dist/core/esm/index-CJ-z5Zj1.js.map +0 -1
  236. package/dist/core/le-kit/p-CJ-z5Zj1.js +0 -3
  237. package/dist/core/le-kit/p-Drz36PDp.js +0 -2
  238. package/dist/docs.d.ts +0 -443
  239. package/dist/docs.json +0 -5185
  240. package/dist/esm/index-CwNQ1GTa.js +0 -1824
  241. package/dist/esm/index-CwNQ1GTa.js.map +0 -1
  242. package/dist/esm/index.js.map +0 -1
  243. package/dist/esm/le-box.entry.js.map +0 -1
  244. package/dist/esm/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.js.map +0 -1
  245. package/dist/esm/le-card.entry.js.map +0 -1
  246. package/dist/esm/le-kit.js +0 -21
  247. package/dist/esm/le-kit.js.map +0 -1
  248. package/dist/esm/le-number-input.entry.js.map +0 -1
  249. package/dist/esm/le-popup.entry.js.map +0 -1
  250. package/dist/esm/le-round-progress.entry.js.map +0 -1
  251. package/dist/esm/le-stack.entry.js.map +0 -1
  252. package/dist/esm/le-text.entry.js.map +0 -1
  253. package/dist/esm/le-turntable.entry.js.map +0 -1
  254. package/dist/esm/loader.js +0 -11
  255. package/dist/esm/loader.js.map +0 -1
  256. package/dist/index.cjs.js +0 -1
  257. package/dist/index.js +0 -1
  258. package/dist/le-kit/le-button.le-checkbox.le-component.le-popover.le-slot.le-string-input.entry.esm.js.map +0 -1
  259. package/dist/le-kit/p-08dbcc25.entry.js +0 -2
  260. package/dist/le-kit/p-08dbcc25.entry.js.map +0 -1
  261. package/dist/le-kit/p-5dc35729.entry.js +0 -2
  262. package/dist/le-kit/p-5dc35729.entry.js.map +0 -1
  263. package/dist/le-kit/p-64374730.entry.js +0 -2
  264. package/dist/le-kit/p-64374730.entry.js.map +0 -1
  265. package/dist/le-kit/p-79ec6f7c.entry.js +0 -2
  266. package/dist/le-kit/p-79ec6f7c.entry.js.map +0 -1
  267. package/dist/le-kit/p-8daf3c7f.entry.js +0 -2
  268. package/dist/le-kit/p-8daf3c7f.entry.js.map +0 -1
  269. package/dist/le-kit/p-9c69235d.entry.js +0 -2
  270. package/dist/le-kit/p-9c69235d.entry.js.map +0 -1
  271. package/dist/le-kit/p-CwNQ1GTa.js +0 -3
  272. package/dist/le-kit/p-CwNQ1GTa.js.map +0 -1
  273. package/dist/le-kit/p-ad398acd.entry.js +0 -2
  274. package/dist/le-kit/p-ad398acd.entry.js.map +0 -1
  275. package/dist/le-kit/p-b8122ad6.entry.js +0 -2
  276. package/dist/le-kit/p-b8122ad6.entry.js.map +0 -1
  277. package/dist/le-kit/p-f9008505.entry.js +0 -2
  278. package/dist/le-kit/p-f9008505.entry.js.map +0 -1
  279. package/dist/le-kit/p-y3FECAx9.js +0 -2
  280. package/dist/le-kit/p-y3FECAx9.js.map +0 -1
  281. package/dist/themes/base.css +0 -89
  282. package/dist/themes/dark.css +0 -100
  283. package/dist/themes/default.css +0 -108
  284. package/dist/themes/gradient.css +0 -100
  285. package/dist/themes/index.css +0 -413
  286. package/dist/themes/minimal.css +0 -100
  287. package/dist/themes/warm.css +0 -100
  288. /package/dist/{collection → components}/themes/base.css +0 -0
  289. /package/dist/{collection → components}/themes/dark.css +0 -0
  290. /package/dist/{collection → components}/themes/default.css +0 -0
  291. /package/dist/{collection → components}/themes/gradient.css +0 -0
  292. /package/dist/{collection → components}/themes/index.css +0 -0
  293. /package/dist/{collection → components}/themes/minimal.css +0 -0
  294. /package/dist/{collection → components}/themes/warm.css +0 -0
  295. /package/dist/core/le-kit/{p-2ac4789a.entry.js.map → p-189cb775.entry.js.map} +0 -0
  296. /package/dist/core/le-kit/{p-556086ca.entry.js.map → p-35c1d413.entry.js.map} +0 -0
  297. /package/dist/core/le-kit/{p-aa6e906f.entry.js.map → p-4f133e72.entry.js.map} +0 -0
  298. /package/dist/core/le-kit/{p-df552906.entry.js.map → p-55f70091.entry.js.map} +0 -0
  299. /package/dist/core/le-kit/{p-e0861e82.entry.js.map → p-5fd7b23a.entry.js.map} +0 -0
  300. /package/dist/core/le-kit/{p-5ef81068.entry.js.map → p-6e414a5c.entry.js.map} +0 -0
  301. /package/dist/core/le-kit/{p-d75214f9.entry.js.map → p-7b121ca7.entry.js.map} +0 -0
  302. /package/dist/core/le-kit/{p-45eace7c.entry.js.map → p-8c81fa95.entry.js.map} +0 -0
  303. /package/dist/core/le-kit/{p-257495cc.entry.js.map → p-9aa81442.entry.js.map} +0 -0
  304. /package/dist/core/le-kit/{p-66d35f48.entry.js.map → p-a9d05ef6.entry.js.map} +0 -0
  305. /package/dist/core/le-kit/{p-73682c5e.entry.js.map → p-b2bd2a80.entry.js.map} +0 -0
  306. /package/dist/core/le-kit/{p-0308bd1f.entry.js.map → p-ccac9611.entry.js.map} +0 -0
  307. /package/dist/le-kit/{themes → dist/components/themes}/base.css +0 -0
  308. /package/dist/le-kit/{themes → dist/components/themes}/dark.css +0 -0
  309. /package/dist/le-kit/{themes → dist/components/themes}/default.css +0 -0
  310. /package/dist/le-kit/{themes → dist/components/themes}/gradient.css +0 -0
  311. /package/dist/le-kit/{themes → dist/components/themes}/index.css +0 -0
  312. /package/dist/le-kit/{themes → dist/components/themes}/minimal.css +0 -0
  313. /package/dist/le-kit/{themes → dist/components/themes}/warm.css +0 -0
@@ -1,15 +1,19 @@
1
- 'use strict';
2
-
3
- var index = require('./index-o1DRKw1g.js');
4
- var utils = require('./utils-DqhadIxH.js');
1
+ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
+ import { o as observeModeChanges } from './utils.js';
3
+ import { d as defineCustomElement$2, a as defineCustomElement$3, b as defineCustomElement$5, c as defineCustomElement$6, e as defineCustomElement$7 } from './le-button2.js';
4
+ import { d as defineCustomElement$4 } from './le-popover2.js';
5
5
 
6
6
  const leTextDefaultCss = ":host{display:block}:host([hidden]){display:none}.le-text{margin:0;color:var(--le-text-color, var(--le-color-text));font-family:var(--le-font-family);line-height:var(--le-text-line-height, 1.5)}.variant-p{font-size:var(--le-font-size-base, 1rem);font-weight:var(--le-font-weight-normal, 400);color:var(--le-color-text)}.variant-h1{font-size:var(--le-font-size-4xl, 2.5rem);font-weight:var(--le-font-weight-bold, 700);line-height:1.2;color:var(--le-color-text);letter-spacing:-0.02em}.variant-h2{font-size:var(--le-font-size-3xl, 2rem);font-weight:var(--le-font-weight-bold, 700);line-height:1.25;color:var(--le-color-text);letter-spacing:-0.01em}.variant-h3{font-size:var(--le-font-size-2xl, 1.5rem);font-weight:var(--le-font-weight-semibold, 600);line-height:1.3;color:var(--le-color-text)}.variant-h4{font-size:var(--le-font-size-xl, 1.25rem);font-weight:var(--le-font-weight-semibold, 600);line-height:1.35;color:var(--le-color-text)}.variant-h5{font-size:var(--le-font-size-lg, 1.125rem);font-weight:var(--le-font-weight-medium, 500);line-height:1.4;color:var(--le-color-text)}.variant-h6{font-size:var(--le-font-size-base, 1rem);font-weight:var(--le-font-weight-medium, 500);line-height:1.45;color:var(--le-color-text);text-transform:uppercase;letter-spacing:0.05em}.variant-code{font-family:var(--le-font-family-mono, 'SF Mono', 'Fira Code', 'Consolas', monospace);font-size:var(--le-font-size-sm, 0.875rem);background:var(--le-color-surface-alt, #f5f5f5);padding:var(--le-space-md);border-radius:var(--le-radius-md);overflow-x:auto;white-space:pre-wrap;color:var(--le-color-text)}.variant-quote{font-size:var(--le-font-size-lg, 1.125rem);font-style:italic;color:var(--le-color-text-secondary);border-left:4px solid var(--le-color-primary);padding-left:var(--le-space-lg);margin-left:0;margin-right:0}.variant-label{font-size:var(--le-font-size-sm, 0.875rem);font-weight:var(--le-font-weight-medium, 500);color:var(--le-color-text-secondary);text-transform:uppercase;letter-spacing:0.05em}.variant-small{font-size:var(--le-font-size-sm, 0.875rem);color:var(--le-color-text-secondary)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.truncate.max-lines-2,.truncate.max-lines-3,.truncate.max-lines-4,.truncate.max-lines-5{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical}.truncate.max-lines-2{-webkit-line-clamp:2;line-clamp:2}.truncate.max-lines-3{-webkit-line-clamp:3;line-clamp:3}.truncate.max-lines-4{-webkit-line-clamp:4;line-clamp:4}.truncate.max-lines-5{-webkit-line-clamp:5;line-clamp:5}:host([align=\"center\"]) .le-text{text-align:center}:host([align=\"right\"]) .le-text{text-align:right}:host([align=\"justify\"]) .le-text{text-align:justify}.le-text a{color:var(--le-color-primary);text-decoration:underline}.le-text a:hover{color:var(--le-color-primary-dark)}.le-text strong,.le-text b{font-weight:var(--le-font-weight-bold, 700)}.le-text em,.le-text i{font-style:italic}.le-text u{text-decoration:underline}.le-text s,.le-text strike{text-decoration:line-through}";
7
7
 
8
- const LeText = class {
9
- constructor(hostRef) {
10
- index.registerInstance(this, hostRef);
8
+ const LeText$1 = /*@__PURE__*/ proxyCustomElement(class LeText extends HTMLElement {
9
+ constructor(registerHost) {
10
+ super();
11
+ if (registerHost !== false) {
12
+ this.__registerHost();
13
+ }
14
+ this.__attachShadow();
11
15
  }
12
- get el() { return index.getElement(this); }
16
+ get el() { return this; }
13
17
  /**
14
18
  * The semantic variant/type of text element
15
19
  * @allowedValues p | h1 | h2 | h3 | h4 | h5 | h6 | code | quote | label | small
@@ -65,7 +69,7 @@ const LeText = class {
65
69
  slotRef;
66
70
  disconnectModeObserver;
67
71
  connectedCallback() {
68
- this.disconnectModeObserver = utils.observeModeChanges(this.el, (mode) => {
72
+ this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {
69
73
  const wasAdmin = this.adminMode;
70
74
  this.adminMode = mode === 'admin';
71
75
  if (this.adminMode && !wasAdmin) {
@@ -284,7 +288,7 @@ const LeText = class {
284
288
  * Render the formatting toolbar
285
289
  */
286
290
  renderToolbar() {
287
- return (index.h("div", { class: "le-text-toolbar" }, index.h("select", { class: "le-text-toolbar-select", onChange: this.changeVariant, onMouseDown: (e) => e.preventDefault() }, index.h("option", { value: "p", selected: this.variant === 'p' }, "Paragraph"), index.h("option", { value: "h1", selected: this.variant === 'h1' }, "Heading 1"), index.h("option", { value: "h2", selected: this.variant === 'h2' }, "Heading 2"), index.h("option", { value: "h3", selected: this.variant === 'h3' }, "Heading 3"), index.h("option", { value: "h4", selected: this.variant === 'h4' }, "Heading 4"), index.h("option", { value: "h5", selected: this.variant === 'h5' }, "Heading 5"), index.h("option", { value: "h6", selected: this.variant === 'h6' }, "Heading 6"), index.h("option", { value: "quote", selected: this.variant === 'quote' }, "Quote"), index.h("option", { value: "code", selected: this.variant === 'code' }, "Code"), index.h("option", { value: "label", selected: this.variant === 'label' }, "Label"), index.h("option", { value: "small", selected: this.variant === 'small' }, "Small")), index.h("div", { class: "le-text-toolbar-divider" }), index.h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isBold }, onMouseDown: this.toggleBold, title: "Bold (Ctrl+B)" }, index.h("strong", null, "B")), index.h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isItalic }, onMouseDown: this.toggleItalic, title: "Italic (Ctrl+I)" }, index.h("em", null, "I")), index.h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isUnderline }, onMouseDown: this.toggleUnderline, title: "Underline (Ctrl+U)" }, index.h("span", { style: { textDecoration: 'underline' } }, "U")), index.h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isStrikethrough }, onMouseDown: this.toggleStrikethrough, title: "Strikethrough" }, index.h("span", { style: { textDecoration: 'line-through' } }, "S")), index.h("div", { class: "le-text-toolbar-divider" }), index.h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isLink }, onMouseDown: this.toggleLink, title: this.selectionState.isLink ? 'Remove link' : 'Add link' }, "\uD83D\uDD17")));
291
+ return (h("div", { class: "le-text-toolbar" }, h("select", { class: "le-text-toolbar-select", onChange: this.changeVariant, onMouseDown: (e) => e.preventDefault() }, h("option", { value: "p", selected: this.variant === 'p' }, "Paragraph"), h("option", { value: "h1", selected: this.variant === 'h1' }, "Heading 1"), h("option", { value: "h2", selected: this.variant === 'h2' }, "Heading 2"), h("option", { value: "h3", selected: this.variant === 'h3' }, "Heading 3"), h("option", { value: "h4", selected: this.variant === 'h4' }, "Heading 4"), h("option", { value: "h5", selected: this.variant === 'h5' }, "Heading 5"), h("option", { value: "h6", selected: this.variant === 'h6' }, "Heading 6"), h("option", { value: "quote", selected: this.variant === 'quote' }, "Quote"), h("option", { value: "code", selected: this.variant === 'code' }, "Code"), h("option", { value: "label", selected: this.variant === 'label' }, "Label"), h("option", { value: "small", selected: this.variant === 'small' }, "Small")), h("div", { class: "le-text-toolbar-divider" }), h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isBold }, onMouseDown: this.toggleBold, title: "Bold (Ctrl+B)" }, h("strong", null, "B")), h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isItalic }, onMouseDown: this.toggleItalic, title: "Italic (Ctrl+I)" }, h("em", null, "I")), h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isUnderline }, onMouseDown: this.toggleUnderline, title: "Underline (Ctrl+U)" }, h("span", { style: { textDecoration: 'underline' } }, "U")), h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isStrikethrough }, onMouseDown: this.toggleStrikethrough, title: "Strikethrough" }, h("span", { style: { textDecoration: 'line-through' } }, "S")), h("div", { class: "le-text-toolbar-divider" }), h("button", { type: "button", class: { 'le-text-toolbar-btn': true, 'active': this.selectionState.isLink }, onMouseDown: this.toggleLink, title: this.selectionState.isLink ? 'Remove link' : 'Add link' }, "\uD83D\uDD17")));
288
292
  }
289
293
  /**
290
294
  * Get the semantic tag for the current variant
@@ -320,16 +324,76 @@ const LeText = class {
320
324
  };
321
325
  // Admin mode - show rich text editor
322
326
  if (this.adminMode) {
323
- return (index.h(index.Host, { class: "admin-mode" }, index.h("le-component", { component: "le-text" }, index.h("div", { class: "le-text-editor-wrapper" }, this.isFocused && this.renderToolbar(), index.h(Tag, { class: textClass, part: "text", style: textStyle }, index.h("div", { ref: (el) => this.editorRef = el, class: "le-text-editor", contentEditable: true, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleSelectionChange, onMouseUp: this.handleSelectionChange, innerHTML: this.content })), index.h("div", { class: "hidden-slot" }, index.h("slot", { ref: (el) => this.slotRef = el, onSlotchange: () => this.readSlottedContent() }))))));
327
+ return (h(Host, { class: "admin-mode" }, h("le-component", { component: "le-text" }, h("div", { class: "le-text-editor-wrapper" }, this.isFocused && this.renderToolbar(), h(Tag, { class: textClass, part: "text", style: textStyle }, h("div", { ref: (el) => this.editorRef = el, class: "le-text-editor", contentEditable: true, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleSelectionChange, onMouseUp: this.handleSelectionChange, innerHTML: this.content })), h("div", { class: "hidden-slot" }, h("slot", { ref: (el) => this.slotRef = el, onSlotchange: () => this.readSlottedContent() }))))));
324
328
  }
325
329
  // Default mode - render semantic element with slotted content
326
- return (index.h(index.Host, null, index.h(Tag, { class: textClass, part: "text", style: textStyle }, index.h("slot", { ref: (el) => this.slotRef = el }))));
330
+ return (h(Host, null, h(Tag, { class: textClass, part: "text", style: textStyle }, h("slot", { ref: (el) => this.slotRef = el }))));
327
331
  }
328
332
  static get watchers() { return {
329
333
  "variant": ["onVariantChange"]
330
334
  }; }
331
- };
332
- LeText.style = leTextDefaultCss;
335
+ static get style() { return leTextDefaultCss; }
336
+ }, [769, "le-text", {
337
+ "variant": [1537],
338
+ "align": [513],
339
+ "color": [1],
340
+ "truncate": [4],
341
+ "maxLines": [2, "max-lines"],
342
+ "adminMode": [32],
343
+ "content": [32],
344
+ "isFocused": [32],
345
+ "selectionState": [32]
346
+ }, undefined, {
347
+ "variant": ["onVariantChange"]
348
+ }]);
349
+ function defineCustomElement$1() {
350
+ if (typeof customElements === "undefined") {
351
+ return;
352
+ }
353
+ const components = ["le-text", "le-button", "le-checkbox", "le-component", "le-popover", "le-slot", "le-string-input"];
354
+ components.forEach(tagName => { switch (tagName) {
355
+ case "le-text":
356
+ if (!customElements.get(tagName)) {
357
+ customElements.define(tagName, LeText$1);
358
+ }
359
+ break;
360
+ case "le-button":
361
+ if (!customElements.get(tagName)) {
362
+ defineCustomElement$7();
363
+ }
364
+ break;
365
+ case "le-checkbox":
366
+ if (!customElements.get(tagName)) {
367
+ defineCustomElement$6();
368
+ }
369
+ break;
370
+ case "le-component":
371
+ if (!customElements.get(tagName)) {
372
+ defineCustomElement$5();
373
+ }
374
+ break;
375
+ case "le-popover":
376
+ if (!customElements.get(tagName)) {
377
+ defineCustomElement$4();
378
+ }
379
+ break;
380
+ case "le-slot":
381
+ if (!customElements.get(tagName)) {
382
+ defineCustomElement$3();
383
+ }
384
+ break;
385
+ case "le-string-input":
386
+ if (!customElements.get(tagName)) {
387
+ defineCustomElement$2();
388
+ }
389
+ break;
390
+ } });
391
+ }
392
+
393
+ const LeText = LeText$1;
394
+ const defineCustomElement = defineCustomElement$1;
395
+
396
+ export { LeText, defineCustomElement };
397
+ //# sourceMappingURL=le-text.js.map
333
398
 
334
- exports.le_text = LeText;
335
- //# sourceMappingURL=le-text.entry.cjs.js.map
399
+ //# sourceMappingURL=le-text.js.map
@@ -0,0 +1 @@
1
+ {"file":"le-text.js","mappings":"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","names":["LeText","__stencil_proxyCustomElement"],"sources":["src/components/le-text/le-text.default.css?tag=le-text&encapsulation=shadow","src/components/le-text/le-text.tsx"],"sourcesContent":["/**\n * le-text default styles\n *\n * Semantic text element with variant-based styling\n */\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n/* Base text styles */\n.le-text {\n margin: 0;\n color: var(--le-text-color, var(--le-color-text));\n font-family: var(--le-font-family);\n line-height: var(--le-text-line-height, 1.5);\n}\n\n/* Paragraph */\n.variant-p {\n font-size: var(--le-font-size-base, 1rem);\n font-weight: var(--le-font-weight-normal, 400);\n color: var(--le-color-text);\n}\n\n/* Headings */\n.variant-h1 {\n font-size: var(--le-font-size-4xl, 2.5rem);\n font-weight: var(--le-font-weight-bold, 700);\n line-height: 1.2;\n color: var(--le-color-text);\n letter-spacing: -0.02em;\n}\n\n.variant-h2 {\n font-size: var(--le-font-size-3xl, 2rem);\n font-weight: var(--le-font-weight-bold, 700);\n line-height: 1.25;\n color: var(--le-color-text);\n letter-spacing: -0.01em;\n}\n\n.variant-h3 {\n font-size: var(--le-font-size-2xl, 1.5rem);\n font-weight: var(--le-font-weight-semibold, 600);\n line-height: 1.3;\n color: var(--le-color-text);\n}\n\n.variant-h4 {\n font-size: var(--le-font-size-xl, 1.25rem);\n font-weight: var(--le-font-weight-semibold, 600);\n line-height: 1.35;\n color: var(--le-color-text);\n}\n\n.variant-h5 {\n font-size: var(--le-font-size-lg, 1.125rem);\n font-weight: var(--le-font-weight-medium, 500);\n line-height: 1.4;\n color: var(--le-color-text);\n}\n\n.variant-h6 {\n font-size: var(--le-font-size-base, 1rem);\n font-weight: var(--le-font-weight-medium, 500);\n line-height: 1.45;\n color: var(--le-color-text);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n/* Code */\n.variant-code {\n font-family: var(--le-font-family-mono, 'SF Mono', 'Fira Code', 'Consolas', monospace);\n font-size: var(--le-font-size-sm, 0.875rem);\n background: var(--le-color-surface-alt, #f5f5f5);\n padding: var(--le-space-md);\n border-radius: var(--le-radius-md);\n overflow-x: auto;\n white-space: pre-wrap;\n color: var(--le-color-text);\n}\n\n/* Quote */\n.variant-quote {\n font-size: var(--le-font-size-lg, 1.125rem);\n font-style: italic;\n color: var(--le-color-text-secondary);\n border-left: 4px solid var(--le-color-primary);\n padding-left: var(--le-space-lg);\n margin-left: 0;\n margin-right: 0;\n}\n\n/* Label */\n.variant-label {\n font-size: var(--le-font-size-sm, 0.875rem);\n font-weight: var(--le-font-weight-medium, 500);\n color: var(--le-color-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n/* Small */\n.variant-small {\n font-size: var(--le-font-size-sm, 0.875rem);\n color: var(--le-color-text-secondary);\n}\n\n/* Truncation */\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.truncate.max-lines-2,\n.truncate.max-lines-3,\n.truncate.max-lines-4,\n.truncate.max-lines-5 {\n white-space: normal;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate.max-lines-2 { -webkit-line-clamp: 2; line-clamp: 2; }\n.truncate.max-lines-3 { -webkit-line-clamp: 3; line-clamp: 3; }\n.truncate.max-lines-4 { -webkit-line-clamp: 4; line-clamp: 4; }\n.truncate.max-lines-5 { -webkit-line-clamp: 5; line-clamp: 5; }\n\n/* Alignment */\n:host([align=\"center\"]) .le-text { text-align: center; }\n:host([align=\"right\"]) .le-text { text-align: right; }\n:host([align=\"justify\"]) .le-text { text-align: justify; }\n\n/* Links inside text */\n.le-text a {\n color: var(--le-color-primary);\n text-decoration: underline;\n}\n\n.le-text a:hover {\n color: var(--le-color-primary-dark);\n}\n\n/* Bold, italic, etc. */\n.le-text strong,\n.le-text b {\n font-weight: var(--le-font-weight-bold, 700);\n}\n\n.le-text em,\n.le-text i {\n font-style: italic;\n}\n\n.le-text u {\n text-decoration: underline;\n}\n\n.le-text s,\n.le-text strike {\n text-decoration: line-through;\n}\n","import { Component, Prop, State, h, Host, Element, Watch } from '@stencil/core';\nimport { observeModeChanges } from '../../utils/utils';\n\n/**\n * A text component with rich text editing capabilities in admin mode.\n *\n * `le-text` renders semantic text elements (headings, paragraphs, code, quotes)\n * and provides a Notion-like rich text editor in admin mode with formatting\n * toolbar for bold, italic, links, and paragraph type selection.\n *\n * @slot - Default slot for text content\n *\n * @cssprop --le-text-color - Text color\n * @cssprop --le-text-font-size - Font size\n * @cssprop --le-text-line-height - Line height\n * @cssprop --le-text-font-weight - Font weight\n *\n * @csspart text - The text container element\n *\n * @cmsEditable true\n * @cmsCategory Content\n */\n@Component({\n tag: 'le-text',\n styleUrl: 'le-text.default.css',\n shadow: true,\n})\nexport class LeText {\n @Element() el: HTMLElement;\n\n /**\n * The semantic variant/type of text element\n * @allowedValues p | h1 | h2 | h3 | h4 | h5 | h6 | code | quote | label | small\n */\n @Prop({ mutable: true, reflect: true }) variant: 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'code' | 'quote' | 'label' | 'small' = 'p';\n\n /**\n * Text alignment\n * @allowedValues left | center | right | justify\n */\n @Prop({ reflect: true }) align: 'left' | 'center' | 'right' | 'justify' = 'left';\n\n /**\n * Text color (CSS value or theme token)\n */\n @Prop() color?: string;\n\n /**\n * Whether the text should truncate with ellipsis\n */\n @Prop() truncate: boolean = false;\n\n /**\n * Maximum number of lines before truncating (requires truncate=true)\n */\n @Prop() maxLines?: number;\n\n /**\n * Internal state to track admin mode\n */\n @State() private adminMode: boolean = false;\n\n /**\n * The HTML content being edited\n */\n @State() private content: string = '';\n\n /**\n * Whether the editor is focused (shows toolbar)\n */\n @State() private isFocused: boolean = false;\n\n /**\n * Current selection state for toolbar button highlighting\n */\n @State() private selectionState: SelectionState = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrikethrough: false,\n isLink: false,\n blockType: 'p',\n };\n\n /**\n * Reference to the contenteditable element\n */\n private editorRef?: HTMLDivElement;\n\n /**\n * Reference to the slot element\n */\n private slotRef?: HTMLSlotElement;\n\n private disconnectModeObserver?: () => void;\n\n connectedCallback() {\n this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {\n const wasAdmin = this.adminMode;\n this.adminMode = mode === 'admin';\n \n if (this.adminMode && !wasAdmin) {\n // Entering admin mode - read content from slot\n requestAnimationFrame(() => this.readSlottedContent());\n } else if (!this.adminMode && wasAdmin) {\n // Leaving admin mode - sync content back to slot\n this.syncContentToSlot();\n }\n });\n }\n\n disconnectedCallback() {\n this.disconnectModeObserver?.();\n }\n\n @Watch('variant')\n onVariantChange() {\n // When variant changes in admin mode, update the content wrapper\n if (this.adminMode && this.editorRef) {\n this.syncContentToSlot();\n }\n }\n\n /**\n * Read content from slotted elements\n */\n private readSlottedContent() {\n if (!this.slotRef) return;\n \n const assignedNodes = this.slotRef.assignedNodes({ flatten: true });\n \n // Collect all content from assigned nodes\n let html = '';\n assignedNodes.forEach(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n html += node.textContent;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n html += (node as Element).innerHTML || node.textContent;\n }\n });\n \n this.content = html.trim();\n }\n\n /**\n * Sync edited content back to the slot\n */\n private syncContentToSlot() {\n if (!this.editorRef) return;\n \n const newContent = this.editorRef.innerHTML;\n \n // Update the light DOM content\n // We need to update the actual slotted content\n const slot = this.slotRef;\n if (slot) {\n const assignedNodes = slot.assignedNodes({ flatten: true });\n if (assignedNodes.length > 0) {\n const firstNode = assignedNodes[0];\n if (firstNode.nodeType === Node.ELEMENT_NODE) {\n (firstNode as Element).innerHTML = newContent;\n } else if (firstNode.nodeType === Node.TEXT_NODE) {\n // Replace text node with the new content\n const parent = firstNode.parentNode;\n if (parent) {\n // Create a temporary element to parse HTML\n const temp = document.createElement('span');\n temp.innerHTML = newContent;\n // Replace the text node\n parent.replaceChild(temp, firstNode);\n // Unwrap the span if it only contains text\n if (temp.childNodes.length === 1 && temp.firstChild?.nodeType === Node.TEXT_NODE) {\n parent.replaceChild(temp.firstChild, temp);\n }\n }\n }\n } else {\n // No assigned nodes, set innerHTML on the host's light DOM\n this.el.innerHTML = newContent;\n }\n }\n }\n\n /**\n * Handle input in the contenteditable\n */\n private handleInput = () => {\n if (this.editorRef) {\n this.content = this.editorRef.innerHTML;\n this.updateSelectionState();\n }\n };\n\n /**\n * Handle focus on the editor\n */\n private handleFocus = () => {\n this.isFocused = true;\n this.updateSelectionState();\n };\n\n /**\n * Handle blur on the editor\n */\n private handleBlur = (e: FocusEvent) => {\n // Check if focus moved to toolbar\n const relatedTarget = e.relatedTarget as HTMLElement;\n const toolbar = this.el.shadowRoot?.querySelector('.le-text-toolbar');\n \n if (toolbar?.contains(relatedTarget)) {\n // Focus moved to toolbar, keep it open\n return;\n }\n \n // Small delay to allow toolbar clicks to register\n setTimeout(() => {\n if (!this.el.shadowRoot?.activeElement) {\n this.isFocused = false;\n this.syncContentToSlot();\n }\n }, 150);\n };\n\n /**\n * Handle selection change to update toolbar state\n */\n private handleSelectionChange = () => {\n this.updateSelectionState();\n };\n\n /**\n * Update the selection state for toolbar highlighting\n */\n private updateSelectionState() {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n this.selectionState = {\n isBold: document.queryCommandState('bold'),\n isItalic: document.queryCommandState('italic'),\n isUnderline: document.queryCommandState('underline'),\n isStrikethrough: document.queryCommandState('strikeThrough'),\n isLink: this.isSelectionInLink(selection),\n blockType: this.variant,\n };\n }\n\n /**\n * Check if current selection is within a link\n */\n private isSelectionInLink(selection: Selection): boolean {\n if (!selection.anchorNode) return false;\n \n let node: Node | null = selection.anchorNode;\n while (node && node !== this.editorRef) {\n if (node.nodeName === 'A') return true;\n node = node.parentNode;\n }\n return false;\n }\n\n /**\n * Execute a formatting command\n */\n private execCommand(command: string, value?: string) {\n // Focus the editor first\n this.editorRef?.focus();\n \n // Execute the command\n document.execCommand(command, false, value);\n \n // Update state\n this.handleInput();\n this.updateSelectionState();\n }\n\n /**\n * Toggle bold formatting\n */\n private toggleBold = (e: Event) => {\n e.preventDefault();\n this.execCommand('bold');\n };\n\n /**\n * Toggle italic formatting\n */\n private toggleItalic = (e: Event) => {\n e.preventDefault();\n this.execCommand('italic');\n };\n\n /**\n * Toggle underline formatting\n */\n private toggleUnderline = (e: Event) => {\n e.preventDefault();\n this.execCommand('underline');\n };\n\n /**\n * Toggle strikethrough formatting\n */\n private toggleStrikethrough = (e: Event) => {\n e.preventDefault();\n this.execCommand('strikeThrough');\n };\n\n /**\n * Add or edit a link\n */\n private toggleLink = (e: Event) => {\n e.preventDefault();\n \n if (this.selectionState.isLink) {\n // Remove link\n this.execCommand('unlink');\n } else {\n // Add link\n const url = prompt('Enter URL:', 'https://');\n if (url) {\n this.execCommand('createLink', url);\n }\n }\n };\n\n /**\n * Change the block type/variant\n */\n private changeVariant = (e: Event) => {\n const select = e.target as HTMLSelectElement;\n this.variant = select.value as typeof this.variant;\n };\n\n /**\n * Render the formatting toolbar\n */\n private renderToolbar() {\n return (\n <div class=\"le-text-toolbar\">\n <select \n class=\"le-text-toolbar-select\"\n onChange={this.changeVariant}\n onMouseDown={(e) => e.preventDefault()}\n >\n <option value=\"p\" selected={this.variant === 'p'}>Paragraph</option>\n <option value=\"h1\" selected={this.variant === 'h1'}>Heading 1</option>\n <option value=\"h2\" selected={this.variant === 'h2'}>Heading 2</option>\n <option value=\"h3\" selected={this.variant === 'h3'}>Heading 3</option>\n <option value=\"h4\" selected={this.variant === 'h4'}>Heading 4</option>\n <option value=\"h5\" selected={this.variant === 'h5'}>Heading 5</option>\n <option value=\"h6\" selected={this.variant === 'h6'}>Heading 6</option>\n <option value=\"quote\" selected={this.variant === 'quote'}>Quote</option>\n <option value=\"code\" selected={this.variant === 'code'}>Code</option>\n <option value=\"label\" selected={this.variant === 'label'}>Label</option>\n <option value=\"small\" selected={this.variant === 'small'}>Small</option>\n </select>\n \n <div class=\"le-text-toolbar-divider\"></div>\n \n <button\n type=\"button\"\n class={{ 'le-text-toolbar-btn': true, 'active': this.selectionState.isBold }}\n onMouseDown={this.toggleBold}\n title=\"Bold (Ctrl+B)\"\n >\n <strong>B</strong>\n </button>\n \n <button\n type=\"button\"\n class={{ 'le-text-toolbar-btn': true, 'active': this.selectionState.isItalic }}\n onMouseDown={this.toggleItalic}\n title=\"Italic (Ctrl+I)\"\n >\n <em>I</em>\n </button>\n \n <button\n type=\"button\"\n class={{ 'le-text-toolbar-btn': true, 'active': this.selectionState.isUnderline }}\n onMouseDown={this.toggleUnderline}\n title=\"Underline (Ctrl+U)\"\n >\n <span style={{ textDecoration: 'underline' }}>U</span>\n </button>\n \n <button\n type=\"button\"\n class={{ 'le-text-toolbar-btn': true, 'active': this.selectionState.isStrikethrough }}\n onMouseDown={this.toggleStrikethrough}\n title=\"Strikethrough\"\n >\n <span style={{ textDecoration: 'line-through' }}>S</span>\n </button>\n \n <div class=\"le-text-toolbar-divider\"></div>\n \n <button\n type=\"button\"\n class={{ 'le-text-toolbar-btn': true, 'active': this.selectionState.isLink }}\n onMouseDown={this.toggleLink}\n title={this.selectionState.isLink ? 'Remove link' : 'Add link'}\n >\n 🔗\n </button>\n </div>\n );\n }\n\n /**\n * Get the semantic tag for the current variant\n */\n private getTag(): string {\n switch (this.variant) {\n case 'quote':\n return 'blockquote';\n case 'code':\n return 'pre';\n case 'label':\n return 'label';\n case 'small':\n return 'small';\n default:\n return this.variant; // h1-h6, p\n }\n }\n\n render() {\n const Tag = this.getTag();\n \n const textStyle: { [key: string]: string } = {};\n if (this.color) {\n textStyle.color = this.color;\n }\n if (this.align) {\n textStyle.textAlign = this.align;\n }\n\n const textClass = {\n 'le-text': true,\n [`variant-${this.variant}`]: true,\n 'truncate': this.truncate,\n [`max-lines-${this.maxLines}`]: this.truncate && this.maxLines,\n };\n\n // Admin mode - show rich text editor\n if (this.adminMode) {\n return (\n <Host class=\"admin-mode\">\n <le-component component=\"le-text\">\n <div class=\"le-text-editor-wrapper\">\n {this.isFocused && this.renderToolbar()}\n <Tag \n class={textClass}\n part=\"text\"\n style={textStyle}\n >\n <div\n ref={(el) => this.editorRef = el}\n class=\"le-text-editor\"\n contentEditable={true}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onKeyUp={this.handleSelectionChange}\n onMouseUp={this.handleSelectionChange}\n innerHTML={this.content}\n ></div>\n </Tag>\n {/* Hidden slot to receive light DOM content */}\n <div class=\"hidden-slot\">\n <slot \n ref={(el) => this.slotRef = el as HTMLSlotElement}\n onSlotchange={() => this.readSlottedContent()}\n ></slot>\n </div>\n </div>\n </le-component>\n </Host>\n );\n }\n\n // Default mode - render semantic element with slotted content\n return (\n <Host>\n <Tag \n class={textClass}\n part=\"text\"\n style={textStyle}\n >\n <slot ref={(el) => this.slotRef = el as HTMLSlotElement}></slot>\n </Tag>\n </Host>\n );\n }\n}\n\n/**\n * Selection state for toolbar\n */\ninterface SelectionState {\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isStrikethrough: boolean;\n isLink: boolean;\n blockType: string;\n}\n"],"version":3}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../../dist/types/components";
2
+
3
+ interface LeTurntable extends Components.LeTurntable, HTMLElement {}
4
+ export const LeTurntable: {
5
+ prototype: LeTurntable;
6
+ new (): LeTurntable;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -1,14 +1,16 @@
1
- 'use strict';
2
-
3
- var index = require('./index-o1DRKw1g.js');
1
+ import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
4
2
 
5
3
  const leTurntableCss = ":host{display:block;cursor:grab}div.turntable{width:100%;height:100%;padding:1px}";
6
4
 
7
- const LeTurntable = class {
8
- constructor(hostRef) {
9
- index.registerInstance(this, hostRef);
5
+ const LeTurntable$1 = /*@__PURE__*/ proxyCustomElement(class LeTurntable extends HTMLElement {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ this.__attachShadow();
10
12
  }
11
- get el() { return index.getElement(this); }
13
+ get el() { return this; }
12
14
  // transform origin
13
15
  // gets the same values as transform-origin css property
14
16
  center = 'center';
@@ -127,13 +129,36 @@ const LeTurntable = class {
127
129
  this.el.style.transform = `rotate(${angle}deg)`;
128
130
  }
129
131
  render() {
130
- return (index.h("div", { key: 'ec9a506a360881ab3c3df97027c8a25d663f6819', class: "turntable", onMouseDown: this.handleMouseDown.bind(this) }, index.h("slot", { key: '926a84fa75952bdc3e44f1b2146848401e8ab10f' })));
132
+ return (h("div", { key: 'ec9a506a360881ab3c3df97027c8a25d663f6819', class: "turntable", onMouseDown: this.handleMouseDown.bind(this) }, h("slot", { key: '926a84fa75952bdc3e44f1b2146848401e8ab10f' })));
131
133
  }
132
134
  static get watchers() { return {
133
135
  "value": ["updateValue"]
134
136
  }; }
135
- };
136
- LeTurntable.style = leTurntableCss;
137
+ static get style() { return leTurntableCss; }
138
+ }, [769, "le-turntable", {
139
+ "center": [1],
140
+ "value": [2]
141
+ }, [[9, "mousemove", "handleMouseMove"], [9, "mouseup", "handleMouseUp"], [9, "resize", "handleWindowResize"]], {
142
+ "value": ["updateValue"]
143
+ }]);
144
+ function defineCustomElement$1() {
145
+ if (typeof customElements === "undefined") {
146
+ return;
147
+ }
148
+ const components = ["le-turntable"];
149
+ components.forEach(tagName => { switch (tagName) {
150
+ case "le-turntable":
151
+ if (!customElements.get(tagName)) {
152
+ customElements.define(tagName, LeTurntable$1);
153
+ }
154
+ break;
155
+ } });
156
+ }
157
+
158
+ const LeTurntable = LeTurntable$1;
159
+ const defineCustomElement = defineCustomElement$1;
160
+
161
+ export { LeTurntable, defineCustomElement };
162
+ //# sourceMappingURL=le-turntable.js.map
137
163
 
138
- exports.le_turntable = LeTurntable;
139
- //# sourceMappingURL=le-turntable.entry.cjs.js.map
164
+ //# sourceMappingURL=le-turntable.js.map
@@ -0,0 +1 @@
1
+ {"file":"le-turntable.js","mappings":"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","names":["LeTurntable","__stencil_proxyCustomElement"],"sources":["src/components/le-turntable/le-turntable.css?tag=le-turntable&encapsulation=shadow","src/components/le-turntable/le-turntable.tsx"],"sourcesContent":[":host {\n display: block;\n cursor: grab;\n}\n\ndiv.turntable {\n width: 100%;\n height: 100%;\n padding: 1px;\n}\n","import { Component, Element, Prop, Listen, h, Watch } from '@stencil/core';\n\n@Component({\n tag: 'le-turntable',\n styleUrl: 'le-turntable.css',\n shadow: true,\n})\nexport class LeTurntable {\n // host element\n @Element() el: HTMLElement;\n\n // transform origin\n // gets the same values as transform-origin css property\n @Prop() center: string = 'center';\n\n // transform rotate\n @Prop() value: number = 0;\n\n @Watch('value')\n updateValue(newValue) {\n if (!this.rotating) {\n this.currentAngle = parseFloat(newValue);\n this.setAngle(this.currentAngle);\n }\n }\n\n /**\n * Internal state\n *\n * using properties instead of @State decoratorm\n * because we are only changing styles of the element and don't\n * need the element to be rerendered\n */\n\n // indicates is the element being manually rotated right now\n rotating = false;\n\n // coordinates of the transform origin in pixels\n centerX: number;\n centerY: number;\n\n // element page (body?) offset in pixels\n pageX: number;\n pageY: number;\n\n currentAngle: number = 0;\n // angle at the start of the drag\n startAngle: number;\n\n /**\n * Event listeners\n */\n handleMouseDown(evt: MouseEvent) {\n // set rotating mode on\n this.rotating = true;\n\n // get start angle\n // getting pageX/Y, because when the element is transformed\n // relative values are useless\n this.startAngle = this.getAngle(evt.pageX, evt.pageY);\n\n // cancel the event to prevent text selection\n evt.preventDefault();\n evt.stopPropagation();\n return false;\n }\n\n /**\n * Fires when the mouse moves\n * checks is the element rotating right now and if it is\n * then calc the current angle and rotate the element\n *\n * TODO: attach events only after the dragStart?\n */\n @Listen('mousemove', { target: 'window' })\n handleMouseMove(evt: MouseEvent) {\n if (this.rotating) {\n // calc angle update and rotate element\n this.setAngle(this.currentAngle + (this.getAngle(evt.pageX, evt.pageY) - this.startAngle));\n return false;\n }\n }\n\n @Listen('mouseup', { target: 'window' })\n handleMouseUp(evt: MouseEvent) {\n if (this.rotating) {\n const angle = this.currentAngle + (this.getAngle(evt.pageX, evt.pageY) - this.startAngle);\n this.setAngle(angle);\n this.currentAngle = angle;\n this.rotating = false;\n return false;\n }\n }\n\n // on window resize the center should be recalculated\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n this.getTransformOrigin();\n }\n\n /**\n * Component lifecycles\n */\n componentDidLoad() {\n this.el.style.transformOrigin = this.center;\n this.currentAngle = this.value;\n\n this.getTransformOrigin();\n this.setAngle(this.currentAngle);\n }\n\n componentDidUpdate() {\n this.getTransformOrigin();\n }\n\n /**\n * Calculates the transform origin of the component\n * and the page offset in pixels\n *\n * We'll need these values to calculate the angle of pointer event\n */\n getTransformOrigin() {\n // transform origin\n [this.centerX, this.centerY] = window\n .getComputedStyle(this.el, null)\n .transformOrigin.split(' ')\n .map(val => Math.round(parseFloat(val)));\n // page offset\n let t = null;\n const scrollContainer = ((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.scrollLeft === 'number' ? t : document.body;\n const clientRects = this.el.getBoundingClientRect();\n this.pageX = Math.round(clientRects.left + scrollContainer.scrollLeft);\n this.pageY = Math.round(clientRects.top + scrollContainer.scrollTop);\n }\n\n /**\n * Calculates current angle\n *\n * @param {number} posX horizontal mouse position\n * @param {number} posY vertical mouse position\n */\n getAngle(posX: number, posY: number) {\n const x = posX - this.pageX - this.centerX;\n const y = posY - this.pageY - this.centerY;\n const angle = Math.round(((Math.atan2(y, x) * 180) / Math.PI) * 100) / 100;\n return angle;\n }\n\n setAngle(angle) {\n this.el.style.transform = `rotate(${angle}deg)`;\n }\n\n render() {\n return (\n <div class=\"turntable\" onMouseDown={this.handleMouseDown.bind(this)}>\n <slot />\n </div>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,310 @@
1
+ import { setMode } from '@stencil/core/internal/client';
2
+
3
+ /**
4
+ * Global mode initialization for le-kit components.
5
+ *
6
+ * Mode inheritance works as follows:
7
+ * 1. Check the element's own `mode` attribute
8
+ * 2. Traverse up the DOM to find a parent with `mode` attribute
9
+ * 3. Check the document root element (html) for `mode` attribute
10
+ * 4. Fall back to 'default'
11
+ *
12
+ * This allows setting mode at any level:
13
+ * - `<html mode="admin">` - all components in admin mode
14
+ * - `<le-card mode="admin">` - this card and its children in admin mode
15
+ */
16
+ function initializeMode() {
17
+ setMode((el) => {
18
+ // 1. Check element's own mode attribute
19
+ const ownMode = el.getAttribute('mode');
20
+ if (ownMode) {
21
+ return ownMode;
22
+ }
23
+ // 2. Traverse up the DOM tree to find inherited mode
24
+ let parent = el.parentElement;
25
+ while (parent) {
26
+ const parentMode = parent.getAttribute('mode');
27
+ if (parentMode) {
28
+ return parentMode;
29
+ }
30
+ parent = parent.parentElement;
31
+ }
32
+ // 3. Check document root element
33
+ const rootMode = document.documentElement.getAttribute('mode');
34
+ if (rootMode) {
35
+ return rootMode;
36
+ }
37
+ // 4. Default mode
38
+ return 'default';
39
+ });
40
+ }
41
+ /**
42
+ * Helper function to get the current mode for an element.
43
+ * Can be used programmatically in components.
44
+ *
45
+ * This function traverses both regular DOM and shadow DOM boundaries
46
+ * to find the nearest mode attribute.
47
+ */
48
+ function getMode(el) {
49
+ // Check element's own mode
50
+ const ownMode = el.getAttribute('mode');
51
+ if (ownMode) {
52
+ return ownMode;
53
+ }
54
+ // Traverse up DOM, crossing shadow boundaries
55
+ let current = el;
56
+ while (current) {
57
+ // Try parent element first
58
+ if (current instanceof Element && current.parentElement) {
59
+ current = current.parentElement;
60
+ const mode = current.getAttribute?.('mode');
61
+ if (mode) {
62
+ return mode;
63
+ }
64
+ }
65
+ else {
66
+ // No parent element - check if we're in a shadow root
67
+ const root = current.getRootNode();
68
+ if (root instanceof ShadowRoot) {
69
+ // Cross the shadow boundary to the host element
70
+ current = root.host;
71
+ const mode = current.getAttribute?.('mode');
72
+ if (mode) {
73
+ return mode;
74
+ }
75
+ }
76
+ else {
77
+ // We've reached the document root
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ // Check document root
83
+ const rootMode = document.documentElement.getAttribute('mode');
84
+ if (rootMode) {
85
+ return rootMode;
86
+ }
87
+ return 'default';
88
+ }
89
+ /**
90
+ * Helper function to get the current theme for an element.
91
+ * Theme inheritance works the same as mode - cascades through DOM.
92
+ */
93
+ function getTheme(el) {
94
+ // Check element's own theme
95
+ const ownTheme = el.getAttribute('theme');
96
+ if (ownTheme) {
97
+ return ownTheme;
98
+ }
99
+ // Traverse up DOM
100
+ let parent = el.parentElement;
101
+ while (parent) {
102
+ const parentTheme = parent.getAttribute('theme');
103
+ if (parentTheme) {
104
+ return parentTheme;
105
+ }
106
+ parent = parent.parentElement;
107
+ }
108
+ // Check root
109
+ const rootTheme = document.documentElement.getAttribute('theme');
110
+ if (rootTheme) {
111
+ return rootTheme;
112
+ }
113
+ return 'default';
114
+ }
115
+ /**
116
+ * Helper function to set mode on the document root.
117
+ * Useful for switching all components to admin mode.
118
+ */
119
+ function setGlobalMode(mode) {
120
+ document.documentElement.setAttribute('mode', mode);
121
+ }
122
+ /**
123
+ * Helper function to set theme on the document root.
124
+ * Useful for switching all components to a different theme.
125
+ */
126
+ function setGlobalTheme(theme) {
127
+ document.documentElement.setAttribute('theme', theme);
128
+ }
129
+ /**
130
+ * Global configuration for le-kit
131
+ */
132
+ let leKitConfig = {
133
+ /**
134
+ * URL to the custom-elements.json manifest.
135
+ * Used by admin components (le-component, le-slot) to load component metadata.
136
+ *
137
+ * Default: '/custom-elements.json' (served from app root)
138
+ *
139
+ * For apps using le-kit, you may need to:
140
+ * 1. Copy the manifest from node_modules/le-kit/custom-elements.json to your public folder
141
+ * 2. Or set this to point to where the manifest is served
142
+ */
143
+ manifestFile: '/custom-elements.json',
144
+ };
145
+ /**
146
+ * Configure le-kit global settings.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * import { configureLeKit } from 'le-kit';
151
+ *
152
+ * configureLeKit({
153
+ * manifestFile: 'custom-elements.json'
154
+ * });
155
+ * ```
156
+ */
157
+ function configureLeKit(config) {
158
+ leKitConfig = { ...leKitConfig, ...config };
159
+ }
160
+ /**
161
+ * Get the current le-kit configuration.
162
+ */
163
+ function getLeKitConfig() {
164
+ return leKitConfig;
165
+ }
166
+
167
+ /**
168
+ * Utility functions for le-kit components
169
+ */
170
+ /**
171
+ * Generates a unique ID for component instances
172
+ */
173
+ function generateId(prefix = 'le') {
174
+ return `${prefix}-${Math.random().toString(36).substring(2, 9)}`;
175
+ }
176
+ /**
177
+ * Parses a comma-separated string into an array
178
+ */
179
+ function parseCommaSeparated(value) {
180
+ if (!value)
181
+ return [];
182
+ return value
183
+ .split(',')
184
+ .map(s => s.trim())
185
+ .filter(Boolean);
186
+ }
187
+ /**
188
+ * Checks if a slot has content
189
+ */
190
+ function slotHasContent(el, slotName = '') {
191
+ const selector = slotName ? `[slot="${slotName}"]` : ':not([slot])';
192
+ return el.querySelector(selector) !== null;
193
+ }
194
+ /**
195
+ * Sets up a MutationObserver to track mode changes on ancestor elements.
196
+ * Returns a cleanup function to disconnect the observer.
197
+ *
198
+ * If the element or any ancestor has an explicit `mode` attribute, that creates
199
+ * a "mode boundary" - the mode is determined from that point, not from further up.
200
+ * This allows components like le-popover to force default mode for their children.
201
+ *
202
+ * @param el - The component's host element
203
+ * @param callback - Function to call when mode changes, receives the new mode
204
+ * @returns Cleanup function to disconnect the observer
205
+ *
206
+ * @example
207
+ * ```tsx
208
+ * export class MyComponent {
209
+ * @Element() el: HTMLElement;
210
+ * @State() adminMode: boolean = false;
211
+ * private disconnectModeObserver?: () => void;
212
+ *
213
+ * connectedCallback() {
214
+ * this.disconnectModeObserver = observeModeChanges(this.el, (mode) => {
215
+ * this.adminMode = mode === 'admin';
216
+ * });
217
+ * }
218
+ *
219
+ * disconnectedCallback() {
220
+ * this.disconnectModeObserver?.();
221
+ * }
222
+ * }
223
+ * ```
224
+ */
225
+ function observeModeChanges(el, callback) {
226
+ // Call immediately with current mode
227
+ callback(getMode(el));
228
+ // Set up observer for mode attribute changes
229
+ const observer = new MutationObserver(() => {
230
+ callback(getMode(el));
231
+ });
232
+ // Observe the element itself (for mode boundary changes)
233
+ observer.observe(el, {
234
+ attributes: true,
235
+ attributeFilter: ['mode'],
236
+ });
237
+ // Observe document root
238
+ observer.observe(document.documentElement, {
239
+ attributes: true,
240
+ attributeFilter: ['mode'],
241
+ });
242
+ // Traverse up, crossing shadow boundaries, and observe each element
243
+ let current = el;
244
+ while (current) {
245
+ if (current instanceof Element && current.parentElement) {
246
+ current = current.parentElement;
247
+ observer.observe(current, {
248
+ attributes: true,
249
+ attributeFilter: ['mode'],
250
+ });
251
+ // If this element has an explicit mode, it's a boundary
252
+ if (current.hasAttribute('mode')) {
253
+ break;
254
+ }
255
+ }
256
+ else {
257
+ // Check if we're in a shadow root
258
+ const root = current.getRootNode();
259
+ if (root instanceof ShadowRoot) {
260
+ // Cross the shadow boundary and observe the host
261
+ current = root.host;
262
+ observer.observe(current, {
263
+ attributes: true,
264
+ attributeFilter: ['mode'],
265
+ });
266
+ // If the host has an explicit mode, it's a boundary
267
+ if (current.hasAttribute('mode')) {
268
+ break;
269
+ }
270
+ }
271
+ else {
272
+ break;
273
+ }
274
+ }
275
+ }
276
+ // Return cleanup function
277
+ return () => observer.disconnect();
278
+ }
279
+ /**
280
+ * Combines multiple class names into a single string, filtering out falsy values.
281
+ *
282
+ * @param classes - arguments of class names, undefined, arrays, objects with boolean values and nested combinations of these
283
+ * @returns Combined class names string
284
+ */
285
+ function classnames(...classes) {
286
+ const result = [];
287
+ classes.forEach(cls => {
288
+ if (!cls)
289
+ return;
290
+ if (typeof cls === 'string') {
291
+ result.push(cls);
292
+ }
293
+ else if (Array.isArray(cls)) {
294
+ result.push(classnames(...cls));
295
+ }
296
+ else if (typeof cls === 'object') {
297
+ Object.entries(cls).forEach(([key, value]) => {
298
+ if (value) {
299
+ result.push(key);
300
+ }
301
+ });
302
+ }
303
+ });
304
+ return result.join(' ');
305
+ }
306
+
307
+ export { getMode as a, setGlobalMode as b, getTheme as c, setGlobalTheme as d, configureLeKit as e, getLeKitConfig as f, generateId as g, classnames as h, initializeMode as i, observeModeChanges as o, parseCommaSeparated as p, slotHasContent as s };
308
+ //# sourceMappingURL=utils.js.map
309
+
310
+ //# sourceMappingURL=utils.js.map