@mhmo91/schmancy 0.4.69 → 0.4.71

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 (322) hide show
  1. package/dist/{animated-text-DhaihRNU.js → animated-text-CBOMltQE.js} +3 -3
  2. package/dist/{animated-text-DhaihRNU.js.map → animated-text-CBOMltQE.js.map} +1 -1
  3. package/dist/{animated-text-Bm1G50ol.cjs → animated-text-rE-SkQgz.cjs} +2 -2
  4. package/dist/{animated-text-Bm1G50ol.cjs.map → animated-text-rE-SkQgz.cjs.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-Cybfl9fo.js → area.component-C86pi_TT.js} +3 -3
  9. package/dist/{area.component-Cybfl9fo.js.map → area.component-C86pi_TT.js.map} +1 -1
  10. package/dist/{area.component-e7ccHmOi.cjs → area.component-nX_dCv4R.cjs} +2 -2
  11. package/dist/{area.component-e7ccHmOi.cjs.map → area.component-nX_dCv4R.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-CHPr_eII.js → autocomplete-BAcf_l63.js} +3 -3
  14. package/dist/{autocomplete-CHPr_eII.js.map → autocomplete-BAcf_l63.js.map} +1 -1
  15. package/dist/{autocomplete-DhRURo6G.cjs → autocomplete-CuO8ztL4.cjs} +2 -2
  16. package/dist/{autocomplete-DhRURo6G.cjs.map → autocomplete-CuO8ztL4.cjs.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-B3rxuPbq.js → avatar-D3gNBale.js} +54 -53
  20. package/dist/{avatar-B3rxuPbq.js.map → avatar-D3gNBale.js.map} +1 -1
  21. package/dist/{avatar-BREyQJqy.cjs → avatar-N3BODeY1.cjs} +2 -2
  22. package/dist/{avatar-BREyQJqy.cjs.map → avatar-N3BODeY1.cjs.map} +1 -1
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-Ch2Dn8n_.js → boat-BQoWbDxu.js} +2 -2
  26. package/dist/{boat-Ch2Dn8n_.js.map → boat-BQoWbDxu.js.map} +1 -1
  27. package/dist/{boat-IQenN8zy.cjs → boat-CWXlAq65.cjs} +2 -2
  28. package/dist/{boat-IQenN8zy.cjs.map → boat-CWXlAq65.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/{checkbox-DTtOgNWH.js → checkbox-DBO-neG5.js} +2 -2
  38. package/dist/{checkbox-DTtOgNWH.js.map → checkbox-DBO-neG5.js.map} +1 -1
  39. package/dist/{checkbox-EV_8e4Q9.cjs → checkbox-DIYmuPtk.cjs} +2 -2
  40. package/dist/{checkbox-EV_8e4Q9.cjs.map → checkbox-DIYmuPtk.cjs.map} +1 -1
  41. package/dist/checkbox.cjs +1 -1
  42. package/dist/checkbox.js +1 -1
  43. package/dist/{chips-D9bYHkvu.cjs → chips-BYE5hQQr.cjs} +2 -2
  44. package/dist/{chips-D9bYHkvu.cjs.map → chips-BYE5hQQr.cjs.map} +1 -1
  45. package/dist/{chips-xlNsY8Dl.js → chips-C_7proIN.js} +3 -3
  46. package/dist/{chips-xlNsY8Dl.js.map → chips-C_7proIN.js.map} +1 -1
  47. package/dist/chips.cjs +1 -1
  48. package/dist/chips.js +1 -1
  49. package/dist/code-highlight.cjs +1 -1
  50. package/dist/code-highlight.js +1 -1
  51. package/dist/{code-preview-Dy4fNmOI.js → code-preview-CQ-EAz9F.js} +2 -2
  52. package/dist/{code-preview-Dy4fNmOI.js.map → code-preview-CQ-EAz9F.js.map} +1 -1
  53. package/dist/{code-preview-CC_QZwlB.cjs → code-preview-CzcyBpl-.cjs} +2 -2
  54. package/dist/{code-preview-CC_QZwlB.cjs.map → code-preview-CzcyBpl-.cjs.map} +1 -1
  55. package/dist/components.cjs +1 -1
  56. package/dist/components.js +1 -1
  57. package/dist/content-drawer.cjs +1 -1
  58. package/dist/content-drawer.js +1 -1
  59. package/dist/{date-range-XTs2K2Rp.cjs → date-range-DCghMsV8.cjs} +2 -2
  60. package/dist/{date-range-XTs2K2Rp.cjs.map → date-range-DCghMsV8.cjs.map} +1 -1
  61. package/dist/{date-range-CEhn7Gvg.js → date-range-WqwMEh16.js} +4 -4
  62. package/dist/{date-range-CEhn7Gvg.js.map → date-range-WqwMEh16.js.map} +1 -1
  63. package/dist/{date-range-inline-D-F8YwDL.js → date-range-inline-JgIiOHQM.js} +3 -3
  64. package/dist/{date-range-inline-D-F8YwDL.js.map → date-range-inline-JgIiOHQM.js.map} +1 -1
  65. package/dist/{date-range-inline-BW6v6aDq.cjs → date-range-inline-Z0ASWN4I.cjs} +2 -2
  66. package/dist/{date-range-inline-BW6v6aDq.cjs.map → date-range-inline-Z0ASWN4I.cjs.map} +1 -1
  67. package/dist/date-range-inline.cjs +1 -1
  68. package/dist/date-range-inline.js +1 -1
  69. package/dist/date-range.cjs +1 -1
  70. package/dist/date-range.js +1 -1
  71. package/dist/{delay-BYwpzSYY.cjs → delay-Ew4cphs1.cjs} +2 -2
  72. package/dist/{delay-BYwpzSYY.cjs.map → delay-Ew4cphs1.cjs.map} +1 -1
  73. package/dist/{delay-CqcMq7V3.js → delay-LnWlFwkK.js} +12 -12
  74. package/dist/{delay-CqcMq7V3.js.map → delay-LnWlFwkK.js.map} +1 -1
  75. package/dist/delay.cjs +1 -1
  76. package/dist/delay.js +1 -1
  77. package/dist/{details-gxjy3noS.js → details-BVEV0hUx.js} +2 -2
  78. package/dist/{details-gxjy3noS.js.map → details-BVEV0hUx.js.map} +1 -1
  79. package/dist/{details-C9Vr2c8F.cjs → details-C01m-iWQ.cjs} +2 -2
  80. package/dist/{details-C9Vr2c8F.cjs.map → details-C01m-iWQ.cjs.map} +1 -1
  81. package/dist/details.cjs +1 -1
  82. package/dist/details.js +1 -1
  83. package/dist/{dialog-content-DfXB0r6A.cjs → dialog-content-BFmy9Sbo.cjs} +2 -2
  84. package/dist/{dialog-content-DfXB0r6A.cjs.map → dialog-content-BFmy9Sbo.cjs.map} +1 -1
  85. package/dist/{dialog-content-CJ21oAff.js → dialog-content-B_w_iJyW.js} +4 -4
  86. package/dist/{dialog-content-CJ21oAff.js.map → dialog-content-B_w_iJyW.js.map} +1 -1
  87. package/dist/{dialog-service-ClZa-7cE.cjs → dialog-service-DS-aEjlX.cjs} +2 -2
  88. package/dist/{dialog-service-ClZa-7cE.cjs.map → dialog-service-DS-aEjlX.cjs.map} +1 -1
  89. package/dist/{dialog-service-Dwnyl4Gg.js → dialog-service-DwJ_7FB3.js} +2 -2
  90. package/dist/{dialog-service-Dwnyl4Gg.js.map → dialog-service-DwJ_7FB3.js.map} +1 -1
  91. package/dist/dialog.cjs +1 -1
  92. package/dist/dialog.js +2 -2
  93. package/dist/{divider-ZX6UG8fE.cjs → divider-BWG6TAr2.cjs} +2 -2
  94. package/dist/{divider-ZX6UG8fE.cjs.map → divider-BWG6TAr2.cjs.map} +1 -1
  95. package/dist/{divider-Dw3OYKoH.js → divider-FkKYlJY3.js} +3 -3
  96. package/dist/{divider-Dw3OYKoH.js.map → divider-FkKYlJY3.js.map} +1 -1
  97. package/dist/divider.cjs +1 -1
  98. package/dist/divider.js +1 -1
  99. package/dist/{dropdown-content-QWlP1OxV.js → dropdown-content-BStJGihR.js} +3 -3
  100. package/dist/{dropdown-content-QWlP1OxV.js.map → dropdown-content-BStJGihR.js.map} +1 -1
  101. package/dist/{dropdown-content-ULdb1NeW.cjs → dropdown-content-m1aSF-Oh.cjs} +2 -2
  102. package/dist/{dropdown-content-ULdb1NeW.cjs.map → dropdown-content-m1aSF-Oh.cjs.map} +1 -1
  103. package/dist/dropdown.cjs +1 -1
  104. package/dist/dropdown.js +1 -1
  105. package/dist/{email-recipients-H9HVkFvE.cjs → email-recipients-CbZNnzoj.cjs} +407 -85
  106. package/dist/email-recipients-CbZNnzoj.cjs.map +1 -0
  107. package/dist/{email-recipients-DQ36ickQ.js → email-recipients-CpghUhQ1.js} +634 -258
  108. package/dist/email-recipients-CpghUhQ1.js.map +1 -0
  109. package/dist/extra.cjs +1 -1
  110. package/dist/extra.js +1 -1
  111. package/dist/{flex-DEiJ9fDk.cjs → flex-BNVtJlgu.cjs} +2 -2
  112. package/dist/{flex-DEiJ9fDk.cjs.map → flex-BNVtJlgu.cjs.map} +1 -1
  113. package/dist/{flex-Cam0G_h7.js → flex-C6yj5Sxi.js} +2 -2
  114. package/dist/{flex-Cam0G_h7.js.map → flex-C6yj5Sxi.js.map} +1 -1
  115. package/dist/{form-EPO5N6pI.js → form-C85Qev2L.js} +2 -2
  116. package/dist/{form-EPO5N6pI.js.map → form-C85Qev2L.js.map} +1 -1
  117. package/dist/{form-B87v130C.cjs → form-ns7c4fcj.cjs} +2 -2
  118. package/dist/{form-B87v130C.cjs.map → form-ns7c4fcj.cjs.map} +1 -1
  119. package/dist/form.cjs +1 -1
  120. package/dist/form.js +1 -1
  121. package/dist/{formField.mixin-Dpx2Zk8-.cjs → formField.mixin-B3CXBJKX.cjs} +2 -2
  122. package/dist/{formField.mixin-Dpx2Zk8-.cjs.map → formField.mixin-B3CXBJKX.cjs.map} +1 -1
  123. package/dist/{formField.mixin-B6XjIwKN.js → formField.mixin-CKb_MTS7.js} +2 -2
  124. package/dist/{formField.mixin-B6XjIwKN.js.map → formField.mixin-CKb_MTS7.js.map} +1 -1
  125. package/dist/{icon-C6CXTo3Z.js → icon-DKPLcbdu.js} +2 -2
  126. package/dist/{icon-C6CXTo3Z.js.map → icon-DKPLcbdu.js.map} +1 -1
  127. package/dist/{icon-MrlToWLJ.cjs → icon-DUstfLaC.cjs} +2 -2
  128. package/dist/{icon-MrlToWLJ.cjs.map → icon-DUstfLaC.cjs.map} +1 -1
  129. package/dist/{icon-button-Csj8jwj8.js → icon-button-CIkRej0r.js} +3 -3
  130. package/dist/{icon-button-Csj8jwj8.js.map → icon-button-CIkRej0r.js.map} +1 -1
  131. package/dist/{icon-button-BwAStx3H.cjs → icon-button-DiRex-eZ.cjs} +2 -2
  132. package/dist/{icon-button-BwAStx3H.cjs.map → icon-button-DiRex-eZ.cjs.map} +1 -1
  133. package/dist/icons.cjs +1 -1
  134. package/dist/icons.js +1 -1
  135. package/dist/index.cjs +1 -1
  136. package/dist/index.js +225 -224
  137. package/dist/index.js.map +1 -1
  138. package/dist/{input-D4L413yG.cjs → input-B7MqsI2h.cjs} +2 -2
  139. package/dist/{input-D4L413yG.cjs.map → input-B7MqsI2h.cjs.map} +1 -1
  140. package/dist/{input-B9PDbNB9.js → input-DODcsAZu.js} +3 -3
  141. package/dist/{input-B9PDbNB9.js.map → input-DODcsAZu.js.map} +1 -1
  142. package/dist/input.cjs +1 -1
  143. package/dist/input.js +1 -1
  144. package/dist/layout.cjs +1 -1
  145. package/dist/layout.js +1 -1
  146. package/dist/{list-Cdd7ht2E.js → list-Cx6tpiFE.js} +2 -2
  147. package/dist/{list-Cdd7ht2E.js.map → list-Cx6tpiFE.js.map} +1 -1
  148. package/dist/{list-DLUbjS69.cjs → list-DxduK4sb.cjs} +2 -2
  149. package/dist/{list-DLUbjS69.cjs.map → list-DxduK4sb.cjs.map} +1 -1
  150. package/dist/list.cjs +1 -1
  151. package/dist/list.js +1 -1
  152. package/dist/{litElement.mixin-CbFQ2uxn.cjs → litElement.mixin-B12Y4mEr.cjs} +2 -2
  153. package/dist/{litElement.mixin-CbFQ2uxn.cjs.map → litElement.mixin-B12Y4mEr.cjs.map} +1 -1
  154. package/dist/{litElement.mixin-BYVS1wwl.js → litElement.mixin-BZ8iGvPl.js} +2 -2
  155. package/dist/{litElement.mixin-BYVS1wwl.js.map → litElement.mixin-BZ8iGvPl.js.map} +1 -1
  156. package/dist/mailbox.cjs +1 -1
  157. package/dist/mailbox.js +1 -1
  158. package/dist/{map-DmjQ1Izx.js → map-dT8yp1iK.js} +2 -2
  159. package/dist/{map-DmjQ1Izx.js.map → map-dT8yp1iK.js.map} +1 -1
  160. package/dist/{map-DxUajvGo.cjs → map-sgCf8pYD.cjs} +2 -2
  161. package/dist/{map-DxUajvGo.cjs.map → map-sgCf8pYD.cjs.map} +1 -1
  162. package/dist/map.cjs +1 -1
  163. package/dist/map.js +1 -1
  164. package/dist/{media-DPurU9FS.js → media-CgH0D5rY.js} +2 -2
  165. package/dist/{media-DPurU9FS.js.map → media-CgH0D5rY.js.map} +1 -1
  166. package/dist/{media-DCIVM-cE.cjs → media-CwjupDLj.cjs} +2 -2
  167. package/dist/{media-DCIVM-cE.cjs.map → media-CwjupDLj.cjs.map} +1 -1
  168. package/dist/{menu-CIObvZ7n.cjs → menu-X25Q7tpY.cjs} +2 -2
  169. package/dist/{menu-CIObvZ7n.cjs.map → menu-X25Q7tpY.cjs.map} +1 -1
  170. package/dist/{menu-CwRGjbC-.js → menu-oZRtmhVd.js} +3 -3
  171. package/dist/{menu-CwRGjbC-.js.map → menu-oZRtmhVd.js.map} +1 -1
  172. package/dist/menu.cjs +1 -1
  173. package/dist/menu.js +1 -1
  174. package/dist/nav-drawer.cjs +1 -1
  175. package/dist/nav-drawer.js +1 -1
  176. package/dist/{notification-service-BMnjQVrQ.cjs → notification-service-kLTt3JtW.cjs} +2 -2
  177. package/dist/{notification-service-BMnjQVrQ.cjs.map → notification-service-kLTt3JtW.cjs.map} +1 -1
  178. package/dist/{notification-service-DypTYarw.js → notification-service-y0T4rXdS.js} +4 -4
  179. package/dist/{notification-service-DypTYarw.js.map → notification-service-y0T4rXdS.js.map} +1 -1
  180. package/dist/notification.cjs +1 -1
  181. package/dist/notification.js +2 -2
  182. package/dist/{notify-DUMaApt7.js → notify-BnjvURrc.js} +2 -2
  183. package/dist/{notify-DUMaApt7.js.map → notify-BnjvURrc.js.map} +1 -1
  184. package/dist/{notify-CqCSy8Ek.cjs → notify-EGStToeW.cjs} +2 -2
  185. package/dist/{notify-CqCSy8Ek.cjs.map → notify-EGStToeW.cjs.map} +1 -1
  186. package/dist/{option-CvjLp3CB.js → option-CD1NSUXu.js} +2 -2
  187. package/dist/{option-CvjLp3CB.js.map → option-CD1NSUXu.js.map} +1 -1
  188. package/dist/{option-BuN5MSy7.cjs → option-D4_WBCWz.cjs} +2 -2
  189. package/dist/{option-BuN5MSy7.cjs.map → option-D4_WBCWz.cjs.map} +1 -1
  190. package/dist/option.cjs +1 -1
  191. package/dist/option.js +1 -1
  192. package/dist/{payment-card-form-C9VN_H07.cjs → payment-card-form-96Rw6cLf.cjs} +2 -2
  193. package/dist/{payment-card-form-C9VN_H07.cjs.map → payment-card-form-96Rw6cLf.cjs.map} +1 -1
  194. package/dist/{payment-card-form-CFDdmSH2.js → payment-card-form-lWlhuDb3.js} +3 -3
  195. package/dist/{payment-card-form-CFDdmSH2.js.map → payment-card-form-lWlhuDb3.js.map} +1 -1
  196. package/dist/{progress-C-6ieScw.cjs → progress-BkxGzGOm.cjs} +2 -2
  197. package/dist/{progress-C-6ieScw.cjs.map → progress-BkxGzGOm.cjs.map} +1 -1
  198. package/dist/{progress-BeOOCcPN.js → progress-DGk9tC4y.js} +2 -2
  199. package/dist/{progress-BeOOCcPN.js.map → progress-DGk9tC4y.js.map} +1 -1
  200. package/dist/progress.cjs +1 -1
  201. package/dist/progress.js +1 -1
  202. package/dist/{radio-button-D6zvMVQb.js → radio-button-DHM38A7h.js} +3 -3
  203. package/dist/{radio-button-D6zvMVQb.js.map → radio-button-DHM38A7h.js.map} +1 -1
  204. package/dist/{radio-button-Bi4ywYhW.cjs → radio-button-w9ZxzEPa.cjs} +2 -2
  205. package/dist/{radio-button-Bi4ywYhW.cjs.map → radio-button-w9ZxzEPa.cjs.map} +1 -1
  206. package/dist/radio-group.cjs +1 -1
  207. package/dist/radio-group.js +1 -1
  208. package/dist/{schmancy-steps-container-i8rqaPet.cjs → schmancy-steps-container-CPSL_8H0.cjs} +2 -2
  209. package/dist/{schmancy-steps-container-i8rqaPet.cjs.map → schmancy-steps-container-CPSL_8H0.cjs.map} +1 -1
  210. package/dist/{schmancy-steps-container-CfDatUf8.js → schmancy-steps-container-WYO4SOrb.js} +2 -2
  211. package/dist/{schmancy-steps-container-CfDatUf8.js.map → schmancy-steps-container-WYO4SOrb.js.map} +1 -1
  212. package/dist/{select-BPkJhj-o.cjs → select-CxCcgqW_.cjs} +2 -2
  213. package/dist/{select-BPkJhj-o.cjs.map → select-CxCcgqW_.cjs.map} +1 -1
  214. package/dist/{select-X7b74OI8.js → select-bDAzyQOZ.js} +3 -3
  215. package/dist/{select-X7b74OI8.js.map → select-bDAzyQOZ.js.map} +1 -1
  216. package/dist/select.cjs +1 -1
  217. package/dist/select.js +1 -1
  218. package/dist/sheet-Bm0ukLXt.cjs +52 -0
  219. package/dist/sheet-Bm0ukLXt.cjs.map +1 -0
  220. package/dist/sheet-pO6PmiAf.js +144 -0
  221. package/dist/sheet-pO6PmiAf.js.map +1 -0
  222. package/dist/sheet.cjs +1 -1
  223. package/dist/sheet.js +6 -5
  224. package/dist/sheet.js.map +1 -1
  225. package/dist/sheet.service-DV9xNhS8.cjs +2 -0
  226. package/dist/sheet.service-DV9xNhS8.cjs.map +1 -0
  227. package/dist/sheet.service-ieSXeqCj.js +87 -0
  228. package/dist/sheet.service-ieSXeqCj.js.map +1 -0
  229. package/dist/{slider-DWO4L_qC.cjs → slider-BwXXp74f.cjs} +2 -2
  230. package/dist/{slider-DWO4L_qC.cjs.map → slider-BwXXp74f.cjs.map} +1 -1
  231. package/dist/{slider-py-bz6Vv.js → slider-CxZGMYF-.js} +3 -3
  232. package/dist/{slider-py-bz6Vv.js.map → slider-CxZGMYF-.js.map} +1 -1
  233. package/dist/slider.cjs +1 -1
  234. package/dist/slider.js +1 -1
  235. package/dist/{spinner-DpmMO5_E.js → spinner-b3VWC6It.js} +2 -2
  236. package/dist/{spinner-DpmMO5_E.js.map → spinner-b3VWC6It.js.map} +1 -1
  237. package/dist/{spinner-Dv1WJaIf.cjs → spinner-nN77H00p.cjs} +2 -2
  238. package/dist/{spinner-Dv1WJaIf.cjs.map → spinner-nN77H00p.cjs.map} +1 -1
  239. package/dist/steps.cjs +1 -1
  240. package/dist/steps.js +1 -1
  241. package/dist/{surface-CFNIITaq.js → surface-C2WjztRc.js} +2 -2
  242. package/dist/{surface-CFNIITaq.js.map → surface-C2WjztRc.js.map} +1 -1
  243. package/dist/{surface-Bn4-n1lT.cjs → surface-Cm8zYK5d.cjs} +2 -2
  244. package/dist/{surface-Bn4-n1lT.cjs.map → surface-Cm8zYK5d.cjs.map} +1 -1
  245. package/dist/surface.cjs +1 -1
  246. package/dist/surface.js +1 -1
  247. package/dist/{table-A_oEWQzm.cjs → table-BfhuaB9J.cjs} +2 -2
  248. package/dist/{table-A_oEWQzm.cjs.map → table-BfhuaB9J.cjs.map} +1 -1
  249. package/dist/{table-DNUpAcQk.js → table-Dp7npAuy.js} +2 -2
  250. package/dist/{table-DNUpAcQk.js.map → table-Dp7npAuy.js.map} +1 -1
  251. package/dist/table.cjs +1 -1
  252. package/dist/table.js +1 -1
  253. package/dist/{tabs-compatibility-DNVqDoQh.cjs → tabs-compatibility-CA-wWRoe.cjs} +2 -2
  254. package/dist/{tabs-compatibility-DNVqDoQh.cjs.map → tabs-compatibility-CA-wWRoe.cjs.map} +1 -1
  255. package/dist/{tabs-compatibility-Bxoz71f7.js → tabs-compatibility-U4cq8X3I.js} +2 -2
  256. package/dist/{tabs-compatibility-Bxoz71f7.js.map → tabs-compatibility-U4cq8X3I.js.map} +1 -1
  257. package/dist/tabs.cjs +1 -1
  258. package/dist/tabs.js +1 -1
  259. package/dist/tailwind.mixin-BlZIIaOE.cjs +2 -0
  260. package/dist/{tailwind.mixin-BU9fMdfc.cjs.map → tailwind.mixin-BlZIIaOE.cjs.map} +1 -1
  261. package/dist/tailwind.mixin-D2DVHS9V.js +43 -0
  262. package/dist/{tailwind.mixin-Bpgmqass.js.map → tailwind.mixin-D2DVHS9V.js.map} +1 -1
  263. package/dist/teleport.cjs +1 -1
  264. package/dist/teleport.js +1 -1
  265. package/dist/{textarea-BE5TqYmx.js → textarea-BRNj3tvi.js} +2 -2
  266. package/dist/{textarea-BE5TqYmx.js.map → textarea-BRNj3tvi.js.map} +1 -1
  267. package/dist/{textarea-DTlpsJ-V.cjs → textarea-CxZKoXaU.cjs} +2 -2
  268. package/dist/{textarea-DTlpsJ-V.cjs.map → textarea-CxZKoXaU.cjs.map} +1 -1
  269. package/dist/textarea.cjs +1 -1
  270. package/dist/textarea.js +1 -1
  271. package/dist/{theme-button-DG8sPYM-.cjs → theme-button-MrIoOFEB.cjs} +2 -2
  272. package/dist/{theme-button-DG8sPYM-.cjs.map → theme-button-MrIoOFEB.cjs.map} +1 -1
  273. package/dist/{theme-button-BsojGTM7.js → theme-button-N_Wt3bos.js} +2 -2
  274. package/dist/{theme-button-BsojGTM7.js.map → theme-button-N_Wt3bos.js.map} +1 -1
  275. package/dist/theme-button.cjs +1 -1
  276. package/dist/theme-button.js +1 -1
  277. package/dist/theme.cjs +1 -1
  278. package/dist/{theme.component-BG4oCMuV.js → theme.component-6VfET_t-.js} +2 -2
  279. package/dist/{theme.component-BG4oCMuV.js.map → theme.component-6VfET_t-.js.map} +1 -1
  280. package/dist/{theme.component-D7TpDD6q.cjs → theme.component-B_EubPsq.cjs} +3 -3
  281. package/dist/{theme.component-D7TpDD6q.cjs.map → theme.component-B_EubPsq.cjs.map} +1 -1
  282. package/dist/theme.js +1 -1
  283. package/dist/{timezone-dc6VVlU0.cjs → timezone-BVd9UEba.cjs} +2 -2
  284. package/dist/{timezone-dc6VVlU0.cjs.map → timezone-BVd9UEba.cjs.map} +1 -1
  285. package/dist/{timezone-DtsS7reI.js → timezone-DR_4m9Cc.js} +3 -3
  286. package/dist/{timezone-DtsS7reI.js.map → timezone-DR_4m9Cc.js.map} +1 -1
  287. package/dist/{tooltip-C5C8KN_9.js → tooltip-BpPHc8Wr.js} +2 -2
  288. package/dist/{tooltip-C5C8KN_9.js.map → tooltip-BpPHc8Wr.js.map} +1 -1
  289. package/dist/{tooltip-CA2yHZN6.cjs → tooltip-DOQVLRaH.cjs} +2 -2
  290. package/dist/{tooltip-CA2yHZN6.cjs.map → tooltip-DOQVLRaH.cjs.map} +1 -1
  291. package/dist/tooltip.cjs +1 -1
  292. package/dist/tooltip.js +1 -1
  293. package/dist/{tree-D7CAcAHa.cjs → tree-BANkyLn7.cjs} +2 -2
  294. package/dist/{tree-D7CAcAHa.cjs.map → tree-BANkyLn7.cjs.map} +1 -1
  295. package/dist/{tree-jBMmDqPl.js → tree-C5zu8wXc.js} +2 -2
  296. package/dist/{tree-jBMmDqPl.js.map → tree-C5zu8wXc.js.map} +1 -1
  297. package/dist/tree.cjs +1 -1
  298. package/dist/tree.js +1 -1
  299. package/dist/{typewriter-DDgmwo1Z.js → typewriter-CdztqkoR.js} +7 -7
  300. package/dist/{typewriter-DDgmwo1Z.js.map → typewriter-CdztqkoR.js.map} +1 -1
  301. package/dist/{typewriter-BMfjokvJ.cjs → typewriter-DS0D0UZM.cjs} +2 -2
  302. package/dist/{typewriter-BMfjokvJ.cjs.map → typewriter-DS0D0UZM.cjs.map} +1 -1
  303. package/dist/typewriter.cjs +1 -1
  304. package/dist/typewriter.js +1 -1
  305. package/dist/{typography-CeAzj0Al.cjs → typography-C8vZfuLF.cjs} +2 -2
  306. package/dist/{typography-CeAzj0Al.cjs.map → typography-C8vZfuLF.cjs.map} +1 -1
  307. package/dist/{typography-D0JH1nwp.js → typography-o9FJ6Lzo.js} +2 -2
  308. package/dist/{typography-D0JH1nwp.js.map → typography-o9FJ6Lzo.js.map} +1 -1
  309. package/dist/typography.cjs +1 -1
  310. package/dist/typography.js +1 -1
  311. package/package.json +1 -1
  312. package/types/src/mailbox/email-editor.d.ts +9 -10
  313. package/types/src/mailbox/email-template-picker.d.ts +54 -0
  314. package/types/src/mailbox/types.d.ts +3 -0
  315. package/dist/email-recipients-DQ36ickQ.js.map +0 -1
  316. package/dist/email-recipients-H9HVkFvE.cjs.map +0 -1
  317. package/dist/sheet-BBT4JQ3Z.cjs +0 -52
  318. package/dist/sheet-BBT4JQ3Z.cjs.map +0 -1
  319. package/dist/sheet-DvCIJGFo.js +0 -228
  320. package/dist/sheet-DvCIJGFo.js.map +0 -1
  321. package/dist/tailwind.mixin-BU9fMdfc.cjs +0 -2
  322. package/dist/tailwind.mixin-Bpgmqass.js +0 -43
@@ -1,9 +1,9 @@
1
- "use strict";require("rxjs"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const $=require("./litElement.mixin-CbFQ2uxn.cjs"),w=require("./tailwind.mixin-BU9fMdfc.cjs"),c=require("lit/decorators.js"),r=require("lit"),p=require("lit/directives/when.js"),f=require("lit/directives/ref.js"),x=require("lit/directives/repeat.js"),g=require("./notification-service-BMnjQVrQ.cjs");require("./dialog-content-DfXB0r6A.cjs");const S=require("./dialog-service-ClZa-7cE.cjs");var R=Object.defineProperty,E=Object.getOwnPropertyDescriptor,m=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?E(t,i):t,l=e.length-1;l>=0;l--)(a=e[l])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&R(t,i,n),n};exports.SchmancyMailbox=class extends $.$LitElement(r.css`
1
+ "use strict";require("rxjs"),require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const $=require("./litElement.mixin-B12Y4mEr.cjs"),R=require("./tailwind.mixin-BlZIIaOE.cjs"),c=require("lit/decorators.js"),o=require("lit"),d=require("lit/directives/when.js"),g=require("lit/directives/ref.js"),S=require("lit/directives/repeat.js"),u=require("./notification-service-kLTt3JtW.cjs");require("./dialog-content-BFmy9Sbo.cjs");const k=require("./dialog-service-DS-aEjlX.cjs"),E=require("./sheet.service-DV9xNhS8.cjs");var C=Object.defineProperty,T=Object.getOwnPropertyDescriptor,m=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?T(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&C(t,i,n),n};exports.SchmancyMailbox=class extends $.$LitElement(o.css`
2
2
  :host {
3
3
  display: block;
4
4
  height: 100%;
5
5
  }
6
- `){constructor(){super(...arguments),this.config={},this.templates=[],this.importSources=[],this.disabled=!1,this.recipientsTitle="Recipients",this.recipientsEmptyTitle="No recipients yet",this.recipientsEmptyMessage="Import from sources or upload a CSV",this.enableCsvImport=!0,this.enableDragDrop=!0,this.recipients=[],this.selectedRecipients=[],this.subject="",this.body="",this.templateId=null,this.attachments=[],this.isSending=!1,this.handleEmailsImported=e=>{const{emails:t}=e.detail,i=[...new Set([...this.recipients,...t])],s=t.filter(a=>!this.recipients.includes(a));this.recipients=i,this.selectedRecipients=[...new Set([...this.selectedRecipients,...s])],this.dispatchEvent(new CustomEvent("emails-imported",{detail:{emails:s,source:e.detail.source},bubbles:!0,composed:!0}))},this.handleRecipientRemoved=e=>{const{email:t}=e.detail;this.recipients=this.recipients.filter(i=>i!==t),this.selectedRecipients=this.selectedRecipients.filter(i=>i!==t),this.dispatchEvent(new CustomEvent("recipient-removed",{detail:{email:t},bubbles:!0,composed:!0}))},this.handleRecipientsCleared=()=>{this.recipients=[],this.selectedRecipients=[],this.dispatchEvent(new CustomEvent("recipients-cleared",{bubbles:!0,composed:!0}))},this.handleSelectionChanged=e=>{const{selectedEmails:t}=e.detail;this.selectedRecipients=t,this.dispatchEvent(new CustomEvent("selection-changed",{detail:{selectedEmails:t},bubbles:!0,composed:!0}))},this.handleEditorChange=e=>{const{subject:t,body:i,templateId:s,attachments:a}=e.detail;this.subject=t,this.body=i,this.templateId=s,this.attachments=a,this.dispatchEvent(new CustomEvent("compose-changed",{detail:{subject:t,body:i,templateId:s,attachments:a},bubbles:!0,composed:!0}))},this.handleSend=async()=>{if(this.selectedRecipients.length!==0)if(this.subject.trim())if(this.body.trim()){this.isSending=!0;try{const e={recipients:this.selectedRecipients,subject:this.subject,body:this.body,attachments:this.attachments,templateId:this.templateId};this.dispatchEvent(new CustomEvent("send-email",{detail:{request:e},bubbles:!0,composed:!0}))}catch(e){this.dispatchEvent(new CustomEvent("send-error",{detail:{error:e instanceof Error?e.message:"Failed to send email"},bubbles:!0,composed:!0}))}finally{this.isSending=!1}}else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please enter a message body"},bubbles:!0,composed:!0}));else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please enter a subject"},bubbles:!0,composed:!0}));else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please select at least one recipient"},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.setSending(this.disabled)}updated(e){super.updated(e),e.has("disabled")&&this.setSending(this.disabled)}addRecipients(e){const t=[...new Set([...this.recipients,...e])],i=e.filter(s=>!this.recipients.includes(s));this.recipients=t,this.selectedRecipients=[...new Set([...this.selectedRecipients,...i])]}setSubject(e){this.subject=e}setBody(e){this.body=e}setTemplate(e){this.templateId=e}clearCompose(){this.recipients=[],this.selectedRecipients=[],this.subject="",this.body="",this.templateId=null,this.attachments=[]}setSending(e){this.isSending=e}render(){const e=this.selectedRecipients.length>0&&this.subject.trim()&&this.body.trim()&&!this.isSending&&!this.disabled;return r.html`
6
+ `){constructor(){super(...arguments),this.config={},this.templates=[],this.importSources=[],this.disabled=!1,this.recipientsTitle="Recipients",this.recipientsEmptyTitle="No recipients yet",this.recipientsEmptyMessage="Import from sources or upload a CSV",this.enableCsvImport=!0,this.enableDragDrop=!0,this.recipients=[],this.selectedRecipients=[],this.subject="",this.body="",this.templateId=null,this.attachments=[],this.isSending=!1,this.handleEmailsImported=e=>{const{emails:t}=e.detail,i=[...new Set([...this.recipients,...t])],s=t.filter(a=>!this.recipients.includes(a));this.recipients=i,this.selectedRecipients=[...new Set([...this.selectedRecipients,...s])],this.dispatchEvent(new CustomEvent("emails-imported",{detail:{emails:s,source:e.detail.source},bubbles:!0,composed:!0}))},this.handleRecipientRemoved=e=>{const{email:t}=e.detail;this.recipients=this.recipients.filter(i=>i!==t),this.selectedRecipients=this.selectedRecipients.filter(i=>i!==t),this.dispatchEvent(new CustomEvent("recipient-removed",{detail:{email:t},bubbles:!0,composed:!0}))},this.handleRecipientsCleared=()=>{this.recipients=[],this.selectedRecipients=[],this.dispatchEvent(new CustomEvent("recipients-cleared",{bubbles:!0,composed:!0}))},this.handleSelectionChanged=e=>{const{selectedEmails:t}=e.detail;this.selectedRecipients=t,this.dispatchEvent(new CustomEvent("selection-changed",{detail:{selectedEmails:t},bubbles:!0,composed:!0}))},this.handleEditorChange=e=>{const{subject:t,body:i,templateId:s,attachments:a}=e.detail;this.subject=t,this.body=i,this.templateId=s,this.attachments=a,this.dispatchEvent(new CustomEvent("compose-changed",{detail:{subject:t,body:i,templateId:s,attachments:a},bubbles:!0,composed:!0}))},this.handleSend=async()=>{if(this.selectedRecipients.length!==0)if(this.subject.trim())if(this.body.trim()){this.isSending=!0;try{const e={recipients:this.selectedRecipients,subject:this.subject,body:this.body,attachments:this.attachments,templateId:this.templateId};this.dispatchEvent(new CustomEvent("send-email",{detail:{request:e},bubbles:!0,composed:!0}))}catch(e){this.dispatchEvent(new CustomEvent("send-error",{detail:{error:e instanceof Error?e.message:"Failed to send email"},bubbles:!0,composed:!0}))}finally{this.isSending=!1}}else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please enter a message body"},bubbles:!0,composed:!0}));else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please enter a subject"},bubbles:!0,composed:!0}));else this.dispatchEvent(new CustomEvent("send-error",{detail:{error:"Please select at least one recipient"},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.setSending(this.disabled)}updated(e){super.updated(e),e.has("disabled")&&this.setSending(this.disabled)}addRecipients(e){const t=[...new Set([...this.recipients,...e])],i=e.filter(s=>!this.recipients.includes(s));this.recipients=t,this.selectedRecipients=[...new Set([...this.selectedRecipients,...i])]}setSubject(e){this.subject=e}setBody(e){this.body=e}setTemplate(e){this.templateId=e}clearCompose(){this.recipients=[],this.selectedRecipients=[],this.subject="",this.body="",this.templateId=null,this.attachments=[]}setSending(e){this.isSending=e}render(){const e=this.selectedRecipients.length>0&&this.subject.trim()&&this.body.trim()&&!this.isSending&&!this.disabled;return o.html`
7
7
  <!-- Main Layout Container -->
8
8
  <div class="flex flex-col h-full gap-6 p-6">
9
9
 
@@ -50,7 +50,7 @@
50
50
  <schmancy-typography type="body" token="sm" class="font-medium">
51
51
  ${this.selectedRecipients.length} recipient${this.selectedRecipients.length===1?"":"s"} selected
52
52
  </schmancy-typography>
53
- ${p.when(this.attachments.length>0,()=>r.html`
53
+ ${d.when(this.attachments.length>0,()=>o.html`
54
54
  <schmancy-typography type="body" token="xs">
55
55
  ${this.attachments.length} attachment${this.attachments.length===1?"":"s"}
56
56
  </schmancy-typography>
@@ -90,9 +90,9 @@
90
90
  @recipients-cleared=${this.handleRecipientsCleared}
91
91
  @selection-changed=${this.handleSelectionChanged}
92
92
  ></schmancy-email-recipients>
93
- `}},m([c.property({type:Object})],exports.SchmancyMailbox.prototype,"config",2),m([c.property({type:Array})],exports.SchmancyMailbox.prototype,"templates",2),m([c.property({type:Array})],exports.SchmancyMailbox.prototype,"importSources",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"disabled",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsTitle",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsEmptyTitle",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsEmptyMessage",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"enableCsvImport",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"enableDragDrop",2),m([c.state()],exports.SchmancyMailbox.prototype,"recipients",2),m([c.state()],exports.SchmancyMailbox.prototype,"selectedRecipients",2),m([c.state()],exports.SchmancyMailbox.prototype,"subject",2),m([c.state()],exports.SchmancyMailbox.prototype,"body",2),m([c.state()],exports.SchmancyMailbox.prototype,"templateId",2),m([c.state()],exports.SchmancyMailbox.prototype,"attachments",2),m([c.state()],exports.SchmancyMailbox.prototype,"isSending",2),exports.SchmancyMailbox=m([c.customElement("schmancy-mailbox")],exports.SchmancyMailbox);var C=Object.getOwnPropertyDescriptor;exports.SchmancyEmailLayoutSelector=class extends w.TailwindElement(){constructor(){super(...arguments),this.layouts=[{id:"columns-2",icon:"view_week",label:"2 Col"},{id:"columns-3",icon:"view_column",label:"3 Col"},{id:"sidebar-left",icon:"view_sidebar",label:"Left"},{id:"sidebar-right",icon:"view_sidebar",label:"Right",flipped:!0},{id:"image-row",icon:"collections",label:"Images"}]}selectLayout(e){this.dispatchEvent(new CustomEvent("layout-select",{detail:{layout:e},bubbles:!0,composed:!0}))}render(){return r.html`
93
+ `}},m([c.property({type:Object})],exports.SchmancyMailbox.prototype,"config",2),m([c.property({type:Array})],exports.SchmancyMailbox.prototype,"templates",2),m([c.property({type:Array})],exports.SchmancyMailbox.prototype,"importSources",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"disabled",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsTitle",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsEmptyTitle",2),m([c.property({type:String})],exports.SchmancyMailbox.prototype,"recipientsEmptyMessage",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"enableCsvImport",2),m([c.property({type:Boolean})],exports.SchmancyMailbox.prototype,"enableDragDrop",2),m([c.state()],exports.SchmancyMailbox.prototype,"recipients",2),m([c.state()],exports.SchmancyMailbox.prototype,"selectedRecipients",2),m([c.state()],exports.SchmancyMailbox.prototype,"subject",2),m([c.state()],exports.SchmancyMailbox.prototype,"body",2),m([c.state()],exports.SchmancyMailbox.prototype,"templateId",2),m([c.state()],exports.SchmancyMailbox.prototype,"attachments",2),m([c.state()],exports.SchmancyMailbox.prototype,"isSending",2),exports.SchmancyMailbox=m([c.customElement("schmancy-mailbox")],exports.SchmancyMailbox);var I=Object.getOwnPropertyDescriptor;exports.SchmancyEmailLayoutSelector=class extends R.TailwindElement(){constructor(){super(...arguments),this.layouts=[{id:"columns-2",icon:"view_week",label:"2 Col"},{id:"columns-3",icon:"view_column",label:"3 Col"},{id:"sidebar-left",icon:"view_sidebar",label:"Left"},{id:"sidebar-right",icon:"view_sidebar",label:"Right",flipped:!0},{id:"image-row",icon:"collections",label:"Images"}]}selectLayout(e){this.dispatchEvent(new CustomEvent("layout-select",{detail:{layout:e},bubbles:!0,composed:!0}))}render(){return o.html`
94
94
  <div class="grid p-3 gap-2">
95
- ${this.layouts.map(e=>r.html`
95
+ ${this.layouts.map(e=>o.html`
96
96
  <schmancy-button
97
97
  variant="outlined"
98
98
  @click=${()=>this.selectLayout(e.id)}
@@ -108,16 +108,168 @@
108
108
  </schmancy-button>
109
109
  `)}
110
110
  </div>
111
- `}},exports.SchmancyEmailLayoutSelector=((e,t,i,s)=>{for(var a,n=s>1?void 0:s?C(t,i):t,l=e.length-1;l>=0;l--)(a=e[l])&&(n=a(n)||n);return n})([c.customElement("schmancy-email-layout-selector")],exports.SchmancyEmailLayoutSelector);var k=Object.defineProperty,I=Object.getOwnPropertyDescriptor,u=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?I(t,i):t,l=e.length-1;l>=0;l--)(a=e[l])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&k(t,i,n),n};exports.SchmancyEmailEditor=class extends $.$LitElement(r.css`
111
+ `}},exports.SchmancyEmailLayoutSelector=((e,t,i,s)=>{for(var a,n=s>1?void 0:s?I(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=a(n)||n);return n})([c.customElement("schmancy-email-layout-selector")],exports.SchmancyEmailLayoutSelector);var A=Object.defineProperty,D=Object.getOwnPropertyDescriptor,w=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?D(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&A(t,i,n),n};let x=class extends $.$LitElement(o.css`
112
+ :host {
113
+ display: block;
114
+ }
115
+ `){constructor(){super(...arguments),this.templates=[],this.searchQuery="",this.filteredTemplates=[],this.selectedCategory="all",this.handleSearch=e=>{const t=e.target;this.searchQuery=t.value},this.handleCategorySelect=e=>{this.selectedCategory=e,this.updateFilteredTemplates()},this.selectTemplate=e=>{this.dispatchEvent(new CustomEvent("template-selected",{detail:e,bubbles:!0,composed:!0})),E.sheet.dismiss()},this.close=()=>{E.sheet.dismiss()}}connectedCallback(){super.connectedCallback(),this.updateFilteredTemplates()}updated(e){(e.has("templates")||e.has("searchQuery")||e.has("selectedCategory"))&&this.updateFilteredTemplates()}get categories(){const e=new Set;return this.templates.forEach(t=>{t.category&&e.add(t.category)}),["all",...Array.from(e)]}updateFilteredTemplates(){let e=[...this.templates];if(this.selectedCategory!=="all"&&(e=e.filter(t=>t.category===this.selectedCategory)),this.searchQuery.trim()){const t=this.searchQuery.toLowerCase();e=e.filter(i=>i.name.toLowerCase().includes(t)||i.category?.toLowerCase().includes(t)||i.description?.toLowerCase().includes(t))}this.filteredTemplates=e}render(){return o.html`
116
+ <div class="flex flex-col h-full overflow-hidden">
117
+ <!-- Header -->
118
+ <div class="flex items-center justify-between px-6 py-4 border-b border-outline-variant">
119
+ <div class="flex items-center gap-3">
120
+ <schmancy-icon size="24px" class="text-primary">mail</schmancy-icon>
121
+ <schmancy-typography type="headline" token="md">
122
+ Choose Email Template
123
+ </schmancy-typography>
124
+ </div>
125
+ <schmancy-button
126
+ variant="text"
127
+ @click=${this.close}
128
+ class="hover:bg-surface-container rounded-full w-10 h-10 p-0"
129
+ >
130
+ <schmancy-icon>close</schmancy-icon>
131
+ </schmancy-button>
132
+ </div>
133
+
134
+ <!-- Body -->
135
+ <div class="flex-1 flex flex-col overflow-hidden">
136
+ ${this.renderTemplateList()}
137
+ </div>
138
+ </div>
139
+ `}renderTemplateList(){return o.html`
140
+ <!-- Search and Filter Bar -->
141
+ <div class="px-6 py-4 border-b border-outline-variant bg-surface-containerLow">
142
+ <div class="flex flex-col gap-4">
143
+ <!-- Search Input -->
144
+ <schmancy-input
145
+ type="search"
146
+ placeholder="Search templates..."
147
+ .value=${this.searchQuery}
148
+ @input=${this.handleSearch}
149
+ class="w-full"
150
+ >
151
+ <schmancy-icon slot="prefix" size="20px" class="text-surface-onVariant">search</schmancy-icon>
152
+ ${d.when(this.searchQuery,()=>o.html`
153
+ <schmancy-button
154
+ slot="suffix"
155
+ variant="text"
156
+ @click=${()=>{this.searchQuery=""}}
157
+ class="rounded-full w-8 h-8 p-0"
158
+ >
159
+ <schmancy-icon size="16px">close</schmancy-icon>
160
+ </schmancy-button>
161
+ `)}
162
+ </schmancy-input>
163
+
164
+ <!-- Category Filter -->
165
+ ${d.when(this.categories.length>1,()=>o.html`
166
+ <div class="flex gap-2 flex-wrap">
167
+ ${S.repeat(this.categories,e=>e,e=>o.html`
168
+ <schmancy-chip
169
+ class="cursor-pointer transition-all hover:shadow-sm ${this.selectedCategory===e?"bg-primary text-primary-on":"border border-outline"}"
170
+ @click=${()=>this.handleCategorySelect(e)}
171
+ >
172
+ ${e==="all"?"All Templates":e}
173
+ </schmancy-chip>
174
+ `)}
175
+ </div>
176
+ `)}
177
+ </div>
178
+ </div>
179
+
180
+ <!-- Template List with Previews -->
181
+ <div class="flex-1 overflow-y-auto px-6 py-6">
182
+ ${d.when(this.filteredTemplates.length>0,()=>o.html`
183
+ <div class="space-y-6">
184
+ ${S.repeat(this.filteredTemplates,e=>e.id,e=>o.html`
185
+ <schmancy-surface
186
+ type="containerLow"
187
+ elevation="1"
188
+ rounded="all"
189
+ class="group cursor-pointer hover:elevation-3 transition-all duration-200 overflow-hidden"
190
+ @click=${()=>this.selectTemplate(e)}
191
+ >
192
+ <!-- Template Header -->
193
+ <div class="p-4 border-b border-outline-variant">
194
+ <div class="flex items-start justify-between">
195
+ <div class="flex-1">
196
+ <schmancy-typography type="title" token="md" class="font-semibold leading-tight mb-1">
197
+ ${e.name}
198
+ </schmancy-typography>
199
+ ${d.when(e.category,()=>o.html`
200
+ <schmancy-chip class="text-xs border border-outline">
201
+ ${e.category}
202
+ </schmancy-chip>
203
+ `)}
204
+ </div>
205
+ <schmancy-button
206
+ variant="filled"
207
+ size="sm"
208
+ class="opacity-0 group-hover:opacity-100 transition-opacity"
209
+ >
210
+ Use This
211
+ </schmancy-button>
212
+ </div>
213
+ </div>
214
+
215
+ <!-- Email Preview -->
216
+ <div class="p-4 bg-surface">
217
+ <schmancy-email-viewer
218
+ subject=${e.subject}
219
+ body=${e.body}
220
+ mode="desktop"
221
+ class="max-h-96 overflow-y-auto"
222
+ ></schmancy-email-viewer>
223
+ </div>
224
+ </schmancy-surface>
225
+ `)}
226
+ </div>
227
+ `,()=>o.html`
228
+ <div class="flex flex-col items-center justify-center h-96 text-center">
229
+ <div class="mb-6">
230
+ <schmancy-icon size="64px" class="text-surface-onVariant opacity-20">mail_outline</schmancy-icon>
231
+ </div>
232
+ <schmancy-typography type="headline" token="sm" class="mb-2">
233
+ ${this.searchQuery||this.selectedCategory!=="all"?"No templates found":"No templates available"}
234
+ </schmancy-typography>
235
+ <schmancy-typography type="body" token="md" class="text-surface-onVariant mb-6 max-w-md">
236
+ ${this.searchQuery?`No templates match your search for "${this.searchQuery}"`:this.selectedCategory!=="all"?`No templates found in the "${this.selectedCategory}" category`:"Start by creating your first email template"}
237
+ </schmancy-typography>
238
+ ${d.when(this.searchQuery||this.selectedCategory!=="all",()=>o.html`
239
+ <div class="flex gap-3">
240
+ ${d.when(this.searchQuery,()=>o.html`
241
+ <schmancy-button
242
+ variant="outlined"
243
+ @click=${()=>{this.searchQuery=""}}
244
+ >
245
+ <schmancy-icon slot="prefix">clear</schmancy-icon>
246
+ Clear Search
247
+ </schmancy-button>
248
+ `)}
249
+ ${d.when(this.selectedCategory!=="all",()=>o.html`
250
+ <schmancy-button
251
+ variant="filled"
252
+ @click=${()=>this.handleCategorySelect("all")}
253
+ >
254
+ <schmancy-icon slot="prefix">view_list</schmancy-icon>
255
+ Show All Templates
256
+ </schmancy-button>
257
+ `)}
258
+ </div>
259
+ `)}
260
+ </div>
261
+ `)}
262
+ </div>
263
+ `}};w([c.property({type:Array})],x.prototype,"templates",2),w([c.state()],x.prototype,"searchQuery",2),w([c.state()],x.prototype,"filteredTemplates",2),w([c.state()],x.prototype,"selectedCategory",2),x=w([c.customElement("schmancy-email-template-picker")],x);var L=Object.defineProperty,j=Object.getOwnPropertyDescriptor,f=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?j(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&L(t,i,n),n};exports.SchmancyEmailEditor=class extends $.$LitElement(o.css`
112
264
  :host {
113
265
  display: block;
114
266
  height: 100%;
115
267
  }
116
- `){constructor(){super(...arguments),this.subject="",this.body="",this.templates=[],this.disabled=!1,this.attachments=[],this.config={},this.selectedTemplate=null,this.dragOver=!1,this.isUploading=!1,this.subjectInputRef=f.createRef(),this.bodyTextAreaRef=f.createRef(),this.fileInputRef=f.createRef(),this.imageInputRef=f.createRef(),this.handleKeyDown=e=>{if(this.disabled)return;const t=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");e.key==="Tab"&&e.target===t&&(e.preventDefault(),this.insertAtCursor(" "))},this.handlePaste=e=>{const t=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(this.disabled||document.activeElement!==t)return;const i=e.clipboardData?.items;if(i)for(let s=0;s<i.length;s++){const a=i[s];if(a.type.indexOf("image")!==-1){e.preventDefault();const n=a.getAsFile();n&&this.uploadImage(n);break}}},this.handleSubjectChange=e=>{const t=e.target;this.subject=t.value,this.dispatchChange()},this.handleBodyChange=e=>{this.body=e.detail.value,this.dispatchChange()},this.selectTemplate=e=>{const t=this.templates.find(i=>i.id===e);t&&(this.subject=t.subject,this.body=t.body,this.selectedTemplate=e,this.dispatchChange())},this.clearTemplate=()=>{this.subject="",this.body="",this.selectedTemplate=null,this.dispatchChange()},this.dispatchChange=()=>{this.dispatchEvent(new CustomEvent("editor-change",{detail:{subject:this.subject,body:this.body,templateId:this.selectedTemplate,attachments:this.attachments},bubbles:!0,composed:!0}))},this.openLayoutDialog=()=>{S.$dialog.component(r.html`
268
+ `){constructor(){super(...arguments),this.subject="",this.body="",this.disabled=!1,this.attachments=[],this.config={},this.templates=this.getDefaultTemplates(),this.dragOver=!1,this.isUploading=!1,this.subjectInputRef=g.createRef(),this.bodyTextAreaRef=g.createRef(),this.fileInputRef=g.createRef(),this.imageInputRef=g.createRef(),this.handleKeyDown=e=>{if(this.disabled)return;const t=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");e.key==="Tab"&&e.target===t&&(e.preventDefault(),this.insertAtCursor(" "))},this.handlePaste=e=>{const t=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(this.disabled||document.activeElement!==t)return;const i=e.clipboardData?.items;if(i)for(let s=0;s<i.length;s++){const a=i[s];if(a.type.indexOf("image")!==-1){e.preventDefault();const n=a.getAsFile();n&&this.uploadImage(n);break}}},this.handleSubjectChange=e=>{const t=e.target;this.subject=t.value,this.dispatchChange()},this.handleBodyChange=e=>{this.body=e.detail.value,this.dispatchChange()},this.dispatchChange=()=>{this.dispatchEvent(new CustomEvent("editor-change",{detail:{subject:this.subject,body:this.body,attachments:this.attachments},bubbles:!0,composed:!0}))},this.openLayoutDialog=()=>{k.$dialog.component(o.html`
117
269
  <schmancy-email-layout-selector
118
- @layout-select=${e=>{this.applyLayout(e.detail.layout),S.$dialog.close()}}
270
+ @layout-select=${e=>{this.applyLayout(e.detail.layout),k.$dialog.close()}}
119
271
  ></schmancy-email-layout-selector>
120
- `)},this.applyLayout=e=>{const t={"columns-2":`
272
+ `)},this.openTemplatePicker=()=>{const e=new x;e.templates=this.templates,e.addEventListener("template-selected",this.handleTemplateSelected),E.sheet.open({component:e,title:"Choose Email Template"})},this.handleTemplateSelected=e=>{const t=e.detail;this.subject=t.subject,this.body=t.body,this.dispatchChange(),u.$notify.success(`Template "${t.name}" applied successfully`)},this.applyLayout=e=>{const t={"columns-2":`
121
273
  :::layout columns-2
122
274
  <div class="column">
123
275
  ![Left Photo](https://via.placeholder.com/400x300?text=Replace+with+your+photo){height=300px}
@@ -207,7 +359,196 @@ Your primary content goes here. This area takes up most of the width while the s
207
359
  ![Gallery Image 3](https://via.placeholder.com/400x250?text=Gallery+Image+3){height=250px}
208
360
  </div>
209
361
  :::
210
- `}[e];t&&this.insertAtCursor(t)},this.uploadImage=async e=>{if(!e.type.startsWith("image/"))return void g.$notify.error(`File "${e.name}" is not an image`);if(e.size>10485760)g.$notify.error(`Image "${e.name}" is too large. Maximum size is 10MB.`);else{this.isUploading=!0;try{let t;this.config.imageUploadHandler?t=await this.config.imageUploadHandler(e):this.config.uploadHandler?t=await this.config.uploadHandler(e):(t=await this.createDataUrl(e),g.$notify.warning("No upload handler configured. Using local preview."));const i=await this.getImageDimensions(e);this.insertImageMarkdown(t,e.name,i.width,i.height),g.$notify.success("Image uploaded successfully")}catch{g.$notify.error("Failed to upload image")}finally{this.isUploading=!1}}},this.createDataUrl=e=>new Promise((t,i)=>{const s=new FileReader;s.onload=()=>t(s.result),s.onerror=i,s.readAsDataURL(e)}),this.getImageDimensions=e=>new Promise(t=>{const i=new Image;i.onload=()=>{t({width:i.width,height:i.height}),URL.revokeObjectURL(i.src)},i.onerror=()=>{t({width:400,height:300}),URL.revokeObjectURL(i.src)},i.src=URL.createObjectURL(e)}),this.insertImageMarkdown=(e,t,i,s)=>{const a=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(!a)return;const n=`![${t}](${e}){width=${Math.min(i,600)}px height=auto}`,l=a.selectionStart,o=a.selectionEnd,h=this.body.substring(0,l)+n+this.body.substring(o);this.body=h,this.dispatchChange(),this.updateComplete.then(()=>{const d=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(d){const v=l+n.length;d.setSelectionRange(v,v),d.focus()}})},this.handleFileChange=e=>{const t=e.target,i=t.files;if(i)for(let s=0;s<i.length;s++){const a=i[s];a.type.startsWith("image/")?this.uploadImage(a):this.addFile(a)}t.value=""},this.handleImageSelect=e=>{const t=e.target,i=t.files?.[0];i&&i.type.startsWith("image/")&&this.uploadImage(i),t.value=""},this.handleDrop=e=>{e.preventDefault(),this.dragOver=!1;const t=e.dataTransfer?.files;if(t)for(let i=0;i<t.length;i++){const s=t[i];s.type.startsWith("image/")?this.uploadImage(s):this.addFile(s)}},this.handleDragEnter=e=>{e.preventDefault(),this.dragOver=!0},this.handleDocumentDragLeave=e=>{e.preventDefault(),this.dragOver=!1},this.handleDocumentDrop=e=>{e.preventDefault(),this.dragOver=!1},this.handleDragOver=e=>{e.preventDefault()},this.handleDragLeave=e=>{e.preventDefault()},this.addFile=e=>{if(e.size>10485760)return void g.$notify.error(`File "${e.name}" is too large. Maximum size is 10MB.`);if(this.attachments.some(i=>i.name===e.name&&i.size===e.size))return void g.$notify.warning(`File "${e.name}" is already attached.`);const t={id:crypto.randomUUID(),file:e,name:e.name,size:e.size,type:e.type||"application/octet-stream"};this.attachments=[...this.attachments,t],this.dispatchChange()},this.removeAttachment=e=>{this.attachments=this.attachments.filter(t=>t.id!==e),this.dispatchChange()}}connectedCallback(){super.connectedCallback(),this.addKeyboardListeners(),this.addDragListeners()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("paste",this.handlePaste),document.removeEventListener("dragenter",this.handleDragEnter),document.removeEventListener("dragleave",this.handleDocumentDragLeave),document.removeEventListener("drop",this.handleDocumentDrop)}addKeyboardListeners(){this.addEventListener("keydown",this.handleKeyDown),document.addEventListener("paste",this.handlePaste)}addDragListeners(){document.addEventListener("dragenter",this.handleDragEnter),document.addEventListener("dragleave",this.handleDocumentDragLeave),document.addEventListener("drop",this.handleDocumentDrop)}insertAtCursor(e,t){if(!this.bodyTextAreaRef.value)return;const i=this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");if(!i)return;const s=i.selectionStart,a=i.selectionEnd,n=i.value.substring(0,s)+e+i.value.substring(a);this.body=n,this.dispatchChange(),this.updateComplete.then(()=>{const l=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(l)if(l.focus(),t){const o=s+e.indexOf(t),h=o+t.length;l.setSelectionRange(o,h)}else l.setSelectionRange(s+e.length,s+e.length)})}wrapSelection(e,t,i){if(!this.bodyTextAreaRef.value)return;const s=this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");if(!s)return;const a=s.selectionStart,n=s.selectionEnd,l=s.value.substring(a,n),o=e+(l||i)+t,h=s.value.substring(0,a)+o+s.value.substring(n);this.body=h,this.dispatchChange(),this.updateComplete.then(()=>{const d=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");d&&(d.focus(),l?d.setSelectionRange(a+o.length,a+o.length):d.setSelectionRange(a+e.length,a+e.length+i.length))})}render(){return r.html`
362
+ `}[e];t&&this.insertAtCursor(t)},this.uploadImage=async e=>{if(!e.type.startsWith("image/"))return void u.$notify.error(`File "${e.name}" is not an image`);if(e.size>10485760)u.$notify.error(`Image "${e.name}" is too large. Maximum size is 10MB.`);else{this.isUploading=!0;try{let t;this.config.imageUploadHandler?t=await this.config.imageUploadHandler(e):this.config.uploadHandler?t=await this.config.uploadHandler(e):(t=await this.createDataUrl(e),u.$notify.warning("No upload handler configured. Using local preview."));const i=await this.getImageDimensions(e);this.insertImageMarkdown(t,e.name,i.width,i.height),u.$notify.success("Image uploaded successfully")}catch{u.$notify.error("Failed to upload image")}finally{this.isUploading=!1}}},this.createDataUrl=e=>new Promise((t,i)=>{const s=new FileReader;s.onload=()=>t(s.result),s.onerror=i,s.readAsDataURL(e)}),this.getImageDimensions=e=>new Promise(t=>{const i=new Image;i.onload=()=>{t({width:i.width,height:i.height}),URL.revokeObjectURL(i.src)},i.onerror=()=>{t({width:400,height:300}),URL.revokeObjectURL(i.src)},i.src=URL.createObjectURL(e)}),this.insertImageMarkdown=(e,t,i,s)=>{const a=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(!a)return;const n=`![${t}](${e}){width=${Math.min(i,600)}px height=auto}`,r=a.selectionStart,l=a.selectionEnd,h=this.body.substring(0,r)+n+this.body.substring(l);this.body=h,this.dispatchChange(),this.updateComplete.then(()=>{const p=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(p){const v=r+n.length;p.setSelectionRange(v,v),p.focus()}})},this.handleFileChange=e=>{const t=e.target,i=t.files;if(i)for(let s=0;s<i.length;s++){const a=i[s];a.type.startsWith("image/")?this.uploadImage(a):this.addFile(a)}t.value=""},this.handleImageSelect=e=>{const t=e.target,i=t.files?.[0];i&&i.type.startsWith("image/")&&this.uploadImage(i),t.value=""},this.handleDrop=e=>{e.preventDefault(),this.dragOver=!1;const t=e.dataTransfer?.files;if(t)for(let i=0;i<t.length;i++){const s=t[i];s.type.startsWith("image/")?this.uploadImage(s):this.addFile(s)}},this.handleDragEnter=e=>{e.preventDefault(),this.dragOver=!0},this.handleDocumentDragLeave=e=>{e.preventDefault(),this.dragOver=!1},this.handleDocumentDrop=e=>{e.preventDefault(),this.dragOver=!1},this.handleDragOver=e=>{e.preventDefault()},this.handleDragLeave=e=>{e.preventDefault()},this.addFile=e=>{if(e.size>10485760)return void u.$notify.error(`File "${e.name}" is too large. Maximum size is 10MB.`);if(this.attachments.some(i=>i.name===e.name&&i.size===e.size))return void u.$notify.warning(`File "${e.name}" is already attached.`);const t={id:crypto.randomUUID(),file:e,name:e.name,size:e.size,type:e.type||"application/octet-stream"};this.attachments=[...this.attachments,t],this.dispatchChange()},this.removeAttachment=e=>{this.attachments=this.attachments.filter(t=>t.id!==e),this.dispatchChange()}}connectedCallback(){super.connectedCallback(),this.addKeyboardListeners(),this.addDragListeners()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("paste",this.handlePaste),document.removeEventListener("dragenter",this.handleDragEnter),document.removeEventListener("dragleave",this.handleDocumentDragLeave),document.removeEventListener("drop",this.handleDocumentDrop)}getDefaultTemplates(){return[{id:"welcome",name:"Welcome Email",subject:"Welcome to Our Community! 🌟",description:"A warm welcome message for new users",category:"onboarding",body:`# Welcome to Our Community!
363
+
364
+ We're thrilled to have you on board. Thank you for joining us on this journey.
365
+
366
+ ## What's Next?
367
+
368
+ * **Explore** your dashboard and discover all the features
369
+ * **Connect** with other community members
370
+ * **Get support** whenever you need it - we're here to help
371
+
372
+ ---
373
+
374
+ *Need assistance? Simply reply to this email and we'll get back to you within 24 hours.*
375
+
376
+ Best regards,
377
+ The Team`},{id:"newsletter",name:"Newsletter",subject:"Weekly Insights & Updates",description:"Regular newsletter template with updates and insights",category:"communication",body:`# This Week's Highlights
378
+
379
+ ## Featured Story
380
+
381
+ **[Article Title]**
382
+ Brief description of the main story or update that you want to highlight this week.
383
+
384
+ [Read More](https://example.com)
385
+
386
+ ## Quick Updates
387
+
388
+ * **Update 1**: Brief description of an important update
389
+ * **Update 2**: Another noteworthy development
390
+ * **Update 3**: Additional news worth sharing
391
+
392
+ ## Upcoming Events
393
+
394
+ **[Event Name]** - *Date*
395
+ Short description of the upcoming event.
396
+
397
+ ---
398
+
399
+ *Thanks for reading! Forward this to a friend who might enjoy it.*
400
+
401
+ Until next week,
402
+ The Team`},{id:"product-launch",name:"Product Launch",subject:"Introducing Our Latest Innovation 🚀",description:"Announce new products or features",category:"marketing",body:`# Something Amazing is Here
403
+
404
+ We've been working hard behind the scenes, and today we're excited to introduce our latest creation.
405
+
406
+ ## Key Features
407
+
408
+ * **Feature 1**: Benefit that matters to your users
409
+ * **Feature 2**: Another compelling capability
410
+ * **Feature 3**: The feature that sets you apart
411
+
412
+ ## Early Access
413
+
414
+ As a valued member, you get **exclusive early access** starting today.
415
+
416
+ [Get Started Now](https://example.com)
417
+
418
+ ---
419
+
420
+ *Questions? We'd love to hear from you. Just hit reply!*
421
+
422
+ Best,
423
+ The Product Team`},{id:"event-invitation",name:"Event Invitation",subject:"You're Invited: [Event Name]",description:"Professional event invitation template",category:"events",body:`# You're Invited!
424
+
425
+ ## [Event Name]
426
+
427
+ **When**: [Date & Time]
428
+ **Where**: [Location or Virtual Link]
429
+ **Duration**: [Duration]
430
+
431
+ Join us for an exclusive gathering where we'll explore [brief event description].
432
+
433
+ ## What to Expect
434
+
435
+ * **Networking** with industry professionals
436
+ * **Insights** from leading experts
437
+ * **Interactive** sessions and discussions
438
+
439
+ ## RSVP Required
440
+
441
+ Space is limited, so please confirm your attendance by [RSVP Date].
442
+
443
+ [Confirm Attendance](https://example.com)
444
+
445
+ ---
446
+
447
+ *Can't make it? Let us know and we'll share the key highlights with you.*
448
+
449
+ Looking forward to seeing you there,
450
+ The Events Team`},{id:"thank-you",name:"Thank You",subject:"Thank You - It Means Everything",description:"Express gratitude to customers or supporters",category:"appreciation",body:`# Thank You
451
+
452
+ Your support means the world to us.
453
+
454
+ Whether you've been with us from the beginning or just joined our community, we want you to know how much we appreciate you.
455
+
456
+ ## Because of You
457
+
458
+ * We've been able to improve our service
459
+ * Our community has grown stronger
460
+ * We've achieved milestones we never thought possible
461
+
462
+ ## What's Next
463
+
464
+ We're committed to continuing to earn your trust and providing even more value in the coming months.
465
+
466
+ ---
467
+
468
+ *Your feedback shapes everything we do. Reply anytime with thoughts or suggestions.*
469
+
470
+ With genuine gratitude,
471
+ The Team`},{id:"feedback-request",name:"Feedback Request",subject:"Your Opinion Matters - 2 Minutes?",description:"Request feedback or reviews from users",category:"feedback",body:`# We'd Love Your Feedback
472
+
473
+ Your experience matters to us, and we're always looking for ways to improve.
474
+
475
+ ## Quick Favor?
476
+
477
+ Could you spare **2 minutes** to share your thoughts? Your honest feedback helps us serve you better.
478
+
479
+ [Share Your Feedback](https://example.com)
480
+
481
+ ## What We're Asking
482
+
483
+ * How has your experience been so far?
484
+ * What's working well for you?
485
+ * What could we improve?
486
+
487
+ ## Thank You Gift
488
+
489
+ As a small token of appreciation, everyone who completes our feedback form receives [incentive].
490
+
491
+ ---
492
+
493
+ *Every response is read personally by our team. We take your input seriously.*
494
+
495
+ Thanks in advance,
496
+ The Team`},{id:"password-reset",name:"Password Reset",subject:"Reset Your Password - Action Required",description:"Secure password reset instructions",category:"security",body:`# Password Reset Request
497
+
498
+ We received a request to reset the password for your account.
499
+
500
+ ## Reset Your Password
501
+
502
+ Click the button below to create a new password. This link will expire in **24 hours** for your security.
503
+
504
+ [Reset Password](https://example.com/reset)
505
+
506
+ ## Didn't Request This?
507
+
508
+ If you didn't request a password reset, please ignore this email. Your account remains secure.
509
+
510
+ ## Need Help?
511
+
512
+ If you're having trouble with the reset process, contact our support team and we'll assist you right away.
513
+
514
+ ---
515
+
516
+ *For security reasons, this link can only be used once and expires in 24 hours.*
517
+
518
+ Best regards,
519
+ Security Team`},{id:"order-confirmation",name:"Order Confirmation",subject:"Order Confirmed - #[ORDER-NUMBER]",description:"Professional order confirmation template",category:"commerce",body:`# Order Confirmation
520
+
521
+ Thanks for your order! We've received your payment and are preparing your items for shipment.
522
+
523
+ ## Order Details
524
+
525
+ **Order Number**: #[ORDER-NUMBER]
526
+ **Order Date**: [DATE]
527
+ **Total**: $[AMOUNT]
528
+
529
+ ## Items Ordered
530
+
531
+ * **[Item 1]** - Quantity: [QTY] - $[PRICE]
532
+ * **[Item 2]** - Quantity: [QTY] - $[PRICE]
533
+
534
+ ## Shipping Information
535
+
536
+ **Address**: [SHIPPING ADDRESS]
537
+ **Method**: [SHIPPING METHOD]
538
+ **Estimated Delivery**: [DELIVERY DATE]
539
+
540
+ ## Next Steps
541
+
542
+ You'll receive a tracking number via email once your order ships (usually within 1-2 business days).
543
+
544
+ [Track Your Order](https://example.com/track)
545
+
546
+ ---
547
+
548
+ *Questions about your order? Reply to this email or contact our support team.*
549
+
550
+ Thank you for your business,
551
+ The Fulfillment Team`}]}addKeyboardListeners(){this.addEventListener("keydown",this.handleKeyDown),document.addEventListener("paste",this.handlePaste)}addDragListeners(){document.addEventListener("dragenter",this.handleDragEnter),document.addEventListener("dragleave",this.handleDocumentDragLeave),document.addEventListener("drop",this.handleDocumentDrop)}insertAtCursor(e,t){if(!this.bodyTextAreaRef.value)return;const i=this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");if(!i)return;const s=i.selectionStart,a=i.selectionEnd,n=i.value.substring(0,s)+e+i.value.substring(a);this.body=n,this.dispatchChange(),this.updateComplete.then(()=>{const r=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");if(r)if(r.focus(),t){const l=s+e.indexOf(t),h=l+t.length;r.setSelectionRange(l,h)}else r.setSelectionRange(s+e.length,s+e.length)})}wrapSelection(e,t,i){if(!this.bodyTextAreaRef.value)return;const s=this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");if(!s)return;const a=s.selectionStart,n=s.selectionEnd,r=s.value.substring(a,n),l=e+(r||i)+t,h=s.value.substring(0,a)+l+s.value.substring(n);this.body=h,this.dispatchChange(),this.updateComplete.then(()=>{const p=this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");p&&(p.focus(),r?p.setSelectionRange(a+l.length,a+l.length):p.setSelectionRange(a+e.length,a+e.length+i.length))})}render(){return o.html`
211
552
  <schmancy-surface
212
553
  type="surface"
213
554
  rounded="all"
@@ -218,44 +559,15 @@ Your primary content goes here. This area takes up most of the width while the s
218
559
  >
219
560
  <div class="flex flex-col h-full gap-4">
220
561
 
221
- <!-- Header Section with Templates and Subject -->
562
+ <!-- Header Section with Subject -->
222
563
  <div class="flex-shrink-0 p-4 pb-0 space-y-4">
223
- <!-- Template Selector -->
224
- ${p.when(this.templates.length>0,()=>r.html`
225
- <div class="space-y-3">
226
- <schmancy-typography type="label" token="md">
227
- Email Templates
228
- </schmancy-typography>
229
- <div class="flex flex-wrap gap-2">
230
- ${x.repeat(this.templates,e=>e.id,e=>r.html`
231
- <schmancy-chip
232
- ?selected=${this.selectedTemplate===e.id}
233
- @click=${()=>this.selectTemplate(e.id)}
234
- class="text-sm"
235
- >
236
- ${e.name}
237
- </schmancy-chip>
238
- `)}
239
- ${p.when(this.selectedTemplate,()=>r.html`
240
- <schmancy-button
241
- variant="text"
242
- @click=${this.clearTemplate}
243
- >
244
- <schmancy-icon slot="prefix" size="16px">clear</schmancy-icon>
245
- Clear
246
- </schmancy-button>
247
- `)}
248
- </div>
249
- </div>
250
- `)}
251
-
252
564
  <!-- Subject Field -->
253
565
  <div class="space-y-2">
254
566
  <schmancy-typography type="label" token="md">
255
567
  Subject *
256
568
  </schmancy-typography>
257
569
  <schmancy-input
258
- ${f.ref(this.subjectInputRef)}
570
+ ${g.ref(this.subjectInputRef)}
259
571
  .value=${this.subject}
260
572
  @input=${this.handleSubjectChange}
261
573
  placeholder="Enter email subject..."
@@ -341,7 +653,7 @@ Your primary content goes here. This area takes up most of the width while the s
341
653
  ?disabled=${this.disabled||this.isUploading}
342
654
  @click=${()=>this.imageInputRef.value?.click()}
343
655
  >
344
- ${p.when(this.isUploading,()=>r.html`<schmancy-progress size="sm" class="w-4 h-4"></schmancy-progress>`,()=>r.html`<schmancy-icon>image</schmancy-icon>`)}
656
+ ${d.when(this.isUploading,()=>o.html`<schmancy-progress size="sm" class="w-4 h-4"></schmancy-progress>`,()=>o.html`<schmancy-icon>image</schmancy-icon>`)}
345
657
  </schmancy-icon-button>
346
658
  <schmancy-icon-button
347
659
  size="sm"
@@ -350,7 +662,16 @@ Your primary content goes here. This area takes up most of the width while the s
350
662
  ?disabled=${this.disabled}
351
663
  @click=${this.openLayoutDialog}
352
664
  >
353
- <schmancy-icon>view_column</schmancy-icon>
665
+ <schmancy-icon>mobile_layout</schmancy-icon>
666
+ </schmancy-icon-button>
667
+ <schmancy-icon-button
668
+ size="sm"
669
+ variant="text"
670
+ title="Use Template"
671
+ ?disabled=${this.disabled||this.templates.length===0}
672
+ @click=${this.openTemplatePicker}
673
+ >
674
+ <schmancy-icon>description</schmancy-icon>
354
675
  </schmancy-icon-button>
355
676
  </div>
356
677
  </div>
@@ -360,7 +681,7 @@ Your primary content goes here. This area takes up most of the width while the s
360
681
  <!-- Textarea Container - Takes remaining space -->
361
682
  <div class="flex-1 px-4 relative min-h-0">
362
683
  <schmancy-textarea
363
- ${f.ref(this.bodyTextAreaRef)}
684
+ ${g.ref(this.bodyTextAreaRef)}
364
685
  .value=${this.body}
365
686
  @change=${this.handleBodyChange}
366
687
  placeholder="Enter your email message here...
@@ -377,7 +698,7 @@ Tab key inserts 2 spaces for better formatting."
377
698
  ></schmancy-textarea>
378
699
 
379
700
  <!-- Upload Progress Overlay -->
380
- ${p.when(this.isUploading,()=>r.html`
701
+ ${d.when(this.isUploading,()=>o.html`
381
702
  <div class="absolute top-3 right-3 z-10">
382
703
  <schmancy-surface type="container" rounded="all" class="p-2">
383
704
  <div class="flex items-center gap-2">
@@ -399,14 +720,14 @@ Tab key inserts 2 spaces for better formatting."
399
720
  </div>
400
721
 
401
722
  <!-- Attachments Display (if any) -->
402
- ${p.when(this.attachments.length>0,()=>r.html`
723
+ ${d.when(this.attachments.length>0,()=>o.html`
403
724
  <div class="space-y-2">
404
725
  <schmancy-typography type="label" token="sm" class="flex items-center gap-2">
405
726
  <schmancy-icon size="16px">attach_file</schmancy-icon>
406
727
  Attachments (${this.attachments.length})
407
728
  </schmancy-typography>
408
729
  <div class="flex flex-wrap gap-2">
409
- ${x.repeat(this.attachments,e=>e.id,e=>r.html`
730
+ ${S.repeat(this.attachments,e=>e.id,e=>o.html`
410
731
  <schmancy-chip class="text-xs">
411
732
  <span class="truncate max-w-32">${e.name}</span>
412
733
  <button
@@ -426,13 +747,13 @@ Tab key inserts 2 spaces for better formatting."
426
747
  <!-- Hidden File Inputs -->
427
748
  <div class="hidden">
428
749
  <input
429
- ${f.ref(this.fileInputRef)}
750
+ ${g.ref(this.fileInputRef)}
430
751
  type="file"
431
752
  multiple
432
753
  @change=${this.handleFileChange}
433
754
  >
434
755
  <input
435
- ${f.ref(this.imageInputRef)}
756
+ ${g.ref(this.imageInputRef)}
436
757
  type="file"
437
758
  accept="image/*"
438
759
  @change=${this.handleImageSelect}
@@ -441,19 +762,20 @@ Tab key inserts 2 spaces for better formatting."
441
762
 
442
763
  </div>
443
764
  </schmancy-surface>
444
- `}},u([c.property({type:String})],exports.SchmancyEmailEditor.prototype,"subject",2),u([c.property({type:String})],exports.SchmancyEmailEditor.prototype,"body",2),u([c.property({type:Array})],exports.SchmancyEmailEditor.prototype,"templates",2),u([c.property({type:Boolean})],exports.SchmancyEmailEditor.prototype,"disabled",2),u([c.property({type:Array})],exports.SchmancyEmailEditor.prototype,"attachments",2),u([c.property({type:Object})],exports.SchmancyEmailEditor.prototype,"config",2),u([c.state()],exports.SchmancyEmailEditor.prototype,"selectedTemplate",2),u([c.state()],exports.SchmancyEmailEditor.prototype,"dragOver",2),u([c.state()],exports.SchmancyEmailEditor.prototype,"isUploading",2),exports.SchmancyEmailEditor=u([c.customElement("schmancy-email-editor")],exports.SchmancyEmailEditor);var A=Object.defineProperty,D=Object.getOwnPropertyDescriptor,b=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?D(t,i):t,l=e.length-1;l>=0;l--)(a=e[l])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&A(t,i,n),n};exports.SchmancyEmailViewer=class extends $.$LitElement(r.css`
765
+
766
+ `}},f([c.property({type:String})],exports.SchmancyEmailEditor.prototype,"subject",2),f([c.property({type:String})],exports.SchmancyEmailEditor.prototype,"body",2),f([c.property({type:Boolean})],exports.SchmancyEmailEditor.prototype,"disabled",2),f([c.property({type:Array})],exports.SchmancyEmailEditor.prototype,"attachments",2),f([c.property({type:Object})],exports.SchmancyEmailEditor.prototype,"config",2),f([c.property({type:Array})],exports.SchmancyEmailEditor.prototype,"templates",2),f([c.state()],exports.SchmancyEmailEditor.prototype,"dragOver",2),f([c.state()],exports.SchmancyEmailEditor.prototype,"isUploading",2),exports.SchmancyEmailEditor=f([c.customElement("schmancy-email-editor")],exports.SchmancyEmailEditor);var z=Object.defineProperty,M=Object.getOwnPropertyDescriptor,b=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?M(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&z(t,i,n),n};exports.SchmancyEmailViewer=class extends $.$LitElement(o.css`
445
767
  :host {
446
768
  display: block;
447
769
  }
448
- `){constructor(){super(...arguments),this.subject="",this.body="",this.attachments=[],this.recipients=[],this.fromAddress="sender@example.com",this.toAddress="recipient@example.com",this.viewMode="html"}parseLayoutBlocks(e){return e.replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g,(t,i,s)=>{switch(i){case"columns-2":return this.parseColumnsLayout(s,2);case"columns-3":return this.parseColumnsLayout(s,3);case"sidebar-left":return this.parseSidebarLayout(s,"left");case"sidebar-right":return this.parseSidebarLayout(s,"right");case"image-row":return this.parseImageRowLayout(s);default:return s}})}parseColumnsLayout(e,t){const i=/<div class="column">([\s\S]*?)<\/div>/g,s=[];let a;for(;(a=i.exec(e))!==null;)s.push(a[1].trim());if(s.length===0)return e;const n=Math.floor(100/t),l="0 10px 0 0";let o="<tr>";for(let h=0;h<t&&h<s.length;h++)o+=`
449
- <td width="${n}%" style="padding: ${h===t-1?"0":l}; vertical-align: top; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
770
+ `){constructor(){super(...arguments),this.subject="",this.body="",this.attachments=[],this.recipients=[],this.fromAddress="sender@example.com",this.toAddress="recipient@example.com",this.viewMode="html"}parseLayoutBlocks(e){return e.replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g,(t,i,s)=>{switch(i){case"columns-2":return this.parseColumnsLayout(s,2);case"columns-3":return this.parseColumnsLayout(s,3);case"sidebar-left":return this.parseSidebarLayout(s,"left");case"sidebar-right":return this.parseSidebarLayout(s,"right");case"image-row":return this.parseImageRowLayout(s);default:return s}})}parseColumnsLayout(e,t){const i=/<div class="column">([\s\S]*?)<\/div>/g,s=[];let a;for(;(a=i.exec(e))!==null;)s.push(a[1].trim());if(s.length===0)return e;const n=Math.floor(100/t),r="0 10px 0 0";let l="<tr>";for(let h=0;h<t&&h<s.length;h++)l+=`
771
+ <td width="${n}%" style="padding: ${h===t-1?"0":r}; vertical-align: top; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
450
772
  ${this.parseBasicMarkdown(s[h])}
451
- </td>`;for(let h=s.length;h<t;h++)o+=`
452
- <td width="${n}%" style="padding: ${h===t-1?"0":l}; vertical-align: top;">
773
+ </td>`;for(let h=s.length;h<t;h++)l+=`
774
+ <td width="${n}%" style="padding: ${h===t-1?"0":r}; vertical-align: top;">
453
775
  &nbsp;
454
- </td>`;return o+="</tr>",`
776
+ </td>`;return l+="</tr>",`
455
777
  <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
456
- ${o}
778
+ ${l}
457
779
  </table>`}parseSidebarLayout(e,t){const i=e.match(/<div class="sidebar">([\s\S]*?)<\/div>/),s=e.match(/<div class="main">([\s\S]*?)<\/div>/);if(!i||!s)return e;const a=`
458
780
  <td width="30%" style="padding: 0 16px 0 0; vertical-align: top; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
459
781
  ${this.parseBasicMarkdown(i[1].trim())}
@@ -463,13 +785,13 @@ Tab key inserts 2 spaces for better formatting."
463
785
  </td>`;return`
464
786
  <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
465
787
  ${t==="left"?`<tr>${a}${n}</tr>`:`<tr>${n}${a.replace("0 16px 0 0","0 0 0 16px")}</tr>`}
466
- </table>`}parseImageRowLayout(e){const t=/<div class="image">([\s\S]*?)<\/div>/g,i=[];let s;for(;(s=t.exec(e))!==null;){const l=s[1].trim().match(/!\[([^\]]*)\]\(([^)]+)\)/);if(l){const[,o,h]=l;i.push(`<img src="${h}" alt="${o||"Image"}" style="display: block; max-width: 100%; height: auto;" border="0">`)}}if(i.length===0)return e;const a=Math.floor(100/i.length);let n="<tr>";return i.forEach((l,o)=>{const h=o===i.length-1;n+=`
788
+ </table>`}parseImageRowLayout(e){const t=/<div class="image">([\s\S]*?)<\/div>/g,i=[];let s;for(;(s=t.exec(e))!==null;){const r=s[1].trim().match(/!\[([^\]]*)\]\(([^)]+)\)/);if(r){const[,l,h]=r;i.push(`<img src="${h}" alt="${l||"Image"}" style="display: block; max-width: 100%; height: auto;" border="0">`)}}if(i.length===0)return e;const a=Math.floor(100/i.length);let n="<tr>";return i.forEach((r,l)=>{const h=l===i.length-1;n+=`
467
789
  <td width="${a}%" style="padding: ${h?"0":"0 8px 0 0"}; vertical-align: top; text-align: center;">
468
- ${l}
790
+ ${r}
469
791
  </td>`}),n+="</tr>",`
470
792
  <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
471
793
  ${n}
472
- </table>`}parseImageAttributes(e){const t={};if(!e)return t;const i=e.match(/width=([^\s}]+)/);i&&(t.width=i[1]);const s=e.match(/height=([^\s}]+)/);return s&&(t.height=s[1]),e.includes("cover")&&(t.cover=!0),e.includes("contain")&&(t.contain=!0),t}generateImageStyles(e,t=!1){let i,s,a="display: block; margin: 8px 0; border: 0;";return e.width?e.width==="auto"?a+=t?" max-width: 100%; height: auto;":" height: auto;":e.width.endsWith("%")?(a+=` width: ${e.width}; max-width: 100%;`,e.height||(a+=" height: auto;")):e.width.endsWith("px")&&(i=e.width.replace("px",""),a+=" max-width: 100%;",e.height||(a+=" height: auto;")):a+=t?" width: 100%; max-width: 100%; height: auto;":" max-width: 100%; height: auto;",e.height&&(e.height==="auto"?a+=" height: auto;":e.height.endsWith("px")&&(s=e.height.replace("px",""),e.width||(a+=" max-width: 100%;"))),(e.cover||e.contain)&&(e.width||e.height||(a+=" width: 100%;")),{imgStyle:a,imgWidth:i,imgHeight:s}}parseBasicMarkdown(e){return e.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g,(t,i,s,a)=>{const n=this.parseImageAttributes(a),{imgStyle:l,imgWidth:o,imgHeight:h}=this.generateImageStyles(n,!0);let d=`<img src="${s}" alt="${i||"Image"}" style="${l}" border="0"`;return o&&(d+=` width="${o}"`),h&&(d+=` height="${h}"`),d+=">",d}).replace(/\n\n/g,'</p><p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">').replace(/\n/g,"<br>").replace(/\*\*(.*?)\*\*/g,'<strong style="font-weight: bold;">$1</strong>').replace(/\*(.*?)\*/g,'<em style="font-style: italic;">$1</em>').replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color: #0066cc; text-decoration: underline;">$1</a>').replace(/^# (.*$)/gim,'<h2 style="margin: 16px 0 8px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-weight: bold; color: #1a1a1a;">$1</h2>').replace(/^\* (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^\d+\. (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs,t=>{const i=/^\d+\./.test(t.replace(/<[^>]*>/g,""))?"ol":"ul";return`<${i} style="margin: 8px 0; padding: 0 0 0 20px; font-family: Arial, Helvetica, sans-serif;">${t}</${i}>`}).replace(/^(?!<[h\d]|<p|<ul|<ol|<li|<img)(.+)$/gim,'<p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">$1</p>')}parseExtendedMarkdown(e){let t=e;return t=this.parseLayoutBlocks(t),t=t.replace(/:::images\s+(row|grid(?:=\d+)?)\n((?:!\[.*?\]\(.*?\)(?:\{.*?\})?\s*\n?)*?):::/g,"[Multiple Images - View in web browser]"),t=t.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g,(i,s,a,n)=>{const l=this.parseImageAttributes(n),{imgStyle:o,imgWidth:h,imgHeight:d}=this.generateImageStyles(l,!1);let v=`<img src="${a}" alt="${s||"Image"}" style="${o}" border="0"`;return h&&(v+=` width="${h}"`),d&&(v+=` height="${d}"`),v+=">",`<table cellpadding="0" cellspacing="0" border="0" style="margin: 16px 0;"><tr><td>${v}</td></tr></table>`}),t=t.replace(/\n\n/g,'</p><p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">').replace(/\n/g,"<br>").replace(/\*\*(.*?)\*\*/g,'<strong style="font-weight: bold;">$1</strong>').replace(/\*(.*?)\*/g,'<em style="font-style: italic;">$1</em>').replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color: #0066cc; text-decoration: underline;">$1</a>').replace(/^# (.*$)/gim,'<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 24px 0 16px 0;"><tr><td><h1 style="margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; color: #1a1a1a;">$1</h1></td></tr></table>').replace(/^\* (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^\d+\. (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^---$/gim,'<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 24px 0;"><tr><td style="border-top: 1px solid #e0e0e0; height: 1px; line-height: 1px;">&nbsp;</td></tr></table>'),t=t.replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs,i=>{const s=/^\d+\./.test(i.replace(/<[^>]*>/g,"")),a=s?"ol":"ul";return`<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td><${a} style="margin: 16px 0; padding: 0 0 0 20px; font-family: Arial, Helvetica, sans-serif;">${i}</${a}></td></tr></table>`}),t.includes("<table>")||t.includes("<h1>")||(t=`<p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">${t}</p>`),t=`<table cellpadding="0" cellspacing="0" border="0" width="100%" style="max-width: 600px; margin: 0 auto;">
794
+ </table>`}parseImageAttributes(e){const t={};if(!e)return t;const i=e.match(/width=([^\s}]+)/);i&&(t.width=i[1]);const s=e.match(/height=([^\s}]+)/);return s&&(t.height=s[1]),e.includes("cover")&&(t.cover=!0),e.includes("contain")&&(t.contain=!0),t}generateImageStyles(e,t=!1){let i,s,a="display: block; margin: 8px 0; border: 0;";return e.width?e.width==="auto"?a+=t?" max-width: 100%; height: auto;":" height: auto;":e.width.endsWith("%")?(a+=` width: ${e.width}; max-width: 100%;`,e.height||(a+=" height: auto;")):e.width.endsWith("px")&&(i=e.width.replace("px",""),a+=" max-width: 100%;",e.height||(a+=" height: auto;")):a+=t?" width: 100%; max-width: 100%; height: auto;":" max-width: 100%; height: auto;",e.height&&(e.height==="auto"?a+=" height: auto;":e.height.endsWith("px")&&(s=e.height.replace("px",""),e.width||(a+=" max-width: 100%;"))),(e.cover||e.contain)&&(e.width||e.height||(a+=" width: 100%;")),{imgStyle:a,imgWidth:i,imgHeight:s}}parseBasicMarkdown(e){return e.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g,(t,i,s,a)=>{const n=this.parseImageAttributes(a),{imgStyle:r,imgWidth:l,imgHeight:h}=this.generateImageStyles(n,!0);let p=`<img src="${s}" alt="${i||"Image"}" style="${r}" border="0"`;return l&&(p+=` width="${l}"`),h&&(p+=` height="${h}"`),p+=">",p}).replace(/\n\n/g,'</p><p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">').replace(/\n/g,"<br>").replace(/\*\*(.*?)\*\*/g,'<strong style="font-weight: bold;">$1</strong>').replace(/\*(.*?)\*/g,'<em style="font-style: italic;">$1</em>').replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color: #0066cc; text-decoration: underline;">$1</a>').replace(/^# (.*$)/gim,'<h2 style="margin: 16px 0 8px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-weight: bold; color: #1a1a1a;">$1</h2>').replace(/^\* (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^\d+\. (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs,t=>{const i=/^\d+\./.test(t.replace(/<[^>]*>/g,""))?"ol":"ul";return`<${i} style="margin: 8px 0; padding: 0 0 0 20px; font-family: Arial, Helvetica, sans-serif;">${t}</${i}>`}).replace(/^(?!<[h\d]|<p|<ul|<ol|<li|<img)(.+)$/gim,'<p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">$1</p>')}parseExtendedMarkdown(e){let t=e;return t=this.parseLayoutBlocks(t),t=t.replace(/:::images\s+(row|grid(?:=\d+)?)\n((?:!\[.*?\]\(.*?\)(?:\{.*?\})?\s*\n?)*?):::/g,"[Multiple Images - View in web browser]"),t=t.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g,(i,s,a,n)=>{const r=this.parseImageAttributes(n),{imgStyle:l,imgWidth:h,imgHeight:p}=this.generateImageStyles(r,!1);let v=`<img src="${a}" alt="${s||"Image"}" style="${l}" border="0"`;return h&&(v+=` width="${h}"`),p&&(v+=` height="${p}"`),v+=">",`<table cellpadding="0" cellspacing="0" border="0" style="margin: 16px 0;"><tr><td>${v}</td></tr></table>`}),t=t.replace(/\n\n/g,'</p><p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">').replace(/\n/g,"<br>").replace(/\*\*(.*?)\*\*/g,'<strong style="font-weight: bold;">$1</strong>').replace(/\*(.*?)\*/g,'<em style="font-style: italic;">$1</em>').replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color: #0066cc; text-decoration: underline;">$1</a>').replace(/^# (.*$)/gim,'<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 24px 0 16px 0;"><tr><td><h1 style="margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 24px; font-weight: bold; color: #1a1a1a;">$1</h1></td></tr></table>').replace(/^\* (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^\d+\. (.*$)/gim,'<li style="margin: 4px 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333333;">$1</li>').replace(/^---$/gim,'<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 24px 0;"><tr><td style="border-top: 1px solid #e0e0e0; height: 1px; line-height: 1px;">&nbsp;</td></tr></table>'),t=t.replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs,i=>{const s=/^\d+\./.test(i.replace(/<[^>]*>/g,"")),a=s?"ol":"ul";return`<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td><${a} style="margin: 16px 0; padding: 0 0 0 20px; font-family: Arial, Helvetica, sans-serif;">${i}</${a}></td></tr></table>`}),t.includes("<table>")||t.includes("<h1>")||(t=`<p style="margin: 0 0 16px 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">${t}</p>`),t=`<table cellpadding="0" cellspacing="0" border="0" width="100%" style="max-width: 600px; margin: 0 auto;">
473
795
  <tr>
474
796
  <td style="padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
475
797
  ${t}
@@ -481,7 +803,7 @@ Tab key inserts 2 spaces for better formatting."
481
803
 
482
804
  `).trim()).replace(/:::images\s+(row|grid(?:=\d+)?)\n((?:!\[.*?\]\(.*?\)(?:\{.*?\})?\s*\n?)*?):::/g,"[Images]").replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g,"[Image: $1]").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/__(.*?)__/g,"$1").replace(/~~(.*?)~~/g,"$1").replace(/`(.*?)`/g,"$1").replace(/^#{1,3} (.*$)/gim,"$1").replace(/^> (.*$)/gim,"$1").replace(/^\* (.*$)/gim,"• $1").replace(/^\d+\. (.*$)/gim,"$1").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"$1 ($2)").replace(/^---$/gim,"---").replace(/\n\n+/g,`
483
805
 
484
- `)}formatFileSize(e){if(e===0)return"0 Bytes";const t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(2))+" "+["Bytes","KB","MB","GB"][t]}render(){const e=this.parseExtendedMarkdown(this.body),t=this.convertToPlainText(this.body),i=this.recipients[0]||this.toAddress;return r.html`
806
+ `)}formatFileSize(e){if(e===0)return"0 Bytes";const t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(2))+" "+["Bytes","KB","MB","GB"][t]}render(){const e=this.parseExtendedMarkdown(this.body),t=this.convertToPlainText(this.body),i=this.recipients[0]||this.toAddress;return o.html`
485
807
  <schmancy-surface type="surface" rounded="all" class="h-full flex flex-col">
486
808
 
487
809
  <!-- Header Section -->
@@ -564,7 +886,7 @@ Tab key inserts 2 spaces for better formatting."
564
886
  </schmancy-typography>
565
887
  </div>
566
888
  <schmancy-typography type="body" token="sm" class="font-medium flex-1">
567
- ${this.subject||r.html`<span class="italic text-surface-onVariant">(No subject)</span>`}
889
+ ${this.subject||o.html`<span class="italic text-surface-onVariant">(No subject)</span>`}
568
890
  </schmancy-typography>
569
891
  </div>
570
892
  </div>
@@ -572,17 +894,17 @@ Tab key inserts 2 spaces for better formatting."
572
894
 
573
895
  <!-- Email Body Content -->
574
896
  <div class="flex-1 overflow-y-auto min-h-0">
575
- ${p.when(this.body,()=>r.html`
576
- ${p.when(this.viewMode==="html",()=>r.html`
897
+ ${d.when(this.body,()=>o.html`
898
+ ${d.when(this.viewMode==="html",()=>o.html`
577
899
  <div class="p-6 bg-white" style="color: #333; line-height: 1.6; font-family: system-ui, -apple-system, sans-serif; font-size: 14px;">
578
900
  <div .innerHTML=${e}></div>
579
901
  </div>
580
- `,()=>r.html`
902
+ `,()=>o.html`
581
903
  <div class="p-6 bg-white" style="color: #333; line-height: 1.6; font-family: 'Courier New', monospace; font-size: 13px; white-space: pre-wrap;">
582
904
  ${t}
583
905
  </div>
584
906
  `)}
585
- `,()=>r.html`
907
+ `,()=>o.html`
586
908
  <!-- Empty State -->
587
909
  <div class="flex-1 flex items-center justify-center p-8">
588
910
  <div class="text-center space-y-3">
@@ -599,7 +921,7 @@ Tab key inserts 2 spaces for better formatting."
599
921
  </div>
600
922
 
601
923
  <!-- Attachments Section -->
602
- ${p.when(this.attachments.length>0,()=>r.html`
924
+ ${d.when(this.attachments.length>0,()=>o.html`
603
925
  <div class="flex-shrink-0 p-4 border-t border-outline-variant bg-surface-containerLowest">
604
926
  <div class="space-y-3">
605
927
  <!-- Attachments Header -->
@@ -612,7 +934,7 @@ Tab key inserts 2 spaces for better formatting."
612
934
 
613
935
  <!-- Attachments List -->
614
936
  <div class="grid gap-2 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2">
615
- ${x.repeat(this.attachments,s=>s.id,s=>r.html`
937
+ ${S.repeat(this.attachments,s=>s.id,s=>o.html`
616
938
  <schmancy-surface type="container" rounded="all" class="p-3">
617
939
  <div class="flex items-center gap-3">
618
940
  <!-- File Icon -->
@@ -640,7 +962,7 @@ Tab key inserts 2 spaces for better formatting."
640
962
  </div>
641
963
 
642
964
  <!-- Preview Stats -->
643
- ${p.when(this.body,()=>r.html`
965
+ ${d.when(this.body,()=>o.html`
644
966
  <div class="flex-shrink-0">
645
967
  <schmancy-surface type="container" rounded="all" class="p-3">
646
968
  <div class="flex items-center justify-center gap-6 text-center">
@@ -661,7 +983,7 @@ Tab key inserts 2 spaces for better formatting."
661
983
  ${this.body.trim()?this.body.trim().split(/\s+/).length:0}
662
984
  </schmancy-typography>
663
985
  </div>
664
- ${p.when(this.attachments.length>0,()=>r.html`
986
+ ${d.when(this.attachments.length>0,()=>o.html`
665
987
  <div class="w-px h-8 bg-outline-variant"></div>
666
988
  <div>
667
989
  <schmancy-typography type="body" token="xs" class="text-surface-onVariant">
@@ -679,19 +1001,19 @@ Tab key inserts 2 spaces for better formatting."
679
1001
 
680
1002
  </div>
681
1003
  </schmancy-surface>
682
- `}},b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"subject",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"body",2),b([c.property({type:Array})],exports.SchmancyEmailViewer.prototype,"attachments",2),b([c.property({type:Array})],exports.SchmancyEmailViewer.prototype,"recipients",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"fromAddress",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"toAddress",2),b([c.state()],exports.SchmancyEmailViewer.prototype,"viewMode",2),exports.SchmancyEmailViewer=b([c.customElement("schmancy-email-viewer")],exports.SchmancyEmailViewer);var z=Object.defineProperty,L=Object.getOwnPropertyDescriptor,y=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?L(t,i):t,l=e.length-1;l>=0;l--)(a=e[l])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&z(t,i,n),n};exports.SchmancyEmailRecipients=class extends $.$LitElement(r.css`
1004
+ `}},b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"subject",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"body",2),b([c.property({type:Array})],exports.SchmancyEmailViewer.prototype,"attachments",2),b([c.property({type:Array})],exports.SchmancyEmailViewer.prototype,"recipients",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"fromAddress",2),b([c.property({type:String})],exports.SchmancyEmailViewer.prototype,"toAddress",2),b([c.state()],exports.SchmancyEmailViewer.prototype,"viewMode",2),exports.SchmancyEmailViewer=b([c.customElement("schmancy-email-viewer")],exports.SchmancyEmailViewer);var P=Object.defineProperty,F=Object.getOwnPropertyDescriptor,y=(e,t,i,s)=>{for(var a,n=s>1?void 0:s?F(t,i):t,r=e.length-1;r>=0;r--)(a=e[r])&&(n=(s?a(t,i,n):a(n))||n);return s&&n&&P(t,i,n),n};exports.SchmancyEmailRecipients=class extends $.$LitElement(o.css`
683
1005
  :host {
684
1006
  display: block;
685
1007
  height: 100%;
686
1008
  }
687
- `){constructor(){super(...arguments),this.disabled=!1,this.recipients=[],this.selectedRecipients=[],this.enableCsvImport=!0,this.enableDragDrop=!0,this.title="Recipients",this.emptyStateTitle="No recipients yet",this.emptyStateMessage="Import from sources or upload a CSV",this.dragOver=!1,this.localSelectedRecipients=new Set,this.searchQuery="",this.filteredRecipients=[],this.boatState="minimized",this.fileInputRef=f.createRef(),this.handleEmailsImported=()=>{this.updateFilteredRecipients(),this.requestUpdate()},this.handleImportFromCSV=()=>{this.enableCsvImport&&this.fileInputRef.value?.click()},this.handleFileSelect=e=>{const t=e.target,i=t.files?.[0];i&&this.processCSVFile(i)},this.handleDrop=e=>{if(!this.enableDragDrop)return;e.preventDefault(),this.dragOver=!1;const t=e.dataTransfer?.files[0];t&&this.processCSVFile(t)},this.processCSVFile=e=>{if(!e.name.endsWith(".csv"))return void g.$notify.error("Please select a CSV file");const t=new FileReader;t.onload=i=>{const s=i.target?.result;try{const a=this.parseCSV(s);if(a.length===0)return void g.$notify.error("No valid email addresses found in CSV");this.dispatchEvent(new CustomEvent("emails-imported",{detail:{emails:a,source:"csv"},bubbles:!0,composed:!0})),g.$notify.success(`Imported ${a.length} emails from CSV file`)}catch{g.$notify.error("Failed to parse CSV file")}},t.readAsText(e)},this.toggleRecipientSelection=e=>{this.localSelectedRecipients.has(e)?this.localSelectedRecipients.delete(e):this.localSelectedRecipients.add(e),this.localSelectedRecipients=new Set(this.localSelectedRecipients),this.dispatchSelectionChange()},this.selectAll=()=>{this.localSelectedRecipients=new Set(this.filteredRecipients),this.dispatchSelectionChange()},this.selectNone=()=>{this.localSelectedRecipients.clear(),this.localSelectedRecipients=new Set,this.dispatchSelectionChange()},this.removeRecipient=e=>{this.dispatchEvent(new CustomEvent("recipient-removed",{detail:{email:e},bubbles:!0,composed:!0}))},this.clearAll=()=>{this.dispatchEvent(new CustomEvent("recipients-cleared",{bubbles:!0,composed:!0}))},this.updateFilteredRecipients=()=>{const e=Array.isArray(this.recipients)?this.recipients:[];if(this.searchQuery.trim()){const t=this.searchQuery.toLowerCase();this.filteredRecipients=e.filter(i=>i.toLowerCase().includes(t))}else this.filteredRecipients=[...e]},this.handleSearchInput=e=>{const t=e.target;this.searchQuery=t.value},this.clearSearch=()=>{this.searchQuery=""},this.dispatchSelectionChange=()=>{this.dispatchEvent(new CustomEvent("selection-changed",{detail:{selectedEmails:Array.from(this.localSelectedRecipients)},bubbles:!0,composed:!0}))},this.handleBoatStateChange=e=>{this.boatState=e.detail}}connectedCallback(){super.connectedCallback(),this.localSelectedRecipients=new Set(this.selectedRecipients),this.updateFilteredRecipients(),this.addEventListener("emails-imported",this.handleEmailsImported)}updated(e){super.updated(e),e.has("selectedRecipients")&&(this.localSelectedRecipients=new Set(this.selectedRecipients)),(e.has("recipients")||e.has("searchQuery"))&&this.updateFilteredRecipients(),e.has("recipients")&&this.requestUpdate()}parseCSV(e){const t=[];let i;i=this.csvParser?this.csvParser.parse(e,{header:!0,skipEmptyLines:!0,dynamicTyping:!0,delimiter:"",transformHeader:o=>o.trim()}):this.simpleCSVParse(e);const s=i.data,a=i.meta.fields||[];let n=a.find(o=>o.toLowerCase().includes("email"));if(!n)for(const o of a){const h=s[0]?.[o]?.toString();if(h&&this.isValidEmail(h)){n=o;break}}if(!n)throw new Error("No email column found in CSV");const l=new Set;for(const o of s){const h=o[n]?.toString();if(!h)continue;const d=h.toLowerCase().trim();this.isValidEmail(d)&&!l.has(d)&&(l.add(d),t.push(d))}return t}simpleCSVParse(e){const t=e.split(`
688
- `).filter(a=>a.trim());if(t.length===0)return{data:[],meta:{}};const i=t[0].split(",").map(a=>a.trim().replace(/"/g,"")),s=[];for(let a=1;a<t.length;a++){const n=t[a].split(",").map(o=>o.trim().replace(/"/g,"")),l={};i.forEach((o,h)=>{l[o]=n[h]||""}),s.push(l)}return{data:s,meta:{fields:i}}}isValidEmail(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.trim())}addRecipients(e){if(!e.length)return;const t=[...new Set([...this.recipients,...e])],i=e.filter(s=>!this.recipients.includes(s));this.recipients=t,this.selectedRecipients=[...new Set([...this.selectedRecipients,...i])],this.localSelectedRecipients=new Set(this.selectedRecipients),this.updateFilteredRecipients(),this.requestUpdate()}showBoat(){this.boatState="minimized"}hideBoat(){this.boatState="hidden"}expandBoat(){this.boatState="expanded"}toggleBoat(){this.boatState=this.boatState==="hidden"?"minimized":this.boatState==="minimized"?"expanded":"hidden"}render(){return this.renderBoatLayout()}renderBoatLayout(){return r.html`
1009
+ `){constructor(){super(...arguments),this.disabled=!1,this.recipients=[],this.selectedRecipients=[],this.enableCsvImport=!0,this.enableDragDrop=!0,this.title="Recipients",this.emptyStateTitle="No recipients yet",this.emptyStateMessage="Import from sources or upload a CSV",this.dragOver=!1,this.localSelectedRecipients=new Set,this.searchQuery="",this.filteredRecipients=[],this.boatState="minimized",this.fileInputRef=g.createRef(),this.handleEmailsImported=()=>{this.updateFilteredRecipients(),this.requestUpdate()},this.handleImportFromCSV=()=>{this.enableCsvImport&&this.fileInputRef.value?.click()},this.handleFileSelect=e=>{const t=e.target,i=t.files?.[0];i&&this.processCSVFile(i)},this.handleDrop=e=>{if(!this.enableDragDrop)return;e.preventDefault(),this.dragOver=!1;const t=e.dataTransfer?.files[0];t&&this.processCSVFile(t)},this.processCSVFile=e=>{if(!e.name.endsWith(".csv"))return void u.$notify.error("Please select a CSV file");const t=new FileReader;t.onload=i=>{const s=i.target?.result;try{const a=this.parseCSV(s);if(a.length===0)return void u.$notify.error("No valid email addresses found in CSV");this.dispatchEvent(new CustomEvent("emails-imported",{detail:{emails:a,source:"csv"},bubbles:!0,composed:!0})),u.$notify.success(`Imported ${a.length} emails from CSV file`)}catch{u.$notify.error("Failed to parse CSV file")}},t.readAsText(e)},this.toggleRecipientSelection=e=>{this.localSelectedRecipients.has(e)?this.localSelectedRecipients.delete(e):this.localSelectedRecipients.add(e),this.localSelectedRecipients=new Set(this.localSelectedRecipients),this.dispatchSelectionChange()},this.selectAll=()=>{this.localSelectedRecipients=new Set(this.filteredRecipients),this.dispatchSelectionChange()},this.selectNone=()=>{this.localSelectedRecipients.clear(),this.localSelectedRecipients=new Set,this.dispatchSelectionChange()},this.removeRecipient=e=>{this.dispatchEvent(new CustomEvent("recipient-removed",{detail:{email:e},bubbles:!0,composed:!0}))},this.clearAll=()=>{this.dispatchEvent(new CustomEvent("recipients-cleared",{bubbles:!0,composed:!0}))},this.updateFilteredRecipients=()=>{const e=Array.isArray(this.recipients)?this.recipients:[];if(this.searchQuery.trim()){const t=this.searchQuery.toLowerCase();this.filteredRecipients=e.filter(i=>i.toLowerCase().includes(t))}else this.filteredRecipients=[...e]},this.handleSearchInput=e=>{const t=e.target;this.searchQuery=t.value},this.clearSearch=()=>{this.searchQuery=""},this.dispatchSelectionChange=()=>{this.dispatchEvent(new CustomEvent("selection-changed",{detail:{selectedEmails:Array.from(this.localSelectedRecipients)},bubbles:!0,composed:!0}))},this.handleBoatStateChange=e=>{this.boatState=e.detail}}connectedCallback(){super.connectedCallback(),this.localSelectedRecipients=new Set(this.selectedRecipients),this.updateFilteredRecipients(),this.addEventListener("emails-imported",this.handleEmailsImported)}updated(e){super.updated(e),e.has("selectedRecipients")&&(this.localSelectedRecipients=new Set(this.selectedRecipients)),(e.has("recipients")||e.has("searchQuery"))&&this.updateFilteredRecipients(),e.has("recipients")&&this.requestUpdate()}parseCSV(e){const t=[];let i;i=this.csvParser?this.csvParser.parse(e,{header:!0,skipEmptyLines:!0,dynamicTyping:!0,delimiter:"",transformHeader:l=>l.trim()}):this.simpleCSVParse(e);const s=i.data,a=i.meta.fields||[];let n=a.find(l=>l.toLowerCase().includes("email"));if(!n)for(const l of a){const h=s[0]?.[l]?.toString();if(h&&this.isValidEmail(h)){n=l;break}}if(!n)throw new Error("No email column found in CSV");const r=new Set;for(const l of s){const h=l[n]?.toString();if(!h)continue;const p=h.toLowerCase().trim();this.isValidEmail(p)&&!r.has(p)&&(r.add(p),t.push(p))}return t}simpleCSVParse(e){const t=e.split(`
1010
+ `).filter(a=>a.trim());if(t.length===0)return{data:[],meta:{}};const i=t[0].split(",").map(a=>a.trim().replace(/"/g,"")),s=[];for(let a=1;a<t.length;a++){const n=t[a].split(",").map(l=>l.trim().replace(/"/g,"")),r={};i.forEach((l,h)=>{r[l]=n[h]||""}),s.push(r)}return{data:s,meta:{fields:i}}}isValidEmail(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.trim())}addRecipients(e){if(!e.length)return;const t=[...new Set([...this.recipients,...e])],i=e.filter(s=>!this.recipients.includes(s));this.recipients=t,this.selectedRecipients=[...new Set([...this.selectedRecipients,...i])],this.localSelectedRecipients=new Set(this.selectedRecipients),this.updateFilteredRecipients(),this.requestUpdate()}showBoat(){this.boatState="minimized"}hideBoat(){this.boatState="hidden"}expandBoat(){this.boatState="expanded"}toggleBoat(){this.boatState=this.boatState==="hidden"?"minimized":this.boatState==="minimized"?"expanded":"hidden"}render(){return this.renderBoatLayout()}renderBoatLayout(){return o.html`
689
1011
  <!-- Hidden file input for CSV import -->
690
- ${p.when(this.enableCsvImport,()=>r.html`
1012
+ ${d.when(this.enableCsvImport,()=>o.html`
691
1013
  <input
692
1014
  type="file"
693
1015
  accept=".csv"
694
- ${f.ref(this.fileInputRef)}
1016
+ ${g.ref(this.fileInputRef)}
695
1017
  @change=${this.handleFileSelect}
696
1018
  class="hidden"
697
1019
  />
@@ -708,7 +1030,7 @@ Tab key inserts 2 spaces for better formatting."
708
1030
  <schmancy-typography type="title" token="md" class="font-semibold">
709
1031
  ${this.title}
710
1032
  </schmancy-typography>
711
- ${p.when(this.recipients.length>0,()=>r.html`
1033
+ ${d.when(this.recipients.length>0,()=>o.html`
712
1034
  <schmancy-badge>
713
1035
  ${this.localSelectedRecipients.size}/${this.recipients.length}
714
1036
  </schmancy-badge>
@@ -721,7 +1043,7 @@ Tab key inserts 2 spaces for better formatting."
721
1043
  ${this.renderBoatContent()}
722
1044
  </div>
723
1045
  </schmancy-boat>
724
- `}renderBoatContent(){return r.html`
1046
+ `}renderBoatContent(){return o.html`
725
1047
  <!-- Search Bar and CSV Import on one line -->
726
1048
  <div class="p-4 flex gap-3">
727
1049
  <schmancy-input
@@ -731,7 +1053,7 @@ Tab key inserts 2 spaces for better formatting."
731
1053
  @input=${this.handleSearchInput}
732
1054
  class="flex-1"
733
1055
  >
734
- ${p.when(this.searchQuery,()=>r.html`
1056
+ ${d.when(this.searchQuery,()=>o.html`
735
1057
  <schmancy-button
736
1058
  slot="suffix"
737
1059
  variant="text"
@@ -742,7 +1064,7 @@ Tab key inserts 2 spaces for better formatting."
742
1064
  `)}
743
1065
  </schmancy-input>
744
1066
 
745
- ${p.when(this.enableCsvImport,()=>r.html`
1067
+ ${d.when(this.enableCsvImport,()=>o.html`
746
1068
  <schmancy-button
747
1069
  variant="outlined"
748
1070
  @click=${this.handleImportFromCSV}
@@ -754,7 +1076,7 @@ Tab key inserts 2 spaces for better formatting."
754
1076
  `)}
755
1077
  </div>
756
1078
 
757
- ${p.when(this.recipients.length>0,()=>r.html`
1079
+ ${d.when(this.recipients.length>0,()=>o.html`
758
1080
  <!-- Bulk Actions -->
759
1081
  <div class="px-4 pb-4">
760
1082
  <div class="flex items-center gap-3">
@@ -787,9 +1109,9 @@ Tab key inserts 2 spaces for better formatting."
787
1109
 
788
1110
  <!-- Recipients List -->
789
1111
  <div class="flex-1 overflow-y-auto px-4 pb-4">
790
- ${p.when(this.filteredRecipients.length>0,()=>r.html`
1112
+ ${d.when(this.filteredRecipients.length>0,()=>o.html`
791
1113
  <div class="flex flex-wrap gap-3">
792
- ${x.repeat(this.filteredRecipients,e=>e,e=>r.html`
1114
+ ${S.repeat(this.filteredRecipients,e=>e,e=>o.html`
793
1115
  <schmancy-button
794
1116
  variant=${this.localSelectedRecipients.has(e)?"filled":"outlined"}
795
1117
  @click=${t=>{t.stopPropagation(),t.preventDefault(),this.toggleRecipientSelection(e)}}
@@ -804,7 +1126,7 @@ Tab key inserts 2 spaces for better formatting."
804
1126
  </schmancy-button>
805
1127
  `)}
806
1128
  </div>
807
- `,()=>r.html`
1129
+ `,()=>o.html`
808
1130
  <div class="text-center py-8">
809
1131
  <schmancy-icon size="32px" class="opacity-50 mb-2">search_off</schmancy-icon>
810
1132
  <schmancy-typography type="body" token="sm" class="mb-2">
@@ -816,7 +1138,7 @@ Tab key inserts 2 spaces for better formatting."
816
1138
  </div>
817
1139
  `)}
818
1140
  </div>
819
- `,()=>r.html`
1141
+ `,()=>o.html`
820
1142
  <!-- Empty State -->
821
1143
  <div class="flex-1 flex items-center justify-center p-8">
822
1144
  <div class="text-center space-y-4">
@@ -832,7 +1154,7 @@ Tab key inserts 2 spaces for better formatting."
832
1154
  `)}
833
1155
 
834
1156
  <!-- Drag Overlay -->
835
- ${p.when(this.dragOver&&this.enableDragDrop,()=>r.html`
1157
+ ${d.when(this.dragOver&&this.enableDragDrop,()=>o.html`
836
1158
  <div
837
1159
  class="absolute inset-4 flex items-center justify-center border-2 border-dashed border-primary rounded-lg z-10"
838
1160
  @dragover=${e=>{e.preventDefault(),this.dragOver=!0}}
@@ -848,4 +1170,4 @@ Tab key inserts 2 spaces for better formatting."
848
1170
  </div>
849
1171
  `)}
850
1172
  `}},y([c.property({type:Boolean})],exports.SchmancyEmailRecipients.prototype,"disabled",2),y([c.property({type:Array})],exports.SchmancyEmailRecipients.prototype,"recipients",2),y([c.property({type:Array})],exports.SchmancyEmailRecipients.prototype,"selectedRecipients",2),y([c.property({type:Boolean})],exports.SchmancyEmailRecipients.prototype,"enableCsvImport",2),y([c.property({type:Boolean})],exports.SchmancyEmailRecipients.prototype,"enableDragDrop",2),y([c.property({type:String})],exports.SchmancyEmailRecipients.prototype,"title",2),y([c.property({type:String})],exports.SchmancyEmailRecipients.prototype,"emptyStateTitle",2),y([c.property({type:String})],exports.SchmancyEmailRecipients.prototype,"emptyStateMessage",2),y([c.property({type:Object})],exports.SchmancyEmailRecipients.prototype,"csvParser",2),y([c.state()],exports.SchmancyEmailRecipients.prototype,"dragOver",2),y([c.state()],exports.SchmancyEmailRecipients.prototype,"localSelectedRecipients",2),y([c.state()],exports.SchmancyEmailRecipients.prototype,"searchQuery",2),y([c.state()],exports.SchmancyEmailRecipients.prototype,"filteredRecipients",2),y([c.state()],exports.SchmancyEmailRecipients.prototype,"boatState",2),exports.SchmancyEmailRecipients=y([c.customElement("schmancy-email-recipients")],exports.SchmancyEmailRecipients);
851
- //# sourceMappingURL=email-recipients-H9HVkFvE.cjs.map
1173
+ //# sourceMappingURL=email-recipients-CbZNnzoj.cjs.map