@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.
- package/dist/{animated-text-DhaihRNU.js → animated-text-CBOMltQE.js} +3 -3
- package/dist/{animated-text-DhaihRNU.js.map → animated-text-CBOMltQE.js.map} +1 -1
- package/dist/{animated-text-Bm1G50ol.cjs → animated-text-rE-SkQgz.cjs} +2 -2
- package/dist/{animated-text-Bm1G50ol.cjs.map → animated-text-rE-SkQgz.cjs.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-Cybfl9fo.js → area.component-C86pi_TT.js} +3 -3
- package/dist/{area.component-Cybfl9fo.js.map → area.component-C86pi_TT.js.map} +1 -1
- package/dist/{area.component-e7ccHmOi.cjs → area.component-nX_dCv4R.cjs} +2 -2
- package/dist/{area.component-e7ccHmOi.cjs.map → area.component-nX_dCv4R.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CHPr_eII.js → autocomplete-BAcf_l63.js} +3 -3
- package/dist/{autocomplete-CHPr_eII.js.map → autocomplete-BAcf_l63.js.map} +1 -1
- package/dist/{autocomplete-DhRURo6G.cjs → autocomplete-CuO8ztL4.cjs} +2 -2
- package/dist/{autocomplete-DhRURo6G.cjs.map → autocomplete-CuO8ztL4.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-B3rxuPbq.js → avatar-D3gNBale.js} +54 -53
- package/dist/{avatar-B3rxuPbq.js.map → avatar-D3gNBale.js.map} +1 -1
- package/dist/{avatar-BREyQJqy.cjs → avatar-N3BODeY1.cjs} +2 -2
- package/dist/{avatar-BREyQJqy.cjs.map → avatar-N3BODeY1.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-Ch2Dn8n_.js → boat-BQoWbDxu.js} +2 -2
- package/dist/{boat-Ch2Dn8n_.js.map → boat-BQoWbDxu.js.map} +1 -1
- package/dist/{boat-IQenN8zy.cjs → boat-CWXlAq65.cjs} +2 -2
- package/dist/{boat-IQenN8zy.cjs.map → boat-CWXlAq65.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-DTtOgNWH.js → checkbox-DBO-neG5.js} +2 -2
- package/dist/{checkbox-DTtOgNWH.js.map → checkbox-DBO-neG5.js.map} +1 -1
- package/dist/{checkbox-EV_8e4Q9.cjs → checkbox-DIYmuPtk.cjs} +2 -2
- package/dist/{checkbox-EV_8e4Q9.cjs.map → checkbox-DIYmuPtk.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-D9bYHkvu.cjs → chips-BYE5hQQr.cjs} +2 -2
- package/dist/{chips-D9bYHkvu.cjs.map → chips-BYE5hQQr.cjs.map} +1 -1
- package/dist/{chips-xlNsY8Dl.js → chips-C_7proIN.js} +3 -3
- package/dist/{chips-xlNsY8Dl.js.map → chips-C_7proIN.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-Dy4fNmOI.js → code-preview-CQ-EAz9F.js} +2 -2
- package/dist/{code-preview-Dy4fNmOI.js.map → code-preview-CQ-EAz9F.js.map} +1 -1
- package/dist/{code-preview-CC_QZwlB.cjs → code-preview-CzcyBpl-.cjs} +2 -2
- package/dist/{code-preview-CC_QZwlB.cjs.map → code-preview-CzcyBpl-.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-XTs2K2Rp.cjs → date-range-DCghMsV8.cjs} +2 -2
- package/dist/{date-range-XTs2K2Rp.cjs.map → date-range-DCghMsV8.cjs.map} +1 -1
- package/dist/{date-range-CEhn7Gvg.js → date-range-WqwMEh16.js} +4 -4
- package/dist/{date-range-CEhn7Gvg.js.map → date-range-WqwMEh16.js.map} +1 -1
- package/dist/{date-range-inline-D-F8YwDL.js → date-range-inline-JgIiOHQM.js} +3 -3
- package/dist/{date-range-inline-D-F8YwDL.js.map → date-range-inline-JgIiOHQM.js.map} +1 -1
- package/dist/{date-range-inline-BW6v6aDq.cjs → date-range-inline-Z0ASWN4I.cjs} +2 -2
- package/dist/{date-range-inline-BW6v6aDq.cjs.map → date-range-inline-Z0ASWN4I.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BYwpzSYY.cjs → delay-Ew4cphs1.cjs} +2 -2
- package/dist/{delay-BYwpzSYY.cjs.map → delay-Ew4cphs1.cjs.map} +1 -1
- package/dist/{delay-CqcMq7V3.js → delay-LnWlFwkK.js} +12 -12
- package/dist/{delay-CqcMq7V3.js.map → delay-LnWlFwkK.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-gxjy3noS.js → details-BVEV0hUx.js} +2 -2
- package/dist/{details-gxjy3noS.js.map → details-BVEV0hUx.js.map} +1 -1
- package/dist/{details-C9Vr2c8F.cjs → details-C01m-iWQ.cjs} +2 -2
- package/dist/{details-C9Vr2c8F.cjs.map → details-C01m-iWQ.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-DfXB0r6A.cjs → dialog-content-BFmy9Sbo.cjs} +2 -2
- package/dist/{dialog-content-DfXB0r6A.cjs.map → dialog-content-BFmy9Sbo.cjs.map} +1 -1
- package/dist/{dialog-content-CJ21oAff.js → dialog-content-B_w_iJyW.js} +4 -4
- package/dist/{dialog-content-CJ21oAff.js.map → dialog-content-B_w_iJyW.js.map} +1 -1
- package/dist/{dialog-service-ClZa-7cE.cjs → dialog-service-DS-aEjlX.cjs} +2 -2
- package/dist/{dialog-service-ClZa-7cE.cjs.map → dialog-service-DS-aEjlX.cjs.map} +1 -1
- package/dist/{dialog-service-Dwnyl4Gg.js → dialog-service-DwJ_7FB3.js} +2 -2
- package/dist/{dialog-service-Dwnyl4Gg.js.map → dialog-service-DwJ_7FB3.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/{divider-ZX6UG8fE.cjs → divider-BWG6TAr2.cjs} +2 -2
- package/dist/{divider-ZX6UG8fE.cjs.map → divider-BWG6TAr2.cjs.map} +1 -1
- package/dist/{divider-Dw3OYKoH.js → divider-FkKYlJY3.js} +3 -3
- package/dist/{divider-Dw3OYKoH.js.map → divider-FkKYlJY3.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-QWlP1OxV.js → dropdown-content-BStJGihR.js} +3 -3
- package/dist/{dropdown-content-QWlP1OxV.js.map → dropdown-content-BStJGihR.js.map} +1 -1
- package/dist/{dropdown-content-ULdb1NeW.cjs → dropdown-content-m1aSF-Oh.cjs} +2 -2
- package/dist/{dropdown-content-ULdb1NeW.cjs.map → dropdown-content-m1aSF-Oh.cjs.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-H9HVkFvE.cjs → email-recipients-CbZNnzoj.cjs} +407 -85
- package/dist/email-recipients-CbZNnzoj.cjs.map +1 -0
- package/dist/{email-recipients-DQ36ickQ.js → email-recipients-CpghUhQ1.js} +634 -258
- package/dist/email-recipients-CpghUhQ1.js.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-DEiJ9fDk.cjs → flex-BNVtJlgu.cjs} +2 -2
- package/dist/{flex-DEiJ9fDk.cjs.map → flex-BNVtJlgu.cjs.map} +1 -1
- package/dist/{flex-Cam0G_h7.js → flex-C6yj5Sxi.js} +2 -2
- package/dist/{flex-Cam0G_h7.js.map → flex-C6yj5Sxi.js.map} +1 -1
- package/dist/{form-EPO5N6pI.js → form-C85Qev2L.js} +2 -2
- package/dist/{form-EPO5N6pI.js.map → form-C85Qev2L.js.map} +1 -1
- package/dist/{form-B87v130C.cjs → form-ns7c4fcj.cjs} +2 -2
- package/dist/{form-B87v130C.cjs.map → form-ns7c4fcj.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-Dpx2Zk8-.cjs → formField.mixin-B3CXBJKX.cjs} +2 -2
- package/dist/{formField.mixin-Dpx2Zk8-.cjs.map → formField.mixin-B3CXBJKX.cjs.map} +1 -1
- package/dist/{formField.mixin-B6XjIwKN.js → formField.mixin-CKb_MTS7.js} +2 -2
- package/dist/{formField.mixin-B6XjIwKN.js.map → formField.mixin-CKb_MTS7.js.map} +1 -1
- package/dist/{icon-C6CXTo3Z.js → icon-DKPLcbdu.js} +2 -2
- package/dist/{icon-C6CXTo3Z.js.map → icon-DKPLcbdu.js.map} +1 -1
- package/dist/{icon-MrlToWLJ.cjs → icon-DUstfLaC.cjs} +2 -2
- package/dist/{icon-MrlToWLJ.cjs.map → icon-DUstfLaC.cjs.map} +1 -1
- package/dist/{icon-button-Csj8jwj8.js → icon-button-CIkRej0r.js} +3 -3
- package/dist/{icon-button-Csj8jwj8.js.map → icon-button-CIkRej0r.js.map} +1 -1
- package/dist/{icon-button-BwAStx3H.cjs → icon-button-DiRex-eZ.cjs} +2 -2
- package/dist/{icon-button-BwAStx3H.cjs.map → icon-button-DiRex-eZ.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +225 -224
- package/dist/index.js.map +1 -1
- package/dist/{input-D4L413yG.cjs → input-B7MqsI2h.cjs} +2 -2
- package/dist/{input-D4L413yG.cjs.map → input-B7MqsI2h.cjs.map} +1 -1
- package/dist/{input-B9PDbNB9.js → input-DODcsAZu.js} +3 -3
- package/dist/{input-B9PDbNB9.js.map → input-DODcsAZu.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-Cdd7ht2E.js → list-Cx6tpiFE.js} +2 -2
- package/dist/{list-Cdd7ht2E.js.map → list-Cx6tpiFE.js.map} +1 -1
- package/dist/{list-DLUbjS69.cjs → list-DxduK4sb.cjs} +2 -2
- package/dist/{list-DLUbjS69.cjs.map → list-DxduK4sb.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-CbFQ2uxn.cjs → litElement.mixin-B12Y4mEr.cjs} +2 -2
- package/dist/{litElement.mixin-CbFQ2uxn.cjs.map → litElement.mixin-B12Y4mEr.cjs.map} +1 -1
- package/dist/{litElement.mixin-BYVS1wwl.js → litElement.mixin-BZ8iGvPl.js} +2 -2
- package/dist/{litElement.mixin-BYVS1wwl.js.map → litElement.mixin-BZ8iGvPl.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-DmjQ1Izx.js → map-dT8yp1iK.js} +2 -2
- package/dist/{map-DmjQ1Izx.js.map → map-dT8yp1iK.js.map} +1 -1
- package/dist/{map-DxUajvGo.cjs → map-sgCf8pYD.cjs} +2 -2
- package/dist/{map-DxUajvGo.cjs.map → map-sgCf8pYD.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-DPurU9FS.js → media-CgH0D5rY.js} +2 -2
- package/dist/{media-DPurU9FS.js.map → media-CgH0D5rY.js.map} +1 -1
- package/dist/{media-DCIVM-cE.cjs → media-CwjupDLj.cjs} +2 -2
- package/dist/{media-DCIVM-cE.cjs.map → media-CwjupDLj.cjs.map} +1 -1
- package/dist/{menu-CIObvZ7n.cjs → menu-X25Q7tpY.cjs} +2 -2
- package/dist/{menu-CIObvZ7n.cjs.map → menu-X25Q7tpY.cjs.map} +1 -1
- package/dist/{menu-CwRGjbC-.js → menu-oZRtmhVd.js} +3 -3
- package/dist/{menu-CwRGjbC-.js.map → menu-oZRtmhVd.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-BMnjQVrQ.cjs → notification-service-kLTt3JtW.cjs} +2 -2
- package/dist/{notification-service-BMnjQVrQ.cjs.map → notification-service-kLTt3JtW.cjs.map} +1 -1
- package/dist/{notification-service-DypTYarw.js → notification-service-y0T4rXdS.js} +4 -4
- package/dist/{notification-service-DypTYarw.js.map → notification-service-y0T4rXdS.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-DUMaApt7.js → notify-BnjvURrc.js} +2 -2
- package/dist/{notify-DUMaApt7.js.map → notify-BnjvURrc.js.map} +1 -1
- package/dist/{notify-CqCSy8Ek.cjs → notify-EGStToeW.cjs} +2 -2
- package/dist/{notify-CqCSy8Ek.cjs.map → notify-EGStToeW.cjs.map} +1 -1
- package/dist/{option-CvjLp3CB.js → option-CD1NSUXu.js} +2 -2
- package/dist/{option-CvjLp3CB.js.map → option-CD1NSUXu.js.map} +1 -1
- package/dist/{option-BuN5MSy7.cjs → option-D4_WBCWz.cjs} +2 -2
- package/dist/{option-BuN5MSy7.cjs.map → option-D4_WBCWz.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-C9VN_H07.cjs → payment-card-form-96Rw6cLf.cjs} +2 -2
- package/dist/{payment-card-form-C9VN_H07.cjs.map → payment-card-form-96Rw6cLf.cjs.map} +1 -1
- package/dist/{payment-card-form-CFDdmSH2.js → payment-card-form-lWlhuDb3.js} +3 -3
- package/dist/{payment-card-form-CFDdmSH2.js.map → payment-card-form-lWlhuDb3.js.map} +1 -1
- package/dist/{progress-C-6ieScw.cjs → progress-BkxGzGOm.cjs} +2 -2
- package/dist/{progress-C-6ieScw.cjs.map → progress-BkxGzGOm.cjs.map} +1 -1
- package/dist/{progress-BeOOCcPN.js → progress-DGk9tC4y.js} +2 -2
- package/dist/{progress-BeOOCcPN.js.map → progress-DGk9tC4y.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-D6zvMVQb.js → radio-button-DHM38A7h.js} +3 -3
- package/dist/{radio-button-D6zvMVQb.js.map → radio-button-DHM38A7h.js.map} +1 -1
- package/dist/{radio-button-Bi4ywYhW.cjs → radio-button-w9ZxzEPa.cjs} +2 -2
- package/dist/{radio-button-Bi4ywYhW.cjs.map → radio-button-w9ZxzEPa.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-i8rqaPet.cjs → schmancy-steps-container-CPSL_8H0.cjs} +2 -2
- package/dist/{schmancy-steps-container-i8rqaPet.cjs.map → schmancy-steps-container-CPSL_8H0.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-CfDatUf8.js → schmancy-steps-container-WYO4SOrb.js} +2 -2
- package/dist/{schmancy-steps-container-CfDatUf8.js.map → schmancy-steps-container-WYO4SOrb.js.map} +1 -1
- package/dist/{select-BPkJhj-o.cjs → select-CxCcgqW_.cjs} +2 -2
- package/dist/{select-BPkJhj-o.cjs.map → select-CxCcgqW_.cjs.map} +1 -1
- package/dist/{select-X7b74OI8.js → select-bDAzyQOZ.js} +3 -3
- package/dist/{select-X7b74OI8.js.map → select-bDAzyQOZ.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/sheet-Bm0ukLXt.cjs +52 -0
- package/dist/sheet-Bm0ukLXt.cjs.map +1 -0
- package/dist/sheet-pO6PmiAf.js +144 -0
- package/dist/sheet-pO6PmiAf.js.map +1 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +6 -5
- package/dist/sheet.js.map +1 -1
- package/dist/sheet.service-DV9xNhS8.cjs +2 -0
- package/dist/sheet.service-DV9xNhS8.cjs.map +1 -0
- package/dist/sheet.service-ieSXeqCj.js +87 -0
- package/dist/sheet.service-ieSXeqCj.js.map +1 -0
- package/dist/{slider-DWO4L_qC.cjs → slider-BwXXp74f.cjs} +2 -2
- package/dist/{slider-DWO4L_qC.cjs.map → slider-BwXXp74f.cjs.map} +1 -1
- package/dist/{slider-py-bz6Vv.js → slider-CxZGMYF-.js} +3 -3
- package/dist/{slider-py-bz6Vv.js.map → slider-CxZGMYF-.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-DpmMO5_E.js → spinner-b3VWC6It.js} +2 -2
- package/dist/{spinner-DpmMO5_E.js.map → spinner-b3VWC6It.js.map} +1 -1
- package/dist/{spinner-Dv1WJaIf.cjs → spinner-nN77H00p.cjs} +2 -2
- package/dist/{spinner-Dv1WJaIf.cjs.map → spinner-nN77H00p.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-CFNIITaq.js → surface-C2WjztRc.js} +2 -2
- package/dist/{surface-CFNIITaq.js.map → surface-C2WjztRc.js.map} +1 -1
- package/dist/{surface-Bn4-n1lT.cjs → surface-Cm8zYK5d.cjs} +2 -2
- package/dist/{surface-Bn4-n1lT.cjs.map → surface-Cm8zYK5d.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-A_oEWQzm.cjs → table-BfhuaB9J.cjs} +2 -2
- package/dist/{table-A_oEWQzm.cjs.map → table-BfhuaB9J.cjs.map} +1 -1
- package/dist/{table-DNUpAcQk.js → table-Dp7npAuy.js} +2 -2
- package/dist/{table-DNUpAcQk.js.map → table-Dp7npAuy.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-DNVqDoQh.cjs → tabs-compatibility-CA-wWRoe.cjs} +2 -2
- package/dist/{tabs-compatibility-DNVqDoQh.cjs.map → tabs-compatibility-CA-wWRoe.cjs.map} +1 -1
- package/dist/{tabs-compatibility-Bxoz71f7.js → tabs-compatibility-U4cq8X3I.js} +2 -2
- package/dist/{tabs-compatibility-Bxoz71f7.js.map → tabs-compatibility-U4cq8X3I.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BlZIIaOE.cjs +2 -0
- package/dist/{tailwind.mixin-BU9fMdfc.cjs.map → tailwind.mixin-BlZIIaOE.cjs.map} +1 -1
- package/dist/tailwind.mixin-D2DVHS9V.js +43 -0
- package/dist/{tailwind.mixin-Bpgmqass.js.map → tailwind.mixin-D2DVHS9V.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-BE5TqYmx.js → textarea-BRNj3tvi.js} +2 -2
- package/dist/{textarea-BE5TqYmx.js.map → textarea-BRNj3tvi.js.map} +1 -1
- package/dist/{textarea-DTlpsJ-V.cjs → textarea-CxZKoXaU.cjs} +2 -2
- package/dist/{textarea-DTlpsJ-V.cjs.map → textarea-CxZKoXaU.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DG8sPYM-.cjs → theme-button-MrIoOFEB.cjs} +2 -2
- package/dist/{theme-button-DG8sPYM-.cjs.map → theme-button-MrIoOFEB.cjs.map} +1 -1
- package/dist/{theme-button-BsojGTM7.js → theme-button-N_Wt3bos.js} +2 -2
- package/dist/{theme-button-BsojGTM7.js.map → theme-button-N_Wt3bos.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-BG4oCMuV.js → theme.component-6VfET_t-.js} +2 -2
- package/dist/{theme.component-BG4oCMuV.js.map → theme.component-6VfET_t-.js.map} +1 -1
- package/dist/{theme.component-D7TpDD6q.cjs → theme.component-B_EubPsq.cjs} +3 -3
- package/dist/{theme.component-D7TpDD6q.cjs.map → theme.component-B_EubPsq.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-dc6VVlU0.cjs → timezone-BVd9UEba.cjs} +2 -2
- package/dist/{timezone-dc6VVlU0.cjs.map → timezone-BVd9UEba.cjs.map} +1 -1
- package/dist/{timezone-DtsS7reI.js → timezone-DR_4m9Cc.js} +3 -3
- package/dist/{timezone-DtsS7reI.js.map → timezone-DR_4m9Cc.js.map} +1 -1
- package/dist/{tooltip-C5C8KN_9.js → tooltip-BpPHc8Wr.js} +2 -2
- package/dist/{tooltip-C5C8KN_9.js.map → tooltip-BpPHc8Wr.js.map} +1 -1
- package/dist/{tooltip-CA2yHZN6.cjs → tooltip-DOQVLRaH.cjs} +2 -2
- package/dist/{tooltip-CA2yHZN6.cjs.map → tooltip-DOQVLRaH.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-D7CAcAHa.cjs → tree-BANkyLn7.cjs} +2 -2
- package/dist/{tree-D7CAcAHa.cjs.map → tree-BANkyLn7.cjs.map} +1 -1
- package/dist/{tree-jBMmDqPl.js → tree-C5zu8wXc.js} +2 -2
- package/dist/{tree-jBMmDqPl.js.map → tree-C5zu8wXc.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-DDgmwo1Z.js → typewriter-CdztqkoR.js} +7 -7
- package/dist/{typewriter-DDgmwo1Z.js.map → typewriter-CdztqkoR.js.map} +1 -1
- package/dist/{typewriter-BMfjokvJ.cjs → typewriter-DS0D0UZM.cjs} +2 -2
- package/dist/{typewriter-BMfjokvJ.cjs.map → typewriter-DS0D0UZM.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-CeAzj0Al.cjs → typography-C8vZfuLF.cjs} +2 -2
- package/dist/{typography-CeAzj0Al.cjs.map → typography-C8vZfuLF.cjs.map} +1 -1
- package/dist/{typography-D0JH1nwp.js → typography-o9FJ6Lzo.js} +2 -2
- package/dist/{typography-D0JH1nwp.js.map → typography-o9FJ6Lzo.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/mailbox/email-editor.d.ts +9 -10
- package/types/src/mailbox/email-template-picker.d.ts +54 -0
- package/types/src/mailbox/types.d.ts +3 -0
- package/dist/email-recipients-DQ36ickQ.js.map +0 -1
- package/dist/email-recipients-H9HVkFvE.cjs.map +0 -1
- package/dist/sheet-BBT4JQ3Z.cjs +0 -52
- package/dist/sheet-BBT4JQ3Z.cjs.map +0 -1
- package/dist/sheet-DvCIJGFo.js +0 -228
- package/dist/sheet-DvCIJGFo.js.map +0 -1
- package/dist/tailwind.mixin-BU9fMdfc.cjs +0 -2
- package/dist/tailwind.mixin-Bpgmqass.js +0 -43
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import "rxjs";
|
|
2
2
|
import "lit/directives/class-map.js";
|
|
3
3
|
import "lit/directives/style-map.js";
|
|
4
|
-
import { $ as
|
|
5
|
-
import { T } from "./tailwind.mixin-
|
|
6
|
-
import { property as h, state as
|
|
7
|
-
import { css as
|
|
8
|
-
import { when as
|
|
9
|
-
import { createRef as
|
|
4
|
+
import { $ as A } from "./litElement.mixin-BZ8iGvPl.js";
|
|
5
|
+
import { T as P } from "./tailwind.mixin-D2DVHS9V.js";
|
|
6
|
+
import { property as h, state as y, customElement as C } from "lit/decorators.js";
|
|
7
|
+
import { css as D, html as c } from "lit";
|
|
8
|
+
import { when as d } from "lit/directives/when.js";
|
|
9
|
+
import { createRef as T, ref as E } from "lit/directives/ref.js";
|
|
10
10
|
import { repeat as I } from "lit/directives/repeat.js";
|
|
11
|
-
import { $ as v } from "./notification-service-
|
|
12
|
-
import "./dialog-content-
|
|
13
|
-
import { $ as
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
import { $ as v } from "./notification-service-y0T4rXdS.js";
|
|
12
|
+
import "./dialog-content-B_w_iJyW.js";
|
|
13
|
+
import { $ as L } from "./dialog-service-DwJ_7FB3.js";
|
|
14
|
+
import { s as j } from "./sheet.service-ieSXeqCj.js";
|
|
15
|
+
var F = Object.defineProperty, O = Object.getOwnPropertyDescriptor, u = (e, t, s, i) => {
|
|
16
|
+
for (var a, n = i > 1 ? void 0 : i ? O(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = (i ? a(t, s, n) : a(n)) || n);
|
|
17
|
+
return i && n && F(t, s, n), n;
|
|
17
18
|
};
|
|
18
|
-
let
|
|
19
|
+
let m = class extends A(D`
|
|
19
20
|
:host {
|
|
20
21
|
display: block;
|
|
21
22
|
height: 100%;
|
|
@@ -23,19 +24,19 @@ let p = class extends E(A`
|
|
|
23
24
|
`) {
|
|
24
25
|
constructor() {
|
|
25
26
|
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) => {
|
|
26
|
-
const { emails: t } = e.detail,
|
|
27
|
-
this.recipients =
|
|
27
|
+
const { emails: t } = e.detail, s = [.../* @__PURE__ */ new Set([...this.recipients, ...t])], i = t.filter((a) => !this.recipients.includes(a));
|
|
28
|
+
this.recipients = s, this.selectedRecipients = [.../* @__PURE__ */ new Set([...this.selectedRecipients, ...i])], this.dispatchEvent(new CustomEvent("emails-imported", { detail: { emails: i, source: e.detail.source }, bubbles: !0, composed: !0 }));
|
|
28
29
|
}, this.handleRecipientRemoved = (e) => {
|
|
29
30
|
const { email: t } = e.detail;
|
|
30
|
-
this.recipients = this.recipients.filter((
|
|
31
|
+
this.recipients = this.recipients.filter((s) => s !== t), this.selectedRecipients = this.selectedRecipients.filter((s) => s !== t), this.dispatchEvent(new CustomEvent("recipient-removed", { detail: { email: t }, bubbles: !0, composed: !0 }));
|
|
31
32
|
}, this.handleRecipientsCleared = () => {
|
|
32
33
|
this.recipients = [], this.selectedRecipients = [], this.dispatchEvent(new CustomEvent("recipients-cleared", { bubbles: !0, composed: !0 }));
|
|
33
34
|
}, this.handleSelectionChanged = (e) => {
|
|
34
35
|
const { selectedEmails: t } = e.detail;
|
|
35
36
|
this.selectedRecipients = t, this.dispatchEvent(new CustomEvent("selection-changed", { detail: { selectedEmails: t }, bubbles: !0, composed: !0 }));
|
|
36
37
|
}, this.handleEditorChange = (e) => {
|
|
37
|
-
const { subject: t, body:
|
|
38
|
-
this.subject = t, this.body =
|
|
38
|
+
const { subject: t, body: s, templateId: i, attachments: a } = e.detail;
|
|
39
|
+
this.subject = t, this.body = s, this.templateId = i, this.attachments = a, this.dispatchEvent(new CustomEvent("compose-changed", { detail: { subject: t, body: s, templateId: i, attachments: a }, bubbles: !0, composed: !0 }));
|
|
39
40
|
}, this.handleSend = async () => {
|
|
40
41
|
if (this.selectedRecipients.length !== 0) if (this.subject.trim()) if (this.body.trim()) {
|
|
41
42
|
this.isSending = !0;
|
|
@@ -59,8 +60,8 @@ let p = class extends E(A`
|
|
|
59
60
|
super.updated(e), e.has("disabled") && this.setSending(this.disabled);
|
|
60
61
|
}
|
|
61
62
|
addRecipients(e) {
|
|
62
|
-
const t = [.../* @__PURE__ */ new Set([...this.recipients, ...e])],
|
|
63
|
-
this.recipients = t, this.selectedRecipients = [.../* @__PURE__ */ new Set([...this.selectedRecipients, ...
|
|
63
|
+
const t = [.../* @__PURE__ */ new Set([...this.recipients, ...e])], s = e.filter((i) => !this.recipients.includes(i));
|
|
64
|
+
this.recipients = t, this.selectedRecipients = [.../* @__PURE__ */ new Set([...this.selectedRecipients, ...s])];
|
|
64
65
|
}
|
|
65
66
|
setSubject(e) {
|
|
66
67
|
this.subject = e;
|
|
@@ -79,7 +80,7 @@ let p = class extends E(A`
|
|
|
79
80
|
}
|
|
80
81
|
render() {
|
|
81
82
|
const e = this.selectedRecipients.length > 0 && this.subject.trim() && this.body.trim() && !this.isSending && !this.disabled;
|
|
82
|
-
return
|
|
83
|
+
return c`
|
|
83
84
|
<!-- Main Layout Container -->
|
|
84
85
|
<div class="flex flex-col h-full gap-6 p-6">
|
|
85
86
|
|
|
@@ -126,7 +127,7 @@ let p = class extends E(A`
|
|
|
126
127
|
<schmancy-typography type="body" token="sm" class="font-medium">
|
|
127
128
|
${this.selectedRecipients.length} recipient${this.selectedRecipients.length === 1 ? "" : "s"} selected
|
|
128
129
|
</schmancy-typography>
|
|
129
|
-
${
|
|
130
|
+
${d(this.attachments.length > 0, () => c`
|
|
130
131
|
<schmancy-typography type="body" token="xs">
|
|
131
132
|
${this.attachments.length} attachment${this.attachments.length === 1 ? "" : "s"}
|
|
132
133
|
</schmancy-typography>
|
|
@@ -169,9 +170,9 @@ let p = class extends E(A`
|
|
|
169
170
|
`;
|
|
170
171
|
}
|
|
171
172
|
};
|
|
172
|
-
|
|
173
|
-
var
|
|
174
|
-
let z = class extends
|
|
173
|
+
u([h({ type: Object })], m.prototype, "config", 2), u([h({ type: Array })], m.prototype, "templates", 2), u([h({ type: Array })], m.prototype, "importSources", 2), u([h({ type: Boolean })], m.prototype, "disabled", 2), u([h({ type: String })], m.prototype, "recipientsTitle", 2), u([h({ type: String })], m.prototype, "recipientsEmptyTitle", 2), u([h({ type: String })], m.prototype, "recipientsEmptyMessage", 2), u([h({ type: Boolean })], m.prototype, "enableCsvImport", 2), u([h({ type: Boolean })], m.prototype, "enableDragDrop", 2), u([y()], m.prototype, "recipients", 2), u([y()], m.prototype, "selectedRecipients", 2), u([y()], m.prototype, "subject", 2), u([y()], m.prototype, "body", 2), u([y()], m.prototype, "templateId", 2), u([y()], m.prototype, "attachments", 2), u([y()], m.prototype, "isSending", 2), m = u([C("schmancy-mailbox")], m);
|
|
174
|
+
var B = Object.getOwnPropertyDescriptor;
|
|
175
|
+
let z = class extends P() {
|
|
175
176
|
constructor() {
|
|
176
177
|
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" }];
|
|
177
178
|
}
|
|
@@ -179,9 +180,9 @@ let z = class extends T() {
|
|
|
179
180
|
this.dispatchEvent(new CustomEvent("layout-select", { detail: { layout: e }, bubbles: !0, composed: !0 }));
|
|
180
181
|
}
|
|
181
182
|
render() {
|
|
182
|
-
return
|
|
183
|
+
return c`
|
|
183
184
|
<div class="grid p-3 gap-2">
|
|
184
|
-
${this.layouts.map((e) =>
|
|
185
|
+
${this.layouts.map((e) => c`
|
|
185
186
|
<schmancy-button
|
|
186
187
|
variant="outlined"
|
|
187
188
|
@click=${() => this.selectLayout(e.id)}
|
|
@@ -200,31 +201,232 @@ let z = class extends T() {
|
|
|
200
201
|
`;
|
|
201
202
|
}
|
|
202
203
|
};
|
|
203
|
-
z = ((e, t,
|
|
204
|
-
for (var a, n =
|
|
204
|
+
z = ((e, t, s, i) => {
|
|
205
|
+
for (var a, n = i > 1 ? void 0 : i ? B(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = a(n) || n);
|
|
205
206
|
return n;
|
|
206
|
-
})([
|
|
207
|
-
var
|
|
208
|
-
for (var a, n =
|
|
209
|
-
return
|
|
207
|
+
})([C("schmancy-email-layout-selector")], z);
|
|
208
|
+
var M = Object.defineProperty, H = Object.getOwnPropertyDescriptor, R = (e, t, s, i) => {
|
|
209
|
+
for (var a, n = i > 1 ? void 0 : i ? H(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = (i ? a(t, s, n) : a(n)) || n);
|
|
210
|
+
return i && n && M(t, s, n), n;
|
|
210
211
|
};
|
|
211
|
-
let
|
|
212
|
+
let k = class extends A(D`
|
|
213
|
+
:host {
|
|
214
|
+
display: block;
|
|
215
|
+
}
|
|
216
|
+
`) {
|
|
217
|
+
constructor() {
|
|
218
|
+
super(...arguments), this.templates = [], this.searchQuery = "", this.filteredTemplates = [], this.selectedCategory = "all", this.handleSearch = (e) => {
|
|
219
|
+
const t = e.target;
|
|
220
|
+
this.searchQuery = t.value;
|
|
221
|
+
}, this.handleCategorySelect = (e) => {
|
|
222
|
+
this.selectedCategory = e, this.updateFilteredTemplates();
|
|
223
|
+
}, this.selectTemplate = (e) => {
|
|
224
|
+
this.dispatchEvent(new CustomEvent("template-selected", { detail: e, bubbles: !0, composed: !0 })), j.dismiss();
|
|
225
|
+
}, this.close = () => {
|
|
226
|
+
j.dismiss();
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
connectedCallback() {
|
|
230
|
+
super.connectedCallback(), this.updateFilteredTemplates();
|
|
231
|
+
}
|
|
232
|
+
updated(e) {
|
|
233
|
+
(e.has("templates") || e.has("searchQuery") || e.has("selectedCategory")) && this.updateFilteredTemplates();
|
|
234
|
+
}
|
|
235
|
+
get categories() {
|
|
236
|
+
const e = /* @__PURE__ */ new Set();
|
|
237
|
+
return this.templates.forEach((t) => {
|
|
238
|
+
t.category && e.add(t.category);
|
|
239
|
+
}), ["all", ...Array.from(e)];
|
|
240
|
+
}
|
|
241
|
+
updateFilteredTemplates() {
|
|
242
|
+
let e = [...this.templates];
|
|
243
|
+
if (this.selectedCategory !== "all" && (e = e.filter((t) => t.category === this.selectedCategory)), this.searchQuery.trim()) {
|
|
244
|
+
const t = this.searchQuery.toLowerCase();
|
|
245
|
+
e = e.filter((s) => s.name.toLowerCase().includes(t) || s.category?.toLowerCase().includes(t) || s.description?.toLowerCase().includes(t));
|
|
246
|
+
}
|
|
247
|
+
this.filteredTemplates = e;
|
|
248
|
+
}
|
|
249
|
+
render() {
|
|
250
|
+
return c`
|
|
251
|
+
<div class="flex flex-col h-full overflow-hidden">
|
|
252
|
+
<!-- Header -->
|
|
253
|
+
<div class="flex items-center justify-between px-6 py-4 border-b border-outline-variant">
|
|
254
|
+
<div class="flex items-center gap-3">
|
|
255
|
+
<schmancy-icon size="24px" class="text-primary">mail</schmancy-icon>
|
|
256
|
+
<schmancy-typography type="headline" token="md">
|
|
257
|
+
Choose Email Template
|
|
258
|
+
</schmancy-typography>
|
|
259
|
+
</div>
|
|
260
|
+
<schmancy-button
|
|
261
|
+
variant="text"
|
|
262
|
+
@click=${this.close}
|
|
263
|
+
class="hover:bg-surface-container rounded-full w-10 h-10 p-0"
|
|
264
|
+
>
|
|
265
|
+
<schmancy-icon>close</schmancy-icon>
|
|
266
|
+
</schmancy-button>
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
<!-- Body -->
|
|
270
|
+
<div class="flex-1 flex flex-col overflow-hidden">
|
|
271
|
+
${this.renderTemplateList()}
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
`;
|
|
275
|
+
}
|
|
276
|
+
renderTemplateList() {
|
|
277
|
+
return c`
|
|
278
|
+
<!-- Search and Filter Bar -->
|
|
279
|
+
<div class="px-6 py-4 border-b border-outline-variant bg-surface-containerLow">
|
|
280
|
+
<div class="flex flex-col gap-4">
|
|
281
|
+
<!-- Search Input -->
|
|
282
|
+
<schmancy-input
|
|
283
|
+
type="search"
|
|
284
|
+
placeholder="Search templates..."
|
|
285
|
+
.value=${this.searchQuery}
|
|
286
|
+
@input=${this.handleSearch}
|
|
287
|
+
class="w-full"
|
|
288
|
+
>
|
|
289
|
+
<schmancy-icon slot="prefix" size="20px" class="text-surface-onVariant">search</schmancy-icon>
|
|
290
|
+
${d(this.searchQuery, () => c`
|
|
291
|
+
<schmancy-button
|
|
292
|
+
slot="suffix"
|
|
293
|
+
variant="text"
|
|
294
|
+
@click=${() => {
|
|
295
|
+
this.searchQuery = "";
|
|
296
|
+
}}
|
|
297
|
+
class="rounded-full w-8 h-8 p-0"
|
|
298
|
+
>
|
|
299
|
+
<schmancy-icon size="16px">close</schmancy-icon>
|
|
300
|
+
</schmancy-button>
|
|
301
|
+
`)}
|
|
302
|
+
</schmancy-input>
|
|
303
|
+
|
|
304
|
+
<!-- Category Filter -->
|
|
305
|
+
${d(this.categories.length > 1, () => c`
|
|
306
|
+
<div class="flex gap-2 flex-wrap">
|
|
307
|
+
${I(this.categories, (e) => e, (e) => c`
|
|
308
|
+
<schmancy-chip
|
|
309
|
+
class="cursor-pointer transition-all hover:shadow-sm ${this.selectedCategory === e ? "bg-primary text-primary-on" : "border border-outline"}"
|
|
310
|
+
@click=${() => this.handleCategorySelect(e)}
|
|
311
|
+
>
|
|
312
|
+
${e === "all" ? "All Templates" : e}
|
|
313
|
+
</schmancy-chip>
|
|
314
|
+
`)}
|
|
315
|
+
</div>
|
|
316
|
+
`)}
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
|
|
320
|
+
<!-- Template List with Previews -->
|
|
321
|
+
<div class="flex-1 overflow-y-auto px-6 py-6">
|
|
322
|
+
${d(this.filteredTemplates.length > 0, () => c`
|
|
323
|
+
<div class="space-y-6">
|
|
324
|
+
${I(this.filteredTemplates, (e) => e.id, (e) => c`
|
|
325
|
+
<schmancy-surface
|
|
326
|
+
type="containerLow"
|
|
327
|
+
elevation="1"
|
|
328
|
+
rounded="all"
|
|
329
|
+
class="group cursor-pointer hover:elevation-3 transition-all duration-200 overflow-hidden"
|
|
330
|
+
@click=${() => this.selectTemplate(e)}
|
|
331
|
+
>
|
|
332
|
+
<!-- Template Header -->
|
|
333
|
+
<div class="p-4 border-b border-outline-variant">
|
|
334
|
+
<div class="flex items-start justify-between">
|
|
335
|
+
<div class="flex-1">
|
|
336
|
+
<schmancy-typography type="title" token="md" class="font-semibold leading-tight mb-1">
|
|
337
|
+
${e.name}
|
|
338
|
+
</schmancy-typography>
|
|
339
|
+
${d(e.category, () => c`
|
|
340
|
+
<schmancy-chip class="text-xs border border-outline">
|
|
341
|
+
${e.category}
|
|
342
|
+
</schmancy-chip>
|
|
343
|
+
`)}
|
|
344
|
+
</div>
|
|
345
|
+
<schmancy-button
|
|
346
|
+
variant="filled"
|
|
347
|
+
size="sm"
|
|
348
|
+
class="opacity-0 group-hover:opacity-100 transition-opacity"
|
|
349
|
+
>
|
|
350
|
+
Use This
|
|
351
|
+
</schmancy-button>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<!-- Email Preview -->
|
|
356
|
+
<div class="p-4 bg-surface">
|
|
357
|
+
<schmancy-email-viewer
|
|
358
|
+
subject=${e.subject}
|
|
359
|
+
body=${e.body}
|
|
360
|
+
mode="desktop"
|
|
361
|
+
class="max-h-96 overflow-y-auto"
|
|
362
|
+
></schmancy-email-viewer>
|
|
363
|
+
</div>
|
|
364
|
+
</schmancy-surface>
|
|
365
|
+
`)}
|
|
366
|
+
</div>
|
|
367
|
+
`, () => c`
|
|
368
|
+
<div class="flex flex-col items-center justify-center h-96 text-center">
|
|
369
|
+
<div class="mb-6">
|
|
370
|
+
<schmancy-icon size="64px" class="text-surface-onVariant opacity-20">mail_outline</schmancy-icon>
|
|
371
|
+
</div>
|
|
372
|
+
<schmancy-typography type="headline" token="sm" class="mb-2">
|
|
373
|
+
${this.searchQuery || this.selectedCategory !== "all" ? "No templates found" : "No templates available"}
|
|
374
|
+
</schmancy-typography>
|
|
375
|
+
<schmancy-typography type="body" token="md" class="text-surface-onVariant mb-6 max-w-md">
|
|
376
|
+
${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"}
|
|
377
|
+
</schmancy-typography>
|
|
378
|
+
${d(this.searchQuery || this.selectedCategory !== "all", () => c`
|
|
379
|
+
<div class="flex gap-3">
|
|
380
|
+
${d(this.searchQuery, () => c`
|
|
381
|
+
<schmancy-button
|
|
382
|
+
variant="outlined"
|
|
383
|
+
@click=${() => {
|
|
384
|
+
this.searchQuery = "";
|
|
385
|
+
}}
|
|
386
|
+
>
|
|
387
|
+
<schmancy-icon slot="prefix">clear</schmancy-icon>
|
|
388
|
+
Clear Search
|
|
389
|
+
</schmancy-button>
|
|
390
|
+
`)}
|
|
391
|
+
${d(this.selectedCategory !== "all", () => c`
|
|
392
|
+
<schmancy-button
|
|
393
|
+
variant="filled"
|
|
394
|
+
@click=${() => this.handleCategorySelect("all")}
|
|
395
|
+
>
|
|
396
|
+
<schmancy-icon slot="prefix">view_list</schmancy-icon>
|
|
397
|
+
Show All Templates
|
|
398
|
+
</schmancy-button>
|
|
399
|
+
`)}
|
|
400
|
+
</div>
|
|
401
|
+
`)}
|
|
402
|
+
</div>
|
|
403
|
+
`)}
|
|
404
|
+
</div>
|
|
405
|
+
`;
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
R([h({ type: Array })], k.prototype, "templates", 2), R([y()], k.prototype, "searchQuery", 2), R([y()], k.prototype, "filteredTemplates", 2), R([y()], k.prototype, "selectedCategory", 2), k = R([C("schmancy-email-template-picker")], k);
|
|
409
|
+
var U = Object.defineProperty, V = Object.getOwnPropertyDescriptor, x = (e, t, s, i) => {
|
|
410
|
+
for (var a, n = i > 1 ? void 0 : i ? V(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = (i ? a(t, s, n) : a(n)) || n);
|
|
411
|
+
return i && n && U(t, s, n), n;
|
|
412
|
+
};
|
|
413
|
+
let b = class extends A(D`
|
|
212
414
|
:host {
|
|
213
415
|
display: block;
|
|
214
416
|
height: 100%;
|
|
215
417
|
}
|
|
216
418
|
`) {
|
|
217
419
|
constructor() {
|
|
218
|
-
super(...arguments), this.subject = "", this.body = "", this.
|
|
420
|
+
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 = T(), this.bodyTextAreaRef = T(), this.fileInputRef = T(), this.imageInputRef = T(), this.handleKeyDown = (e) => {
|
|
219
421
|
if (this.disabled) return;
|
|
220
422
|
const t = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
221
423
|
e.key === "Tab" && e.target === t && (e.preventDefault(), this.insertAtCursor(" "));
|
|
222
424
|
}, this.handlePaste = (e) => {
|
|
223
425
|
const t = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
224
426
|
if (this.disabled || document.activeElement !== t) return;
|
|
225
|
-
const
|
|
226
|
-
if (
|
|
227
|
-
const a = i
|
|
427
|
+
const s = e.clipboardData?.items;
|
|
428
|
+
if (s) for (let i = 0; i < s.length; i++) {
|
|
429
|
+
const a = s[i];
|
|
228
430
|
if (a.type.indexOf("image") !== -1) {
|
|
229
431
|
e.preventDefault();
|
|
230
432
|
const n = a.getAsFile();
|
|
@@ -237,21 +439,22 @@ let b = class extends E(A`
|
|
|
237
439
|
this.subject = t.value, this.dispatchChange();
|
|
238
440
|
}, this.handleBodyChange = (e) => {
|
|
239
441
|
this.body = e.detail.value, this.dispatchChange();
|
|
240
|
-
}, this.selectTemplate = (e) => {
|
|
241
|
-
const t = this.templates.find((i) => i.id === e);
|
|
242
|
-
t && (this.subject = t.subject, this.body = t.body, this.selectedTemplate = e, this.dispatchChange());
|
|
243
|
-
}, this.clearTemplate = () => {
|
|
244
|
-
this.subject = "", this.body = "", this.selectedTemplate = null, this.dispatchChange();
|
|
245
442
|
}, this.dispatchChange = () => {
|
|
246
|
-
this.dispatchEvent(new CustomEvent("editor-change", { detail: { subject: this.subject, body: this.body,
|
|
443
|
+
this.dispatchEvent(new CustomEvent("editor-change", { detail: { subject: this.subject, body: this.body, attachments: this.attachments }, bubbles: !0, composed: !0 }));
|
|
247
444
|
}, this.openLayoutDialog = () => {
|
|
248
|
-
|
|
445
|
+
L.component(c`
|
|
249
446
|
<schmancy-email-layout-selector
|
|
250
447
|
@layout-select=${(e) => {
|
|
251
|
-
this.applyLayout(e.detail.layout),
|
|
448
|
+
this.applyLayout(e.detail.layout), L.close();
|
|
252
449
|
}}
|
|
253
450
|
></schmancy-email-layout-selector>
|
|
254
451
|
`);
|
|
452
|
+
}, this.openTemplatePicker = () => {
|
|
453
|
+
const e = new k();
|
|
454
|
+
e.templates = this.templates, e.addEventListener("template-selected", this.handleTemplateSelected), j.open({ component: e, title: "Choose Email Template" });
|
|
455
|
+
}, this.handleTemplateSelected = (e) => {
|
|
456
|
+
const t = e.detail;
|
|
457
|
+
this.subject = t.subject, this.body = t.body, this.dispatchChange(), v.success(`Template "${t.name}" applied successfully`);
|
|
255
458
|
}, this.applyLayout = (e) => {
|
|
256
459
|
const t = { "columns-2": `
|
|
257
460
|
:::layout columns-2
|
|
@@ -353,51 +556,51 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
353
556
|
try {
|
|
354
557
|
let t;
|
|
355
558
|
this.config.imageUploadHandler ? t = await this.config.imageUploadHandler(e) : this.config.uploadHandler ? t = await this.config.uploadHandler(e) : (t = await this.createDataUrl(e), v.warning("No upload handler configured. Using local preview."));
|
|
356
|
-
const
|
|
357
|
-
this.insertImageMarkdown(t, e.name,
|
|
559
|
+
const s = await this.getImageDimensions(e);
|
|
560
|
+
this.insertImageMarkdown(t, e.name, s.width, s.height), v.success("Image uploaded successfully");
|
|
358
561
|
} catch {
|
|
359
562
|
v.error("Failed to upload image");
|
|
360
563
|
} finally {
|
|
361
564
|
this.isUploading = !1;
|
|
362
565
|
}
|
|
363
566
|
}
|
|
364
|
-
}, this.createDataUrl = (e) => new Promise((t,
|
|
365
|
-
const
|
|
366
|
-
|
|
567
|
+
}, this.createDataUrl = (e) => new Promise((t, s) => {
|
|
568
|
+
const i = new FileReader();
|
|
569
|
+
i.onload = () => t(i.result), i.onerror = s, i.readAsDataURL(e);
|
|
367
570
|
}), this.getImageDimensions = (e) => new Promise((t) => {
|
|
368
|
-
const
|
|
369
|
-
|
|
370
|
-
t({ width:
|
|
371
|
-
},
|
|
372
|
-
t({ width: 400, height: 300 }), URL.revokeObjectURL(
|
|
373
|
-
},
|
|
374
|
-
}), this.insertImageMarkdown = (e, t,
|
|
571
|
+
const s = new Image();
|
|
572
|
+
s.onload = () => {
|
|
573
|
+
t({ width: s.width, height: s.height }), URL.revokeObjectURL(s.src);
|
|
574
|
+
}, s.onerror = () => {
|
|
575
|
+
t({ width: 400, height: 300 }), URL.revokeObjectURL(s.src);
|
|
576
|
+
}, s.src = URL.createObjectURL(e);
|
|
577
|
+
}), this.insertImageMarkdown = (e, t, s, i) => {
|
|
375
578
|
const a = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
376
579
|
if (!a) return;
|
|
377
|
-
const n = `{width=${Math.min(
|
|
378
|
-
this.body =
|
|
379
|
-
const
|
|
380
|
-
if (
|
|
381
|
-
const S =
|
|
382
|
-
|
|
580
|
+
const n = `{width=${Math.min(s, 600)}px height=auto}`, r = a.selectionStart, o = a.selectionEnd, l = this.body.substring(0, r) + n + this.body.substring(o);
|
|
581
|
+
this.body = l, this.dispatchChange(), this.updateComplete.then(() => {
|
|
582
|
+
const p = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
583
|
+
if (p) {
|
|
584
|
+
const S = r + n.length;
|
|
585
|
+
p.setSelectionRange(S, S), p.focus();
|
|
383
586
|
}
|
|
384
587
|
});
|
|
385
588
|
}, this.handleFileChange = (e) => {
|
|
386
|
-
const t = e.target,
|
|
387
|
-
if (
|
|
388
|
-
const a = i
|
|
589
|
+
const t = e.target, s = t.files;
|
|
590
|
+
if (s) for (let i = 0; i < s.length; i++) {
|
|
591
|
+
const a = s[i];
|
|
389
592
|
a.type.startsWith("image/") ? this.uploadImage(a) : this.addFile(a);
|
|
390
593
|
}
|
|
391
594
|
t.value = "";
|
|
392
595
|
}, this.handleImageSelect = (e) => {
|
|
393
|
-
const t = e.target,
|
|
394
|
-
|
|
596
|
+
const t = e.target, s = t.files?.[0];
|
|
597
|
+
s && s.type.startsWith("image/") && this.uploadImage(s), t.value = "";
|
|
395
598
|
}, this.handleDrop = (e) => {
|
|
396
599
|
e.preventDefault(), this.dragOver = !1;
|
|
397
600
|
const t = e.dataTransfer?.files;
|
|
398
|
-
if (t) for (let
|
|
399
|
-
const
|
|
400
|
-
|
|
601
|
+
if (t) for (let s = 0; s < t.length; s++) {
|
|
602
|
+
const i = t[s];
|
|
603
|
+
i.type.startsWith("image/") ? this.uploadImage(i) : this.addFile(i);
|
|
401
604
|
}
|
|
402
605
|
}, this.handleDragEnter = (e) => {
|
|
403
606
|
e.preventDefault(), this.dragOver = !0;
|
|
@@ -411,7 +614,7 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
411
614
|
e.preventDefault();
|
|
412
615
|
}, this.addFile = (e) => {
|
|
413
616
|
if (e.size > 10485760) return void v.error(`File "${e.name}" is too large. Maximum size is 10MB.`);
|
|
414
|
-
if (this.attachments.some((
|
|
617
|
+
if (this.attachments.some((s) => s.name === e.name && s.size === e.size)) return void v.warning(`File "${e.name}" is already attached.`);
|
|
415
618
|
const t = { id: crypto.randomUUID(), file: e, name: e.name, size: e.size, type: e.type || "application/octet-stream" };
|
|
416
619
|
this.attachments = [...this.attachments, t], this.dispatchChange();
|
|
417
620
|
}, this.removeAttachment = (e) => {
|
|
@@ -424,6 +627,198 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
424
627
|
disconnectedCallback() {
|
|
425
628
|
super.disconnectedCallback(), document.removeEventListener("paste", this.handlePaste), document.removeEventListener("dragenter", this.handleDragEnter), document.removeEventListener("dragleave", this.handleDocumentDragLeave), document.removeEventListener("drop", this.handleDocumentDrop);
|
|
426
629
|
}
|
|
630
|
+
getDefaultTemplates() {
|
|
631
|
+
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!
|
|
632
|
+
|
|
633
|
+
We're thrilled to have you on board. Thank you for joining us on this journey.
|
|
634
|
+
|
|
635
|
+
## What's Next?
|
|
636
|
+
|
|
637
|
+
* **Explore** your dashboard and discover all the features
|
|
638
|
+
* **Connect** with other community members
|
|
639
|
+
* **Get support** whenever you need it - we're here to help
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
*Need assistance? Simply reply to this email and we'll get back to you within 24 hours.*
|
|
644
|
+
|
|
645
|
+
Best regards,
|
|
646
|
+
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
|
|
647
|
+
|
|
648
|
+
## Featured Story
|
|
649
|
+
|
|
650
|
+
**[Article Title]**
|
|
651
|
+
Brief description of the main story or update that you want to highlight this week.
|
|
652
|
+
|
|
653
|
+
[Read More](https://example.com)
|
|
654
|
+
|
|
655
|
+
## Quick Updates
|
|
656
|
+
|
|
657
|
+
* **Update 1**: Brief description of an important update
|
|
658
|
+
* **Update 2**: Another noteworthy development
|
|
659
|
+
* **Update 3**: Additional news worth sharing
|
|
660
|
+
|
|
661
|
+
## Upcoming Events
|
|
662
|
+
|
|
663
|
+
**[Event Name]** - *Date*
|
|
664
|
+
Short description of the upcoming event.
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
*Thanks for reading! Forward this to a friend who might enjoy it.*
|
|
669
|
+
|
|
670
|
+
Until next week,
|
|
671
|
+
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
|
|
672
|
+
|
|
673
|
+
We've been working hard behind the scenes, and today we're excited to introduce our latest creation.
|
|
674
|
+
|
|
675
|
+
## Key Features
|
|
676
|
+
|
|
677
|
+
* **Feature 1**: Benefit that matters to your users
|
|
678
|
+
* **Feature 2**: Another compelling capability
|
|
679
|
+
* **Feature 3**: The feature that sets you apart
|
|
680
|
+
|
|
681
|
+
## Early Access
|
|
682
|
+
|
|
683
|
+
As a valued member, you get **exclusive early access** starting today.
|
|
684
|
+
|
|
685
|
+
[Get Started Now](https://example.com)
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
*Questions? We'd love to hear from you. Just hit reply!*
|
|
690
|
+
|
|
691
|
+
Best,
|
|
692
|
+
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!
|
|
693
|
+
|
|
694
|
+
## [Event Name]
|
|
695
|
+
|
|
696
|
+
**When**: [Date & Time]
|
|
697
|
+
**Where**: [Location or Virtual Link]
|
|
698
|
+
**Duration**: [Duration]
|
|
699
|
+
|
|
700
|
+
Join us for an exclusive gathering where we'll explore [brief event description].
|
|
701
|
+
|
|
702
|
+
## What to Expect
|
|
703
|
+
|
|
704
|
+
* **Networking** with industry professionals
|
|
705
|
+
* **Insights** from leading experts
|
|
706
|
+
* **Interactive** sessions and discussions
|
|
707
|
+
|
|
708
|
+
## RSVP Required
|
|
709
|
+
|
|
710
|
+
Space is limited, so please confirm your attendance by [RSVP Date].
|
|
711
|
+
|
|
712
|
+
[Confirm Attendance](https://example.com)
|
|
713
|
+
|
|
714
|
+
---
|
|
715
|
+
|
|
716
|
+
*Can't make it? Let us know and we'll share the key highlights with you.*
|
|
717
|
+
|
|
718
|
+
Looking forward to seeing you there,
|
|
719
|
+
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
|
|
720
|
+
|
|
721
|
+
Your support means the world to us.
|
|
722
|
+
|
|
723
|
+
Whether you've been with us from the beginning or just joined our community, we want you to know how much we appreciate you.
|
|
724
|
+
|
|
725
|
+
## Because of You
|
|
726
|
+
|
|
727
|
+
* We've been able to improve our service
|
|
728
|
+
* Our community has grown stronger
|
|
729
|
+
* We've achieved milestones we never thought possible
|
|
730
|
+
|
|
731
|
+
## What's Next
|
|
732
|
+
|
|
733
|
+
We're committed to continuing to earn your trust and providing even more value in the coming months.
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
*Your feedback shapes everything we do. Reply anytime with thoughts or suggestions.*
|
|
738
|
+
|
|
739
|
+
With genuine gratitude,
|
|
740
|
+
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
|
|
741
|
+
|
|
742
|
+
Your experience matters to us, and we're always looking for ways to improve.
|
|
743
|
+
|
|
744
|
+
## Quick Favor?
|
|
745
|
+
|
|
746
|
+
Could you spare **2 minutes** to share your thoughts? Your honest feedback helps us serve you better.
|
|
747
|
+
|
|
748
|
+
[Share Your Feedback](https://example.com)
|
|
749
|
+
|
|
750
|
+
## What We're Asking
|
|
751
|
+
|
|
752
|
+
* How has your experience been so far?
|
|
753
|
+
* What's working well for you?
|
|
754
|
+
* What could we improve?
|
|
755
|
+
|
|
756
|
+
## Thank You Gift
|
|
757
|
+
|
|
758
|
+
As a small token of appreciation, everyone who completes our feedback form receives [incentive].
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
*Every response is read personally by our team. We take your input seriously.*
|
|
763
|
+
|
|
764
|
+
Thanks in advance,
|
|
765
|
+
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
|
|
766
|
+
|
|
767
|
+
We received a request to reset the password for your account.
|
|
768
|
+
|
|
769
|
+
## Reset Your Password
|
|
770
|
+
|
|
771
|
+
Click the button below to create a new password. This link will expire in **24 hours** for your security.
|
|
772
|
+
|
|
773
|
+
[Reset Password](https://example.com/reset)
|
|
774
|
+
|
|
775
|
+
## Didn't Request This?
|
|
776
|
+
|
|
777
|
+
If you didn't request a password reset, please ignore this email. Your account remains secure.
|
|
778
|
+
|
|
779
|
+
## Need Help?
|
|
780
|
+
|
|
781
|
+
If you're having trouble with the reset process, contact our support team and we'll assist you right away.
|
|
782
|
+
|
|
783
|
+
---
|
|
784
|
+
|
|
785
|
+
*For security reasons, this link can only be used once and expires in 24 hours.*
|
|
786
|
+
|
|
787
|
+
Best regards,
|
|
788
|
+
Security Team` }, { id: "order-confirmation", name: "Order Confirmation", subject: "Order Confirmed - #[ORDER-NUMBER]", description: "Professional order confirmation template", category: "commerce", body: `# Order Confirmation
|
|
789
|
+
|
|
790
|
+
Thanks for your order! We've received your payment and are preparing your items for shipment.
|
|
791
|
+
|
|
792
|
+
## Order Details
|
|
793
|
+
|
|
794
|
+
**Order Number**: #[ORDER-NUMBER]
|
|
795
|
+
**Order Date**: [DATE]
|
|
796
|
+
**Total**: $[AMOUNT]
|
|
797
|
+
|
|
798
|
+
## Items Ordered
|
|
799
|
+
|
|
800
|
+
* **[Item 1]** - Quantity: [QTY] - $[PRICE]
|
|
801
|
+
* **[Item 2]** - Quantity: [QTY] - $[PRICE]
|
|
802
|
+
|
|
803
|
+
## Shipping Information
|
|
804
|
+
|
|
805
|
+
**Address**: [SHIPPING ADDRESS]
|
|
806
|
+
**Method**: [SHIPPING METHOD]
|
|
807
|
+
**Estimated Delivery**: [DELIVERY DATE]
|
|
808
|
+
|
|
809
|
+
## Next Steps
|
|
810
|
+
|
|
811
|
+
You'll receive a tracking number via email once your order ships (usually within 1-2 business days).
|
|
812
|
+
|
|
813
|
+
[Track Your Order](https://example.com/track)
|
|
814
|
+
|
|
815
|
+
---
|
|
816
|
+
|
|
817
|
+
*Questions about your order? Reply to this email or contact our support team.*
|
|
818
|
+
|
|
819
|
+
Thank you for your business,
|
|
820
|
+
The Fulfillment Team` }];
|
|
821
|
+
}
|
|
427
822
|
addKeyboardListeners() {
|
|
428
823
|
this.addEventListener("keydown", this.handleKeyDown), document.addEventListener("paste", this.handlePaste);
|
|
429
824
|
}
|
|
@@ -432,29 +827,29 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
432
827
|
}
|
|
433
828
|
insertAtCursor(e, t) {
|
|
434
829
|
if (!this.bodyTextAreaRef.value) return;
|
|
435
|
-
const
|
|
436
|
-
if (!
|
|
437
|
-
const
|
|
830
|
+
const s = this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");
|
|
831
|
+
if (!s) return;
|
|
832
|
+
const i = s.selectionStart, a = s.selectionEnd, n = s.value.substring(0, i) + e + s.value.substring(a);
|
|
438
833
|
this.body = n, this.dispatchChange(), this.updateComplete.then(() => {
|
|
439
|
-
const
|
|
440
|
-
if (
|
|
441
|
-
const
|
|
442
|
-
|
|
443
|
-
} else
|
|
834
|
+
const r = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
835
|
+
if (r) if (r.focus(), t) {
|
|
836
|
+
const o = i + e.indexOf(t), l = o + t.length;
|
|
837
|
+
r.setSelectionRange(o, l);
|
|
838
|
+
} else r.setSelectionRange(i + e.length, i + e.length);
|
|
444
839
|
});
|
|
445
840
|
}
|
|
446
|
-
wrapSelection(e, t,
|
|
841
|
+
wrapSelection(e, t, s) {
|
|
447
842
|
if (!this.bodyTextAreaRef.value) return;
|
|
448
|
-
const
|
|
449
|
-
if (!
|
|
450
|
-
const a =
|
|
451
|
-
this.body =
|
|
452
|
-
const
|
|
453
|
-
|
|
843
|
+
const i = this.bodyTextAreaRef.value.shadowRoot?.querySelector("textarea");
|
|
844
|
+
if (!i) return;
|
|
845
|
+
const a = i.selectionStart, n = i.selectionEnd, r = i.value.substring(a, n), o = e + (r || s) + t, l = i.value.substring(0, a) + o + i.value.substring(n);
|
|
846
|
+
this.body = l, this.dispatchChange(), this.updateComplete.then(() => {
|
|
847
|
+
const p = this.bodyTextAreaRef.value?.shadowRoot?.querySelector("textarea");
|
|
848
|
+
p && (p.focus(), r ? p.setSelectionRange(a + o.length, a + o.length) : p.setSelectionRange(a + e.length, a + e.length + s.length));
|
|
454
849
|
});
|
|
455
850
|
}
|
|
456
851
|
render() {
|
|
457
|
-
return
|
|
852
|
+
return c`
|
|
458
853
|
<schmancy-surface
|
|
459
854
|
type="surface"
|
|
460
855
|
rounded="all"
|
|
@@ -465,44 +860,15 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
465
860
|
>
|
|
466
861
|
<div class="flex flex-col h-full gap-4">
|
|
467
862
|
|
|
468
|
-
<!-- Header Section with
|
|
863
|
+
<!-- Header Section with Subject -->
|
|
469
864
|
<div class="flex-shrink-0 p-4 pb-0 space-y-4">
|
|
470
|
-
<!-- Template Selector -->
|
|
471
|
-
${m(this.templates.length > 0, () => l`
|
|
472
|
-
<div class="space-y-3">
|
|
473
|
-
<schmancy-typography type="label" token="md">
|
|
474
|
-
Email Templates
|
|
475
|
-
</schmancy-typography>
|
|
476
|
-
<div class="flex flex-wrap gap-2">
|
|
477
|
-
${I(this.templates, (e) => e.id, (e) => l`
|
|
478
|
-
<schmancy-chip
|
|
479
|
-
?selected=${this.selectedTemplate === e.id}
|
|
480
|
-
@click=${() => this.selectTemplate(e.id)}
|
|
481
|
-
class="text-sm"
|
|
482
|
-
>
|
|
483
|
-
${e.name}
|
|
484
|
-
</schmancy-chip>
|
|
485
|
-
`)}
|
|
486
|
-
${m(this.selectedTemplate, () => l`
|
|
487
|
-
<schmancy-button
|
|
488
|
-
variant="text"
|
|
489
|
-
@click=${this.clearTemplate}
|
|
490
|
-
>
|
|
491
|
-
<schmancy-icon slot="prefix" size="16px">clear</schmancy-icon>
|
|
492
|
-
Clear
|
|
493
|
-
</schmancy-button>
|
|
494
|
-
`)}
|
|
495
|
-
</div>
|
|
496
|
-
</div>
|
|
497
|
-
`)}
|
|
498
|
-
|
|
499
865
|
<!-- Subject Field -->
|
|
500
866
|
<div class="space-y-2">
|
|
501
867
|
<schmancy-typography type="label" token="md">
|
|
502
868
|
Subject *
|
|
503
869
|
</schmancy-typography>
|
|
504
870
|
<schmancy-input
|
|
505
|
-
${
|
|
871
|
+
${E(this.subjectInputRef)}
|
|
506
872
|
.value=${this.subject}
|
|
507
873
|
@input=${this.handleSubjectChange}
|
|
508
874
|
placeholder="Enter email subject..."
|
|
@@ -588,7 +954,7 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
588
954
|
?disabled=${this.disabled || this.isUploading}
|
|
589
955
|
@click=${() => this.imageInputRef.value?.click()}
|
|
590
956
|
>
|
|
591
|
-
${
|
|
957
|
+
${d(this.isUploading, () => c`<schmancy-progress size="sm" class="w-4 h-4"></schmancy-progress>`, () => c`<schmancy-icon>image</schmancy-icon>`)}
|
|
592
958
|
</schmancy-icon-button>
|
|
593
959
|
<schmancy-icon-button
|
|
594
960
|
size="sm"
|
|
@@ -597,7 +963,16 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
597
963
|
?disabled=${this.disabled}
|
|
598
964
|
@click=${this.openLayoutDialog}
|
|
599
965
|
>
|
|
600
|
-
<schmancy-icon>
|
|
966
|
+
<schmancy-icon>mobile_layout</schmancy-icon>
|
|
967
|
+
</schmancy-icon-button>
|
|
968
|
+
<schmancy-icon-button
|
|
969
|
+
size="sm"
|
|
970
|
+
variant="text"
|
|
971
|
+
title="Use Template"
|
|
972
|
+
?disabled=${this.disabled || this.templates.length === 0}
|
|
973
|
+
@click=${this.openTemplatePicker}
|
|
974
|
+
>
|
|
975
|
+
<schmancy-icon>description</schmancy-icon>
|
|
601
976
|
</schmancy-icon-button>
|
|
602
977
|
</div>
|
|
603
978
|
</div>
|
|
@@ -607,7 +982,7 @@ Your primary content goes here. This area takes up most of the width while the s
|
|
|
607
982
|
<!-- Textarea Container - Takes remaining space -->
|
|
608
983
|
<div class="flex-1 px-4 relative min-h-0">
|
|
609
984
|
<schmancy-textarea
|
|
610
|
-
${
|
|
985
|
+
${E(this.bodyTextAreaRef)}
|
|
611
986
|
.value=${this.body}
|
|
612
987
|
@change=${this.handleBodyChange}
|
|
613
988
|
placeholder="Enter your email message here...
|
|
@@ -624,7 +999,7 @@ Tab key inserts 2 spaces for better formatting."
|
|
|
624
999
|
></schmancy-textarea>
|
|
625
1000
|
|
|
626
1001
|
<!-- Upload Progress Overlay -->
|
|
627
|
-
${
|
|
1002
|
+
${d(this.isUploading, () => c`
|
|
628
1003
|
<div class="absolute top-3 right-3 z-10">
|
|
629
1004
|
<schmancy-surface type="container" rounded="all" class="p-2">
|
|
630
1005
|
<div class="flex items-center gap-2">
|
|
@@ -646,14 +1021,14 @@ Tab key inserts 2 spaces for better formatting."
|
|
|
646
1021
|
</div>
|
|
647
1022
|
|
|
648
1023
|
<!-- Attachments Display (if any) -->
|
|
649
|
-
${
|
|
1024
|
+
${d(this.attachments.length > 0, () => c`
|
|
650
1025
|
<div class="space-y-2">
|
|
651
1026
|
<schmancy-typography type="label" token="sm" class="flex items-center gap-2">
|
|
652
1027
|
<schmancy-icon size="16px">attach_file</schmancy-icon>
|
|
653
1028
|
Attachments (${this.attachments.length})
|
|
654
1029
|
</schmancy-typography>
|
|
655
1030
|
<div class="flex flex-wrap gap-2">
|
|
656
|
-
${I(this.attachments, (e) => e.id, (e) =>
|
|
1031
|
+
${I(this.attachments, (e) => e.id, (e) => c`
|
|
657
1032
|
<schmancy-chip class="text-xs">
|
|
658
1033
|
<span class="truncate max-w-32">${e.name}</span>
|
|
659
1034
|
<button
|
|
@@ -673,13 +1048,13 @@ Tab key inserts 2 spaces for better formatting."
|
|
|
673
1048
|
<!-- Hidden File Inputs -->
|
|
674
1049
|
<div class="hidden">
|
|
675
1050
|
<input
|
|
676
|
-
${
|
|
1051
|
+
${E(this.fileInputRef)}
|
|
677
1052
|
type="file"
|
|
678
1053
|
multiple
|
|
679
1054
|
@change=${this.handleFileChange}
|
|
680
1055
|
>
|
|
681
1056
|
<input
|
|
682
|
-
${
|
|
1057
|
+
${E(this.imageInputRef)}
|
|
683
1058
|
type="file"
|
|
684
1059
|
accept="image/*"
|
|
685
1060
|
@change=${this.handleImageSelect}
|
|
@@ -688,15 +1063,16 @@ Tab key inserts 2 spaces for better formatting."
|
|
|
688
1063
|
|
|
689
1064
|
</div>
|
|
690
1065
|
</schmancy-surface>
|
|
1066
|
+
|
|
691
1067
|
`;
|
|
692
1068
|
}
|
|
693
1069
|
};
|
|
694
|
-
x([h({ type: String })], b.prototype, "subject", 2), x([h({ type: String })], b.prototype, "body", 2), x([h({ type:
|
|
695
|
-
var
|
|
696
|
-
for (var a, n =
|
|
697
|
-
return
|
|
1070
|
+
x([h({ type: String })], b.prototype, "subject", 2), x([h({ type: String })], b.prototype, "body", 2), x([h({ type: Boolean })], b.prototype, "disabled", 2), x([h({ type: Array })], b.prototype, "attachments", 2), x([h({ type: Object })], b.prototype, "config", 2), x([h({ type: Array })], b.prototype, "templates", 2), x([y()], b.prototype, "dragOver", 2), x([y()], b.prototype, "isUploading", 2), b = x([C("schmancy-email-editor")], b);
|
|
1071
|
+
var W = Object.defineProperty, N = Object.getOwnPropertyDescriptor, $ = (e, t, s, i) => {
|
|
1072
|
+
for (var a, n = i > 1 ? void 0 : i ? N(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = (i ? a(t, s, n) : a(n)) || n);
|
|
1073
|
+
return i && n && W(t, s, n), n;
|
|
698
1074
|
};
|
|
699
|
-
let
|
|
1075
|
+
let w = class extends A(D`
|
|
700
1076
|
:host {
|
|
701
1077
|
display: block;
|
|
702
1078
|
}
|
|
@@ -705,54 +1081,54 @@ let $ = class extends E(A`
|
|
|
705
1081
|
super(...arguments), this.subject = "", this.body = "", this.attachments = [], this.recipients = [], this.fromAddress = "sender@example.com", this.toAddress = "recipient@example.com", this.viewMode = "html";
|
|
706
1082
|
}
|
|
707
1083
|
parseLayoutBlocks(e) {
|
|
708
|
-
return e.replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g, (t,
|
|
709
|
-
switch (
|
|
1084
|
+
return e.replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g, (t, s, i) => {
|
|
1085
|
+
switch (s) {
|
|
710
1086
|
case "columns-2":
|
|
711
|
-
return this.parseColumnsLayout(
|
|
1087
|
+
return this.parseColumnsLayout(i, 2);
|
|
712
1088
|
case "columns-3":
|
|
713
|
-
return this.parseColumnsLayout(
|
|
1089
|
+
return this.parseColumnsLayout(i, 3);
|
|
714
1090
|
case "sidebar-left":
|
|
715
|
-
return this.parseSidebarLayout(
|
|
1091
|
+
return this.parseSidebarLayout(i, "left");
|
|
716
1092
|
case "sidebar-right":
|
|
717
|
-
return this.parseSidebarLayout(
|
|
1093
|
+
return this.parseSidebarLayout(i, "right");
|
|
718
1094
|
case "image-row":
|
|
719
|
-
return this.parseImageRowLayout(
|
|
1095
|
+
return this.parseImageRowLayout(i);
|
|
720
1096
|
default:
|
|
721
|
-
return
|
|
1097
|
+
return i;
|
|
722
1098
|
}
|
|
723
1099
|
});
|
|
724
1100
|
}
|
|
725
1101
|
parseColumnsLayout(e, t) {
|
|
726
|
-
const
|
|
1102
|
+
const s = /<div class="column">([\s\S]*?)<\/div>/g, i = [];
|
|
727
1103
|
let a;
|
|
728
|
-
for (; (a =
|
|
729
|
-
if (
|
|
730
|
-
const n = Math.floor(100 / t),
|
|
731
|
-
let
|
|
732
|
-
for (let
|
|
733
|
-
|
|
734
|
-
<td width="${n}%" style="padding: ${
|
|
735
|
-
${this.parseBasicMarkdown(
|
|
1104
|
+
for (; (a = s.exec(e)) !== null; ) i.push(a[1].trim());
|
|
1105
|
+
if (i.length === 0) return e;
|
|
1106
|
+
const n = Math.floor(100 / t), r = "0 10px 0 0";
|
|
1107
|
+
let o = "<tr>";
|
|
1108
|
+
for (let l = 0; l < t && l < i.length; l++)
|
|
1109
|
+
o += `
|
|
1110
|
+
<td width="${n}%" style="padding: ${l === t - 1 ? "0" : r}; vertical-align: top; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
|
|
1111
|
+
${this.parseBasicMarkdown(i[l])}
|
|
736
1112
|
</td>`;
|
|
737
|
-
for (let
|
|
738
|
-
|
|
739
|
-
<td width="${n}%" style="padding: ${
|
|
1113
|
+
for (let l = i.length; l < t; l++)
|
|
1114
|
+
o += `
|
|
1115
|
+
<td width="${n}%" style="padding: ${l === t - 1 ? "0" : r}; vertical-align: top;">
|
|
740
1116
|
|
|
741
1117
|
</td>`;
|
|
742
|
-
return
|
|
1118
|
+
return o += "</tr>", `
|
|
743
1119
|
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
|
|
744
|
-
${
|
|
1120
|
+
${o}
|
|
745
1121
|
</table>`;
|
|
746
1122
|
}
|
|
747
1123
|
parseSidebarLayout(e, t) {
|
|
748
|
-
const
|
|
749
|
-
if (!
|
|
1124
|
+
const s = e.match(/<div class="sidebar">([\s\S]*?)<\/div>/), i = e.match(/<div class="main">([\s\S]*?)<\/div>/);
|
|
1125
|
+
if (!s || !i) return e;
|
|
750
1126
|
const a = `
|
|
751
1127
|
<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;">
|
|
752
|
-
${this.parseBasicMarkdown(
|
|
1128
|
+
${this.parseBasicMarkdown(s[1].trim())}
|
|
753
1129
|
</td>`, n = `
|
|
754
1130
|
<td width="70%" style="padding: 0; vertical-align: top; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
|
|
755
|
-
${this.parseBasicMarkdown(
|
|
1131
|
+
${this.parseBasicMarkdown(i[1].trim())}
|
|
756
1132
|
</td>`;
|
|
757
1133
|
return `
|
|
758
1134
|
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
|
|
@@ -760,23 +1136,23 @@ let $ = class extends E(A`
|
|
|
760
1136
|
</table>`;
|
|
761
1137
|
}
|
|
762
1138
|
parseImageRowLayout(e) {
|
|
763
|
-
const t = /<div class="image">([\s\S]*?)<\/div>/g,
|
|
764
|
-
let
|
|
765
|
-
for (; (
|
|
766
|
-
const
|
|
767
|
-
if (
|
|
768
|
-
const [,
|
|
769
|
-
|
|
1139
|
+
const t = /<div class="image">([\s\S]*?)<\/div>/g, s = [];
|
|
1140
|
+
let i;
|
|
1141
|
+
for (; (i = t.exec(e)) !== null; ) {
|
|
1142
|
+
const r = i[1].trim().match(/!\[([^\]]*)\]\(([^)]+)\)/);
|
|
1143
|
+
if (r) {
|
|
1144
|
+
const [, o, l] = r;
|
|
1145
|
+
s.push(`<img src="${l}" alt="${o || "Image"}" style="display: block; max-width: 100%; height: auto;" border="0">`);
|
|
770
1146
|
}
|
|
771
1147
|
}
|
|
772
|
-
if (
|
|
773
|
-
const a = Math.floor(100 /
|
|
1148
|
+
if (s.length === 0) return e;
|
|
1149
|
+
const a = Math.floor(100 / s.length);
|
|
774
1150
|
let n = "<tr>";
|
|
775
|
-
return
|
|
776
|
-
const
|
|
1151
|
+
return s.forEach((r, o) => {
|
|
1152
|
+
const l = o === s.length - 1;
|
|
777
1153
|
n += `
|
|
778
|
-
<td width="${a}%" style="padding: ${
|
|
779
|
-
${
|
|
1154
|
+
<td width="${a}%" style="padding: ${l ? "0" : "0 8px 0 0"}; vertical-align: top; text-align: center;">
|
|
1155
|
+
${r}
|
|
780
1156
|
</td>`;
|
|
781
1157
|
}), n += "</tr>", `
|
|
782
1158
|
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 16px 0;">
|
|
@@ -786,34 +1162,34 @@ let $ = class extends E(A`
|
|
|
786
1162
|
parseImageAttributes(e) {
|
|
787
1163
|
const t = {};
|
|
788
1164
|
if (!e) return t;
|
|
789
|
-
const
|
|
790
|
-
|
|
791
|
-
const
|
|
792
|
-
return
|
|
1165
|
+
const s = e.match(/width=([^\s}]+)/);
|
|
1166
|
+
s && (t.width = s[1]);
|
|
1167
|
+
const i = e.match(/height=([^\s}]+)/);
|
|
1168
|
+
return i && (t.height = i[1]), e.includes("cover") && (t.cover = !0), e.includes("contain") && (t.contain = !0), t;
|
|
793
1169
|
}
|
|
794
1170
|
generateImageStyles(e, t = !1) {
|
|
795
|
-
let
|
|
796
|
-
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") && (
|
|
1171
|
+
let s, i, a = "display: block; margin: 8px 0; border: 0;";
|
|
1172
|
+
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") && (s = 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") && (i = e.height.replace("px", ""), e.width || (a += " max-width: 100%;"))), (e.cover || e.contain) && (e.width || e.height || (a += " width: 100%;")), { imgStyle: a, imgWidth: s, imgHeight: i };
|
|
797
1173
|
}
|
|
798
1174
|
parseBasicMarkdown(e) {
|
|
799
|
-
return e.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g, (t,
|
|
800
|
-
const n = this.parseImageAttributes(a), { imgStyle:
|
|
801
|
-
let
|
|
802
|
-
return
|
|
1175
|
+
return e.replace(/!\[([^\]]*)\]\(([^)]+)\)(?:\{([^}]+)\})?/g, (t, s, i, a) => {
|
|
1176
|
+
const n = this.parseImageAttributes(a), { imgStyle: r, imgWidth: o, imgHeight: l } = this.generateImageStyles(n, !0);
|
|
1177
|
+
let p = `<img src="${i}" alt="${s || "Image"}" style="${r}" border="0"`;
|
|
1178
|
+
return o && (p += ` width="${o}"`), l && (p += ` height="${l}"`), p += ">", p;
|
|
803
1179
|
}).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) => {
|
|
804
|
-
const
|
|
805
|
-
return `<${
|
|
1180
|
+
const s = /^\d+\./.test(t.replace(/<[^>]*>/g, "")) ? "ol" : "ul";
|
|
1181
|
+
return `<${s} style="margin: 8px 0; padding: 0 0 0 20px; font-family: Arial, Helvetica, sans-serif;">${t}</${s}>`;
|
|
806
1182
|
}).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>');
|
|
807
1183
|
}
|
|
808
1184
|
parseExtendedMarkdown(e) {
|
|
809
1185
|
let t = e;
|
|
810
|
-
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, (
|
|
811
|
-
const
|
|
812
|
-
let S = `<img src="${a}" alt="${
|
|
813
|
-
return
|
|
814
|
-
}), 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;"> </td></tr></table>'), t = t.replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs, (
|
|
815
|
-
const
|
|
816
|
-
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;">${
|
|
1186
|
+
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, (s, i, a, n) => {
|
|
1187
|
+
const r = this.parseImageAttributes(n), { imgStyle: o, imgWidth: l, imgHeight: p } = this.generateImageStyles(r, !1);
|
|
1188
|
+
let S = `<img src="${a}" alt="${i || "Image"}" style="${o}" border="0"`;
|
|
1189
|
+
return l && (S += ` width="${l}"`), p && (S += ` height="${p}"`), S += ">", `<table cellpadding="0" cellspacing="0" border="0" style="margin: 16px 0;"><tr><td>${S}</td></tr></table>`;
|
|
1190
|
+
}), 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;"> </td></tr></table>'), t = t.replace(/(<li[^>]*>.*?<\/li>(?:\s*<li[^>]*>.*?<\/li>)*)/gs, (s) => {
|
|
1191
|
+
const i = /^\d+\./.test(s.replace(/<[^>]*>/g, "")), a = i ? "ol" : "ul";
|
|
1192
|
+
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;">${s}</${a}></td></tr></table>`;
|
|
817
1193
|
}), 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;">
|
|
818
1194
|
<tr>
|
|
819
1195
|
<td style="padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.6; color: #333333;">
|
|
@@ -823,7 +1199,7 @@ let $ = class extends E(A`
|
|
|
823
1199
|
</table>`, t;
|
|
824
1200
|
}
|
|
825
1201
|
convertToPlainText(e) {
|
|
826
|
-
return e.trim().replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g, (t,
|
|
1202
|
+
return e.trim().replace(/:::layout\s+([a-zA-Z0-9-]+)\n([\s\S]*?)\n:::/g, (t, s, i) => i.replace(/<div class="(?:column|sidebar|main|image)">/g, `
|
|
827
1203
|
`).replace(/<\/div>/g, `
|
|
828
1204
|
`).replace(/\n{3,}/g, `
|
|
829
1205
|
|
|
@@ -837,8 +1213,8 @@ let $ = class extends E(A`
|
|
|
837
1213
|
return parseFloat((e / Math.pow(1024, t)).toFixed(2)) + " " + ["Bytes", "KB", "MB", "GB"][t];
|
|
838
1214
|
}
|
|
839
1215
|
render() {
|
|
840
|
-
const e = this.parseExtendedMarkdown(this.body), t = this.convertToPlainText(this.body),
|
|
841
|
-
return
|
|
1216
|
+
const e = this.parseExtendedMarkdown(this.body), t = this.convertToPlainText(this.body), s = this.recipients[0] || this.toAddress;
|
|
1217
|
+
return c`
|
|
842
1218
|
<schmancy-surface type="surface" rounded="all" class="h-full flex flex-col">
|
|
843
1219
|
|
|
844
1220
|
<!-- Header Section -->
|
|
@@ -912,7 +1288,7 @@ let $ = class extends E(A`
|
|
|
912
1288
|
</schmancy-typography>
|
|
913
1289
|
</div>
|
|
914
1290
|
<schmancy-typography type="body" token="sm" class="break-all flex-1">
|
|
915
|
-
${
|
|
1291
|
+
${s}
|
|
916
1292
|
</schmancy-typography>
|
|
917
1293
|
</div>
|
|
918
1294
|
|
|
@@ -925,7 +1301,7 @@ let $ = class extends E(A`
|
|
|
925
1301
|
</schmancy-typography>
|
|
926
1302
|
</div>
|
|
927
1303
|
<schmancy-typography type="body" token="sm" class="font-medium flex-1">
|
|
928
|
-
${this.subject ||
|
|
1304
|
+
${this.subject || c`<span class="italic text-surface-onVariant">(No subject)</span>`}
|
|
929
1305
|
</schmancy-typography>
|
|
930
1306
|
</div>
|
|
931
1307
|
</div>
|
|
@@ -933,17 +1309,17 @@ let $ = class extends E(A`
|
|
|
933
1309
|
|
|
934
1310
|
<!-- Email Body Content -->
|
|
935
1311
|
<div class="flex-1 overflow-y-auto min-h-0">
|
|
936
|
-
${
|
|
937
|
-
${
|
|
1312
|
+
${d(this.body, () => c`
|
|
1313
|
+
${d(this.viewMode === "html", () => c`
|
|
938
1314
|
<div class="p-6 bg-white" style="color: #333; line-height: 1.6; font-family: system-ui, -apple-system, sans-serif; font-size: 14px;">
|
|
939
1315
|
<div .innerHTML=${e}></div>
|
|
940
1316
|
</div>
|
|
941
|
-
`, () =>
|
|
1317
|
+
`, () => c`
|
|
942
1318
|
<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;">
|
|
943
1319
|
${t}
|
|
944
1320
|
</div>
|
|
945
1321
|
`)}
|
|
946
|
-
`, () =>
|
|
1322
|
+
`, () => c`
|
|
947
1323
|
<!-- Empty State -->
|
|
948
1324
|
<div class="flex-1 flex items-center justify-center p-8">
|
|
949
1325
|
<div class="text-center space-y-3">
|
|
@@ -960,7 +1336,7 @@ let $ = class extends E(A`
|
|
|
960
1336
|
</div>
|
|
961
1337
|
|
|
962
1338
|
<!-- Attachments Section -->
|
|
963
|
-
${
|
|
1339
|
+
${d(this.attachments.length > 0, () => c`
|
|
964
1340
|
<div class="flex-shrink-0 p-4 border-t border-outline-variant bg-surface-containerLowest">
|
|
965
1341
|
<div class="space-y-3">
|
|
966
1342
|
<!-- Attachments Header -->
|
|
@@ -973,21 +1349,21 @@ let $ = class extends E(A`
|
|
|
973
1349
|
|
|
974
1350
|
<!-- Attachments List -->
|
|
975
1351
|
<div class="grid gap-2 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2">
|
|
976
|
-
${I(this.attachments, (
|
|
1352
|
+
${I(this.attachments, (i) => i.id, (i) => c`
|
|
977
1353
|
<schmancy-surface type="container" rounded="all" class="p-3">
|
|
978
1354
|
<div class="flex items-center gap-3">
|
|
979
1355
|
<!-- File Icon -->
|
|
980
1356
|
<schmancy-icon size="20px" class="text-surface-onVariant flex-shrink-0">
|
|
981
|
-
${
|
|
1357
|
+
${i.type.startsWith("image/") ? "image" : i.type.includes("pdf") ? "picture_as_pdf" : i.type.includes("text") ? "description" : "attach_file"}
|
|
982
1358
|
</schmancy-icon>
|
|
983
1359
|
|
|
984
1360
|
<!-- File Info -->
|
|
985
1361
|
<div class="flex-1 min-w-0">
|
|
986
1362
|
<schmancy-typography type="body" token="sm" class="font-medium truncate">
|
|
987
|
-
${
|
|
1363
|
+
${i.name}
|
|
988
1364
|
</schmancy-typography>
|
|
989
1365
|
<schmancy-typography type="body" token="xs" class="text-surface-onVariant">
|
|
990
|
-
${this.formatFileSize(
|
|
1366
|
+
${this.formatFileSize(i.size)} • ${i.type}
|
|
991
1367
|
</schmancy-typography>
|
|
992
1368
|
</div>
|
|
993
1369
|
</div>
|
|
@@ -1001,7 +1377,7 @@ let $ = class extends E(A`
|
|
|
1001
1377
|
</div>
|
|
1002
1378
|
|
|
1003
1379
|
<!-- Preview Stats -->
|
|
1004
|
-
${
|
|
1380
|
+
${d(this.body, () => c`
|
|
1005
1381
|
<div class="flex-shrink-0">
|
|
1006
1382
|
<schmancy-surface type="container" rounded="all" class="p-3">
|
|
1007
1383
|
<div class="flex items-center justify-center gap-6 text-center">
|
|
@@ -1022,7 +1398,7 @@ let $ = class extends E(A`
|
|
|
1022
1398
|
${this.body.trim() ? this.body.trim().split(/\s+/).length : 0}
|
|
1023
1399
|
</schmancy-typography>
|
|
1024
1400
|
</div>
|
|
1025
|
-
${
|
|
1401
|
+
${d(this.attachments.length > 0, () => c`
|
|
1026
1402
|
<div class="w-px h-8 bg-outline-variant"></div>
|
|
1027
1403
|
<div>
|
|
1028
1404
|
<schmancy-typography type="body" token="xs" class="text-surface-onVariant">
|
|
@@ -1043,25 +1419,25 @@ let $ = class extends E(A`
|
|
|
1043
1419
|
`;
|
|
1044
1420
|
}
|
|
1045
1421
|
};
|
|
1046
|
-
|
|
1047
|
-
var
|
|
1048
|
-
for (var a, n =
|
|
1049
|
-
return
|
|
1422
|
+
$([h({ type: String })], w.prototype, "subject", 2), $([h({ type: String })], w.prototype, "body", 2), $([h({ type: Array })], w.prototype, "attachments", 2), $([h({ type: Array })], w.prototype, "recipients", 2), $([h({ type: String })], w.prototype, "fromAddress", 2), $([h({ type: String })], w.prototype, "toAddress", 2), $([y()], w.prototype, "viewMode", 2), w = $([C("schmancy-email-viewer")], w);
|
|
1423
|
+
var Q = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, f = (e, t, s, i) => {
|
|
1424
|
+
for (var a, n = i > 1 ? void 0 : i ? _(t, s) : t, r = e.length - 1; r >= 0; r--) (a = e[r]) && (n = (i ? a(t, s, n) : a(n)) || n);
|
|
1425
|
+
return i && n && Q(t, s, n), n;
|
|
1050
1426
|
};
|
|
1051
|
-
let g = class extends
|
|
1427
|
+
let g = class extends A(D`
|
|
1052
1428
|
:host {
|
|
1053
1429
|
display: block;
|
|
1054
1430
|
height: 100%;
|
|
1055
1431
|
}
|
|
1056
1432
|
`) {
|
|
1057
1433
|
constructor() {
|
|
1058
|
-
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 = /* @__PURE__ */ new Set(), this.searchQuery = "", this.filteredRecipients = [], this.boatState = "minimized", this.fileInputRef =
|
|
1434
|
+
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 = /* @__PURE__ */ new Set(), this.searchQuery = "", this.filteredRecipients = [], this.boatState = "minimized", this.fileInputRef = T(), this.handleEmailsImported = () => {
|
|
1059
1435
|
this.updateFilteredRecipients(), this.requestUpdate();
|
|
1060
1436
|
}, this.handleImportFromCSV = () => {
|
|
1061
1437
|
this.enableCsvImport && this.fileInputRef.value?.click();
|
|
1062
1438
|
}, this.handleFileSelect = (e) => {
|
|
1063
|
-
const t = e.target,
|
|
1064
|
-
|
|
1439
|
+
const t = e.target, s = t.files?.[0];
|
|
1440
|
+
s && this.processCSVFile(s);
|
|
1065
1441
|
}, this.handleDrop = (e) => {
|
|
1066
1442
|
if (!this.enableDragDrop) return;
|
|
1067
1443
|
e.preventDefault(), this.dragOver = !1;
|
|
@@ -1070,10 +1446,10 @@ let g = class extends E(A`
|
|
|
1070
1446
|
}, this.processCSVFile = (e) => {
|
|
1071
1447
|
if (!e.name.endsWith(".csv")) return void v.error("Please select a CSV file");
|
|
1072
1448
|
const t = new FileReader();
|
|
1073
|
-
t.onload = (
|
|
1074
|
-
const
|
|
1449
|
+
t.onload = (s) => {
|
|
1450
|
+
const i = s.target?.result;
|
|
1075
1451
|
try {
|
|
1076
|
-
const a = this.parseCSV(
|
|
1452
|
+
const a = this.parseCSV(i);
|
|
1077
1453
|
if (a.length === 0) return void v.error("No valid email addresses found in CSV");
|
|
1078
1454
|
this.dispatchEvent(new CustomEvent("emails-imported", { detail: { emails: a, source: "csv" }, bubbles: !0, composed: !0 })), v.success(`Imported ${a.length} emails from CSV file`);
|
|
1079
1455
|
} catch {
|
|
@@ -1094,7 +1470,7 @@ let g = class extends E(A`
|
|
|
1094
1470
|
const e = Array.isArray(this.recipients) ? this.recipients : [];
|
|
1095
1471
|
if (this.searchQuery.trim()) {
|
|
1096
1472
|
const t = this.searchQuery.toLowerCase();
|
|
1097
|
-
this.filteredRecipients = e.filter((
|
|
1473
|
+
this.filteredRecipients = e.filter((s) => s.toLowerCase().includes(t));
|
|
1098
1474
|
} else this.filteredRecipients = [...e];
|
|
1099
1475
|
}, this.handleSearchInput = (e) => {
|
|
1100
1476
|
const t = e.target;
|
|
@@ -1115,24 +1491,24 @@ let g = class extends E(A`
|
|
|
1115
1491
|
}
|
|
1116
1492
|
parseCSV(e) {
|
|
1117
1493
|
const t = [];
|
|
1118
|
-
let
|
|
1119
|
-
|
|
1120
|
-
const
|
|
1121
|
-
let n = a.find((
|
|
1122
|
-
if (!n) for (const
|
|
1123
|
-
const
|
|
1124
|
-
if (
|
|
1125
|
-
n =
|
|
1494
|
+
let s;
|
|
1495
|
+
s = this.csvParser ? this.csvParser.parse(e, { header: !0, skipEmptyLines: !0, dynamicTyping: !0, delimiter: "", transformHeader: (o) => o.trim() }) : this.simpleCSVParse(e);
|
|
1496
|
+
const i = s.data, a = s.meta.fields || [];
|
|
1497
|
+
let n = a.find((o) => o.toLowerCase().includes("email"));
|
|
1498
|
+
if (!n) for (const o of a) {
|
|
1499
|
+
const l = i[0]?.[o]?.toString();
|
|
1500
|
+
if (l && this.isValidEmail(l)) {
|
|
1501
|
+
n = o;
|
|
1126
1502
|
break;
|
|
1127
1503
|
}
|
|
1128
1504
|
}
|
|
1129
1505
|
if (!n) throw new Error("No email column found in CSV");
|
|
1130
|
-
const
|
|
1131
|
-
for (const
|
|
1132
|
-
const
|
|
1133
|
-
if (!
|
|
1134
|
-
const
|
|
1135
|
-
this.isValidEmail(
|
|
1506
|
+
const r = /* @__PURE__ */ new Set();
|
|
1507
|
+
for (const o of i) {
|
|
1508
|
+
const l = o[n]?.toString();
|
|
1509
|
+
if (!l) continue;
|
|
1510
|
+
const p = l.toLowerCase().trim();
|
|
1511
|
+
this.isValidEmail(p) && !r.has(p) && (r.add(p), t.push(p));
|
|
1136
1512
|
}
|
|
1137
1513
|
return t;
|
|
1138
1514
|
}
|
|
@@ -1140,22 +1516,22 @@ let g = class extends E(A`
|
|
|
1140
1516
|
const t = e.split(`
|
|
1141
1517
|
`).filter((a) => a.trim());
|
|
1142
1518
|
if (t.length === 0) return { data: [], meta: {} };
|
|
1143
|
-
const
|
|
1519
|
+
const s = t[0].split(",").map((a) => a.trim().replace(/"/g, "")), i = [];
|
|
1144
1520
|
for (let a = 1; a < t.length; a++) {
|
|
1145
|
-
const n = t[a].split(",").map((
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
}),
|
|
1521
|
+
const n = t[a].split(",").map((o) => o.trim().replace(/"/g, "")), r = {};
|
|
1522
|
+
s.forEach((o, l) => {
|
|
1523
|
+
r[o] = n[l] || "";
|
|
1524
|
+
}), i.push(r);
|
|
1149
1525
|
}
|
|
1150
|
-
return { data:
|
|
1526
|
+
return { data: i, meta: { fields: s } };
|
|
1151
1527
|
}
|
|
1152
1528
|
isValidEmail(e) {
|
|
1153
1529
|
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.trim());
|
|
1154
1530
|
}
|
|
1155
1531
|
addRecipients(e) {
|
|
1156
1532
|
if (!e.length) return;
|
|
1157
|
-
const t = [.../* @__PURE__ */ new Set([...this.recipients, ...e])],
|
|
1158
|
-
this.recipients = t, this.selectedRecipients = [.../* @__PURE__ */ new Set([...this.selectedRecipients, ...
|
|
1533
|
+
const t = [.../* @__PURE__ */ new Set([...this.recipients, ...e])], s = e.filter((i) => !this.recipients.includes(i));
|
|
1534
|
+
this.recipients = t, this.selectedRecipients = [.../* @__PURE__ */ new Set([...this.selectedRecipients, ...s])], this.localSelectedRecipients = new Set(this.selectedRecipients), this.updateFilteredRecipients(), this.requestUpdate();
|
|
1159
1535
|
}
|
|
1160
1536
|
showBoat() {
|
|
1161
1537
|
this.boatState = "minimized";
|
|
@@ -1173,13 +1549,13 @@ let g = class extends E(A`
|
|
|
1173
1549
|
return this.renderBoatLayout();
|
|
1174
1550
|
}
|
|
1175
1551
|
renderBoatLayout() {
|
|
1176
|
-
return
|
|
1552
|
+
return c`
|
|
1177
1553
|
<!-- Hidden file input for CSV import -->
|
|
1178
|
-
${
|
|
1554
|
+
${d(this.enableCsvImport, () => c`
|
|
1179
1555
|
<input
|
|
1180
1556
|
type="file"
|
|
1181
1557
|
accept=".csv"
|
|
1182
|
-
${
|
|
1558
|
+
${E(this.fileInputRef)}
|
|
1183
1559
|
@change=${this.handleFileSelect}
|
|
1184
1560
|
class="hidden"
|
|
1185
1561
|
/>
|
|
@@ -1196,7 +1572,7 @@ let g = class extends E(A`
|
|
|
1196
1572
|
<schmancy-typography type="title" token="md" class="font-semibold">
|
|
1197
1573
|
${this.title}
|
|
1198
1574
|
</schmancy-typography>
|
|
1199
|
-
${
|
|
1575
|
+
${d(this.recipients.length > 0, () => c`
|
|
1200
1576
|
<schmancy-badge>
|
|
1201
1577
|
${this.localSelectedRecipients.size}/${this.recipients.length}
|
|
1202
1578
|
</schmancy-badge>
|
|
@@ -1212,7 +1588,7 @@ let g = class extends E(A`
|
|
|
1212
1588
|
`;
|
|
1213
1589
|
}
|
|
1214
1590
|
renderBoatContent() {
|
|
1215
|
-
return
|
|
1591
|
+
return c`
|
|
1216
1592
|
<!-- Search Bar and CSV Import on one line -->
|
|
1217
1593
|
<div class="p-4 flex gap-3">
|
|
1218
1594
|
<schmancy-input
|
|
@@ -1222,7 +1598,7 @@ let g = class extends E(A`
|
|
|
1222
1598
|
@input=${this.handleSearchInput}
|
|
1223
1599
|
class="flex-1"
|
|
1224
1600
|
>
|
|
1225
|
-
${
|
|
1601
|
+
${d(this.searchQuery, () => c`
|
|
1226
1602
|
<schmancy-button
|
|
1227
1603
|
slot="suffix"
|
|
1228
1604
|
variant="text"
|
|
@@ -1233,7 +1609,7 @@ let g = class extends E(A`
|
|
|
1233
1609
|
`)}
|
|
1234
1610
|
</schmancy-input>
|
|
1235
1611
|
|
|
1236
|
-
${
|
|
1612
|
+
${d(this.enableCsvImport, () => c`
|
|
1237
1613
|
<schmancy-button
|
|
1238
1614
|
variant="outlined"
|
|
1239
1615
|
@click=${this.handleImportFromCSV}
|
|
@@ -1245,7 +1621,7 @@ let g = class extends E(A`
|
|
|
1245
1621
|
`)}
|
|
1246
1622
|
</div>
|
|
1247
1623
|
|
|
1248
|
-
${
|
|
1624
|
+
${d(this.recipients.length > 0, () => c`
|
|
1249
1625
|
<!-- Bulk Actions -->
|
|
1250
1626
|
<div class="px-4 pb-4">
|
|
1251
1627
|
<div class="flex items-center gap-3">
|
|
@@ -1278,9 +1654,9 @@ let g = class extends E(A`
|
|
|
1278
1654
|
|
|
1279
1655
|
<!-- Recipients List -->
|
|
1280
1656
|
<div class="flex-1 overflow-y-auto px-4 pb-4">
|
|
1281
|
-
${
|
|
1657
|
+
${d(this.filteredRecipients.length > 0, () => c`
|
|
1282
1658
|
<div class="flex flex-wrap gap-3">
|
|
1283
|
-
${I(this.filteredRecipients, (e) => e, (e) =>
|
|
1659
|
+
${I(this.filteredRecipients, (e) => e, (e) => c`
|
|
1284
1660
|
<schmancy-button
|
|
1285
1661
|
variant=${this.localSelectedRecipients.has(e) ? "filled" : "outlined"}
|
|
1286
1662
|
@click=${(t) => {
|
|
@@ -1299,7 +1675,7 @@ let g = class extends E(A`
|
|
|
1299
1675
|
</schmancy-button>
|
|
1300
1676
|
`)}
|
|
1301
1677
|
</div>
|
|
1302
|
-
`, () =>
|
|
1678
|
+
`, () => c`
|
|
1303
1679
|
<div class="text-center py-8">
|
|
1304
1680
|
<schmancy-icon size="32px" class="opacity-50 mb-2">search_off</schmancy-icon>
|
|
1305
1681
|
<schmancy-typography type="body" token="sm" class="mb-2">
|
|
@@ -1311,7 +1687,7 @@ let g = class extends E(A`
|
|
|
1311
1687
|
</div>
|
|
1312
1688
|
`)}
|
|
1313
1689
|
</div>
|
|
1314
|
-
`, () =>
|
|
1690
|
+
`, () => c`
|
|
1315
1691
|
<!-- Empty State -->
|
|
1316
1692
|
<div class="flex-1 flex items-center justify-center p-8">
|
|
1317
1693
|
<div class="text-center space-y-4">
|
|
@@ -1327,7 +1703,7 @@ let g = class extends E(A`
|
|
|
1327
1703
|
`)}
|
|
1328
1704
|
|
|
1329
1705
|
<!-- Drag Overlay -->
|
|
1330
|
-
${
|
|
1706
|
+
${d(this.dragOver && this.enableDragDrop, () => c`
|
|
1331
1707
|
<div
|
|
1332
1708
|
class="absolute inset-4 flex items-center justify-center border-2 border-dashed border-primary rounded-lg z-10"
|
|
1333
1709
|
@dragover=${(e) => {
|
|
@@ -1347,12 +1723,12 @@ let g = class extends E(A`
|
|
|
1347
1723
|
`;
|
|
1348
1724
|
}
|
|
1349
1725
|
};
|
|
1350
|
-
f([h({ type: Boolean })], g.prototype, "disabled", 2), f([h({ type: Array })], g.prototype, "recipients", 2), f([h({ type: Array })], g.prototype, "selectedRecipients", 2), f([h({ type: Boolean })], g.prototype, "enableCsvImport", 2), f([h({ type: Boolean })], g.prototype, "enableDragDrop", 2), f([h({ type: String })], g.prototype, "title", 2), f([h({ type: String })], g.prototype, "emptyStateTitle", 2), f([h({ type: String })], g.prototype, "emptyStateMessage", 2), f([h({ type: Object })], g.prototype, "csvParser", 2), f([
|
|
1726
|
+
f([h({ type: Boolean })], g.prototype, "disabled", 2), f([h({ type: Array })], g.prototype, "recipients", 2), f([h({ type: Array })], g.prototype, "selectedRecipients", 2), f([h({ type: Boolean })], g.prototype, "enableCsvImport", 2), f([h({ type: Boolean })], g.prototype, "enableDragDrop", 2), f([h({ type: String })], g.prototype, "title", 2), f([h({ type: String })], g.prototype, "emptyStateTitle", 2), f([h({ type: String })], g.prototype, "emptyStateMessage", 2), f([h({ type: Object })], g.prototype, "csvParser", 2), f([y()], g.prototype, "dragOver", 2), f([y()], g.prototype, "localSelectedRecipients", 2), f([y()], g.prototype, "searchQuery", 2), f([y()], g.prototype, "filteredRecipients", 2), f([y()], g.prototype, "boatState", 2), g = f([C("schmancy-email-recipients")], g);
|
|
1351
1727
|
export {
|
|
1352
|
-
|
|
1728
|
+
m as S,
|
|
1353
1729
|
b as a,
|
|
1354
|
-
|
|
1730
|
+
w as b,
|
|
1355
1731
|
g as c,
|
|
1356
1732
|
z as d
|
|
1357
1733
|
};
|
|
1358
|
-
//# sourceMappingURL=email-recipients-
|
|
1734
|
+
//# sourceMappingURL=email-recipients-CpghUhQ1.js.map
|