@mhmo91/schmancy 0.4.67 → 0.4.69
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/ai/textarea.md +128 -43
- package/dist/ai/textarea.md +128 -43
- package/dist/{animated-text-Bgciqenw.cjs → animated-text-Bm1G50ol.cjs} +2 -2
- package/dist/{animated-text-Bgciqenw.cjs.map → animated-text-Bm1G50ol.cjs.map} +1 -1
- package/dist/{animated-text-BnE_bSQh.js → animated-text-DhaihRNU.js} +3 -3
- package/dist/{animated-text-BnE_bSQh.js.map → animated-text-DhaihRNU.js.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-4Xj6grAn.js → area.component-Cybfl9fo.js} +10 -10
- package/dist/{area.component-4Xj6grAn.js.map → area.component-Cybfl9fo.js.map} +1 -1
- package/dist/{area.component-jRAVAvAI.cjs → area.component-e7ccHmOi.cjs} +2 -2
- package/dist/{area.component-jRAVAvAI.cjs.map → area.component-e7ccHmOi.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CdizrMKV.js → autocomplete-CHPr_eII.js} +3 -3
- package/dist/{autocomplete-CdizrMKV.js.map → autocomplete-CHPr_eII.js.map} +1 -1
- package/dist/{autocomplete-G8K-mb5t.cjs → autocomplete-DhRURo6G.cjs} +2 -2
- package/dist/{autocomplete-G8K-mb5t.cjs.map → autocomplete-DhRURo6G.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-BSGuwqy5.js → avatar-B3rxuPbq.js} +62 -61
- package/dist/{avatar-BSGuwqy5.js.map → avatar-B3rxuPbq.js.map} +1 -1
- package/dist/{avatar-DdQOlXAG.cjs → avatar-BREyQJqy.cjs} +2 -2
- package/dist/{avatar-DdQOlXAG.cjs.map → avatar-BREyQJqy.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-rC0ERLqn.js → boat-Ch2Dn8n_.js} +2 -2
- package/dist/{boat-rC0ERLqn.js.map → boat-Ch2Dn8n_.js.map} +1 -1
- package/dist/{boat-CA8Wc6Hd.cjs → boat-IQenN8zy.cjs} +2 -2
- package/dist/{boat-CA8Wc6Hd.cjs.map → boat-IQenN8zy.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-xHdrDdwF.js → checkbox-DTtOgNWH.js} +2 -2
- package/dist/{checkbox-xHdrDdwF.js.map → checkbox-DTtOgNWH.js.map} +1 -1
- package/dist/{checkbox-DeYOFxaq.cjs → checkbox-EV_8e4Q9.cjs} +2 -2
- package/dist/{checkbox-DeYOFxaq.cjs.map → checkbox-EV_8e4Q9.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DuCD124M.cjs → chips-D9bYHkvu.cjs} +2 -2
- package/dist/{chips-DuCD124M.cjs.map → chips-D9bYHkvu.cjs.map} +1 -1
- package/dist/{chips-Cd1wXy3x.js → chips-xlNsY8Dl.js} +3 -3
- package/dist/{chips-Cd1wXy3x.js.map → chips-xlNsY8Dl.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-C2z91M9H.cjs → code-preview-CC_QZwlB.cjs} +2 -2
- package/dist/{code-preview-C2z91M9H.cjs.map → code-preview-CC_QZwlB.cjs.map} +1 -1
- package/dist/{code-preview-BjdXVACE.js → code-preview-Dy4fNmOI.js} +2 -2
- package/dist/{code-preview-BjdXVACE.js.map → code-preview-Dy4fNmOI.js.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-BS3TwBp1.js → date-range-CEhn7Gvg.js} +4 -4
- package/dist/{date-range-BS3TwBp1.js.map → date-range-CEhn7Gvg.js.map} +1 -1
- package/dist/{date-range-BfIiLrUu.cjs → date-range-XTs2K2Rp.cjs} +2 -2
- package/dist/{date-range-BfIiLrUu.cjs.map → date-range-XTs2K2Rp.cjs.map} +1 -1
- package/dist/{date-range-inline-BEfwxm4K.cjs → date-range-inline-BW6v6aDq.cjs} +2 -2
- package/dist/{date-range-inline-BEfwxm4K.cjs.map → date-range-inline-BW6v6aDq.cjs.map} +1 -1
- package/dist/{date-range-inline-zda6EO9f.js → date-range-inline-D-F8YwDL.js} +3 -3
- package/dist/{date-range-inline-zda6EO9f.js.map → date-range-inline-D-F8YwDL.js.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-BJ-Ce2HT.cjs → delay-BYwpzSYY.cjs} +2 -2
- package/dist/{delay-BJ-Ce2HT.cjs.map → delay-BYwpzSYY.cjs.map} +1 -1
- package/dist/{delay-5re8EU0Q.js → delay-CqcMq7V3.js} +12 -12
- package/dist/{delay-5re8EU0Q.js.map → delay-CqcMq7V3.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-BeuCI3Tb.cjs → details-C9Vr2c8F.cjs} +2 -2
- package/dist/{details-BeuCI3Tb.cjs.map → details-C9Vr2c8F.cjs.map} +1 -1
- package/dist/{details-BBYG4_kG.js → details-gxjy3noS.js} +2 -2
- package/dist/{details-BBYG4_kG.js.map → details-gxjy3noS.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-BHrlCw_t.js → dialog-content-CJ21oAff.js} +4 -4
- package/dist/{dialog-content-BHrlCw_t.js.map → dialog-content-CJ21oAff.js.map} +1 -1
- package/dist/{dialog-content-BYpfUBG3.cjs → dialog-content-DfXB0r6A.cjs} +2 -2
- package/dist/{dialog-content-BYpfUBG3.cjs.map → dialog-content-DfXB0r6A.cjs.map} +1 -1
- package/dist/dialog-service-ClZa-7cE.cjs +2 -0
- package/dist/dialog-service-ClZa-7cE.cjs.map +1 -0
- package/dist/dialog-service-Dwnyl4Gg.js +141 -0
- package/dist/dialog-service-Dwnyl4Gg.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -2
- package/dist/{divider-B0LQxG1L.js → divider-Dw3OYKoH.js} +3 -3
- package/dist/{divider-B0LQxG1L.js.map → divider-Dw3OYKoH.js.map} +1 -1
- package/dist/{divider-Qgqzg8Od.cjs → divider-ZX6UG8fE.cjs} +2 -2
- package/dist/{divider-Qgqzg8Od.cjs.map → divider-ZX6UG8fE.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-Bh7Uek2_.js → dropdown-content-QWlP1OxV.js} +3 -3
- package/dist/{dropdown-content-Bh7Uek2_.js.map → dropdown-content-QWlP1OxV.js.map} +1 -1
- package/dist/{dropdown-content-B0T9NcP0.cjs → dropdown-content-ULdb1NeW.cjs} +2 -2
- package/dist/{dropdown-content-B0T9NcP0.cjs.map → dropdown-content-ULdb1NeW.cjs.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/email-recipients-DQ36ickQ.js +1358 -0
- package/dist/email-recipients-DQ36ickQ.js.map +1 -0
- package/dist/email-recipients-H9HVkFvE.cjs +851 -0
- package/dist/email-recipients-H9HVkFvE.cjs.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-wnw8ri9G.js → flex-Cam0G_h7.js} +2 -2
- package/dist/{flex-wnw8ri9G.js.map → flex-Cam0G_h7.js.map} +1 -1
- package/dist/{flex-Cciddlkr.cjs → flex-DEiJ9fDk.cjs} +2 -2
- package/dist/{flex-Cciddlkr.cjs.map → flex-DEiJ9fDk.cjs.map} +1 -1
- package/dist/{form-LhR76UQp.cjs → form-B87v130C.cjs} +2 -2
- package/dist/{form-LhR76UQp.cjs.map → form-B87v130C.cjs.map} +1 -1
- package/dist/{form-Cd1Z72nI.js → form-EPO5N6pI.js} +2 -2
- package/dist/{form-Cd1Z72nI.js.map → form-EPO5N6pI.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-D67_ge3i.js → formField.mixin-B6XjIwKN.js} +2 -2
- package/dist/{formField.mixin-D67_ge3i.js.map → formField.mixin-B6XjIwKN.js.map} +1 -1
- package/dist/{formField.mixin-Dbrz3WX3.cjs → formField.mixin-Dpx2Zk8-.cjs} +2 -2
- package/dist/{formField.mixin-Dbrz3WX3.cjs.map → formField.mixin-Dpx2Zk8-.cjs.map} +1 -1
- package/dist/{icon--ULeGfN_.js → icon-C6CXTo3Z.js} +2 -2
- package/dist/{icon--ULeGfN_.js.map → icon-C6CXTo3Z.js.map} +1 -1
- package/dist/{icon-CZ3mMGdX.cjs → icon-MrlToWLJ.cjs} +2 -2
- package/dist/{icon-CZ3mMGdX.cjs.map → icon-MrlToWLJ.cjs.map} +1 -1
- package/dist/{icon-button-BXMUskpY.cjs → icon-button-BwAStx3H.cjs} +2 -2
- package/dist/{icon-button-BXMUskpY.cjs.map → icon-button-BwAStx3H.cjs.map} +1 -1
- package/dist/{icon-button-PxCZVq78.js → icon-button-Csj8jwj8.js} +3 -3
- package/dist/{icon-button-PxCZVq78.js.map → icon-button-Csj8jwj8.js.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 +171 -165
- package/dist/index.js.map +1 -1
- package/dist/{input-D3cF4qal.js → input-B9PDbNB9.js} +3 -3
- package/dist/{input-D3cF4qal.js.map → input-B9PDbNB9.js.map} +1 -1
- package/dist/{input-DxUZYu34.cjs → input-D4L413yG.cjs} +2 -2
- package/dist/{input-DxUZYu34.cjs.map → input-D4L413yG.cjs.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-BiiXBLxU.js → list-Cdd7ht2E.js} +2 -2
- package/dist/{list-BiiXBLxU.js.map → list-Cdd7ht2E.js.map} +1 -1
- package/dist/{list-nLrSaYiQ.cjs → list-DLUbjS69.cjs} +2 -2
- package/dist/{list-nLrSaYiQ.cjs.map → list-DLUbjS69.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-C7_rhUMZ.js → litElement.mixin-BYVS1wwl.js} +2 -2
- package/dist/{litElement.mixin-C7_rhUMZ.js.map → litElement.mixin-BYVS1wwl.js.map} +1 -1
- package/dist/{litElement.mixin-PLxdthiY.cjs → litElement.mixin-CbFQ2uxn.cjs} +2 -2
- package/dist/{litElement.mixin-PLxdthiY.cjs.map → litElement.mixin-CbFQ2uxn.cjs.map} +1 -1
- package/dist/mailbox.cjs +2 -0
- package/dist/mailbox.cjs.map +1 -0
- package/dist/mailbox.js +9 -0
- package/dist/mailbox.js.map +1 -0
- package/dist/{map-2DO-_UXg.js → map-DmjQ1Izx.js} +2 -2
- package/dist/{map-2DO-_UXg.js.map → map-DmjQ1Izx.js.map} +1 -1
- package/dist/{map-D_75VnFg.cjs → map-DxUajvGo.cjs} +2 -2
- package/dist/{map-D_75VnFg.cjs.map → map-DxUajvGo.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-CdRUD9xD.cjs → media-DCIVM-cE.cjs} +2 -2
- package/dist/{media-CdRUD9xD.cjs.map → media-DCIVM-cE.cjs.map} +1 -1
- package/dist/{media-D1TDtKlB.js → media-DPurU9FS.js} +2 -2
- package/dist/{media-D1TDtKlB.js.map → media-DPurU9FS.js.map} +1 -1
- package/dist/{menu-9xXJweN3.cjs → menu-CIObvZ7n.cjs} +2 -2
- package/dist/{menu-9xXJweN3.cjs.map → menu-CIObvZ7n.cjs.map} +1 -1
- package/dist/{menu-B06dErqi.js → menu-CwRGjbC-.js} +3 -3
- package/dist/{menu-B06dErqi.js.map → menu-CwRGjbC-.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/netlify.toml +366 -0
- package/dist/{notification-service-DklXKZwa.cjs → notification-service-BMnjQVrQ.cjs} +2 -2
- package/dist/{notification-service-DklXKZwa.cjs.map → notification-service-BMnjQVrQ.cjs.map} +1 -1
- package/dist/{notification-service-BfUKN9-l.js → notification-service-DypTYarw.js} +4 -4
- package/dist/{notification-service-BfUKN9-l.js.map → notification-service-DypTYarw.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-D2k-BxXf.cjs → notify-CqCSy8Ek.cjs} +2 -2
- package/dist/{notify-D2k-BxXf.cjs.map → notify-CqCSy8Ek.cjs.map} +1 -1
- package/dist/{notify-BMbySVQI.js → notify-DUMaApt7.js} +2 -2
- package/dist/{notify-BMbySVQI.js.map → notify-DUMaApt7.js.map} +1 -1
- package/dist/{option-CXQpOQBl.cjs → option-BuN5MSy7.cjs} +2 -2
- package/dist/{option-CXQpOQBl.cjs.map → option-BuN5MSy7.cjs.map} +1 -1
- package/dist/{option-BS4qufvu.js → option-CvjLp3CB.js} +2 -2
- package/dist/{option-BS4qufvu.js.map → option-CvjLp3CB.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-CYT-w3-T.cjs → payment-card-form-C9VN_H07.cjs} +2 -2
- package/dist/{payment-card-form-CYT-w3-T.cjs.map → payment-card-form-C9VN_H07.cjs.map} +1 -1
- package/dist/{payment-card-form-Dj2YF8_1.js → payment-card-form-CFDdmSH2.js} +3 -3
- package/dist/{payment-card-form-Dj2YF8_1.js.map → payment-card-form-CFDdmSH2.js.map} +1 -1
- package/dist/{progress-J9tCvn5j.js → progress-BeOOCcPN.js} +2 -2
- package/dist/{progress-J9tCvn5j.js.map → progress-BeOOCcPN.js.map} +1 -1
- package/dist/{progress-DfFxDR56.cjs → progress-C-6ieScw.cjs} +2 -2
- package/dist/{progress-DfFxDR56.cjs.map → progress-C-6ieScw.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-CKUtPC82.cjs → radio-button-Bi4ywYhW.cjs} +2 -2
- package/dist/{radio-button-CKUtPC82.cjs.map → radio-button-Bi4ywYhW.cjs.map} +1 -1
- package/dist/{radio-button-BxGi5VfV.js → radio-button-D6zvMVQb.js} +3 -3
- package/dist/{radio-button-BxGi5VfV.js.map → radio-button-D6zvMVQb.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-BFeVc0lq.js → schmancy-steps-container-CfDatUf8.js} +2 -2
- package/dist/{schmancy-steps-container-BFeVc0lq.js.map → schmancy-steps-container-CfDatUf8.js.map} +1 -1
- package/dist/{schmancy-steps-container-DoN92rxe.cjs → schmancy-steps-container-i8rqaPet.cjs} +2 -2
- package/dist/{schmancy-steps-container-DoN92rxe.cjs.map → schmancy-steps-container-i8rqaPet.cjs.map} +1 -1
- package/dist/{select-C426DSrs.cjs → select-BPkJhj-o.cjs} +2 -2
- package/dist/{select-C426DSrs.cjs.map → select-BPkJhj-o.cjs.map} +1 -1
- package/dist/{select-BWQJus8Q.js → select-X7b74OI8.js} +3 -3
- package/dist/{select-BWQJus8Q.js.map → select-X7b74OI8.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-4oJm8fkG.cjs → sheet-BBT4JQ3Z.cjs} +2 -2
- package/dist/{sheet-4oJm8fkG.cjs.map → sheet-BBT4JQ3Z.cjs.map} +1 -1
- package/dist/{sheet-CD8QHsiF.js → sheet-DvCIJGFo.js} +4 -4
- package/dist/{sheet-CD8QHsiF.js.map → sheet-DvCIJGFo.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-Dexp5Nxu.cjs → slider-DWO4L_qC.cjs} +2 -2
- package/dist/{slider-Dexp5Nxu.cjs.map → slider-DWO4L_qC.cjs.map} +1 -1
- package/dist/{slider-Cfy-71n8.js → slider-py-bz6Vv.js} +3 -3
- package/dist/{slider-Cfy-71n8.js.map → slider-py-bz6Vv.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-CFBJounC.js → spinner-DpmMO5_E.js} +2 -2
- package/dist/{spinner-CFBJounC.js.map → spinner-DpmMO5_E.js.map} +1 -1
- package/dist/{spinner-Cj8PYiDt.cjs → spinner-Dv1WJaIf.cjs} +2 -2
- package/dist/{spinner-Cj8PYiDt.cjs.map → spinner-Dv1WJaIf.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-DfnuU19H.cjs → surface-Bn4-n1lT.cjs} +2 -2
- package/dist/{surface-DfnuU19H.cjs.map → surface-Bn4-n1lT.cjs.map} +1 -1
- package/dist/{surface-CwbyjcPh.js → surface-CFNIITaq.js} +2 -2
- package/dist/{surface-CwbyjcPh.js.map → surface-CFNIITaq.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-Bs4s_UXJ.cjs → table-A_oEWQzm.cjs} +2 -2
- package/dist/{table-Bs4s_UXJ.cjs.map → table-A_oEWQzm.cjs.map} +1 -1
- package/dist/{table-DKcZiidt.js → table-DNUpAcQk.js} +2 -2
- package/dist/{table-DKcZiidt.js.map → table-DNUpAcQk.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-CGLNEqTc.js → tabs-compatibility-Bxoz71f7.js} +2 -2
- package/dist/{tabs-compatibility-CGLNEqTc.js.map → tabs-compatibility-Bxoz71f7.js.map} +1 -1
- package/dist/{tabs-compatibility-BNmTv9gA.cjs → tabs-compatibility-DNVqDoQh.cjs} +2 -2
- package/dist/{tabs-compatibility-BNmTv9gA.cjs.map → tabs-compatibility-DNVqDoQh.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BU9fMdfc.cjs +2 -0
- package/dist/{tailwind.mixin-8-I14rPu.cjs.map → tailwind.mixin-BU9fMdfc.cjs.map} +1 -1
- package/dist/tailwind.mixin-Bpgmqass.js +43 -0
- package/dist/{tailwind.mixin-Bvelb8bX.js.map → tailwind.mixin-Bpgmqass.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/textarea-BE5TqYmx.js +131 -0
- package/dist/textarea-BE5TqYmx.js.map +1 -0
- package/dist/textarea-DTlpsJ-V.cjs +44 -0
- package/dist/textarea-DTlpsJ-V.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-C0HcsMoz.js → theme-button-BsojGTM7.js} +2 -2
- package/dist/{theme-button-C0HcsMoz.js.map → theme-button-BsojGTM7.js.map} +1 -1
- package/dist/{theme-button-BVdmrvuO.cjs → theme-button-DG8sPYM-.cjs} +2 -2
- package/dist/{theme-button-BVdmrvuO.cjs.map → theme-button-DG8sPYM-.cjs.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-C5vE2dqN.js → theme.component-BG4oCMuV.js} +4 -4
- package/dist/{theme.component-C5vE2dqN.js.map → theme.component-BG4oCMuV.js.map} +1 -1
- package/dist/{theme.component-B70iwARu.cjs → theme.component-D7TpDD6q.cjs} +3 -3
- package/dist/{theme.component-B70iwARu.cjs.map → theme.component-D7TpDD6q.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-B-nHxpsM.js → timezone-DtsS7reI.js} +3 -3
- package/dist/{timezone-B-nHxpsM.js.map → timezone-DtsS7reI.js.map} +1 -1
- package/dist/{timezone-C9aeURj9.cjs → timezone-dc6VVlU0.cjs} +2 -2
- package/dist/{timezone-C9aeURj9.cjs.map → timezone-dc6VVlU0.cjs.map} +1 -1
- package/dist/{tooltip-DGcANl1x.js → tooltip-C5C8KN_9.js} +2 -2
- package/dist/{tooltip-DGcANl1x.js.map → tooltip-C5C8KN_9.js.map} +1 -1
- package/dist/{tooltip-DLT2gEm_.cjs → tooltip-CA2yHZN6.cjs} +2 -2
- package/dist/{tooltip-DLT2gEm_.cjs.map → tooltip-CA2yHZN6.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-OqQirABn.cjs → tree-D7CAcAHa.cjs} +2 -2
- package/dist/{tree-OqQirABn.cjs.map → tree-D7CAcAHa.cjs.map} +1 -1
- package/dist/{tree-Bp3kM_9E.js → tree-jBMmDqPl.js} +2 -2
- package/dist/{tree-Bp3kM_9E.js.map → tree-jBMmDqPl.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-BxVFLdsv.cjs → typewriter-BMfjokvJ.cjs} +2 -2
- package/dist/{typewriter-BxVFLdsv.cjs.map → typewriter-BMfjokvJ.cjs.map} +1 -1
- package/dist/{typewriter-vjeXbFlZ.js → typewriter-DDgmwo1Z.js} +7 -7
- package/dist/{typewriter-vjeXbFlZ.js.map → typewriter-DDgmwo1Z.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-Deoe8ty2.cjs → typography-CeAzj0Al.cjs} +2 -2
- package/dist/{typography-Deoe8ty2.cjs.map → typography-CeAzj0Al.cjs.map} +1 -1
- package/dist/{typography-DvwRgRtf.js → typography-D0JH1nwp.js} +2 -2
- package/dist/{typography-DvwRgRtf.js.map → typography-D0JH1nwp.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/mailbox/email-editor.d.ts +103 -0
- package/types/src/mailbox/email-layout-selector.d.ts +19 -0
- package/types/src/mailbox/email-recipients.d.ts +118 -0
- package/types/src/mailbox/email-viewer.d.ts +86 -0
- package/types/src/mailbox/index.d.ts +12 -0
- package/types/src/mailbox/mailbox.d.ts +82 -0
- package/types/src/mailbox/types.d.ts +174 -0
- package/types/src/textarea/textarea.d.ts +24 -0
- package/dist/dialog-service-C8W7JHTQ.cjs +0 -2
- package/dist/dialog-service-C8W7JHTQ.cjs.map +0 -1
- package/dist/dialog-service-CQ6UYq9I.js +0 -135
- package/dist/dialog-service-CQ6UYq9I.js.map +0 -1
- package/dist/tailwind.mixin-8-I14rPu.cjs +0 -2
- package/dist/tailwind.mixin-Bvelb8bX.js +0 -43
- package/dist/textarea-Cdl89jnK.cjs +0 -42
- package/dist/textarea-Cdl89jnK.cjs.map +0 -1
- package/dist/textarea-DU0mANOS.js +0 -126
- package/dist/textarea-DU0mANOS.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare const SchmancyEmailLayoutSelector_base: import("@mixins/index").Constructor<CustomElementConstructor> & import("@mixins/index").Constructor<import("@mixins/index").ITailwindElementMixin> & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
2
|
+
/**
|
|
3
|
+
* Email layout selector component for choosing email templates
|
|
4
|
+
*
|
|
5
|
+
* Simple horizontal row of 5 layout options using Schmancy components only.
|
|
6
|
+
*
|
|
7
|
+
* @fires layout-select - When a layout is selected with {detail: {layout: string}}
|
|
8
|
+
*/
|
|
9
|
+
export declare class SchmancyEmailLayoutSelector extends SchmancyEmailLayoutSelector_base {
|
|
10
|
+
private layouts;
|
|
11
|
+
private selectLayout;
|
|
12
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
'schmancy-email-layout-selector': SchmancyEmailLayoutSelector;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV parser interface (optional dependency)
|
|
3
|
+
* Can be provided via global window object or imported
|
|
4
|
+
*/
|
|
5
|
+
interface CSVParser {
|
|
6
|
+
parse(csvContent: string, config: any): {
|
|
7
|
+
data: any[];
|
|
8
|
+
meta: {
|
|
9
|
+
fields?: string[];
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
declare const SchmancyEmailRecipients_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
14
|
+
/**
|
|
15
|
+
* Email recipients management component with floating boat interface
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Floating boat UI that can be minimized/expanded
|
|
19
|
+
* - CSV import with drag & drop
|
|
20
|
+
* - Multiple import sources (configurable)
|
|
21
|
+
* - Bulk selection and management
|
|
22
|
+
* - Search and filtering
|
|
23
|
+
* - Email validation
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```html
|
|
27
|
+
* <schmancy-email-recipients
|
|
28
|
+
* .recipients=${['user1@example.com', 'user2@example.com']}
|
|
29
|
+
* @emails-imported=${handleEmailsImported}
|
|
30
|
+
* ></schmancy-email-recipients>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare class SchmancyEmailRecipients extends SchmancyEmailRecipients_base {
|
|
34
|
+
/** Disable all interactions */
|
|
35
|
+
disabled: boolean;
|
|
36
|
+
/** All available recipients */
|
|
37
|
+
recipients: string[];
|
|
38
|
+
/** Currently selected recipients */
|
|
39
|
+
selectedRecipients: string[];
|
|
40
|
+
/** Enable CSV import functionality */
|
|
41
|
+
enableCsvImport: boolean;
|
|
42
|
+
/** Enable drag and drop for files */
|
|
43
|
+
enableDragDrop: boolean;
|
|
44
|
+
/** Panel title */
|
|
45
|
+
title: string;
|
|
46
|
+
/** Empty state title */
|
|
47
|
+
emptyStateTitle: string;
|
|
48
|
+
/** Empty state message */
|
|
49
|
+
emptyStateMessage: string;
|
|
50
|
+
/** CSV parser function (optional) */
|
|
51
|
+
csvParser?: CSVParser;
|
|
52
|
+
/** Internal state */
|
|
53
|
+
private dragOver;
|
|
54
|
+
private localSelectedRecipients;
|
|
55
|
+
private searchQuery;
|
|
56
|
+
private filteredRecipients;
|
|
57
|
+
private boatState;
|
|
58
|
+
/** File input reference */
|
|
59
|
+
private fileInputRef;
|
|
60
|
+
connectedCallback(): void;
|
|
61
|
+
private handleEmailsImported;
|
|
62
|
+
updated(changedProperties: Map<string, any>): void;
|
|
63
|
+
/** Handle CSV import trigger */
|
|
64
|
+
private handleImportFromCSV;
|
|
65
|
+
/** Handle file selection */
|
|
66
|
+
private handleFileSelect;
|
|
67
|
+
/** Handle drag and drop */
|
|
68
|
+
private handleDrop;
|
|
69
|
+
/** Process CSV file */
|
|
70
|
+
private processCSVFile;
|
|
71
|
+
/** Parse CSV content */
|
|
72
|
+
private parseCSV;
|
|
73
|
+
/** Simple CSV parsing fallback */
|
|
74
|
+
private simpleCSVParse;
|
|
75
|
+
/** Validate email format */
|
|
76
|
+
private isValidEmail;
|
|
77
|
+
/** Toggle recipient selection */
|
|
78
|
+
private toggleRecipientSelection;
|
|
79
|
+
/** Select all filtered recipients */
|
|
80
|
+
private selectAll;
|
|
81
|
+
/** Clear all selections */
|
|
82
|
+
private selectNone;
|
|
83
|
+
/** Remove individual recipient */
|
|
84
|
+
private removeRecipient;
|
|
85
|
+
/** Clear all recipients */
|
|
86
|
+
private clearAll;
|
|
87
|
+
/** Update filtered recipients based on search */
|
|
88
|
+
private updateFilteredRecipients;
|
|
89
|
+
/** Handle search input */
|
|
90
|
+
private handleSearchInput;
|
|
91
|
+
/** Clear search query */
|
|
92
|
+
private clearSearch;
|
|
93
|
+
/** Dispatch selection change event */
|
|
94
|
+
private dispatchSelectionChange;
|
|
95
|
+
/** Handle boat state changes */
|
|
96
|
+
private handleBoatStateChange;
|
|
97
|
+
/** Add recipients programmatically */
|
|
98
|
+
addRecipients(emails: string[]): void;
|
|
99
|
+
/** Show boat */
|
|
100
|
+
showBoat(): void;
|
|
101
|
+
/** Hide boat */
|
|
102
|
+
hideBoat(): void;
|
|
103
|
+
/** Expand boat */
|
|
104
|
+
expandBoat(): void;
|
|
105
|
+
/** Toggle boat state */
|
|
106
|
+
toggleBoat(): void;
|
|
107
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
108
|
+
/** Render floating boat layout */
|
|
109
|
+
private renderBoatLayout;
|
|
110
|
+
/** Render boat content */
|
|
111
|
+
private renderBoatContent;
|
|
112
|
+
}
|
|
113
|
+
declare global {
|
|
114
|
+
interface HTMLElementTagNameMap {
|
|
115
|
+
'schmancy-email-recipients': SchmancyEmailRecipients;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { EmailAttachment } from './types';
|
|
2
|
+
declare const SchmancyEmailViewer_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
3
|
+
/**
|
|
4
|
+
* Email viewer component showing formatted HTML and plain text versions
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - HTML and plain text preview modes
|
|
8
|
+
* - Email client-compatible styling
|
|
9
|
+
* - Layout parsing (columns, sidebars, image rows)
|
|
10
|
+
* - Markdown to HTML conversion
|
|
11
|
+
* - Attachment display
|
|
12
|
+
* - Email header simulation
|
|
13
|
+
* - Character/word statistics
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```html
|
|
17
|
+
* <schmancy-email-viewer
|
|
18
|
+
* subject="Welcome!"
|
|
19
|
+
* body="**Hello** world"
|
|
20
|
+
* .attachments=${attachments}
|
|
21
|
+
* .recipients=${['user@example.com']}
|
|
22
|
+
* ></schmancy-email-viewer>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class SchmancyEmailViewer extends SchmancyEmailViewer_base {
|
|
26
|
+
/** Email subject */
|
|
27
|
+
subject: string;
|
|
28
|
+
/** Email body content (markdown) */
|
|
29
|
+
body: string;
|
|
30
|
+
/** Email attachments */
|
|
31
|
+
attachments: EmailAttachment[];
|
|
32
|
+
/** Selected recipients for preview */
|
|
33
|
+
recipients: string[];
|
|
34
|
+
/** From address for preview */
|
|
35
|
+
fromAddress: string;
|
|
36
|
+
/** To address for preview (uses first recipient if not provided) */
|
|
37
|
+
toAddress: string;
|
|
38
|
+
/** Current view mode */
|
|
39
|
+
private viewMode;
|
|
40
|
+
/**
|
|
41
|
+
* Parse layout blocks (:::layout type) and convert to email-safe table layouts
|
|
42
|
+
*/
|
|
43
|
+
private parseLayoutBlocks;
|
|
44
|
+
/**
|
|
45
|
+
* Parse columns layout (2 or 3 columns)
|
|
46
|
+
*/
|
|
47
|
+
private parseColumnsLayout;
|
|
48
|
+
/**
|
|
49
|
+
* Parse sidebar layout (left or right sidebar)
|
|
50
|
+
*/
|
|
51
|
+
private parseSidebarLayout;
|
|
52
|
+
/**
|
|
53
|
+
* Parse image row layout
|
|
54
|
+
*/
|
|
55
|
+
private parseImageRowLayout;
|
|
56
|
+
/**
|
|
57
|
+
* Parse image attributes from markdown syntax
|
|
58
|
+
*/
|
|
59
|
+
private parseImageAttributes;
|
|
60
|
+
/**
|
|
61
|
+
* Generate email-safe image styles based on attributes
|
|
62
|
+
*/
|
|
63
|
+
private generateImageStyles;
|
|
64
|
+
/**
|
|
65
|
+
* Parse basic markdown within layout content (simplified version)
|
|
66
|
+
*/
|
|
67
|
+
private parseBasicMarkdown;
|
|
68
|
+
/**
|
|
69
|
+
* Email-compliant HTML generator for email clients (Gmail, Outlook, Apple Mail)
|
|
70
|
+
* Uses table-based layouts with inline styles only - no CSS classes or modern features
|
|
71
|
+
*/
|
|
72
|
+
private parseExtendedMarkdown;
|
|
73
|
+
/**
|
|
74
|
+
* Convert markdown to plain text for plain text preview
|
|
75
|
+
*/
|
|
76
|
+
private convertToPlainText;
|
|
77
|
+
/** Format file size for display */
|
|
78
|
+
private formatFileSize;
|
|
79
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
80
|
+
}
|
|
81
|
+
declare global {
|
|
82
|
+
interface HTMLElementTagNameMap {
|
|
83
|
+
'schmancy-email-viewer': SchmancyEmailViewer;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schmancy Mailbox Components
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive email composition and management system
|
|
5
|
+
*/
|
|
6
|
+
export * from './types';
|
|
7
|
+
export { SchmancyMailbox } from './mailbox';
|
|
8
|
+
export { SchmancyEmailEditor } from './email-editor';
|
|
9
|
+
export { SchmancyEmailViewer } from './email-viewer';
|
|
10
|
+
export { SchmancyEmailRecipients } from './email-recipients';
|
|
11
|
+
export { SchmancyEmailLayoutSelector } from './email-layout-selector';
|
|
12
|
+
export type { EmailTemplate, EmailAttachment, EmailComposeConfig, SendEmailRequest, SendEmailResponse, ImportSource, EmailCampaign, EmailRecipient, MailboxState, CurrentComposeState, BoatState, EmailPreviewMode } from './types';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { EmailTemplate, EmailComposeConfig, ImportSource } from './types';
|
|
2
|
+
declare const SchmancyMailbox_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
3
|
+
/**
|
|
4
|
+
* Main mailbox component that orchestrates the entire email composition flow
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Responsive layout with composer and preview panels
|
|
8
|
+
* - Recipients management with floating boat interface
|
|
9
|
+
* - Template selection and content editing
|
|
10
|
+
* - Attachment handling
|
|
11
|
+
* - Email validation and sending
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```html
|
|
15
|
+
* <schmancy-mailbox
|
|
16
|
+
* .config=${{ sendEndpoint: '/api/send-email' }}
|
|
17
|
+
* .templates=${emailTemplates}
|
|
18
|
+
* .importSources=${recipientSources}
|
|
19
|
+
* ></schmancy-mailbox>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class SchmancyMailbox extends SchmancyMailbox_base {
|
|
23
|
+
/** Configuration for endpoints and handlers */
|
|
24
|
+
config: EmailComposeConfig;
|
|
25
|
+
/** Available email templates */
|
|
26
|
+
templates: EmailTemplate[];
|
|
27
|
+
/** Import sources for recipients panel */
|
|
28
|
+
importSources: ImportSource[];
|
|
29
|
+
/** Disable all interactions */
|
|
30
|
+
disabled: boolean;
|
|
31
|
+
/** Recipients panel title */
|
|
32
|
+
recipientsTitle: string;
|
|
33
|
+
/** Empty state title for recipients */
|
|
34
|
+
recipientsEmptyTitle: string;
|
|
35
|
+
/** Empty state message for recipients */
|
|
36
|
+
recipientsEmptyMessage: string;
|
|
37
|
+
/** Enable CSV import functionality */
|
|
38
|
+
enableCsvImport: boolean;
|
|
39
|
+
/** Enable drag and drop for files */
|
|
40
|
+
enableDragDrop: boolean;
|
|
41
|
+
/** Email composition state */
|
|
42
|
+
private recipients;
|
|
43
|
+
private selectedRecipients;
|
|
44
|
+
private subject;
|
|
45
|
+
private body;
|
|
46
|
+
private templateId;
|
|
47
|
+
private attachments;
|
|
48
|
+
private isSending;
|
|
49
|
+
connectedCallback(): void;
|
|
50
|
+
updated(changedProperties: Map<string, any>): void;
|
|
51
|
+
/** Handle emails imported from various sources */
|
|
52
|
+
private handleEmailsImported;
|
|
53
|
+
/** Handle individual recipient removal */
|
|
54
|
+
private handleRecipientRemoved;
|
|
55
|
+
/** Handle clearing all recipients */
|
|
56
|
+
private handleRecipientsCleared;
|
|
57
|
+
/** Handle recipient selection changes */
|
|
58
|
+
private handleSelectionChanged;
|
|
59
|
+
/** Handle composer content changes */
|
|
60
|
+
private handleEditorChange;
|
|
61
|
+
/** Handle email sending */
|
|
62
|
+
private handleSend;
|
|
63
|
+
/** Add recipients programmatically */
|
|
64
|
+
addRecipients(emails: string[]): void;
|
|
65
|
+
/** Set email subject */
|
|
66
|
+
setSubject(subject: string): void;
|
|
67
|
+
/** Set email body */
|
|
68
|
+
setBody(body: string): void;
|
|
69
|
+
/** Set selected template */
|
|
70
|
+
setTemplate(templateId: string | null): void;
|
|
71
|
+
/** Clear all compose data */
|
|
72
|
+
clearCompose(): void;
|
|
73
|
+
/** Set sending state */
|
|
74
|
+
setSending(sending: boolean): void;
|
|
75
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
76
|
+
}
|
|
77
|
+
declare global {
|
|
78
|
+
interface HTMLElementTagNameMap {
|
|
79
|
+
'schmancy-mailbox': SchmancyMailbox;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export {};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mailbox component types and interfaces
|
|
3
|
+
* Extracted from funkhaus-events and generalized for reusability
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Email template definition
|
|
7
|
+
*/
|
|
8
|
+
export interface EmailTemplate {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
subject: string;
|
|
12
|
+
body: string;
|
|
13
|
+
isDefault?: boolean;
|
|
14
|
+
createdAt?: Date | string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Email attachment definition
|
|
18
|
+
*/
|
|
19
|
+
export interface EmailAttachment {
|
|
20
|
+
id: string;
|
|
21
|
+
file: File;
|
|
22
|
+
name: string;
|
|
23
|
+
size: number;
|
|
24
|
+
type: string;
|
|
25
|
+
url?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Configuration for email composer component
|
|
29
|
+
*/
|
|
30
|
+
export interface EmailComposeConfig {
|
|
31
|
+
/** Endpoint for sending emails */
|
|
32
|
+
sendEndpoint?: string;
|
|
33
|
+
/** Endpoint for fetching templates */
|
|
34
|
+
templatesEndpoint?: string;
|
|
35
|
+
/** Endpoint for uploading files */
|
|
36
|
+
uploadEndpoint?: string;
|
|
37
|
+
/** Function to authenticate requests */
|
|
38
|
+
authenticateRequest?: (request: RequestInit) => RequestInit;
|
|
39
|
+
/** Custom upload handler for attachments */
|
|
40
|
+
uploadHandler?: (file: File) => Promise<string>;
|
|
41
|
+
/** Custom image upload handler */
|
|
42
|
+
imageUploadHandler?: (file: File) => Promise<string>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Email send request structure
|
|
46
|
+
*/
|
|
47
|
+
export interface SendEmailRequest {
|
|
48
|
+
recipients: string[];
|
|
49
|
+
subject: string;
|
|
50
|
+
body: string;
|
|
51
|
+
attachments: EmailAttachment[];
|
|
52
|
+
templateId?: string | null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Email send response structure
|
|
56
|
+
*/
|
|
57
|
+
export interface SendEmailResponse {
|
|
58
|
+
success: boolean;
|
|
59
|
+
message: string;
|
|
60
|
+
campaignId?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Import source definition for recipients panel
|
|
64
|
+
*/
|
|
65
|
+
export interface ImportSource {
|
|
66
|
+
id: string;
|
|
67
|
+
label: string;
|
|
68
|
+
icon: string;
|
|
69
|
+
handler: () => void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* CSV parsing result
|
|
73
|
+
*/
|
|
74
|
+
export interface CsvParseResult {
|
|
75
|
+
validEmails: string[];
|
|
76
|
+
invalidEmails: string[];
|
|
77
|
+
totalRows: number;
|
|
78
|
+
duplicates: string[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Email recipient status
|
|
82
|
+
*/
|
|
83
|
+
export type EmailRecipientStatus = 'pending' | 'sent' | 'failed';
|
|
84
|
+
/**
|
|
85
|
+
* Email recipient definition
|
|
86
|
+
*/
|
|
87
|
+
export interface EmailRecipient {
|
|
88
|
+
email: string;
|
|
89
|
+
name?: string;
|
|
90
|
+
status: EmailRecipientStatus;
|
|
91
|
+
error?: string;
|
|
92
|
+
sentAt?: Date | string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Email campaign definition
|
|
96
|
+
*/
|
|
97
|
+
export interface EmailCampaign {
|
|
98
|
+
id?: string;
|
|
99
|
+
subject: string;
|
|
100
|
+
body: string;
|
|
101
|
+
plainText?: string;
|
|
102
|
+
recipients: EmailRecipient[];
|
|
103
|
+
status: 'draft' | 'sent' | 'failed' | 'sending';
|
|
104
|
+
createdAt?: Date | string;
|
|
105
|
+
sentAt?: Date | string;
|
|
106
|
+
createdBy?: string;
|
|
107
|
+
templateId?: string;
|
|
108
|
+
attachments?: EmailAttachment[];
|
|
109
|
+
stats?: {
|
|
110
|
+
totalRecipients: number;
|
|
111
|
+
sent: number;
|
|
112
|
+
failed: number;
|
|
113
|
+
batches?: number;
|
|
114
|
+
retries?: number;
|
|
115
|
+
opened?: number;
|
|
116
|
+
clicked?: number;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Mailbox state for context management
|
|
121
|
+
*/
|
|
122
|
+
export interface MailboxState {
|
|
123
|
+
campaigns: EmailCampaign[];
|
|
124
|
+
templates: EmailTemplate[];
|
|
125
|
+
loading: boolean;
|
|
126
|
+
error: string | null;
|
|
127
|
+
currentCampaign: Partial<EmailCampaign> | null;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Current compose state for context management
|
|
131
|
+
*/
|
|
132
|
+
export interface CurrentComposeState {
|
|
133
|
+
selectedEmails: string[];
|
|
134
|
+
subject: string;
|
|
135
|
+
body: string;
|
|
136
|
+
templateId: string | null;
|
|
137
|
+
attachments: EmailAttachment[];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Email compose events
|
|
141
|
+
*/
|
|
142
|
+
export type EmailComposeEvents = {
|
|
143
|
+
'emails-imported': CustomEvent<{
|
|
144
|
+
emails: string[];
|
|
145
|
+
source: string;
|
|
146
|
+
}>;
|
|
147
|
+
'recipient-removed': CustomEvent<{
|
|
148
|
+
email: string;
|
|
149
|
+
}>;
|
|
150
|
+
'recipients-cleared': CustomEvent<{}>;
|
|
151
|
+
'selection-changed': CustomEvent<{
|
|
152
|
+
selectedEmails: string[];
|
|
153
|
+
}>;
|
|
154
|
+
'compose-changed': CustomEvent<{
|
|
155
|
+
subject: string;
|
|
156
|
+
body: string;
|
|
157
|
+
templateId: string | null;
|
|
158
|
+
attachments: EmailAttachment[];
|
|
159
|
+
}>;
|
|
160
|
+
'send-email': CustomEvent<{
|
|
161
|
+
request: SendEmailRequest;
|
|
162
|
+
}>;
|
|
163
|
+
'send-error': CustomEvent<{
|
|
164
|
+
error: string;
|
|
165
|
+
}>;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Boat state options for recipients panel
|
|
169
|
+
*/
|
|
170
|
+
export type BoatState = 'hidden' | 'minimized' | 'expanded';
|
|
171
|
+
/**
|
|
172
|
+
* Email preview view modes
|
|
173
|
+
*/
|
|
174
|
+
export type EmailPreviewMode = 'html' | 'plaintext';
|
|
@@ -68,6 +68,30 @@ export default class SchmancyTextarea extends SchmancyTextarea_base {
|
|
|
68
68
|
* @public
|
|
69
69
|
*/
|
|
70
70
|
rows: number;
|
|
71
|
+
/**
|
|
72
|
+
* Makes the textarea fill the height of its container.
|
|
73
|
+
* @attr fillHeight
|
|
74
|
+
* @type {boolean}
|
|
75
|
+
* @default false
|
|
76
|
+
* @public
|
|
77
|
+
*/
|
|
78
|
+
fillHeight: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Automatically adjusts height based on content.
|
|
81
|
+
* @attr autoHeight
|
|
82
|
+
* @type {boolean}
|
|
83
|
+
* @default true
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
autoHeight: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Controls whether the textarea can be resized by the user.
|
|
89
|
+
* @attr resize
|
|
90
|
+
* @type {'none' | 'vertical' | 'horizontal' | 'both'}
|
|
91
|
+
* @default 'vertical'
|
|
92
|
+
* @public
|
|
93
|
+
*/
|
|
94
|
+
resize: 'none' | 'vertical' | 'horizontal' | 'both';
|
|
71
95
|
/**
|
|
72
96
|
* Specifies how the text in a text area is to be wrapped when submitted in a form.
|
|
73
97
|
* @attr wrap
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const d=require("lit"),o=require("rxjs"),m=require("./theme.component-B70iwARu.cjs"),g="are-you-there-dialog",p="yes-dialog-here",l=class l{constructor(){this.activeDialogs=[],this.activeRawDialogs=[],this.dialogSubject=new o.Subject,this.dismissSubject=new o.Subject,this.setupDialogOpeningLogic(),this.setupDialogDismissLogic()}static getInstance(){return l.instance||(l.instance=new l),l.instance}setupDialogOpeningLogic(){this.dialogSubject.pipe(o.switchMap(e=>o.forkJoin([o.fromEvent(window,p).pipe(o.takeUntil(o.timer(100)),o.map(t=>t.detail),o.defaultIfEmpty(void 0)),o.of(e).pipe(o.tap(()=>{const t=e.type==="confirm"?`confirm-dialog-${Date.now()}-${Math.random().toString(36).substring(2,9)}`:`dialog-${Date.now()}-${Math.random().toString(36).substring(2,9)}`;window.dispatchEvent(new CustomEvent(g,{detail:{uid:t},bubbles:!0,composed:!0})),e.uid=t}))])),o.switchMap(([e,t])=>{let n,i;return e?.dialog?(n=e.dialog,i=n.parentElement,o.of({dialog:n,target:t,targetContainer:i})):e?.theme?(i=e.theme,o.of({dialog:null,target:t,targetContainer:i})):t.options.targetContainer?(i=t.options.targetContainer,o.of({dialog:null,target:t,targetContainer:i})):(window.dispatchEvent(new CustomEvent(m.ThemeWhereAreYou)),o.fromEvent(window,m.ThemeHereIAm).pipe(o.take(1),o.takeUntil(o.timer(100)),o.map(s=>s.detail.theme),o.defaultIfEmpty(void 0),o.map(s=>({dialog:null,target:t,targetContainer:s||document.body}))))}),o.tap(({dialog:e,target:t,targetContainer:n})=>{e||((e=t.type==="confirm"?document.createElement("confirm-dialog"):document.createElement("schmancy-dialog")).setAttribute("uid",t.uid),n.appendChild(e))}),o.map(({dialog:e,target:t,targetContainer:n})=>(e||(e=n.querySelector(`[uid="${t.uid}"]`)),{dialog:e,target:t,targetContainer:n})),o.tap(({dialog:e,target:t})=>{if(t.type==="confirm"){const n=e,i=t.options;if(i.title&&(n.title=i.title),i.subtitle&&(n.subtitle=i.subtitle),i.message&&(n.message=i.message),i.confirmText&&(n.confirmText=i.confirmText),i.cancelText&&(n.cancelText=i.cancelText),i.variant&&(n.variant=i.variant),i.confirmColor&&(n.confirmColor=i.confirmColor),i.width&&n.style.setProperty("--dialog-width",i.width),i.content){const s=document.createElement("div");if(s.slot="content",typeof i.content=="function"){const a=i.content();a instanceof HTMLElement?s.appendChild(a):d.render(a,s)}else i.content instanceof HTMLElement?s.appendChild(i.content):d.render(i.content,s);n.appendChild(s)}this.activeDialogs.push(n)}else{if(t.content){const n=document.createElement("div");if(n.style.height="100%",n.style.width="100%",n.classList.add("schmancy-dialog-content-container"),typeof t.content=="function"){const i=t.content();i instanceof HTMLElement?n.appendChild(i):d.render(i,n)}else t.content instanceof HTMLElement?n.appendChild(t.content):d.render(t.content,n);e.appendChild(n)}t.options.width&&e.style.setProperty("--dialog-width",t.options.width),this.activeRawDialogs.push(e)}}),o.tap(({dialog:e,target:t})=>{const n=t.options.position||this.getCenteredPosition();if(e.show(n).then(i=>{if(t.resolve&&t.resolve(i),t.type==="confirm"){const s=this.activeDialogs.indexOf(e);s!==-1&&this.activeDialogs.splice(s,1);const a=e.querySelector('[slot="content"]');a&&e.removeChild(a)}else{const s=this.activeRawDialogs.indexOf(e);s!==-1&&this.activeRawDialogs.splice(s,1);const a=e.querySelector(".schmancy-dialog-content-container");a&&a.parentNode&&a.parentNode.removeChild(a)}e.parentElement&&e.parentElement.removeChild(e)}).catch(i=>{t.reject&&t.reject(i)}),t.options.onConfirm){const i=s=>{t.options.onConfirm(),e.removeEventListener("confirm",i)};e.addEventListener("confirm",i)}if(t.options.onCancel){const i=s=>{t.options.onCancel(),e.removeEventListener("cancel",i)};e.addEventListener("cancel",i)}})).subscribe()}setupDialogDismissLogic(){this.dismissSubject.pipe(o.switchMap(e=>o.forkJoin([o.fromEvent(window,p).pipe(o.takeUntil(o.timer(100)),o.map(t=>t.detail),o.defaultIfEmpty(void 0)),o.of(e).pipe(o.tap(()=>{window.dispatchEvent(new CustomEvent(g,{detail:{uid:e},bubbles:!0,composed:!0}))}))])),o.tap(([e])=>{if(e?.dialog){e.dialog.hide(!1);const t=this.activeDialogs.indexOf(e.dialog);t!==-1&&this.activeDialogs.splice(t,1);const n=this.activeRawDialogs.indexOf(e.dialog);n!==-1&&this.activeRawDialogs.splice(n,1),e.dialog.parentElement&&e.dialog.parentElement.removeChild(e.dialog)}})).subscribe()}confirm(e){return new Promise((t,n)=>{const i={...l.DEFAULT_OPTIONS,...e};i.position||(i.position=this.getCenteredPosition());const s={options:i,type:"confirm",content:i.content,resolve:t,reject:n};this.dialogSubject.next(s)})}component(e,t={}){return new Promise((n,i)=>{t.position||(t.position=this.getCenteredPosition());const s={options:t,type:"component",content:e,resolve:n,reject:i};this.dialogSubject.next(s)})}dismiss(){if(this.activeRawDialogs.length>0){const e=this.activeRawDialogs[this.activeRawDialogs.length-1].getAttribute("uid");if(e)return this.dismissSubject.next(e),!0}if(this.activeDialogs.length>0){const e=this.activeDialogs[this.activeDialogs.length-1].getAttribute("uid");if(e)return this.dismissSubject.next(e),!0}return!1}close(){return this.dismiss()}ask(e,t){return this.confirm({message:e,position:t})}danger(e){return this.confirm({...e,variant:"danger"})}getCenteredPosition(){return{x:window.innerWidth/2,y:window.innerHeight/2}}};l.DEFAULT_OPTIONS={title:void 0,subtitle:void 0,confirmText:void 0,cancelText:void 0,variant:"default",width:"360px"};let c=l;const h={confirm:r=>c.getInstance().confirm(r),ask:(r,e)=>c.getInstance().ask(r,e),danger:r=>c.getInstance().danger(r),component:(r,e)=>c.getInstance().component(r,e),simple:(r,e)=>c.getInstance().component(r,e),dismiss:()=>c.getInstance().dismiss(),close:()=>c.getInstance().close()};exports.$dialog=h,exports.DialogHereMorty=p,exports.DialogService=c,exports.DialogWhereAreYouRicky=g;
|
|
2
|
-
//# sourceMappingURL=dialog-service-C8W7JHTQ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-service-C8W7JHTQ.cjs","sources":["../src/dialog/dialog-events.ts","../src/dialog/dialog-service.ts"],"sourcesContent":["// Dialog discovery event constants\r\nexport const DialogWhereAreYouRicky = 'are-you-there-dialog'\r\nexport const DialogHereMorty = 'yes-dialog-here'\r\n\r\n// Event interfaces\r\nexport interface DialogWhereAreYouRickyEvent extends CustomEvent {\r\n detail: {\r\n uid: string\r\n }\r\n}\r\n\r\nexport interface DialogHereMortyEvent extends CustomEvent {\r\n detail: {\r\n dialog: any // Will be schmancy-dialog instance\r\n theme?: any // Will be schmancy-theme instance\r\n }\r\n}","import { render, TemplateResult } from 'lit'\nimport { defaultIfEmpty, forkJoin, fromEvent, map, of, Subject, switchMap, takeUntil, tap, timer, take } from 'rxjs'\nimport { ConfirmDialog } from './dailog'\nimport { DialogHereMorty, DialogHereMortyEvent, DialogWhereAreYouRicky } from './dialog-events'\nimport { ThemeWhereAreYou, ThemeHereIAm, ThemeHereIAmEvent } from '../theme/theme.component'\n\n/**\n * Dialog service options interface with component support\n */\nexport interface DialogOptions {\n\ttitle?: string\n\tsubtitle?: string\n\tmessage?: string\n\tconfirmText?: string\n\tcancelText?: string\n\tvariant?: 'default' | 'danger'\n\tconfirmColor?: 'primary' | 'error' | 'warning' | 'success' // Button color for confirm action\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\n\t// New options for component rendering\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\twidth?: string\n\tonConfirm?: () => void\n\tonCancel?: () => void\n\thideActions?: boolean // Set to true to hide all buttons and title\n\ttargetContainer?: HTMLElement // Container to append dialog to (defaults to document.body)\n}\n\ninterface DialogTarget {\n\toptions: DialogOptions\n\ttype: 'confirm' | 'component'\n\tcontent?: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult)\n\tresolve?: (value: boolean) => void\n\treject?: (reason?: any) => void\n}\n\n/**\n * Dialog service for centralized dialog management.\n * Provides a simple API for showing dialogs with optional custom components.\n */\nexport class DialogService {\n\tprivate static instance: DialogService\n\n\t// Default dialog options\n\tprivate static DEFAULT_OPTIONS: Partial<DialogOptions> = {\n\t\ttitle: undefined,\n\t\tsubtitle: undefined,\n\t\tconfirmText: undefined,\n\t\tcancelText: undefined,\n\t\tvariant: 'default',\n\t\twidth: '360px',\n\t}\n\n\t// Track active dialogs to handle dismissing the most recent one\n\tprivate activeDialogs: ConfirmDialog[] = []\n\t\n\t// Track component dialogs (schmancy-dialog instances)\n\tprivate activeRawDialogs: any[] = []\n\t\n\t// Subject for dialog opening requests\n\tprivate dialogSubject = new Subject<DialogTarget>()\n\t\n\t// Subject for dialog dismissal requests\n\tprivate dismissSubject = new Subject<string>()\n\n\t// Private constructor for singleton pattern\n\tprivate constructor() {\n\t\tthis.setupDialogOpeningLogic()\n\t\tthis.setupDialogDismissLogic()\n\t}\n\n\t/**\n\t * Get the singleton instance\n\t */\n\tpublic static getInstance(): DialogService {\n\t\tif (!DialogService.instance) {\n\t\t\tDialogService.instance = new DialogService()\n\t\t}\n\t\treturn DialogService.instance\n\t}\n\t\n\t/**\n\t * Sets up the main dialog opening logic using RxJS pipes\n\t */\n\tprivate setupDialogOpeningLogic() {\n\t\tthis.dialogSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<DialogHereMortyEvent>(window, DialogHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tconst uid = target.type === 'confirm' \n\t\t\t\t\t\t\t\t\t? `confirm-dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n\t\t\t\t\t\t\t\t\t: `dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(DialogWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Store uid in target for later use\n\t\t\t\t\t\t\t\t;(target as any).uid = uid\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tswitchMap(([response, target]) => {\n\t\t\t\t\tlet dialog: ConfirmDialog | any\n\t\t\t\t\tlet targetContainer: HTMLElement\n\t\t\t\t\t\n\t\t\t\t\tif (response?.dialog) {\n\t\t\t\t\t\t// Use existing dialog\n\t\t\t\t\t\tdialog = response.dialog\n\t\t\t\t\t\ttargetContainer = dialog.parentElement as HTMLElement\n\t\t\t\t\t\treturn of({ dialog, target, targetContainer })\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use responding theme or fallback\n\t\t\t\t\t\tif (response?.theme) {\n\t\t\t\t\t\t\ttargetContainer = response.theme as HTMLElement\n\t\t\t\t\t\t\treturn of({ dialog: null, target, targetContainer })\n\t\t\t\t\t\t} else if (target.options.targetContainer) {\n\t\t\t\t\t\t\ttargetContainer = target.options.targetContainer\n\t\t\t\t\t\t\treturn of({ dialog: null, target, targetContainer })\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same theme discovery pattern as sheet service\n\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(ThemeWhereAreYou))\n\t\t\t\t\t\t\treturn fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n\t\t\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\t\tmap(e => e.detail.theme),\n\t\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t\t\tmap(theme => ({\n\t\t\t\t\t\t\t\t\tdialog: null,\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t\ttargetContainer: theme || document.body\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target, targetContainer }) => {\n\t\t\t\t\tif (!dialog) {\n\t\t\t\t\t\t// Create appropriate dialog type\n\t\t\t\t\t\tif (target.type === 'confirm') {\n\t\t\t\t\t\t\tdialog = document.createElement('confirm-dialog') as ConfirmDialog\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdialog = document.createElement('schmancy-dialog')\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdialog.setAttribute('uid', (target as any).uid)\n\t\t\t\t\t\ttargetContainer.appendChild(dialog)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ dialog, target, targetContainer }) => {\n\t\t\t\t\t// Return the actual dialog element that was created\n\t\t\t\t\tif (!dialog) {\n\t\t\t\t\t\tdialog = targetContainer.querySelector(`[uid=\"${(target as any).uid}\"]`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { dialog, target, targetContainer }\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\tif (target.type === 'confirm') {\n\t\t\t\t\t\t// Configure confirm dialog\n\t\t\t\t\t\tconst confirmDialog = dialog as ConfirmDialog\n\t\t\t\t\t\tconst options = target.options\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (options.title) confirmDialog.title = options.title\n\t\t\t\t\t\tif (options.subtitle) confirmDialog.subtitle = options.subtitle\n\t\t\t\t\t\tif (options.message) confirmDialog.message = options.message\n\t\t\t\t\t\tif (options.confirmText) confirmDialog.confirmText = options.confirmText\n\t\t\t\t\t\tif (options.cancelText) confirmDialog.cancelText = options.cancelText\n\t\t\t\t\t\tif (options.variant) confirmDialog.variant = options.variant\n\t\t\t\t\t\tif (options.confirmColor) confirmDialog.confirmColor = options.confirmColor\n\t\t\t\t\t\tif (options.width) confirmDialog.style.setProperty('--dialog-width', options.width)\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Handle custom content if provided\n\t\t\t\t\t\tif (options.content) {\n\t\t\t\t\t\t\tconst contentContainer = document.createElement('div')\n\t\t\t\t\t\t\tcontentContainer.slot = 'content'\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (typeof options.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = options.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tcontentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, contentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (options.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tcontentContainer.appendChild(options.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(options.content, contentContainer)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconfirmDialog.appendChild(contentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Add to active dialogs\n\t\t\t\t\t\tthis.activeDialogs.push(confirmDialog)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Configure component dialog\n\t\t\t\t\t\tif (target.content) {\n\t\t\t\t\t\t\tconst directContentContainer = document.createElement('div')\n\t\t\t\t\t\t\tdirectContentContainer.style.height = '100%'\n\t\t\t\t\t\t\tdirectContentContainer.style.width = '100%'\n\t\t\t\t\t\t\tdirectContentContainer.classList.add('schmancy-dialog-content-container')\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Render the content directly\n\t\t\t\t\t\t\tif (typeof target.content === 'function') {\n\t\t\t\t\t\t\t\tconst result = target.content()\n\t\t\t\t\t\t\t\tif (result instanceof HTMLElement) {\n\t\t\t\t\t\t\t\t\tdirectContentContainer.appendChild(result)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trender(result, directContentContainer)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (target.content instanceof HTMLElement) {\n\t\t\t\t\t\t\t\tdirectContentContainer.appendChild(target.content)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trender(target.content, directContentContainer)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdialog.appendChild(directContentContainer)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Set width from options\n\t\t\t\t\t\tif (target.options.width) {\n\t\t\t\t\t\t\tdialog.style.setProperty('--dialog-width', target.options.width)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Add to active raw dialogs\n\t\t\t\t\t\tthis.activeRawDialogs.push(dialog)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttap(({ dialog, target }) => {\n\t\t\t\t\t// Show dialog and handle promise resolution\n\t\t\t\t\tconst position = target.options.position || this.getCenteredPosition()\n\t\t\t\t\t\n\t\t\t\t\tdialog.show(position).then((result: boolean) => {\n\t\t\t\t\t\tif (target.resolve) {\n\t\t\t\t\t\t\ttarget.resolve(result)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Cleanup\n\t\t\t\t\t\tif (target.type === 'confirm') {\n\t\t\t\t\t\t\tconst index = this.activeDialogs.indexOf(dialog)\n\t\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\t\tthis.activeDialogs.splice(index, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Clean up content\n\t\t\t\t\t\t\tconst contentEl = dialog.querySelector('[slot=\"content\"]')\n\t\t\t\t\t\t\tif (contentEl) {\n\t\t\t\t\t\t\t\tdialog.removeChild(contentEl)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst index = this.activeRawDialogs.indexOf(dialog)\n\t\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\t\tthis.activeRawDialogs.splice(index, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Clean up content\n\t\t\t\t\t\t\tconst contentContainer = dialog.querySelector('.schmancy-dialog-content-container')\n\t\t\t\t\t\t\tif (contentContainer && contentContainer.parentNode) {\n\t\t\t\t\t\t\t\tcontentContainer.parentNode.removeChild(contentContainer)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Remove dialog from DOM\n\t\t\t\t\t\tif (dialog.parentElement) {\n\t\t\t\t\t\t\tdialog.parentElement.removeChild(dialog)\n\t\t\t\t\t\t}\n\t\t\t\t\t}).catch((error: any) => {\n\t\t\t\t\t\tif (target.reject) {\n\t\t\t\t\t\t\ttarget.reject(error)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\t// Set up event listeners for callbacks\n\t\t\t\t\tif (target.options.onConfirm) {\n\t\t\t\t\t\tconst onConfirm = (_e: Event) => {\n\t\t\t\t\t\t\ttarget.options.onConfirm!()\n\t\t\t\t\t\t\tdialog.removeEventListener('confirm', onConfirm)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdialog.addEventListener('confirm', onConfirm)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (target.options.onCancel) {\n\t\t\t\t\t\tconst onCancel = (_e: Event) => {\n\t\t\t\t\t\t\ttarget.options.onCancel!()\n\t\t\t\t\t\t\tdialog.removeEventListener('cancel', onCancel)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdialog.addEventListener('cancel', onCancel)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\t\n\t/**\n\t * Sets up the dialog dismissal logic\n\t */\n\tprivate setupDialogDismissLogic() {\n\t\tthis.dismissSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<DialogHereMortyEvent>(window, DialogHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(DialogWhereAreYouRicky, { \n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([response]) => {\n\t\t\t\t\tif (response?.dialog) {\n\t\t\t\t\t\t// Hide the dialog\n\t\t\t\t\t\tresponse.dialog.hide(false)\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Remove from tracking arrays\n\t\t\t\t\t\tconst confirmIndex = this.activeDialogs.indexOf(response.dialog)\n\t\t\t\t\t\tif (confirmIndex !== -1) {\n\t\t\t\t\t\t\tthis.activeDialogs.splice(confirmIndex, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst rawIndex = this.activeRawDialogs.indexOf(response.dialog)\n\t\t\t\t\t\tif (rawIndex !== -1) {\n\t\t\t\t\t\t\tthis.activeRawDialogs.splice(rawIndex, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Remove dialog from DOM immediately\n\t\t\t\t\t\tif (response.dialog.parentElement) {\n\t\t\t\t\t\t\tresponse.dialog.parentElement.removeChild(response.dialog)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Show a confirmation dialog\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\tpublic confirm(options: DialogOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// Apply default options\n\t\t\tconst completeOptions = {\n\t\t\t\t...DialogService.DEFAULT_OPTIONS,\n\t\t\t\t...options,\n\t\t\t}\n\n\t\t\t// If no position is provided, center the dialog\n\t\t\tif (!completeOptions.position) {\n\t\t\t\tcompleteOptions.position = this.getCenteredPosition()\n\t\t\t}\n\n\t\t\t// Create dialog target and emit to subject\n\t\t\tconst target: DialogTarget = {\n\t\t\t\toptions: completeOptions,\n\t\t\t\ttype: 'confirm',\n\t\t\t\tcontent: completeOptions.content,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next(target)\n\t\t})\n\t}\n\n\t/**\n\t * Show a dialog with custom component content\n\t * Always renders content directly without any headers or action buttons\n\t * @returns Promise that resolves when dialog is closed\n\t */\n\tpublic component(\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions: Omit<DialogOptions, 'content' | 'message'> = {},\n\t): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// If no position is provided, center the dialog\n\t\t\tif (!options.position) {\n\t\t\t\toptions.position = this.getCenteredPosition()\n\t\t\t}\n\n\t\t\t// Create dialog target and emit to subject\n\t\t\tconst target: DialogTarget = {\n\t\t\t\toptions: options as DialogOptions,\n\t\t\t\ttype: 'component',\n\t\t\t\tcontent,\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t}\n\n\t\t\tthis.dialogSubject.next(target)\n\t\t})\n\t}\n\n\t/**\n\t * Dismiss the most recently opened dialog (either confirm or component type)\n\t * @returns true if a dialog was dismissed, false if no dialogs were open\n\t */\n\tpublic dismiss(): boolean {\n\t\t// Try component dialog first (they're more likely to be on top)\n\t\tif (this.activeRawDialogs.length > 0) {\n\t\t\t// Get the most recently opened raw dialog (last in the array)\n\t\t\tconst dialog = this.activeRawDialogs[this.activeRawDialogs.length - 1]\n\t\t\tconst uid = dialog.getAttribute('uid')\n\t\t\t\n\t\t\tif (uid) {\n\t\t\t\tthis.dismissSubject.next(uid)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Fall back to confirm dialogs\n\t\tif (this.activeDialogs.length > 0) {\n\t\t\t// Get the most recently opened dialog (last in the array)\n\t\t\tconst dialog = this.activeDialogs[this.activeDialogs.length - 1]\n\t\t\tconst uid = dialog.getAttribute('uid')\n\t\t\t\n\t\t\tif (uid) {\n\t\t\t\tthis.dismissSubject.next(uid)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Close the most recently opened dialog (alias for dismiss)\n\t * @returns true if a dialog was closed, false if no dialogs were open\n\t */\n\tpublic close(): boolean {\n\t\treturn this.dismiss()\n\t}\n\n\t/**\n\t * Show a simple confirmation dialog with just a message\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\tpublic ask(message: string, event?: MouseEvent | TouchEvent): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\tmessage,\n\t\t\tposition: event,\n\t\t})\n\t}\n\n\t/**\n\t * Show a danger confirmation dialog\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\tpublic danger(options: Omit<DialogOptions, 'variant'>): Promise<boolean> {\n\t\treturn this.confirm({\n\t\t\t...options,\n\t\t\tvariant: 'danger',\n\t\t})\n\t}\n\n\t/**\n\t * Get a centered position for the dialog\n\t */\n\tprivate getCenteredPosition(): { x: number; y: number } {\n\t\treturn {\n\t\t\tx: window.innerWidth / 2,\n\t\t\ty: window.innerHeight / 2,\n\t\t}\n\t}\n\n}\n\n/**\n * Global dialog utility - provides a quick way to show dialogs\n */\nexport const $dialog = {\n\t/**\n\t * Show a confirmation dialog\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\tconfirm: (options: DialogOptions): Promise<boolean> => {\n\t\treturn DialogService.getInstance().confirm(options)\n\t},\n\n\t/**\n\t * Show a simple confirmation dialog with just a message\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\task: (message: string, event?: MouseEvent | TouchEvent): Promise<boolean> => {\n\t\treturn DialogService.getInstance().ask(message, event)\n\t},\n\n\t/**\n\t * Show a danger confirmation dialog\n\t * @returns Promise that resolves to true (confirm) or false (cancel)\n\t */\n\tdanger: (options: Omit<DialogOptions, 'variant'>): Promise<boolean> => {\n\t\treturn DialogService.getInstance().danger(options)\n\t},\n\n\t/**\n\t * Show a dialog with custom component content\n\t * @returns Promise that resolves when dialog is closed\n\t */\n\tcomponent: (\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions?: Omit<DialogOptions, 'content' | 'message'>,\n\t): Promise<boolean> => {\n\t\treturn DialogService.getInstance().component(content, options)\n\t},\n\n\t/**\n\t * Show a simple dialog without title or actions, just content\n\t * This is an alias for component() since all component dialogs are now simple by design\n\t * @returns Promise that resolves when dialog is closed\n\t */\n\tsimple: (\n\t\tcontent: TemplateResult | HTMLElement | (() => HTMLElement | TemplateResult),\n\t\toptions?: Omit<DialogOptions, 'content' | 'message' | 'title' | 'confirmText' | 'cancelText'>,\n\t): Promise<boolean> => {\n\t\treturn DialogService.getInstance().component(content, options)\n\t},\n\n\t/**\n\t * Dismiss the most recently opened dialog\n\t * @returns true if a dialog was dismissed, false if no dialogs were open\n\t */\n\tdismiss: (): boolean => {\n\t\treturn DialogService.getInstance().dismiss()\n\t},\n\n\t/**\n\t * Close the most recently opened dialog (alias for dismiss)\n\t * @returns true if a dialog was closed, false if no dialogs were open\n\t */\n\tclose: (): boolean => {\n\t\treturn DialogService.getInstance().close()\n\t},\n}\n\nexport default DialogService"],"names":["DialogWhereAreYouRicky","DialogHereMorty","DialogService","constructor","this","activeDialogs","activeRawDialogs","dialogSubject","Subject","dismissSubject","setupDialogOpeningLogic","setupDialogDismissLogic","instance","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","of","target","tap","uid","type","Date","now","Math","random","toString","substring","dispatchEvent","CustomEvent","bubbles","composed","response","dialog","targetContainer","parentElement","theme","options","ThemeWhereAreYou","ThemeHereIAm","take","document","body","createElement","setAttribute","appendChild","querySelector","confirmDialog","title","subtitle","message","confirmText","cancelText","variant","confirmColor","width","style","setProperty","content","contentContainer","slot","result","HTMLElement","render","push","directContentContainer","height","classList","add","position","getCenteredPosition","show","then","resolve","index","indexOf","splice","contentEl","removeChild","parentNode","catch","error","reject","onConfirm","_e","removeEventListener","addEventListener","onCancel","subscribe","hide","confirmIndex","rawIndex","Promise","completeOptions","DEFAULT_OPTIONS","next","dismiss","length","getAttribute","close","event","confirm","x","innerWidth","y","innerHeight","_s","$dialog","getInstance","ask","danger","component","simple"],"mappings":"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"}
|