@mieweb/ui 0.10.0-dev.9 → 0.11.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/agent/mieweb-ui.instructions.md +77 -0
- package/dist/CsvBlock-CFXSDPBI.js +9 -0
- package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
- package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
- package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
- package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
- package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
- package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
- package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
- package/dist/MermaidBlock-XCAK7IA5.js +9 -0
- package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
- package/dist/SurveyBlock-KI5JOWCL.js +9 -0
- package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
- package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
- package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
- package/dist/ag-grid.d.cts +142 -1
- package/dist/ag-grid.d.ts +142 -1
- package/dist/brands/bluehive.cjs +3 -3
- package/dist/brands/bluehive.css +3 -0
- package/dist/brands/bluehive.js +1 -1
- package/dist/brands/index.cjs +17 -17
- package/dist/brands/index.js +4 -4
- package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
- package/dist/chunk-254QK722.cjs.map +1 -0
- package/dist/{chunk-4IS3QCOQ.cjs → chunk-2FZYZ4HT.cjs} +4 -3
- package/dist/chunk-2FZYZ4HT.cjs.map +1 -0
- package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
- package/dist/chunk-2I4IRQQG.cjs.map +1 -0
- package/dist/{chunk-IT775BYG.js → chunk-2W73UQ3T.js} +4 -3
- package/dist/chunk-2W73UQ3T.js.map +1 -0
- package/dist/chunk-2X54ZLT6.js +874 -0
- package/dist/chunk-2X54ZLT6.js.map +1 -0
- package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
- package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
- package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
- package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
- package/dist/chunk-434L5RYF.js +314 -0
- package/dist/chunk-434L5RYF.js.map +1 -0
- package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
- package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
- package/dist/chunk-47P5QLX4.cjs +42 -0
- package/dist/chunk-47P5QLX4.cjs.map +1 -0
- package/dist/{chunk-CR2SDI23.cjs → chunk-4QYYWYFD.cjs} +8 -7
- package/dist/chunk-4QYYWYFD.cjs.map +1 -0
- package/dist/{chunk-76TBQDED.js → chunk-4RI3CQGE.js} +6 -6
- package/dist/{chunk-76TBQDED.js.map → chunk-4RI3CQGE.js.map} +1 -1
- package/dist/chunk-4ZB7RSMY.cjs +306 -0
- package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
- package/dist/chunk-522WJIVI.js +99 -0
- package/dist/chunk-522WJIVI.js.map +1 -0
- package/dist/chunk-56VTM4OX.js +261 -0
- package/dist/chunk-56VTM4OX.js.map +1 -0
- package/dist/chunk-5HKZR6UG.js +248 -0
- package/dist/chunk-5HKZR6UG.js.map +1 -0
- package/dist/chunk-6BNZLN4B.cjs +548 -0
- package/dist/chunk-6BNZLN4B.cjs.map +1 -0
- package/dist/chunk-6N7NMOSV.js +233 -0
- package/dist/chunk-6N7NMOSV.js.map +1 -0
- package/dist/chunk-6TTCZY3P.cjs +4 -0
- package/dist/chunk-6TTCZY3P.cjs.map +1 -0
- package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
- package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
- package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
- package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
- package/dist/chunk-7E46YDOT.cjs +122 -0
- package/dist/chunk-7E46YDOT.cjs.map +1 -0
- package/dist/chunk-7HUTR6RX.js +178 -0
- package/dist/chunk-7HUTR6RX.js.map +1 -0
- package/dist/chunk-7IRTD4JT.cjs +61 -0
- package/dist/chunk-7IRTD4JT.cjs.map +1 -0
- package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
- package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
- package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
- package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
- package/dist/chunk-7WJ6MBF5.cjs +47 -0
- package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
- package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
- package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
- package/dist/chunk-A4W5CSK7.cjs +216 -0
- package/dist/chunk-A4W5CSK7.cjs.map +1 -0
- package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
- package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
- package/dist/chunk-AJPFQF3H.cjs +896 -0
- package/dist/chunk-AJPFQF3H.cjs.map +1 -0
- package/dist/chunk-AMYFRY7K.js +3 -0
- package/dist/chunk-AMYFRY7K.js.map +1 -0
- package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
- package/dist/chunk-ANMX7YDL.cjs.map +1 -0
- package/dist/chunk-ARIJ5OHW.cjs +139 -0
- package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
- package/dist/{chunk-GD7EBGC4.cjs → chunk-ATRW3J5Z.cjs} +49 -19
- package/dist/chunk-ATRW3J5Z.cjs.map +1 -0
- package/dist/chunk-BJ6ABRSQ.cjs +256 -0
- package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
- package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
- package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
- package/dist/chunk-BXRQ6HEP.cjs +4 -0
- package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
- package/dist/chunk-CBBKWRLG.js +213 -0
- package/dist/chunk-CBBKWRLG.js.map +1 -0
- package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
- package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
- package/dist/chunk-CLQW724U.cjs +271 -0
- package/dist/chunk-CLQW724U.cjs.map +1 -0
- package/dist/chunk-CPDNX3LS.cjs +47 -0
- package/dist/chunk-CPDNX3LS.cjs.map +1 -0
- package/dist/chunk-CVNPNZMX.js +44 -0
- package/dist/chunk-CVNPNZMX.js.map +1 -0
- package/dist/chunk-DGHS5IVD.js +305 -0
- package/dist/chunk-DGHS5IVD.js.map +1 -0
- package/dist/chunk-DHGCLPFZ.js +91 -0
- package/dist/chunk-DHGCLPFZ.js.map +1 -0
- package/dist/chunk-DO2YN46R.cjs +201 -0
- package/dist/chunk-DO2YN46R.cjs.map +1 -0
- package/dist/chunk-DVDT7TX7.js +151 -0
- package/dist/chunk-DVDT7TX7.js.map +1 -0
- package/dist/chunk-DXEPYK3I.cjs +92 -0
- package/dist/chunk-DXEPYK3I.cjs.map +1 -0
- package/dist/chunk-DXFP53KF.js +283 -0
- package/dist/chunk-DXFP53KF.js.map +1 -0
- package/dist/chunk-EACNRR3C.cjs +4 -0
- package/dist/chunk-EACNRR3C.cjs.map +1 -0
- package/dist/{chunk-TVTIGV7Q.js → chunk-EBKE4DLU.js} +18 -11
- package/dist/chunk-EBKE4DLU.js.map +1 -0
- package/dist/{chunk-ASSDGS4F.cjs → chunk-ECYIDXG6.cjs} +254 -4
- package/dist/chunk-ECYIDXG6.cjs.map +1 -0
- package/dist/chunk-EGPDT7SM.js +195 -0
- package/dist/chunk-EGPDT7SM.js.map +1 -0
- package/dist/chunk-EPCUPHEO.js +193 -0
- package/dist/chunk-EPCUPHEO.js.map +1 -0
- package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
- package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
- package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
- package/dist/chunk-F4N67NAF.js.map +1 -0
- package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
- package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
- package/dist/{chunk-XVW5DPPP.js → chunk-F7SZSOB3.js} +4 -3
- package/dist/chunk-F7SZSOB3.js.map +1 -0
- package/dist/chunk-FBCDYTWM.js +385 -0
- package/dist/chunk-FBCDYTWM.js.map +1 -0
- package/dist/{chunk-KQUI4BGS.cjs → chunk-FBN2VHUV.cjs} +68 -61
- package/dist/chunk-FBN2VHUV.cjs.map +1 -0
- package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
- package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
- package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
- package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
- package/dist/{chunk-OD47TTAW.cjs → chunk-FMEA6WAY.cjs} +9 -9
- package/dist/{chunk-OD47TTAW.cjs.map → chunk-FMEA6WAY.cjs.map} +1 -1
- package/dist/chunk-FSGJXCBG.cjs +318 -0
- package/dist/chunk-FSGJXCBG.cjs.map +1 -0
- package/dist/chunk-FSWHZY3T.cjs +328 -0
- package/dist/chunk-FSWHZY3T.cjs.map +1 -0
- package/dist/chunk-FTEZNCRI.js +29 -0
- package/dist/chunk-FTEZNCRI.js.map +1 -0
- package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
- package/dist/chunk-GF2BE4FB.cjs.map +1 -0
- package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
- package/dist/chunk-GKDHMNUA.cjs.map +1 -0
- package/dist/{chunk-URAQIF67.cjs → chunk-GM32IDVL.cjs} +6 -6
- package/dist/{chunk-URAQIF67.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
- package/dist/chunk-GVM6DTR5.js +90 -0
- package/dist/chunk-GVM6DTR5.js.map +1 -0
- package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
- package/dist/chunk-GW4RFJZ5.js.map +1 -0
- package/dist/chunk-GY5SP4ST.js +3 -0
- package/dist/chunk-GY5SP4ST.js.map +1 -0
- package/dist/{chunk-OCSCBB52.cjs → chunk-GYXSF6BJ.cjs} +10 -10
- package/dist/{chunk-OCSCBB52.cjs.map → chunk-GYXSF6BJ.cjs.map} +1 -1
- package/dist/chunk-H2Y7HZV5.js +3 -0
- package/dist/chunk-H2Y7HZV5.js.map +1 -0
- package/dist/chunk-H3P7POFC.cjs +337 -0
- package/dist/chunk-H3P7POFC.cjs.map +1 -0
- package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
- package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
- package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
- package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
- package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
- package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
- package/dist/chunk-HNFFFFYH.cjs +114 -0
- package/dist/chunk-HNFFFFYH.cjs.map +1 -0
- package/dist/chunk-HNXLLDPN.js +25 -0
- package/dist/chunk-HNXLLDPN.js.map +1 -0
- package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
- package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
- package/dist/chunk-IEZXJWHJ.cjs +306 -0
- package/dist/chunk-IEZXJWHJ.cjs.map +1 -0
- package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
- package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
- package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
- package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
- package/dist/chunk-IWRBJHO3.cjs +51 -0
- package/dist/chunk-IWRBJHO3.cjs.map +1 -0
- package/dist/{chunk-2IZLKPUW.js → chunk-J2CKXXOW.js} +27 -6
- package/dist/chunk-J2CKXXOW.js.map +1 -0
- package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
- package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
- package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
- package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
- package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
- package/dist/chunk-JUJGWUAN.js.map +1 -0
- package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
- package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
- package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
- package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
- package/dist/chunk-KIVEYQGA.cjs +319 -0
- package/dist/chunk-KIVEYQGA.cjs.map +1 -0
- package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
- package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
- package/dist/{chunk-4A3W4TQF.js → chunk-KVTKSPX5.js} +254 -4
- package/dist/chunk-KVTKSPX5.js.map +1 -0
- package/dist/{chunk-6EN3IQQI.cjs → chunk-L5Y52F2E.cjs} +9 -9
- package/dist/chunk-L5Y52F2E.cjs.map +1 -0
- package/dist/chunk-L6K4PRZK.cjs +4 -0
- package/dist/chunk-L6K4PRZK.cjs.map +1 -0
- package/dist/chunk-LAN5VWGC.js +2540 -0
- package/dist/chunk-LAN5VWGC.js.map +1 -0
- package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
- package/dist/chunk-LC3JL2HB.cjs.map +1 -0
- package/dist/chunk-LRAAJRE7.cjs +2707 -0
- package/dist/chunk-LRAAJRE7.cjs.map +1 -0
- package/dist/{chunk-OE5CKRUC.js → chunk-LX323IMT.js} +34 -4
- package/dist/chunk-LX323IMT.js.map +1 -0
- package/dist/chunk-M3VPGJMV.js +283 -0
- package/dist/chunk-M3VPGJMV.js.map +1 -0
- package/dist/{chunk-DVOQ3JNO.js → chunk-ME7EVT6F.js} +23 -9
- package/dist/chunk-ME7EVT6F.js.map +1 -0
- package/dist/{chunk-SQJFBZ42.js → chunk-MUYUFOGL.js} +8 -7
- package/dist/chunk-MUYUFOGL.js.map +1 -0
- package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
- package/dist/chunk-N54FYWG6.js.map +1 -0
- package/dist/chunk-N5JDL4VE.js +3 -0
- package/dist/chunk-N5JDL4VE.js.map +1 -0
- package/dist/{chunk-ZPSJ2UV6.cjs → chunk-NAH65KPK.cjs} +8 -8
- package/dist/{chunk-ZPSJ2UV6.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
- package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
- package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
- package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
- package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
- package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
- package/dist/chunk-O6XDA3SI.js.map +1 -0
- package/dist/chunk-OIF34LEN.cjs +425 -0
- package/dist/chunk-OIF34LEN.cjs.map +1 -0
- package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
- package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
- package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
- package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
- package/dist/{chunk-ZGRCSNPK.js → chunk-OYUIEJPN.js} +17 -8
- package/dist/chunk-OYUIEJPN.js.map +1 -0
- package/dist/chunk-P22YCUVM.cjs +4 -0
- package/dist/chunk-P22YCUVM.cjs.map +1 -0
- package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
- package/dist/chunk-P4E3K3ND.js.map +1 -0
- package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
- package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
- package/dist/{chunk-SGFYA22I.cjs → chunk-PINIBEIU.cjs} +21 -12
- package/dist/chunk-PINIBEIU.cjs.map +1 -0
- package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
- package/dist/chunk-PJEL5ZZV.js.map +1 -0
- package/dist/chunk-PWXDRFJL.cjs +218 -0
- package/dist/chunk-PWXDRFJL.cjs.map +1 -0
- package/dist/{chunk-XZNN3S3S.cjs → chunk-PYI2IWNX.cjs} +4 -4
- package/dist/{chunk-XZNN3S3S.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
- package/dist/chunk-Q3YVLO52.cjs +174 -0
- package/dist/chunk-Q3YVLO52.cjs.map +1 -0
- package/dist/{chunk-MNILXWVY.js → chunk-QJ2L5RU6.js} +7 -7
- package/dist/{chunk-MNILXWVY.js.map → chunk-QJ2L5RU6.js.map} +1 -1
- package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
- package/dist/chunk-QX6AAVDE.cjs.map +1 -0
- package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
- package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
- package/dist/chunk-RLVYWUXG.js +115 -0
- package/dist/chunk-RLVYWUXG.js.map +1 -0
- package/dist/{chunk-HACNIFO3.js → chunk-RM2HPQIC.js} +77 -14
- package/dist/chunk-RM2HPQIC.js.map +1 -0
- package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
- package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
- package/dist/{chunk-G4D6CLBT.js → chunk-RZSSQ7AT.js} +3 -3
- package/dist/{chunk-G4D6CLBT.js.map → chunk-RZSSQ7AT.js.map} +1 -1
- package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
- package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
- package/dist/{chunk-P7UMS4E6.cjs → chunk-S7AMZ4RD.cjs} +23 -9
- package/dist/chunk-S7AMZ4RD.cjs.map +1 -0
- package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
- package/dist/chunk-SHBCUXFS.cjs.map +1 -0
- package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
- package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
- package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
- package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
- package/dist/chunk-SZSRGUVO.js +402 -0
- package/dist/chunk-SZSRGUVO.js.map +1 -0
- package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
- package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
- package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
- package/dist/chunk-TI3TQQ7F.js.map +1 -0
- package/dist/{chunk-ACCAXVOG.js → chunk-TJ4GWQPM.js} +137 -57
- package/dist/chunk-TJ4GWQPM.js.map +1 -0
- package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
- package/dist/chunk-TWQSMUE6.js.map +1 -0
- package/dist/{chunk-X4XPNTCZ.cjs → chunk-U2RS574O.cjs} +139 -59
- package/dist/chunk-U2RS574O.cjs.map +1 -0
- package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
- package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
- package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
- package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
- package/dist/{chunk-DZ5HFLRC.js → chunk-UNFDIBKJ.js} +3 -3
- package/dist/{chunk-DZ5HFLRC.js.map → chunk-UNFDIBKJ.js.map} +1 -1
- package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
- package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
- package/dist/chunk-UTIPENPW.cjs +286 -0
- package/dist/chunk-UTIPENPW.cjs.map +1 -0
- package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
- package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
- package/dist/{chunk-Y5HFM7LO.js → chunk-VOEXGDL5.js} +6 -6
- package/dist/chunk-VOEXGDL5.js.map +1 -0
- package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
- package/dist/chunk-VSRO4PAI.js.map +1 -0
- package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
- package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
- package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
- package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
- package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
- package/dist/chunk-VXW7D5LR.cjs.map +1 -0
- package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
- package/dist/chunk-WFBUBT54.js.map +1 -0
- package/dist/chunk-WQHBMZSC.js +295 -0
- package/dist/chunk-WQHBMZSC.js.map +1 -0
- package/dist/chunk-WSMBIXPU.cjs +2573 -0
- package/dist/chunk-WSMBIXPU.cjs.map +1 -0
- package/dist/chunk-X5JOEZVR.js +525 -0
- package/dist/chunk-X5JOEZVR.js.map +1 -0
- package/dist/chunk-XBAAHOCP.js +3 -0
- package/dist/chunk-XBAAHOCP.js.map +1 -0
- package/dist/chunk-XDU65GLW.js +21 -0
- package/dist/chunk-XDU65GLW.js.map +1 -0
- package/dist/{chunk-5GUOOLPR.cjs → chunk-XHK5VZ4L.cjs} +29 -8
- package/dist/chunk-XHK5VZ4L.cjs.map +1 -0
- package/dist/chunk-XI74P5F2.cjs +424 -0
- package/dist/chunk-XI74P5F2.cjs.map +1 -0
- package/dist/chunk-XNPDZANN.cjs +238 -0
- package/dist/chunk-XNPDZANN.cjs.map +1 -0
- package/dist/{chunk-XDIMTPZU.cjs → chunk-XPWFIDZM.cjs} +4 -3
- package/dist/chunk-XPWFIDZM.cjs.map +1 -0
- package/dist/{chunk-FS4VZUFV.cjs → chunk-XRVMYT5G.cjs} +77 -13
- package/dist/chunk-XRVMYT5G.cjs.map +1 -0
- package/dist/chunk-XXA4NZUC.js +3 -0
- package/dist/chunk-XXA4NZUC.js.map +1 -0
- package/dist/chunk-Y424YL55.js +59 -0
- package/dist/chunk-Y424YL55.js.map +1 -0
- package/dist/chunk-Y7ZJZLJY.js +2657 -0
- package/dist/chunk-Y7ZJZLJY.js.map +1 -0
- package/dist/chunk-YG7BR76Y.js +281 -0
- package/dist/chunk-YG7BR76Y.js.map +1 -0
- package/dist/chunk-YGS2TRMP.js +38 -0
- package/dist/chunk-YGS2TRMP.js.map +1 -0
- package/dist/chunk-YUMOM3KE.js +167 -0
- package/dist/chunk-YUMOM3KE.js.map +1 -0
- package/dist/chunk-YVKBXNPK.js +41 -0
- package/dist/chunk-YVKBXNPK.js.map +1 -0
- package/dist/chunk-YW2AKBLS.cjs +23 -0
- package/dist/chunk-YW2AKBLS.cjs.map +1 -0
- package/dist/{chunk-3M7TAXNR.js → chunk-YZCM7CXK.js} +3 -3
- package/dist/{chunk-3M7TAXNR.js.map → chunk-YZCM7CXK.js.map} +1 -1
- package/dist/chunk-Z3WMDVMR.cjs +46 -0
- package/dist/chunk-Z3WMDVMR.cjs.map +1 -0
- package/dist/chunk-ZNUMOJOI.cjs +4 -0
- package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
- package/dist/components/Accordion/index.cjs +2 -2
- package/dist/components/Accordion/index.d.cts +6 -0
- package/dist/components/Accordion/index.d.ts +6 -0
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/ActionPlan/index.cjs +34 -0
- package/dist/components/ActionPlan/index.cjs.map +1 -0
- package/dist/components/ActionPlan/index.d.cts +65 -0
- package/dist/components/ActionPlan/index.d.ts +65 -0
- package/dist/components/ActionPlan/index.js +21 -0
- package/dist/components/ActionPlan/index.js.map +1 -0
- package/dist/components/ActivityFeed/index.cjs +31 -0
- package/dist/components/ActivityFeed/index.cjs.map +1 -0
- package/dist/components/ActivityFeed/index.d.cts +99 -0
- package/dist/components/ActivityFeed/index.d.ts +99 -0
- package/dist/components/ActivityFeed/index.js +18 -0
- package/dist/components/ActivityFeed/index.js.map +1 -0
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/AlertDialog/index.cjs +19 -5
- package/dist/components/AlertDialog/index.d.cts +94 -16
- package/dist/components/AlertDialog/index.d.ts +94 -16
- package/dist/components/AlertDialog/index.js +6 -4
- package/dist/components/AssociationList/index.cjs +29 -0
- package/dist/components/AssociationList/index.cjs.map +1 -0
- package/dist/components/AssociationList/index.d.cts +50 -0
- package/dist/components/AssociationList/index.d.ts +50 -0
- package/dist/components/AssociationList/index.js +16 -0
- package/dist/components/AssociationList/index.js.map +1 -0
- package/dist/components/AudioRecorder/index.d.cts +2 -2
- package/dist/components/AudioRecorder/index.d.ts +2 -2
- package/dist/components/Autocomplete/index.d.cts +8 -2
- package/dist/components/Autocomplete/index.d.ts +8 -2
- package/dist/components/Avatar/index.cjs +9 -7
- package/dist/components/Avatar/index.d.cts +46 -15
- package/dist/components/Avatar/index.d.ts +46 -15
- package/dist/components/Avatar/index.js +3 -1
- package/dist/components/AvatarGroup/index.cjs +20 -0
- package/dist/components/AvatarGroup/index.cjs.map +1 -0
- package/dist/components/AvatarGroup/index.d.cts +57 -0
- package/dist/components/AvatarGroup/index.d.ts +57 -0
- package/dist/components/AvatarGroup/index.js +7 -0
- package/dist/components/AvatarGroup/index.js.map +1 -0
- package/dist/components/Badge/index.cjs +3 -3
- package/dist/components/Badge/index.d.cts +16 -2
- package/dist/components/Badge/index.d.ts +16 -2
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/BoardView/index.cjs +5 -4
- package/dist/components/BoardView/index.d.cts +2 -3
- package/dist/components/BoardView/index.d.ts +2 -3
- package/dist/components/BoardView/index.js +2 -1
- package/dist/components/Button/index.cjs +5 -3
- package/dist/components/Button/index.d.cts +2 -1
- package/dist/components/Button/index.d.ts +2 -1
- package/dist/components/Button/index.js +3 -1
- package/dist/components/CalendarHeatmap/index.cjs +18 -0
- package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
- package/dist/components/CalendarHeatmap/index.d.cts +47 -0
- package/dist/components/CalendarHeatmap/index.d.ts +47 -0
- package/dist/components/CalendarHeatmap/index.js +5 -0
- package/dist/components/CalendarHeatmap/index.js.map +1 -0
- package/dist/components/CalendarView/index.cjs +6 -4
- package/dist/components/CalendarView/index.d.cts +1 -2
- package/dist/components/CalendarView/index.d.ts +1 -2
- package/dist/components/CalendarView/index.js +4 -2
- package/dist/components/Card/index.d.cts +3 -3
- package/dist/components/Card/index.d.ts +3 -3
- package/dist/components/ClampedText/index.cjs +3 -2
- package/dist/components/ClampedText/index.js +2 -1
- package/dist/components/CollabStatus/index.cjs +6 -4
- package/dist/components/CollabStatus/index.d.cts +11 -0
- package/dist/components/CollabStatus/index.d.ts +11 -0
- package/dist/components/CollabStatus/index.js +3 -1
- package/dist/components/Collapsible/index.cjs +6 -6
- package/dist/components/Collapsible/index.d.cts +6 -0
- package/dist/components/Collapsible/index.d.ts +6 -0
- package/dist/components/Collapsible/index.js +3 -3
- package/dist/components/CompletenessMeter/index.cjs +23 -0
- package/dist/components/CompletenessMeter/index.cjs.map +1 -0
- package/dist/components/CompletenessMeter/index.d.cts +52 -0
- package/dist/components/CompletenessMeter/index.d.ts +52 -0
- package/dist/components/CompletenessMeter/index.js +6 -0
- package/dist/components/CompletenessMeter/index.js.map +1 -0
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- package/dist/components/CustomizableDashboard/index.cjs +12 -10
- package/dist/components/CustomizableDashboard/index.js +5 -3
- package/dist/components/DateInput/index.d.cts +36 -4
- package/dist/components/DateInput/index.d.ts +36 -4
- package/dist/components/Dropdown/index.cjs +12 -10
- package/dist/components/Dropdown/index.d.cts +6 -4
- package/dist/components/Dropdown/index.d.ts +6 -4
- package/dist/components/Dropdown/index.js +5 -3
- package/dist/components/EmailEditor/index.cjs +68 -0
- package/dist/components/EmailEditor/index.cjs.map +1 -0
- package/dist/components/EmailEditor/index.d.cts +347 -0
- package/dist/components/EmailEditor/index.d.ts +347 -0
- package/dist/components/EmailEditor/index.js +27 -0
- package/dist/components/EmailEditor/index.js.map +1 -0
- package/dist/components/FieldHistory/index.cjs +34 -0
- package/dist/components/FieldHistory/index.cjs.map +1 -0
- package/dist/components/FieldHistory/index.d.cts +66 -0
- package/dist/components/FieldHistory/index.d.ts +66 -0
- package/dist/components/FieldHistory/index.js +21 -0
- package/dist/components/FieldHistory/index.js.map +1 -0
- package/dist/components/FloatingWindow/index.cjs +6 -4
- package/dist/components/FloatingWindow/index.js +4 -2
- package/dist/components/GanttView/index.d.cts +1 -2
- package/dist/components/GanttView/index.d.ts +1 -2
- package/dist/components/GlossaryTooltip/index.cjs +3 -3
- package/dist/components/GlossaryTooltip/index.js +2 -2
- package/dist/components/InlineEdit/index.cjs +20 -0
- package/dist/components/InlineEdit/index.cjs.map +1 -0
- package/dist/components/InlineEdit/index.d.cts +56 -0
- package/dist/components/InlineEdit/index.d.ts +56 -0
- package/dist/components/InlineEdit/index.js +7 -0
- package/dist/components/InlineEdit/index.js.map +1 -0
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
- package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
- package/dist/components/ListView/index.cjs +6 -4
- package/dist/components/ListView/index.d.cts +91 -4
- package/dist/components/ListView/index.d.ts +91 -4
- package/dist/components/ListView/index.js +4 -2
- package/dist/components/LogoUploader/index.cjs +18 -0
- package/dist/components/LogoUploader/index.cjs.map +1 -0
- package/dist/components/LogoUploader/index.d.cts +49 -0
- package/dist/components/LogoUploader/index.d.ts +49 -0
- package/dist/components/LogoUploader/index.js +5 -0
- package/dist/components/LogoUploader/index.js.map +1 -0
- package/dist/components/Markdown/index.cjs +21 -19
- package/dist/components/Markdown/index.js +9 -7
- package/dist/components/MediaEditor/index.cjs +16 -14
- package/dist/components/MediaEditor/index.d.cts +91 -2
- package/dist/components/MediaEditor/index.d.ts +91 -2
- package/dist/components/MediaEditor/index.js +11 -9
- package/dist/components/MediaFeed/index.cjs +29 -0
- package/dist/components/MediaFeed/index.cjs.map +1 -0
- package/dist/components/MediaFeed/index.d.cts +104 -0
- package/dist/components/MediaFeed/index.d.ts +104 -0
- package/dist/components/MediaFeed/index.js +20 -0
- package/dist/components/MediaFeed/index.js.map +1 -0
- package/dist/components/MediaPlayer/index.cjs +8 -6
- package/dist/components/MediaPlayer/index.d.cts +19 -1
- package/dist/components/MediaPlayer/index.d.ts +19 -1
- package/dist/components/MediaPlayer/index.js +5 -3
- package/dist/components/MegaMenu/index.cjs +7 -5
- package/dist/components/MegaMenu/index.js +4 -2
- package/dist/components/Modal/index.cjs +10 -10
- package/dist/components/Modal/index.js +2 -2
- package/dist/components/Pagination/index.d.cts +1 -1
- package/dist/components/Pagination/index.d.ts +1 -1
- package/dist/components/PhiMask/index.cjs +18 -0
- package/dist/components/PhiMask/index.cjs.map +1 -0
- package/dist/components/PhiMask/index.d.cts +45 -0
- package/dist/components/PhiMask/index.d.ts +45 -0
- package/dist/components/PhiMask/index.js +5 -0
- package/dist/components/PhiMask/index.js.map +1 -0
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.d.cts +8 -2
- package/dist/components/Progress/index.d.ts +8 -2
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/PropertyList/index.cjs +25 -0
- package/dist/components/PropertyList/index.cjs.map +1 -0
- package/dist/components/PropertyList/index.d.cts +87 -0
- package/dist/components/PropertyList/index.d.ts +87 -0
- package/dist/components/PropertyList/index.js +12 -0
- package/dist/components/PropertyList/index.js.map +1 -0
- package/dist/components/Q/index.d.cts +2 -2
- package/dist/components/Q/index.d.ts +2 -2
- package/dist/components/QuickAction/index.d.cts +1 -1
- package/dist/components/QuickAction/index.d.ts +1 -1
- package/dist/components/RadialExplorer/index.cjs +7 -5
- package/dist/components/RadialExplorer/index.js +6 -4
- package/dist/components/Rating/index.cjs +28 -0
- package/dist/components/Rating/index.cjs.map +1 -0
- package/dist/components/Rating/index.d.cts +85 -0
- package/dist/components/Rating/index.d.ts +85 -0
- package/dist/components/Rating/index.js +7 -0
- package/dist/components/Rating/index.js.map +1 -0
- package/dist/components/RecordButton/index.d.cts +1 -1
- package/dist/components/RecordButton/index.d.ts +1 -1
- package/dist/components/RecordHeader/index.cjs +30 -0
- package/dist/components/RecordHeader/index.cjs.map +1 -0
- package/dist/components/RecordHeader/index.d.cts +96 -0
- package/dist/components/RecordHeader/index.d.ts +96 -0
- package/dist/components/RecordHeader/index.js +17 -0
- package/dist/components/RecordHeader/index.js.map +1 -0
- package/dist/components/RecordLayout/index.cjs +22 -0
- package/dist/components/RecordLayout/index.cjs.map +1 -0
- package/dist/components/RecordLayout/index.d.cts +40 -0
- package/dist/components/RecordLayout/index.d.ts +40 -0
- package/dist/components/RecordLayout/index.js +9 -0
- package/dist/components/RecordLayout/index.js.map +1 -0
- package/dist/components/RichTextEditor/index.cjs +12 -8
- package/dist/components/RichTextEditor/index.d.cts +12 -2
- package/dist/components/RichTextEditor/index.d.ts +12 -2
- package/dist/components/RichTextEditor/index.js +9 -5
- package/dist/components/ScrollArea/index.d.cts +1 -1
- package/dist/components/ScrollArea/index.d.ts +1 -1
- package/dist/components/SectionSpyNav/index.cjs +5 -3
- package/dist/components/SectionSpyNav/index.js +4 -2
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.d.cts +2 -2
- package/dist/components/Select/index.d.ts +2 -2
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Skeleton/index.d.cts +1 -1
- package/dist/components/Skeleton/index.d.ts +1 -1
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/SliderCalculator/index.cjs +4 -4
- package/dist/components/SliderCalculator/index.js +2 -2
- package/dist/components/SourceTip/index.cjs +3 -3
- package/dist/components/SourceTip/index.js +2 -2
- package/dist/components/Spinner/index.d.cts +2 -2
- package/dist/components/Spinner/index.d.ts +2 -2
- package/dist/components/SuperChat/index.cjs +735 -322
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.d.cts +126 -8
- package/dist/components/SuperChat/index.d.ts +126 -8
- package/dist/components/SuperChat/index.js +721 -308
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +8 -6
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.d.cts +2 -3
- package/dist/components/SuperChat/plugins/index.d.ts +2 -3
- package/dist/components/SuperChat/plugins/index.js +7 -5
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/components/Tabs/index.cjs +10 -7
- package/dist/components/Tabs/index.d.cts +12 -1
- package/dist/components/Tabs/index.d.ts +12 -1
- package/dist/components/Tabs/index.js +4 -1
- package/dist/components/TagEditor/index.cjs +22 -0
- package/dist/components/TagEditor/index.cjs.map +1 -0
- package/dist/components/TagEditor/index.d.cts +46 -0
- package/dist/components/TagEditor/index.d.ts +46 -0
- package/dist/components/TagEditor/index.js +9 -0
- package/dist/components/TagEditor/index.js.map +1 -0
- package/dist/components/Text/index.d.cts +3 -3
- package/dist/components/Text/index.d.ts +3 -3
- package/dist/components/Textarea/index.d.cts +2 -2
- package/dist/components/Textarea/index.d.ts +2 -2
- package/dist/components/ThemeProvider/index.cjs +9 -9
- package/dist/components/ThemeProvider/index.d.cts +3 -1
- package/dist/components/ThemeProvider/index.d.ts +3 -1
- package/dist/components/ThemeProvider/index.js +3 -3
- package/dist/components/Tooltip/index.cjs +3 -3
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/TranscriptView/index.d.cts +85 -4
- package/dist/components/TranscriptView/index.d.ts +85 -4
- package/dist/components/UserPicker/index.cjs +24 -0
- package/dist/components/UserPicker/index.cjs.map +1 -0
- package/dist/components/UserPicker/index.d.cts +60 -0
- package/dist/components/UserPicker/index.d.ts +60 -0
- package/dist/components/UserPicker/index.js +11 -0
- package/dist/components/UserPicker/index.js.map +1 -0
- package/dist/components/VideoCard/index.cjs +4 -4
- package/dist/components/VideoCard/index.js +2 -2
- package/dist/components/ViewSet/index.cjs +10 -7
- package/dist/components/ViewSet/index.d.cts +120 -8
- package/dist/components/ViewSet/index.d.ts +120 -8
- package/dist/components/ViewSet/index.js +9 -6
- package/dist/components/ViewSwitcher/index.cjs +4 -3
- package/dist/components/ViewSwitcher/index.d.cts +1 -2
- package/dist/components/ViewSwitcher/index.d.ts +1 -2
- package/dist/components/ViewSwitcher/index.js +2 -1
- package/dist/components/YearTimeline/index.cjs +5 -5
- package/dist/components/YearTimeline/index.js +1 -1
- package/dist/datavis.cjs +6 -4
- package/dist/datavis.cjs.map +1 -1
- package/dist/datavis.d.cts +167 -13
- package/dist/datavis.d.ts +167 -13
- package/dist/datavis.js +4 -2
- package/dist/datavis.js.map +1 -1
- package/dist/deck.cjs +3374 -0
- package/dist/deck.cjs.map +1 -0
- package/dist/deck.d.cts +712 -0
- package/dist/deck.d.ts +712 -0
- package/dist/deck.js +3330 -0
- package/dist/deck.js.map +1 -0
- package/dist/esheet.cjs +20 -16
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.d.cts +183 -1
- package/dist/esheet.d.ts +183 -1
- package/dist/esheet.js +17 -13
- package/dist/esheet.js.map +1 -1
- package/dist/globe.cjs +2 -2
- package/dist/globe.js +1 -1
- package/dist/{hey-buddy-INNUFFJJ.cjs → hey-buddy-5WOBYZRJ.cjs} +22 -11
- package/dist/hey-buddy-5WOBYZRJ.cjs.map +1 -0
- package/dist/{hey-buddy-V6FC5UKB.js → hey-buddy-AHUHCDBC.js} +22 -11
- package/dist/hey-buddy-AHUHCDBC.js.map +1 -0
- package/dist/hooks/index.cjs +88 -33
- package/dist/hooks/index.d.cts +592 -36
- package/dist/hooks/index.d.ts +592 -36
- package/dist/hooks/index.js +9 -6
- package/dist/icons-wBacj6BW.d.cts +142 -0
- package/dist/icons-wBacj6BW.d.ts +142 -0
- package/dist/index.cjs +2056 -1349
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10401 -637
- package/dist/index.d.ts +10401 -637
- package/dist/index.js +674 -352
- package/dist/index.js.map +1 -1
- package/dist/kerebron.css +115 -0
- package/dist/maps.cjs +160 -0
- package/dist/maps.cjs.map +1 -0
- package/dist/maps.d.cts +42 -0
- package/dist/maps.d.ts +42 -0
- package/dist/maps.js +138 -0
- package/dist/maps.js.map +1 -0
- package/dist/motion.cjs +7 -7
- package/dist/motion.d.cts +186 -2
- package/dist/motion.d.ts +186 -2
- package/dist/motion.js +2 -2
- package/dist/org-chart.cjs +1303 -0
- package/dist/org-chart.cjs.map +1 -0
- package/dist/org-chart.d.cts +164 -0
- package/dist/org-chart.d.ts +164 -0
- package/dist/org-chart.js +1278 -0
- package/dist/org-chart.js.map +1 -0
- package/dist/q.d.cts +25 -3
- package/dist/q.d.ts +25 -3
- package/dist/styles/effects.css +133 -0
- package/dist/styles/init.css +22 -3
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/templates.cjs +156 -0
- package/dist/templates.cjs.map +1 -0
- package/dist/templates.d.cts +734 -0
- package/dist/templates.d.ts +734 -0
- package/dist/templates.js +11 -0
- package/dist/templates.js.map +1 -0
- package/dist/{types-CbWXIKbe.d.cts → types-CDeBNZiE.d.cts} +1 -28
- package/dist/{types-CbWXIKbe.d.ts → types-CDeBNZiE.d.ts} +1 -28
- package/dist/types-Cx1FHLq2.d.cts +548 -0
- package/dist/types-Cx1FHLq2.d.ts +548 -0
- package/dist/types-DsdZvEI1.d.cts +92 -0
- package/dist/types-DsdZvEI1.d.ts +92 -0
- package/dist/utils/index.cjs +9 -9
- package/dist/utils/index.d.cts +13 -2
- package/dist/utils/index.d.ts +13 -2
- package/dist/utils/index.js +1 -1
- package/package.json +79 -15
- package/dist/Animated-XmH6k8pZ.d.cts +0 -188
- package/dist/Animated-XmH6k8pZ.d.ts +0 -188
- package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
- package/dist/CsvBlock-UWPMTLE2.js +0 -7
- package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
- package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
- package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
- package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
- package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
- package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
- package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
- package/dist/SurveyBlock-4DO62RBT.js +0 -7
- package/dist/chunk-2IZLKPUW.js.map +0 -1
- package/dist/chunk-3T7QGLNB.js.map +0 -1
- package/dist/chunk-4A3W4TQF.js.map +0 -1
- package/dist/chunk-4IS3QCOQ.cjs.map +0 -1
- package/dist/chunk-5GUOOLPR.cjs.map +0 -1
- package/dist/chunk-5JJ2DAE4.js.map +0 -1
- package/dist/chunk-6EN3IQQI.cjs.map +0 -1
- package/dist/chunk-6HFFWEM3.cjs +0 -22
- package/dist/chunk-6HFFWEM3.cjs.map +0 -1
- package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
- package/dist/chunk-7ZVTLTJF.js +0 -109
- package/dist/chunk-7ZVTLTJF.js.map +0 -1
- package/dist/chunk-ACCAXVOG.js.map +0 -1
- package/dist/chunk-AR7AKDM2.cjs +0 -143
- package/dist/chunk-AR7AKDM2.cjs.map +0 -1
- package/dist/chunk-ASSDGS4F.cjs.map +0 -1
- package/dist/chunk-AWJBOND5.js +0 -130
- package/dist/chunk-AWJBOND5.js.map +0 -1
- package/dist/chunk-BMSG4NBH.js +0 -56
- package/dist/chunk-BMSG4NBH.js.map +0 -1
- package/dist/chunk-CEQJGUAS.js.map +0 -1
- package/dist/chunk-CR2SDI23.cjs.map +0 -1
- package/dist/chunk-DVOQ3JNO.js.map +0 -1
- package/dist/chunk-E4IBHYJ7.cjs +0 -80
- package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
- package/dist/chunk-FS4VZUFV.cjs.map +0 -1
- package/dist/chunk-GD7EBGC4.cjs.map +0 -1
- package/dist/chunk-GOALNQZ2.js.map +0 -1
- package/dist/chunk-HACNIFO3.js.map +0 -1
- package/dist/chunk-HB7C7NB5.js +0 -20
- package/dist/chunk-HB7C7NB5.js.map +0 -1
- package/dist/chunk-HZ4MBUC3.js.map +0 -1
- package/dist/chunk-IT775BYG.js.map +0 -1
- package/dist/chunk-JEIW7BSV.cjs.map +0 -1
- package/dist/chunk-JYZW2PZS.cjs.map +0 -1
- package/dist/chunk-KQUI4BGS.cjs.map +0 -1
- package/dist/chunk-KRU6IGV7.js.map +0 -1
- package/dist/chunk-NV2CWBI2.cjs.map +0 -1
- package/dist/chunk-OE5CKRUC.js.map +0 -1
- package/dist/chunk-P2CA3XGI.js.map +0 -1
- package/dist/chunk-P7UMS4E6.cjs.map +0 -1
- package/dist/chunk-SGFYA22I.cjs.map +0 -1
- package/dist/chunk-SQHMGT4W.js.map +0 -1
- package/dist/chunk-SQJFBZ42.js.map +0 -1
- package/dist/chunk-SVSHA7XV.js.map +0 -1
- package/dist/chunk-TVTIGV7Q.js.map +0 -1
- package/dist/chunk-VKELAMAZ.js.map +0 -1
- package/dist/chunk-VNYW4C4J.cjs.map +0 -1
- package/dist/chunk-VOKVG3ER.js +0 -78
- package/dist/chunk-VOKVG3ER.js.map +0 -1
- package/dist/chunk-VPIYTQCV.cjs.map +0 -1
- package/dist/chunk-VPWJCJCX.cjs.map +0 -1
- package/dist/chunk-VROIMIHB.cjs.map +0 -1
- package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
- package/dist/chunk-X4LBUPJO.cjs.map +0 -1
- package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
- package/dist/chunk-XCP454Q6.js.map +0 -1
- package/dist/chunk-XDIMTPZU.cjs.map +0 -1
- package/dist/chunk-XEAT7XJG.cjs.map +0 -1
- package/dist/chunk-XVW5DPPP.js.map +0 -1
- package/dist/chunk-Y5HFM7LO.js.map +0 -1
- package/dist/chunk-YVL3XATO.cjs +0 -79
- package/dist/chunk-YVL3XATO.cjs.map +0 -1
- package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
- package/dist/chunk-ZGRCSNPK.js.map +0 -1
- package/dist/hey-buddy-INNUFFJJ.cjs.map +0 -1
- package/dist/hey-buddy-V6FC5UKB.js.map +0 -1
- package/dist/html-MdxqSzjD.d.cts +0 -13
- package/dist/html-MdxqSzjD.d.ts +0 -13
- package/dist/orderRows-BUJYgSc7.d.cts +0 -221
- package/dist/orderRows-BUJYgSc7.d.ts +0 -221
- package/dist/transcript-Cg7uSW-C.d.cts +0 -84
- package/dist/transcript-Cg7uSW-C.d.ts +0 -84
- package/dist/types-B97JNRNQ.d.cts +0 -251
- package/dist/types-CnPEwzlp.d.cts +0 -254
- package/dist/types-CnPEwzlp.d.ts +0 -254
- package/dist/types-gZXrfLj6.d.ts +0 -251
- package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
- package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
- package/dist/useTheme-B9SWu6ui.d.cts +0 -24
- package/dist/useTheme-B9SWu6ui.d.ts +0 -24
- package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
- package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/EmailEditor/types.ts","../src/components/EmailEditor/renderEmailMjml.ts","../src/components/EmailEditor/EmailBlockPreview.tsx","../src/components/EmailEditor/EmailBlockSettings.tsx","../src/components/EmailEditor/labels.ts","../src/components/EmailEditor/tree.ts","../src/components/EmailEditor/EmailEditor.tsx"],"names":["HEADING_SIZES","React","ImageIcon","Button","jsx","jsxs","React2","Fragment","Trash2"],"mappings":"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","file":"chunk-LAN5VWGC.js","sourcesContent":["/**\n * Email document model. Field names match Waggleline's email builder, so\n * documents built from this shared block set move between the two without\n * migration. The union is closed: hosts with product-specific blocks must\n * convert them to these types (or drop them) before loading a document.\n * Unrecognised blocks are preserved in the document but render as an\n * \"unsupported block\" placeholder in the canvas and are omitted from the MJML.\n */\n\nexport type EmailAlignment = 'left' | 'center' | 'right';\n\nexport interface EmailBlockBase {\n id: string;\n}\n\nexport interface EmailHeadingBlock extends EmailBlockBase {\n type: 'heading';\n level: 1 | 2 | 3 | 4;\n text: string;\n alignment?: EmailAlignment;\n color?: string;\n}\n\nexport interface EmailTextBlock extends EmailBlockBase {\n type: 'text';\n /**\n * HTML. Existing values are stored as-is and sanitised on every output\n * (editing surface, canvas preview, `renderEmailMjml`); only HTML pasted or\n * dropped into the editor is sanitised before it is stored.\n */\n content: string;\n alignment?: EmailAlignment;\n color?: string;\n}\n\nexport interface EmailButtonBlock extends EmailBlockBase {\n type: 'button';\n text: string;\n url: string;\n alignment?: EmailAlignment;\n backgroundColor?: string;\n textColor?: string;\n borderRadius?: number;\n fullWidth?: boolean;\n}\n\nexport interface EmailImageBlock extends EmailBlockBase {\n type: 'image';\n src: string;\n alt: string;\n href?: string;\n width?: number | string;\n borderRadius?: number;\n alignment?: EmailAlignment;\n}\n\nexport interface EmailDividerBlock extends EmailBlockBase {\n type: 'divider';\n style?: 'solid' | 'dashed' | 'dotted';\n color?: string;\n width?: string;\n}\n\nexport interface EmailSpacerBlock extends EmailBlockBase {\n type: 'spacer';\n height: number;\n}\n\nexport interface EmailColumn {\n id: string;\n blocks: EmailContentBlock[];\n /** Percentage; a row's columns should sum to 100. */\n width?: number;\n backgroundColor?: string;\n}\n\nexport interface EmailColumnsBlock extends EmailBlockBase {\n type: 'columns';\n columnCount: 1 | 2 | 3;\n columns: EmailColumn[];\n backgroundColor?: string;\n}\n\nexport type EmailSocialPlatform =\n | 'facebook'\n | 'twitter'\n | 'linkedin'\n | 'instagram'\n | 'youtube'\n | 'github'\n | 'website';\n\nexport interface EmailSocialLink {\n platform: EmailSocialPlatform;\n url: string;\n}\n\nexport interface EmailSocialBlock extends EmailBlockBase {\n type: 'social';\n alignment?: EmailAlignment;\n iconSize?: 'sm' | 'md' | 'lg';\n links: EmailSocialLink[];\n}\n\nexport interface EmailHeroBlock extends EmailBlockBase {\n type: 'hero';\n headline: string;\n subtitle?: string;\n categoryText?: string;\n ctaText?: string;\n ctaUrl?: string;\n backgroundColor?: string;\n /** `linear-`/`radial-gradient(...)`; clients without CSS gradients fall back to `backgroundColor`. */\n backgroundGradient?: string;\n textColor?: string;\n ctaColor?: string;\n alignment?: EmailAlignment;\n padding?: number;\n}\n\nexport interface EmailHtmlBlock extends EmailBlockBase {\n type: 'html';\n html: string;\n}\n\nexport interface EmailFooterBlock extends EmailBlockBase {\n type: 'footer';\n companyName?: string;\n address?: string;\n phone?: string;\n showUnsubscribe: boolean;\n unsubscribeText?: string;\n managePreferencesUrl?: string;\n managePreferencesText?: string;\n alignment?: EmailAlignment;\n color?: string;\n}\n\nexport interface EmailQuoteBlock extends EmailBlockBase {\n type: 'quote';\n text: string;\n author?: string;\n role?: string;\n alignment?: EmailAlignment;\n backgroundColor?: string;\n textColor?: string;\n accentColor?: string;\n}\n\nexport interface EmailTableBlock extends EmailBlockBase {\n type: 'table';\n rows: string[][];\n headerRow?: boolean;\n borderColor?: string;\n headerBackgroundColor?: string;\n headerTextColor?: string;\n alignment?: EmailAlignment;\n}\n\n/** Blocks that can sit inside a column. */\nexport type EmailContentBlock =\n | EmailHeadingBlock\n | EmailTextBlock\n | EmailButtonBlock\n | EmailImageBlock\n | EmailDividerBlock\n | EmailSpacerBlock\n | EmailSocialBlock\n | EmailHtmlBlock\n | EmailFooterBlock\n | EmailQuoteBlock\n | EmailTableBlock;\n\nexport type EmailBlock = EmailContentBlock | EmailColumnsBlock | EmailHeroBlock;\n\nexport type EmailBlockType = EmailBlock['type'];\n\nexport interface EmailContentTree {\n version: string;\n blocks: EmailBlock[];\n}\n\nexport interface EmailDesignSettings {\n bodyBackgroundColor?: string;\n contentBackgroundColor?: string;\n /** Content width in px. */\n contentWidth?: number;\n textColor?: string;\n fontFamily?: string;\n headingColor?: string;\n linkColor?: string;\n buttonBackgroundColor?: string;\n buttonTextColor?: string;\n buttonBorderRadius?: number;\n}\n\n/** A merge field offered in the editor, e.g. `{{first_name}}`. */\nexport interface EmailMergeTag {\n token: string;\n label: string;\n group: string;\n}\n\n/** Blocks that only make sense at the top level of the email. */\nexport const FULL_WIDTH_BLOCK_TYPES: readonly EmailBlockType[] = [\n 'hero',\n 'columns',\n];\n\nexport function isContentBlock(block: EmailBlock): block is EmailContentBlock {\n return !FULL_WIDTH_BLOCK_TYPES.includes(block.type);\n}\n\nexport function generateEmailBlockId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `b${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`\n );\n}\n\n// Email clients need literal colours, so these defaults are data, not theme tokens.\nexport function createDefaultDesignSettings(): Required<EmailDesignSettings> {\n return {\n bodyBackgroundColor: '#f4f4f5',\n contentBackgroundColor: '#ffffff',\n contentWidth: 600,\n textColor: '#374151',\n fontFamily: 'Arial, Helvetica, sans-serif',\n headingColor: '#111827',\n linkColor: '#2563eb',\n buttonBackgroundColor: '#2563eb',\n buttonTextColor: '#ffffff',\n buttonBorderRadius: 6,\n };\n}\n\n/** Defaults overlaid with the fields `design` actually sets; `undefined` inherits. */\nexport function resolveDesignSettings(\n design: EmailDesignSettings | undefined\n): Required<EmailDesignSettings> {\n const defined = Object.entries(design ?? {}).filter(\n ([, v]) => v !== undefined\n );\n return { ...createDefaultDesignSettings(), ...Object.fromEntries(defined) };\n}\n\nexport function createEmailBlock<T extends EmailBlockType>(\n type: T\n): Extract<EmailBlock, { type: T }> {\n return newBlock(type) as Extract<EmailBlock, { type: T }>;\n}\n\nfunction newBlock(type: EmailBlockType): EmailBlock {\n const id = generateEmailBlockId();\n switch (type) {\n case 'heading':\n return { id, type, level: 2, text: 'Heading', alignment: 'left' };\n case 'text':\n return { id, type, content: '<p>Write your message here.</p>' };\n case 'button':\n return {\n id,\n type,\n text: 'Learn more',\n url: 'https://',\n alignment: 'center',\n };\n case 'image':\n return { id, type, src: '', alt: '', alignment: 'center' };\n case 'divider':\n return { id, type, style: 'solid', color: '#e5e7eb' };\n case 'spacer':\n return { id, type, height: 24 };\n case 'social':\n return {\n id,\n type,\n alignment: 'center',\n iconSize: 'md',\n links: [\n { platform: 'linkedin', url: 'https://linkedin.com' },\n { platform: 'website', url: 'https://' },\n ],\n };\n case 'html':\n return { id, type, html: '<p>Custom HTML</p>' };\n case 'footer':\n return {\n id,\n type,\n showUnsubscribe: true,\n unsubscribeText: 'Unsubscribe from these emails',\n alignment: 'center',\n color: '#6b7280',\n };\n case 'quote':\n return {\n id,\n type,\n text: 'A short testimonial.',\n author: 'Name',\n role: 'Title',\n };\n case 'table':\n return {\n id,\n type,\n headerRow: true,\n rows: [\n ['Item', 'Detail'],\n ['', ''],\n ],\n };\n case 'hero':\n return {\n id,\n type,\n headline: 'Big announcement',\n subtitle: 'One line that says why it matters.',\n ctaText: 'Read more',\n ctaUrl: 'https://',\n backgroundColor: '#1e3a5f',\n textColor: '#ffffff',\n alignment: 'center',\n padding: 48,\n };\n case 'columns':\n return {\n id,\n type,\n columnCount: 2,\n columns: [\n { id: generateEmailBlockId(), width: 50, blocks: [] },\n { id: generateEmailBlockId(), width: 50, blocks: [] },\n ],\n };\n }\n}\n\nexport function createEmptyEmailContentTree(): EmailContentTree {\n return {\n version: '1.0',\n blocks: [\n {\n ...createEmailBlock('heading'),\n level: 1,\n text: 'Your email title',\n alignment: 'center',\n },\n createEmailBlock('text'),\n createEmailBlock('footer'),\n ],\n };\n}\n","import DOMPurify from 'dompurify';\n\nimport {\n createDefaultDesignSettings,\n resolveDesignSettings,\n type EmailAlignment,\n type EmailBlock,\n type EmailContentBlock,\n type EmailContentTree,\n type EmailDesignSettings,\n type EmailHeroBlock,\n type EmailSocialPlatform,\n} from './types';\n\nexport interface RenderEmailMjmlOptions {\n design?: EmailDesignSettings;\n /**\n * Sanitises the HTML of `text` and `html` blocks. Defaults to DOMPurify with\n * the email policy, which needs a DOM — on a server pass\n * `createEmailHtmlSanitizer(new JSDOM('').window)` so the same policy applies\n * (vanilla DOMPurify over jsdom would enforce far less).\n */\n sanitizeHtml?: (html: string) => string;\n /** `href` of the footer's unsubscribe link. Defaults to `{{unsubscribe_url}}`. */\n unsubscribeUrl?: string;\n}\n\ninterface Ctx {\n design: Required<EmailDesignSettings>;\n sanitize: (html: string) => string;\n unsubscribeUrl: string;\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Allows http(s), mailto, tel, anchors, root-relative paths and a single\n * complete `{{merge}}` token. A token with a suffix (`{{base}}/path`) is\n * rejected: its safety depends on the expansion, so hosts composing URLs from\n * tokens must revalidate after merge expansion.\n */\nexport function isSafeUrl(value: string | undefined): boolean {\n // After the leading slash, a second slash, backslash or whitespace would let\n // URL parsers (which strip tabs/newlines and treat `\\` as `/`) read the path\n // as a network-path URL on an attacker's origin. The merge-token branch is\n // anchored to the end so `{{empty}}javascript:...` cannot smuggle a scheme.\n return /^(https?:|mailto:|tel:|#|\\/(?![/\\\\\\s])|\\{\\{[^{}]*\\}\\}$)/i.test(\n (value ?? '').trim()\n );\n}\n\n/** `value` when `isSafeUrl` accepts it (HTML-escaped for interpolation), else `#`. */\nexport function safeUrl(value: string | undefined): string {\n const url = (value ?? '').trim();\n return isSafeUrl(url) ? escapeHtml(url) : '#';\n}\n\n// Hex colours only come in 3, 4, 6 or 8 digits; 5 or 7 would be invalid CSS.\nconst COLOR =\n /^(#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(rgb|rgba|hsl|hsla)\\([\\d\\s.,%]+\\)|[a-z]+)$/i;\n\nexport function safeColor(value: string | undefined, fallback: string): string {\n return value && COLOR.test(value.trim()) ? value.trim() : fallback;\n}\n\nexport function safeGradient(value: string | undefined): string | null {\n const gradient = value?.trim() ?? '';\n return /^(linear|radial)-gradient\\([^;{}<>\"()]*(\\([^;{}<>\"()]*\\)[^;{}<>\"()]*)*\\)$/i.test(\n gradient\n ) && !/url\\s*\\(/i.test(gradient)\n ? gradient\n : null;\n}\n\nfunction heroGradient(block: EmailHeroBlock): string | null {\n return /^[\\w-]+$/.test(block.id)\n ? safeGradient(block.backgroundGradient)\n : null;\n}\n\n/** The canvas preview and `renderHero` must agree on when the CTA exists. */\nexport function hasHeroCta(block: EmailHeroBlock): boolean {\n return Boolean(block.ctaText && block.ctaUrl);\n}\n\nfunction align(\n value: EmailAlignment | undefined,\n fallback: EmailAlignment\n): EmailAlignment {\n return value === 'left' || value === 'center' || value === 'right'\n ? value\n : fallback;\n}\n\nfunction px(value: unknown, fallback: number, max = 2000): number {\n const n = Number(value);\n return Number.isFinite(n)\n ? Math.min(Math.max(Math.round(n), 0), max)\n : fallback;\n}\n\nconst SANITIZE_CONFIG = {\n FORBID_TAGS: ['style', 'form', 'input', 'textarea', 'select', 'button'],\n // Host CSS classes (e.g. `fixed inset-0`) and ids would escape the style\n // allowlist; srcset/xlink:href would escape the URL policy below.\n FORBID_ATTR: ['class', 'id', 'srcset', 'xlink:href'],\n};\n\n// DOMPurify's default URI policy is looser than this component's (it permits\n// protocol-relative URLs, ftp:, cid:, ...), so URL attributes get `isSafeUrl`.\nconst URL_ATTRIBUTES = new Set(['href', 'src', 'background', 'poster']);\n\n// Formatting only: anything that can position, layer or load (url()) is dropped.\nconst SAFE_STYLE_PROPERTY =\n /^(color|background-color|font(-[a-z]+)?|text-(align|decoration|transform|indent)|line-height|letter-spacing|word-spacing|white-space|vertical-align|(margin|padding)(-(top|right|bottom|left))?|border(-(top|right|bottom|left))?(-(width|style|color))?|border-(collapse|spacing|radius)|(max-|min-)?(width|height)|display|list-style(-type)?)$/;\n\nexport function sanitizeInlineStyle(style: string): string {\n return style\n .split(';')\n .map((declaration) => {\n const colon = declaration.indexOf(':');\n if (colon === -1) return '';\n const property = declaration.slice(0, colon).trim().toLowerCase();\n const value = declaration.slice(colon + 1).trim();\n return SAFE_STYLE_PROPERTY.test(property) &&\n value &&\n !/url\\s*\\(|expression\\s*\\(|@import|[<>\\\\]/i.test(value) &&\n // Negative margins could pull content over the surrounding page.\n !(property.startsWith('margin') && value.includes('-'))\n ? `${property}: ${value}`\n : '';\n })\n .filter(Boolean)\n .join('; ');\n}\n\nlet purifier: ReturnType<typeof DOMPurify> | null | undefined;\n\nfunction installEmailPolicy(instance: ReturnType<typeof DOMPurify>) {\n instance.addHook('uponSanitizeAttribute', (_node, data) => {\n if (URL_ATTRIBUTES.has(data.attrName)) {\n // Validate only; DOMPurify escapes attribute values when serialising.\n if (!isSafeUrl(data.attrValue)) data.keepAttr = false;\n return;\n }\n if (data.attrName !== 'style') return;\n data.attrValue = sanitizeInlineStyle(data.attrValue);\n if (!data.attrValue) data.keepAttr = false;\n });\n return instance;\n}\n\n/**\n * The email sanitation policy on a caller-supplied window, for environments\n * without a global DOM: `createEmailHtmlSanitizer(new JSDOM('').window)`.\n * Vanilla DOMPurify is NOT equivalent — it would keep class/id attributes,\n * positioning styles and URL schemes this policy rejects.\n */\nexport function createEmailHtmlSanitizer(\n win: Parameters<typeof DOMPurify>[0]\n): (html: string) => string {\n const instance = DOMPurify(win);\n if (!instance.isSupported) {\n throw new Error(\n 'createEmailHtmlSanitizer: the supplied window cannot run DOMPurify.'\n );\n }\n installEmailPolicy(instance);\n return (html) => instance.sanitize(html, SANITIZE_CONFIG);\n}\n\n// A private instance, so the policy hook never leaks into other DOMPurify users.\nfunction getPurifier() {\n if (purifier !== undefined) return purifier;\n if (typeof window === 'undefined') return null;\n const instance = DOMPurify(window);\n if (!instance.isSupported) return (purifier = null);\n return (purifier = installEmailPolicy(instance));\n}\n\n/** DOMPurify with the email policy, or `null` where there is no DOM. */\nexport function sanitizeEmailHtml(html: string): string | null {\n return getPurifier()?.sanitize(html, SANITIZE_CONFIG) ?? null;\n}\n\nfunction defaultSanitize(html: string): string {\n const clean = sanitizeEmailHtml(html);\n if (clean === null) {\n throw new Error(\n 'renderEmailMjml: no DOM is available to sanitise HTML. Pass options.sanitizeHtml.'\n );\n }\n return clean;\n}\n\nconst HEADING_SIZES = { 1: 32, 2: 26, 3: 22, 4: 18 } as const;\n\nconst SOCIAL_NAMES: Record<EmailSocialPlatform, string> = {\n facebook: 'facebook-noshare',\n twitter: 'twitter-noshare',\n linkedin: 'linkedin-noshare',\n instagram: 'instagram',\n youtube: 'youtube',\n github: 'github',\n website: 'web',\n};\n\nconst ICON_SIZES = { sm: 20, md: 25, lg: 35 } as const;\n\n/** Renders one block as column content; `available` is the usable width in px. */\nfunction renderContent(\n block: EmailContentBlock,\n ctx: Ctx,\n pad: string,\n available: number\n): string {\n const { design } = ctx;\n switch (block.type) {\n case 'heading': {\n const level = HEADING_SIZES[block.level] ? block.level : 2;\n const color = safeColor(block.color, design.headingColor);\n const size = HEADING_SIZES[level];\n // Inline size: clients scale h1-h4 relative to the mj-text font size.\n return `<mj-text align=\"${align(block.alignment, 'left')}\" font-size=\"${size}px\" font-weight=\"bold\" color=\"${color}\" padding=\"${pad}\"><h${level} style=\"font-size: ${size}px; line-height: 1.25;\">${escapeHtml(block.text)}</h${level}></mj-text>`;\n }\n case 'text': {\n const color = block.color\n ? ` color=\"${safeColor(block.color, design.textColor)}\"`\n : '';\n return `<mj-text align=\"${align(block.alignment, 'left')}\"${color} padding=\"${pad}\">${ctx.sanitize(block.content)}</mj-text>`;\n }\n case 'button': {\n const bg = safeColor(block.backgroundColor, design.buttonBackgroundColor);\n const fg = safeColor(block.textColor, design.buttonTextColor);\n const radius = px(\n block.borderRadius ?? design.buttonBorderRadius,\n 6,\n 100\n );\n const width = block.fullWidth ? ' width=\"100%\"' : '';\n return `<mj-button align=\"${align(block.alignment, 'center')}\" background-color=\"${bg}\" color=\"${fg}\" border-radius=\"${radius}px\" href=\"${safeUrl(block.url)}\" font-size=\"16px\" padding=\"${pad}\"${width}>${escapeHtml(block.text)}</mj-button>`;\n }\n case 'image': {\n if (!block.src) return '';\n // mj-image only accepts px; a percentage becomes px of the usable width.\n // Unambiguous alternation: `\\d*\\.?\\d+` backtracks polynomially (CodeQL).\n const percent = /^(\\d+(?:\\.\\d+)?|\\.\\d+)%$/.exec(\n String(block.width ?? '').trim()\n );\n const share = percent ? Math.min(Number(percent[1]), 100) : 0;\n const widthPx = percent\n ? Math.round((available * share) / 100)\n : parseInt(String(block.width ?? ''), 10);\n const width =\n Number.isFinite(widthPx) && widthPx > 0 && share !== 100\n ? ` width=\"${px(widthPx, 600)}px\"`\n : '';\n const href = block.href ? ` href=\"${safeUrl(block.href)}\"` : '';\n const radius = block.borderRadius\n ? ` border-radius=\"${px(block.borderRadius, 0, 100)}px\"`\n : '';\n return `<mj-image src=\"${safeUrl(block.src)}\" alt=\"${escapeHtml(block.alt ?? '')}\" align=\"${align(block.alignment, 'center')}\"${width} padding=\"${pad}\"${href}${radius} />`;\n }\n case 'divider': {\n const style = ['solid', 'dashed', 'dotted'].includes(block.style ?? '')\n ? block.style\n : 'solid';\n const width = /^\\d+(px|%)$/.test(block.width ?? '')\n ? block.width\n : '100%';\n return `<mj-divider border-color=\"${safeColor(block.color, '#e5e7eb')}\" border-style=\"${style}\" border-width=\"1px\" width=\"${width}\" padding=\"${pad}\" />`;\n }\n case 'spacer':\n return `<mj-spacer height=\"${px(block.height, 24, 400)}px\" />`;\n case 'social': {\n const size = ICON_SIZES[block.iconSize ?? 'md'] ?? ICON_SIZES.md;\n const items = block.links\n .filter((link) => SOCIAL_NAMES[link.platform])\n .map(\n (link) =>\n `<mj-social-element name=\"${SOCIAL_NAMES[link.platform]}\" href=\"${safeUrl(link.url)}\" icon-size=\"${size}px\" />`\n )\n .join('');\n return `<mj-social align=\"${align(block.alignment, 'center')}\" icon-size=\"${size}px\" mode=\"horizontal\" padding=\"${pad}\">${items}</mj-social>`;\n }\n case 'html':\n return `<mj-raw>${ctx.sanitize(block.html)}</mj-raw>`;\n case 'footer': {\n const color = safeColor(block.color, '#6b7280');\n const lines = [block.companyName, block.address, block.phone]\n .filter((line): line is string => Boolean(line))\n .map(escapeHtml);\n const links: string[] = [];\n if (block.showUnsubscribe) {\n links.push(\n `<a href=\"${safeUrl(ctx.unsubscribeUrl)}\" style=\"color: ${color};\">${escapeHtml(block.unsubscribeText || 'Unsubscribe')}</a>`\n );\n }\n if (block.managePreferencesUrl) {\n links.push(\n `<a href=\"${safeUrl(block.managePreferencesUrl)}\" style=\"color: ${color};\">${escapeHtml(block.managePreferencesText || 'Manage preferences')}</a>`\n );\n }\n if (links.length) lines.push(links.join(' '));\n return `<mj-text align=\"${align(block.alignment, 'center')}\" color=\"${color}\" font-size=\"12px\" padding=\"${pad}\">${lines.join('<br />')}</mj-text>`;\n }\n case 'quote': {\n const fg = safeColor(block.textColor, '#1e293b');\n const accent = safeColor(block.accentColor, design.linkColor);\n const bg = safeColor(block.backgroundColor, '#f8fafc');\n let attribution = '';\n if (block.author) {\n attribution = `<p style=\"margin: 12px 0 0; font-weight: 600;\">${escapeHtml(block.author)}</p>`;\n if (block.role) {\n attribution += `<p style=\"margin: 2px 0 0; font-size: 13px; opacity: 0.75;\">${escapeHtml(block.role)}</p>`;\n }\n }\n return `<mj-text align=\"${align(block.alignment, 'left')}\" color=\"${fg}\" container-background-color=\"${bg}\" padding=\"${pad}\"><div style=\"border-left: 4px solid ${accent}; padding: 8px 0 8px 16px;\"><p style=\"font-size: 18px; font-style: italic; line-height: 1.6; margin: 0;\">“${escapeHtml(block.text)}”</p>${attribution}</div></mj-text>`;\n }\n case 'table': {\n if (!block.rows.length) return '';\n const border = safeColor(block.borderColor, '#e5e7eb');\n const headBg = safeColor(block.headerBackgroundColor, '#f3f4f6');\n const headFg = safeColor(block.headerTextColor, design.headingColor);\n const textAlign = align(block.alignment, 'left');\n const rows = block.rows\n .map((row, r) => {\n const head = block.headerRow && r === 0;\n const tag = head ? 'th' : 'td';\n const style = head\n ? `background-color: ${headBg}; color: ${headFg}; font-weight: 600; `\n : '';\n return `<tr>${row\n .map(\n (cell) =>\n `<${tag} style=\"${style}padding: 10px 12px; border: 1px solid ${border}; text-align: ${textAlign};\">${escapeHtml(cell)}</${tag}>`\n )\n .join('')}</tr>`;\n })\n .join('');\n return `<mj-table padding=\"${pad}\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" css-class=\"email-table\">${rows}</mj-table>`;\n }\n // Unsupported block types (host-owned blocks in a loaded document) are\n // omitted from the email; the canvas shows a placeholder for them.\n default:\n return '';\n }\n}\n\nfunction renderHero(block: EmailHeroBlock): string {\n const bg = safeColor(block.backgroundColor, '#1e3a5f');\n const fg = safeColor(block.textColor, '#ffffff');\n const a = align(block.alignment, 'center');\n const parts: string[] = [];\n if (block.categoryText) {\n parts.push(\n `<mj-text align=\"${a}\" color=\"${fg}\" font-size=\"12px\" font-weight=\"700\" letter-spacing=\"2px\" text-transform=\"uppercase\" padding=\"0 0 8px 0\">${escapeHtml(block.categoryText)}</mj-text>`\n );\n }\n parts.push(\n `<mj-text align=\"${a}\" color=\"${fg}\" font-size=\"32px\" font-weight=\"bold\" line-height=\"1.2\" padding=\"0 0 8px 0\"><h1 style=\"color: ${fg}; margin: 0; font-size: 32px; line-height: 1.2;\">${escapeHtml(block.headline)}</h1></mj-text>`\n );\n if (block.subtitle) {\n parts.push(\n `<mj-text align=\"${a}\" color=\"${fg}\" font-size=\"16px\" line-height=\"1.5\" padding=\"0 0 16px 0\">${escapeHtml(block.subtitle)}</mj-text>`\n );\n }\n if (hasHeroCta(block)) {\n parts.push(\n `<mj-button align=\"${a}\" background-color=\"${safeColor(block.ctaColor, '#ffffff')}\" color=\"${bg}\" font-size=\"16px\" font-weight=\"600\" border-radius=\"6px\" padding=\"8px 0\" href=\"${safeUrl(block.ctaUrl)}\">${escapeHtml(block.ctaText ?? '')}</mj-button>`\n );\n }\n const gradient = heroGradient(block)\n ? ` css-class=\"hero-gradient-${block.id}\"`\n : '';\n return `<mj-section full-width=\"full-width\" background-color=\"${bg}\" padding=\"${px(block.padding, 48, 200)}px 25px\"${gradient}><mj-column>${parts.join('')}</mj-column></mj-section>`;\n}\n\nfunction renderBlock(block: EmailBlock, ctx: Ctx): string {\n if (block.type === 'hero') return renderHero(block);\n if (block.type === 'columns') {\n const bg = block.backgroundColor\n ? ` background-color=\"${safeColor(block.backgroundColor, 'transparent')}\"`\n : '';\n const columns = block.columns\n .map((column) => {\n const width = column.width\n ? ` width=\"${px(column.width, 50, 100)}%\"`\n : '';\n const colBg = column.backgroundColor\n ? ` background-color=\"${safeColor(column.backgroundColor, 'transparent')}\"`\n : '';\n const share = px(column.width ?? 100 / block.columns.length, 50, 100);\n const available =\n Math.round((ctx.design.contentWidth * share) / 100) - 24;\n const inner = column.blocks\n .map((b) => renderContent(b, ctx, '8px 12px', available))\n .join('');\n return `<mj-column${width}${colBg}>${inner || '<mj-text> </mj-text>'}</mj-column>`;\n })\n .join('');\n return `<mj-section${bg}>${columns}</mj-section>`;\n }\n const content = renderContent(\n block,\n ctx,\n '10px 25px',\n ctx.design.contentWidth - 50\n );\n return content\n ? `<mj-section><mj-column>${content}</mj-column></mj-section>`\n : '';\n}\n\n/**\n * Serialises an email document to MJML. Compile the result with `mjml` (server)\n * or `mjml-browser` to get client-safe HTML.\n */\n/** Defaults plus `design`, with every colour, width and font validated. */\nexport function normalizeDesignSettings(\n design: EmailDesignSettings | undefined\n): Required<EmailDesignSettings> {\n const defaults = createDefaultDesignSettings();\n const d = resolveDesignSettings(design);\n const color = (key: keyof EmailDesignSettings) =>\n safeColor(d[key] as string, defaults[key] as string);\n return {\n bodyBackgroundColor: color('bodyBackgroundColor'),\n contentBackgroundColor: color('contentBackgroundColor'),\n textColor: color('textColor'),\n headingColor: color('headingColor'),\n linkColor: color('linkColor'),\n buttonBackgroundColor: color('buttonBackgroundColor'),\n buttonTextColor: color('buttonTextColor'),\n buttonBorderRadius: px(d.buttonBorderRadius, 6, 100),\n // The design UI's 320px floor also applies to documents set programmatically.\n contentWidth: Math.max(320, px(d.contentWidth, 600, 1200)),\n fontFamily:\n typeof d.fontFamily === 'string' && /^[\\w\\s,'-]+$/.test(d.fontFamily)\n ? d.fontFamily\n : defaults.fontFamily,\n };\n}\n\nexport function renderEmailMjml(\n tree: EmailContentTree,\n options: RenderEmailMjmlOptions = {}\n): string {\n const design = normalizeDesignSettings(options.design);\n const ctx: Ctx = {\n design,\n sanitize: options.sanitizeHtml ?? defaultSanitize,\n unsubscribeUrl: options.unsubscribeUrl ?? '{{unsubscribe_url}}',\n };\n const gradients = tree.blocks\n .filter((b): b is EmailHeroBlock => b.type === 'hero')\n .map((b) => {\n const gradient = heroGradient(b);\n return gradient\n ? `.hero-gradient-${b.id} { background: ${gradient} !important; }`\n : '';\n })\n .filter(Boolean)\n .join('\\n');\n\n return `<mjml>\n <mj-head>\n <mj-attributes>\n <mj-all font-family=\"${escapeHtml(design.fontFamily)}\" color=\"${design.textColor}\" />\n <mj-text font-size=\"16px\" line-height=\"1.6\" />\n <mj-section background-color=\"${design.contentBackgroundColor}\" />\n </mj-attributes>\n <mj-style>\n a { color: ${design.linkColor}; }\n h1, h2, h3, h4 { color: inherit; margin: 0; }\n ${gradients}\n </mj-style>\n <mj-style inline=\"inline\">\n .email-table table { border-collapse: collapse; }\n </mj-style>\n </mj-head>\n <mj-body background-color=\"${design.bodyBackgroundColor}\" width=\"${design.contentWidth}px\">\n ${tree.blocks.map((block) => renderBlock(block, ctx)).join('\\n ')}\n </mj-body>\n</mjml>`;\n}\n","import * as React from 'react';\nimport {\n Facebook,\n Github,\n Globe,\n Image as ImageIcon,\n Instagram,\n Linkedin,\n Twitter,\n Youtube,\n} from 'lucide-react';\n\nimport {\n hasHeroCta,\n safeColor,\n safeGradient,\n sanitizeEmailHtml,\n} from './renderEmailMjml';\nimport type {\n EmailBlock,\n EmailContentBlock,\n EmailDesignSettings,\n EmailSocialPlatform,\n} from './types';\n\nconst SOCIAL_ICONS: Record<EmailSocialPlatform, React.ElementType> = {\n facebook: Facebook,\n twitter: Twitter,\n linkedin: Linkedin,\n instagram: Instagram,\n youtube: Youtube,\n github: Github,\n website: Globe,\n};\n\nconst HEADING_SIZES = { 1: 32, 2: 26, 3: 22, 4: 18 } as const;\n\nfunction SafeHtml({\n html,\n style,\n}: {\n html: string;\n style?: React.CSSProperties;\n}) {\n // Sanitise after mount: there is no DOM during server rendering.\n const [clean, setClean] = React.useState('');\n React.useEffect(() => setClean(sanitizeEmailHtml(html) ?? ''), [html]);\n // Undo the CSS reset so paragraphs and lists space out as they will in a mail client.\n return (\n <div\n style={style}\n className=\"[&_a]:underline [&_ol]:list-decimal [&_ol]:ps-6 [&_p]:my-3 [&_ul]:list-disc [&_ul]:ps-6\"\n dangerouslySetInnerHTML={{ __html: clean }}\n />\n );\n}\n\nexport interface EmailBlockPreviewProps {\n block: EmailBlock;\n design: Required<EmailDesignSettings>;\n /** Renders a column's child block (selection frame, toolbar). */\n renderChild: (block: EmailContentBlock) => React.ReactNode;\n /** Shown in an empty column. */\n emptyColumnLabel: string;\n /** Shown for a block type this editor does not support; `{type}` is replaced. */\n unsupportedBlockLabel: string;\n /** Accessible names for the social block's icons, usually `labels.platforms`. */\n platformLabels: Record<EmailSocialPlatform, string>;\n}\n\n/** WYSIWYG approximation of a block; the sent email comes from `renderEmailMjml`. */\nexport function EmailBlockPreview({\n block,\n design,\n renderChild,\n emptyColumnLabel,\n unsupportedBlockLabel,\n platformLabels,\n}: EmailBlockPreviewProps) {\n const pad = '10px 25px';\n switch (block.type) {\n case 'heading': {\n const Tag = `h${block.level}` as 'h1';\n return (\n <Tag\n style={{\n margin: 0,\n padding: pad,\n fontSize: HEADING_SIZES[block.level],\n fontWeight: 700,\n lineHeight: 1.25,\n textAlign: block.alignment ?? 'left',\n color: safeColor(block.color, design.headingColor),\n }}\n >\n {block.text}\n </Tag>\n );\n }\n case 'text':\n return (\n <SafeHtml\n html={block.content}\n style={{\n padding: pad,\n textAlign: block.alignment ?? 'left',\n color: safeColor(block.color, design.textColor),\n }}\n />\n );\n case 'button':\n return (\n <div style={{ padding: pad, textAlign: block.alignment ?? 'center' }}>\n <span\n style={{\n display: block.fullWidth ? 'block' : 'inline-block',\n padding: '10px 25px',\n background: safeColor(\n block.backgroundColor,\n design.buttonBackgroundColor\n ),\n color: safeColor(block.textColor, design.buttonTextColor),\n borderRadius: block.borderRadius ?? design.buttonBorderRadius,\n fontWeight: 600,\n }}\n >\n {block.text}\n </span>\n </div>\n );\n case 'image':\n return (\n <div style={{ padding: pad, textAlign: block.alignment ?? 'center' }}>\n {block.src ? (\n <img\n src={block.src}\n alt={block.alt}\n style={{\n display: 'inline-block',\n maxWidth: '100%',\n // Zero/invalid widths fall back to full width, matching the\n // omitted width in renderEmailMjml.\n width:\n parseFloat(String(block.width ?? '')) > 0\n ? block.width\n : '100%',\n borderRadius: block.borderRadius,\n }}\n />\n ) : (\n <div className=\"border-border text-muted-foreground flex h-32 items-center justify-center rounded-md border-2 border-dashed\">\n <ImageIcon className=\"h-8 w-8\" aria-hidden=\"true\" />\n </div>\n )}\n </div>\n );\n case 'divider':\n return (\n <div style={{ padding: pad }}>\n <hr\n style={{\n margin: '0 auto',\n border: 0,\n borderTop: `1px ${block.style ?? 'solid'} ${safeColor(block.color, '#e5e7eb')}`,\n width: block.width ?? '100%',\n }}\n />\n </div>\n );\n case 'spacer':\n return <div style={{ height: block.height }} />;\n case 'social': {\n const size = { sm: 20, md: 25, lg: 35 }[block.iconSize ?? 'md'];\n return (\n <div\n style={{\n padding: pad,\n display: 'flex',\n gap: 8,\n justifyContent:\n block.alignment === 'left'\n ? 'flex-start'\n : block.alignment === 'right'\n ? 'flex-end'\n : 'center',\n }}\n >\n {block.links.map((link, i) => {\n const Icon = SOCIAL_ICONS[link.platform] ?? Globe;\n return (\n <Icon\n key={i}\n width={size}\n height={size}\n role=\"img\"\n aria-label={platformLabels[link.platform] ?? link.platform}\n />\n );\n })}\n </div>\n );\n }\n case 'html':\n return <SafeHtml html={block.html} style={{ padding: pad }} />;\n case 'footer': {\n const color = safeColor(block.color, '#6b7280');\n return (\n <div\n style={{\n padding: pad,\n fontSize: 12,\n color,\n textAlign: block.alignment ?? 'center',\n }}\n >\n {[block.companyName, block.address, block.phone]\n .filter(Boolean)\n .map((line, i) => (\n <div key={i}>{line}</div>\n ))}\n <div>\n {block.showUnsubscribe && (\n <span style={{ textDecoration: 'underline' }}>\n {block.unsubscribeText || 'Unsubscribe'}\n </span>\n )}\n {block.managePreferencesUrl && (\n <span\n style={{ textDecoration: 'underline', marginInlineStart: 12 }}\n >\n {block.managePreferencesText || 'Manage preferences'}\n </span>\n )}\n </div>\n </div>\n );\n }\n case 'quote':\n return (\n <div\n style={{\n margin: pad,\n padding: '8px 16px',\n background: safeColor(block.backgroundColor, '#f8fafc'),\n color: safeColor(block.textColor, '#1e293b'),\n borderInlineStart: `4px solid ${safeColor(block.accentColor, design.linkColor)}`,\n textAlign: block.alignment ?? 'left',\n }}\n >\n <p style={{ margin: 0, fontSize: 18, fontStyle: 'italic' }}>\n “{block.text}”\n </p>\n {block.author && (\n <p style={{ margin: '12px 0 0', fontWeight: 600 }}>\n {block.author}\n </p>\n )}\n {block.author && block.role && (\n <p style={{ margin: '2px 0 0', fontSize: 13, opacity: 0.75 }}>\n {block.role}\n </p>\n )}\n </div>\n );\n case 'table': {\n const border = `1px solid ${safeColor(block.borderColor, '#e5e7eb')}`;\n return (\n <div style={{ padding: pad }}>\n <table style={{ width: '100%', borderCollapse: 'collapse' }}>\n <tbody>\n {block.rows.map((row, r) => {\n const head = block.headerRow && r === 0;\n return (\n <tr key={r}>\n {row.map((cell, c) => {\n const Cell = head ? 'th' : 'td';\n return (\n <Cell\n key={c}\n style={{\n border,\n padding: '10px 12px',\n textAlign: block.alignment ?? 'left',\n ...(head && {\n background: safeColor(\n block.headerBackgroundColor,\n '#f3f4f6'\n ),\n color: safeColor(\n block.headerTextColor,\n design.headingColor\n ),\n }),\n }}\n >\n {cell}\n </Cell>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n }\n case 'hero': {\n const color = safeColor(block.textColor, '#ffffff');\n const bg = safeColor(block.backgroundColor, '#1e3a5f');\n return (\n <div\n style={{\n padding: `${block.padding ?? 48}px 25px`,\n background: safeGradient(block.backgroundGradient) ?? bg,\n color,\n textAlign: block.alignment ?? 'center',\n }}\n >\n {block.categoryText && (\n <div\n style={{\n fontSize: 12,\n fontWeight: 700,\n letterSpacing: 2,\n textTransform: 'uppercase',\n marginBottom: 8,\n }}\n >\n {block.categoryText}\n </div>\n )}\n <h1\n style={{ margin: '0 0 8px', fontSize: 32, lineHeight: 1.2, color }}\n >\n {block.headline}\n </h1>\n {block.subtitle && (\n <p style={{ margin: '0 0 16px' }}>{block.subtitle}</p>\n )}\n {hasHeroCta(block) && (\n <span\n style={{\n display: 'inline-block',\n padding: '10px 25px',\n borderRadius: 6,\n fontWeight: 600,\n background: safeColor(block.ctaColor, '#ffffff'),\n color: bg,\n }}\n >\n {block.ctaText}\n </span>\n )}\n </div>\n );\n }\n case 'columns':\n return (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n background: block.backgroundColor\n ? safeColor(block.backgroundColor, 'transparent')\n : undefined,\n }}\n >\n {block.columns.map((column) => (\n <div\n key={column.id}\n style={{\n flex: `1 1 ${column.width ?? 100 / block.columns.length}%`,\n minWidth: 160,\n padding: 4,\n background: column.backgroundColor\n ? safeColor(column.backgroundColor, 'transparent')\n : undefined,\n }}\n >\n {column.blocks.length ? (\n column.blocks.map((child) => (\n <React.Fragment key={child.id}>\n {renderChild(child)}\n </React.Fragment>\n ))\n ) : (\n <div className=\"border-border text-muted-foreground rounded-md border border-dashed p-4 text-center text-xs\">\n {emptyColumnLabel}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n // Host-owned block types (e.g. Waggleline-only blocks) are kept in the\n // document but rendered as a visible placeholder; `renderEmailMjml` omits them.\n default:\n return (\n <div\n role=\"note\"\n className=\"border-border text-muted-foreground m-2 rounded-md border border-dashed p-4 text-center text-xs\"\n >\n {unsupportedBlockLabel.replace(\n '{type}',\n (block as { type: string }).type\n )}\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport { Plus, Trash2, Upload } from 'lucide-react';\n\nimport { Button as BaseButton, type ButtonProps } from '../Button';\nimport { Input } from '../Input';\nimport { RichTextEditor, type RichTextVariableGroup } from '../RichTextEditor';\nimport { Select } from '../Select';\nimport { Switch } from '../Switch';\nimport { Textarea } from '../Textarea';\nimport type { EmailEditorLabels } from './labels';\nimport { sanitizeEmailHtml } from './renderEmailMjml';\nimport {\n createEmailBlock,\n generateEmailBlockId,\n type EmailAlignment,\n type EmailBlock,\n type EmailColumn,\n type EmailContentBlock,\n type EmailDesignSettings,\n type EmailSocialPlatform,\n} from './types';\n\ntype Patch<B> = (patch: Partial<B>) => void;\n\n/** Editor actions must never submit a host form. */\nexport function Button(props: ButtonProps) {\n return <BaseButton type=\"button\" {...props} />;\n}\n\ninterface FieldProps<T> {\n label: string;\n value: T | undefined;\n onChange: (value: T) => void;\n}\n\nfunction TextField({\n multiline,\n ...props\n}: FieldProps<string> & { multiline?: boolean; placeholder?: string }) {\n const Control = multiline ? Textarea : Input;\n return (\n <Control\n label={props.label}\n value={props.value ?? ''}\n placeholder={props.placeholder}\n onChange={(\n e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => props.onChange(e.target.value)}\n />\n );\n}\n\nfunction NumberField({\n label,\n value,\n onChange,\n min = 0,\n max,\n}: FieldProps<number> & { min?: number; max?: number }) {\n return (\n <Input\n type=\"number\"\n label={label}\n min={min}\n max={max}\n value={value ?? ''}\n onChange={(e) => {\n const n = Number(e.target.value);\n if (e.target.value !== '' && Number.isFinite(n)) onChange(n);\n }}\n />\n );\n}\n\nconst HEX6 = /^#[0-9a-f]{6}$/i;\n\nfunction ColorField({\n label,\n value,\n onChange,\n fallback = '#000000',\n}: FieldProps<string> & { fallback?: string }) {\n const swatch = value && HEX6.test(value) ? value : fallback;\n return (\n <div className=\"flex items-end gap-2\">\n <div className=\"min-w-0 flex-1\">\n <Input\n label={label}\n value={value ?? ''}\n placeholder={fallback}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n <input\n type=\"color\"\n aria-label={label}\n value={HEX6.test(swatch) ? swatch : '#000000'}\n onChange={(e) => onChange(e.target.value)}\n className=\"border-border bg-background h-10 w-10 shrink-0 cursor-pointer rounded-md border p-1\"\n />\n </div>\n );\n}\n\nfunction SelectField<T extends string>({\n label,\n value,\n onChange,\n options,\n}: FieldProps<T> & { options: { value: T; label: string }[] }) {\n return (\n <Select\n label={label}\n value={value}\n options={options}\n onValueChange={(v) => onChange(v as T)}\n />\n );\n}\n\nfunction SwitchField({ label, value, onChange }: FieldProps<boolean>) {\n return (\n <Switch label={label} checked={Boolean(value)} onCheckedChange={onChange} />\n );\n}\n\nconst SOCIAL_PLATFORMS: EmailSocialPlatform[] = [\n 'facebook',\n 'twitter',\n 'linkedin',\n 'instagram',\n 'youtube',\n 'github',\n 'website',\n];\n\nexport const CONTENT_BLOCK_TYPES = [\n 'heading',\n 'text',\n 'button',\n 'image',\n 'divider',\n 'spacer',\n 'social',\n 'quote',\n 'table',\n 'html',\n 'footer',\n] as const satisfies readonly EmailContentBlock['type'][];\n\nexport function resizeColumns(\n columns: EmailColumn[],\n count: 1 | 2 | 3\n): EmailColumn[] {\n const width = Math.floor(100 / count);\n const next = Array.from({ length: count }, (_, i) => ({\n ...(columns[i] ?? { id: generateEmailBlockId(), blocks: [] }),\n // The last column absorbs the rounding remainder so widths sum to 100.\n width: i === count - 1 ? 100 - width * (count - 1) : width,\n }));\n // Keep content from dropped columns by moving it into the last remaining one.\n const dropped = columns.slice(count).flatMap((c) => c.blocks);\n next[count - 1] = {\n ...next[count - 1],\n blocks: [...next[count - 1].blocks, ...dropped],\n };\n return next;\n}\n\nexport interface EmailBlockSettingsProps {\n block: EmailBlock;\n design: Required<EmailDesignSettings>;\n onChange: (patch: Partial<EmailBlock>) => void;\n onAddToColumn: (columnIndex: number, block: EmailContentBlock) => void;\n labels: EmailEditorLabels;\n variableGroups?: RichTextVariableGroup[];\n onUploadImage?: (file: File) => Promise<string>;\n}\n\nexport function EmailBlockSettings({\n block,\n design,\n onChange,\n onAddToColumn,\n labels,\n variableGroups,\n onUploadImage,\n}: EmailBlockSettingsProps) {\n const f = labels.fields;\n const o = labels.options;\n const set = onChange as Patch<typeof block>;\n const alignOptions: { value: EmailAlignment; label: string }[] = [\n { value: 'left', label: o.left },\n { value: 'center', label: o.center },\n { value: 'right', label: o.right },\n ];\n const alignment = (\n value: EmailAlignment | undefined,\n fallback: EmailAlignment\n ) => (\n <SelectField\n label={f.alignment}\n value={value ?? fallback}\n options={alignOptions}\n onChange={(v) => onChange({ alignment: v } as Partial<EmailBlock>)}\n />\n );\n const uploadRef = React.useRef<HTMLInputElement>(null);\n const [uploading, setUploading] = React.useState(false);\n const [uploadFailed, setUploadFailed] = React.useState(false);\n // HTML the editor just emitted is already live in its DOM; sanitising it again\n // would normalise it and make RichTextEditor rewrite innerHTML (losing the caret).\n const emitted = React.useRef<string | null>(null);\n\n switch (block.type) {\n case 'heading':\n return (\n <>\n <TextField\n label={f.text}\n value={block.text}\n onChange={(text) => set({ text })}\n />\n <SelectField\n label={f.level}\n value={String(block.level) as '1'}\n options={['1', '2', '3', '4'].map((v) => ({\n value: v as '1',\n label: `H${v}`,\n }))}\n onChange={(v) => set({ level: Number(v) as 1 })}\n />\n {alignment(block.alignment, 'left')}\n <ColorField\n label={f.color}\n value={block.color}\n fallback={design.headingColor}\n onChange={(color) => set({ color })}\n />\n </>\n );\n case 'text':\n return (\n <>\n <RichTextEditor\n aria-label={f.content}\n value={\n block.content === emitted.current\n ? block.content\n : (sanitizeEmailHtml(block.content) ?? '')\n }\n onChange={(content) => {\n emitted.current = content;\n set({ content });\n }}\n // Pasted markup must pass the same policy as stored content; the\n // `emitted` bypass above is only safe because of this.\n sanitizeHtml={(html) => sanitizeEmailHtml(html) ?? ''}\n variableGroups={variableGroups}\n enableDictation={false}\n />\n {alignment(block.alignment, 'left')}\n <ColorField\n label={f.color}\n value={block.color}\n fallback={design.textColor}\n onChange={(color) => set({ color })}\n />\n </>\n );\n case 'button':\n return (\n <>\n <TextField\n label={f.text}\n value={block.text}\n onChange={(text) => set({ text })}\n />\n <TextField\n label={f.url}\n value={block.url}\n onChange={(url) => set({ url })}\n />\n {alignment(block.alignment, 'center')}\n <ColorField\n label={f.backgroundColor}\n value={block.backgroundColor}\n fallback={design.buttonBackgroundColor}\n onChange={(backgroundColor) => set({ backgroundColor })}\n />\n <ColorField\n label={f.textColor}\n value={block.textColor}\n fallback={design.buttonTextColor}\n onChange={(textColor) => set({ textColor })}\n />\n <NumberField\n label={f.borderRadius}\n value={block.borderRadius ?? design.buttonBorderRadius}\n max={100}\n onChange={(borderRadius) => set({ borderRadius })}\n />\n <SwitchField\n label={f.fullWidth}\n value={block.fullWidth}\n onChange={(fullWidth) => set({ fullWidth })}\n />\n </>\n );\n case 'image':\n return (\n <>\n <TextField\n label={f.imageUrl}\n value={block.src}\n onChange={(src) => set({ src })}\n />\n {onUploadImage && (\n <>\n <input\n ref={uploadRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n onChange={async (e) => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (!file) return;\n setUploading(true);\n setUploadFailed(false);\n try {\n set({ src: await onUploadImage(file) });\n } catch {\n setUploadFailed(true);\n } finally {\n setUploading(false);\n }\n }}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n isLoading={uploading}\n leftIcon={<Upload className=\"h-4 w-4\" aria-hidden=\"true\" />}\n onClick={() => uploadRef.current?.click()}\n >\n {f.uploadImage}\n </Button>\n {uploadFailed && (\n <p role=\"alert\" className=\"text-destructive text-sm\">\n {f.uploadFailed}\n </p>\n )}\n </>\n )}\n <TextField\n label={f.altText}\n value={block.alt}\n onChange={(alt) => set({ alt })}\n />\n <TextField\n label={f.url}\n value={block.href}\n onChange={(href) => set({ href })}\n />\n <TextField\n label={f.width}\n value={block.width === undefined ? '' : String(block.width)}\n placeholder=\"100%\"\n onChange={(width) =>\n set({ width: /^\\d+$/.test(width) ? Number(width) : width })\n }\n />\n <NumberField\n label={f.borderRadius}\n value={block.borderRadius}\n max={100}\n onChange={(borderRadius) => set({ borderRadius })}\n />\n {alignment(block.alignment, 'center')}\n </>\n );\n case 'divider':\n return (\n <>\n <SelectField\n label={f.style}\n value={block.style ?? 'solid'}\n options={(['solid', 'dashed', 'dotted'] as const).map((v) => ({\n value: v,\n label: o[v],\n }))}\n onChange={(style) => set({ style })}\n />\n <ColorField\n label={f.color}\n value={block.color}\n onChange={(color) => set({ color })}\n />\n <TextField\n label={f.width}\n value={block.width}\n placeholder=\"100%\"\n onChange={(width) => set({ width })}\n />\n </>\n );\n case 'spacer':\n return (\n <NumberField\n label={f.height}\n value={block.height}\n max={400}\n onChange={(height) => set({ height })}\n />\n );\n case 'social':\n return (\n <>\n {alignment(block.alignment, 'center')}\n <SelectField\n label={f.iconSize}\n value={block.iconSize ?? 'md'}\n options={(['sm', 'md', 'lg'] as const).map((v) => ({\n value: v,\n label: o[v],\n }))}\n onChange={(iconSize) => set({ iconSize })}\n />\n {block.links.map((link, i) => {\n const update = (patch: Partial<typeof link>) =>\n set({\n links: block.links.map((l, j) =>\n j === i ? { ...l, ...patch } : l\n ),\n });\n return (\n <fieldset\n key={i}\n className=\"border-border space-y-2 rounded-md border p-3\"\n >\n <legend className=\"sr-only\">\n {f.socialLink.replace('{number}', String(i + 1))}\n </legend>\n <SelectField\n label={f.platform}\n value={link.platform}\n options={SOCIAL_PLATFORMS.map((p) => ({\n value: p,\n label: labels.platforms[p],\n }))}\n onChange={(platform) => update({ platform })}\n />\n <TextField\n label={f.url}\n value={link.url}\n onChange={(url) => update({ url })}\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n leftIcon={<Trash2 className=\"h-4 w-4\" aria-hidden=\"true\" />}\n onClick={() =>\n set({ links: block.links.filter((_, j) => j !== i) })\n }\n >\n {f.removeLink}\n </Button>\n </fieldset>\n );\n })}\n <Button\n variant=\"outline\"\n size=\"sm\"\n leftIcon={<Plus className=\"h-4 w-4\" aria-hidden=\"true\" />}\n onClick={() =>\n set({\n links: [\n ...block.links,\n { platform: 'website', url: 'https://' },\n ],\n })\n }\n >\n {f.addLink}\n </Button>\n </>\n );\n case 'html':\n return (\n <Textarea\n label={f.html}\n value={block.html}\n rows={10}\n className=\"font-mono text-xs\"\n onChange={(e) => set({ html: e.target.value })}\n />\n );\n case 'footer':\n return (\n <>\n <TextField\n label={f.companyName}\n value={block.companyName}\n onChange={(companyName) => set({ companyName })}\n />\n <TextField\n label={f.address}\n value={block.address}\n onChange={(address) => set({ address })}\n />\n <TextField\n label={f.phone}\n value={block.phone}\n onChange={(phone) => set({ phone })}\n />\n <SwitchField\n label={f.showUnsubscribe}\n value={block.showUnsubscribe}\n onChange={(showUnsubscribe) => set({ showUnsubscribe })}\n />\n {block.showUnsubscribe && (\n <TextField\n label={f.unsubscribeText}\n value={block.unsubscribeText}\n onChange={(unsubscribeText) => set({ unsubscribeText })}\n />\n )}\n <TextField\n label={f.managePreferencesUrl}\n value={block.managePreferencesUrl}\n onChange={(managePreferencesUrl) => set({ managePreferencesUrl })}\n />\n <TextField\n label={f.managePreferencesText}\n value={block.managePreferencesText}\n onChange={(managePreferencesText) => set({ managePreferencesText })}\n />\n {alignment(block.alignment, 'center')}\n <ColorField\n label={f.color}\n value={block.color}\n onChange={(color) => set({ color })}\n />\n </>\n );\n case 'quote':\n return (\n <>\n <TextField\n multiline\n label={f.text}\n value={block.text}\n onChange={(text) => set({ text })}\n />\n <TextField\n label={f.author}\n value={block.author}\n onChange={(author) => set({ author })}\n />\n <TextField\n label={f.role}\n value={block.role}\n onChange={(role) => set({ role })}\n />\n {alignment(block.alignment, 'left')}\n <ColorField\n label={f.backgroundColor}\n value={block.backgroundColor}\n onChange={(backgroundColor) => set({ backgroundColor })}\n />\n <ColorField\n label={f.textColor}\n value={block.textColor}\n onChange={(textColor) => set({ textColor })}\n />\n <ColorField\n label={f.accentColor}\n value={block.accentColor}\n fallback={design.linkColor}\n onChange={(accentColor) => set({ accentColor })}\n />\n </>\n );\n case 'table': {\n const cols = Math.max(1, ...block.rows.map((r) => r.length));\n const setCell = (r: number, c: number, value: string) =>\n set({\n rows: block.rows.map((row, i) =>\n i === r ? row.map((cell, j) => (j === c ? value : cell)) : row\n ),\n });\n return (\n <>\n <SwitchField\n label={f.headerRow}\n value={block.headerRow}\n onChange={(headerRow) => set({ headerRow })}\n />\n <div\n className=\"grid gap-1\"\n style={{ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }}\n >\n {block.rows.map((row, r) =>\n row.map((cell, c) => (\n <input\n key={`${r}-${c}`}\n aria-label={f.cell\n .replace('{row}', String(r + 1))\n .replace('{column}', String(c + 1))}\n value={cell}\n onChange={(e) => setCell(r, c, e.target.value)}\n className=\"border-input bg-background text-foreground focus-visible:ring-ring h-8 min-w-0 rounded-md border px-2 text-sm focus-visible:ring-2 focus-visible:outline-none\"\n />\n ))\n )}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n set({ rows: [...block.rows, Array(cols).fill('')] })\n }\n >\n {f.addRow}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => set({ rows: block.rows.map((r) => [...r, '']) })}\n >\n {f.addColumn}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={block.rows.length <= 1}\n onClick={() => set({ rows: block.rows.slice(0, -1) })}\n >\n {f.removeRow}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={cols <= 1}\n onClick={() =>\n set({ rows: block.rows.map((r) => r.slice(0, -1)) })\n }\n >\n {f.removeColumn}\n </Button>\n </div>\n {alignment(block.alignment, 'left')}\n <ColorField\n label={f.borderColor}\n value={block.borderColor}\n onChange={(borderColor) => set({ borderColor })}\n />\n <ColorField\n label={f.headerBackgroundColor}\n value={block.headerBackgroundColor}\n onChange={(headerBackgroundColor) => set({ headerBackgroundColor })}\n />\n <ColorField\n label={f.headerTextColor}\n value={block.headerTextColor}\n onChange={(headerTextColor) => set({ headerTextColor })}\n />\n </>\n );\n }\n case 'hero':\n return (\n <>\n <TextField\n label={f.categoryText}\n value={block.categoryText}\n onChange={(categoryText) => set({ categoryText })}\n />\n <TextField\n label={f.headline}\n value={block.headline}\n onChange={(headline) => set({ headline })}\n />\n <TextField\n multiline\n label={f.subtitle}\n value={block.subtitle}\n onChange={(subtitle) => set({ subtitle })}\n />\n <TextField\n label={f.ctaText}\n value={block.ctaText}\n onChange={(ctaText) => set({ ctaText })}\n />\n <TextField\n label={f.ctaUrl}\n value={block.ctaUrl}\n onChange={(ctaUrl) => set({ ctaUrl })}\n />\n {alignment(block.alignment, 'center')}\n <ColorField\n label={f.backgroundColor}\n value={block.backgroundColor}\n onChange={(backgroundColor) => set({ backgroundColor })}\n />\n <TextField\n label={f.backgroundGradient}\n value={block.backgroundGradient}\n placeholder=\"linear-gradient(135deg, #1e3a5f, #2563eb)\"\n onChange={(backgroundGradient) => set({ backgroundGradient })}\n />\n <ColorField\n label={f.textColor}\n value={block.textColor}\n onChange={(textColor) => set({ textColor })}\n />\n <ColorField\n label={f.ctaColor}\n value={block.ctaColor}\n onChange={(ctaColor) => set({ ctaColor })}\n />\n <NumberField\n label={f.padding}\n value={block.padding}\n max={200}\n onChange={(padding) => set({ padding })}\n />\n </>\n );\n case 'columns':\n return (\n <>\n <SelectField\n label={f.columnCount}\n value={String(block.columnCount) as '1'}\n options={['1', '2', '3'].map((v) => ({\n value: v as '1',\n label: v,\n }))}\n onChange={(v) => {\n const columnCount = Number(v) as 1 | 2 | 3;\n set({\n columnCount,\n columns: resizeColumns(block.columns, columnCount),\n });\n }}\n />\n <ColorField\n label={f.backgroundColor}\n value={block.backgroundColor}\n onChange={(backgroundColor) => set({ backgroundColor })}\n />\n {block.columns.map((column, i) => (\n <Select\n key={column.id}\n label={`${labels.addBlock} — ${labels.column} ${i + 1}`}\n placeholder={labels.addBlock}\n value=\"\"\n options={CONTENT_BLOCK_TYPES.map((type) => ({\n value: type,\n label: labels.blockTypes[type],\n }))}\n onValueChange={(type) =>\n onAddToColumn(\n i,\n createEmailBlock(\n type as EmailContentBlock['type']\n ) as EmailContentBlock\n )\n }\n />\n ))}\n </>\n );\n }\n}\n\nconst FONT_OPTIONS = [\n 'Arial, Helvetica, sans-serif',\n 'Helvetica, Arial, sans-serif',\n 'Verdana, Geneva, sans-serif',\n 'Tahoma, Geneva, sans-serif',\n \"'Trebuchet MS', Helvetica, sans-serif\",\n 'Georgia, serif',\n \"'Times New Roman', Times, serif\",\n \"'Courier New', Courier, monospace\",\n];\n\nexport interface EmailDesignPanelProps {\n design: Required<EmailDesignSettings>;\n onChange: (patch: Partial<EmailDesignSettings>) => void;\n labels: EmailEditorLabels;\n}\n\nexport function EmailDesignPanel({\n design,\n onChange,\n labels,\n}: EmailDesignPanelProps) {\n const f = labels.fields;\n const fonts = FONT_OPTIONS.includes(design.fontFamily)\n ? FONT_OPTIONS\n : [design.fontFamily, ...FONT_OPTIONS];\n return (\n <>\n <SelectField\n label={f.fontFamily}\n value={design.fontFamily}\n options={fonts.map((font) => ({\n value: font,\n label: font.split(',')[0].replace(/'/g, ''),\n }))}\n onChange={(fontFamily) => onChange({ fontFamily })}\n />\n <NumberField\n label={f.contentWidth}\n value={design.contentWidth}\n min={320}\n max={1200}\n onChange={(contentWidth) => onChange({ contentWidth })}\n />\n {(\n [\n 'bodyBackgroundColor',\n 'contentBackgroundColor',\n 'textColor',\n 'headingColor',\n 'linkColor',\n 'buttonBackgroundColor',\n 'buttonTextColor',\n ] as const\n ).map((key) => (\n <ColorField\n key={key}\n label={f[key]}\n value={design[key]}\n onChange={(v) => onChange({ [key]: v })}\n />\n ))}\n <NumberField\n label={f.buttonBorderRadius}\n value={design.buttonBorderRadius}\n max={100}\n onChange={(buttonBorderRadius) => onChange({ buttonBorderRadius })}\n />\n </>\n );\n}\n","import type { EmailBlockType, EmailSocialPlatform } from './types';\n\nexport const defaultEmailEditorLabels = {\n blocks: 'Blocks',\n design: 'Design',\n blockSettings: 'Block settings',\n undo: 'Undo',\n redo: 'Redo',\n viewport: 'Preview width',\n desktop: 'Desktop',\n mobile: 'Mobile',\n canvas: 'Email canvas',\n moveUp: 'Move up',\n moveDown: 'Move down',\n duplicate: 'Duplicate',\n remove: 'Delete',\n dragHandle: 'Drag to reorder',\n addBlock: 'Add block',\n emptyCanvas: 'Drag a block here, or click one in the palette.',\n emptyColumn: 'Empty column',\n unsupportedBlock:\n 'Unsupported block ({type}). It will not be included in the sent email.',\n noSelection: 'Select a block in the canvas to edit it.',\n column: 'Column',\n selectBlock: 'Select {item}',\n announceAdded: '{item} added.',\n announceMoved: '{item} moved to position {position}.',\n announceDuplicated: '{item} duplicated.',\n announceRemoved: '{item} deleted.',\n blockTypes: {\n heading: 'Heading',\n text: 'Text',\n button: 'Button',\n image: 'Image',\n divider: 'Divider',\n spacer: 'Spacer',\n columns: 'Columns',\n social: 'Social links',\n hero: 'Hero banner',\n html: 'Custom HTML',\n footer: 'Footer',\n quote: 'Quote',\n table: 'Table',\n } satisfies Record<EmailBlockType, string>,\n platforms: {\n facebook: 'Facebook',\n twitter: 'Twitter',\n linkedin: 'LinkedIn',\n instagram: 'Instagram',\n youtube: 'YouTube',\n github: 'GitHub',\n website: 'Website',\n } satisfies Record<EmailSocialPlatform, string>,\n fields: {\n text: 'Text',\n content: 'Content',\n level: 'Level',\n alignment: 'Alignment',\n color: 'Color',\n textColor: 'Text color',\n backgroundColor: 'Background color',\n backgroundGradient: 'Background gradient (CSS)',\n accentColor: 'Accent color',\n url: 'Link URL',\n borderRadius: 'Corner radius (px)',\n fullWidth: 'Full width',\n imageUrl: 'Image URL',\n uploadImage: 'Upload image',\n uploadFailed: 'The image could not be uploaded. Try again.',\n altText: 'Alt text',\n width: 'Width (px or %)',\n style: 'Style',\n height: 'Height (px)',\n iconSize: 'Icon size',\n platform: 'Platform',\n socialLink: 'Link {number}',\n addLink: 'Add link',\n removeLink: 'Remove link',\n html: 'HTML',\n companyName: 'Company name',\n address: 'Address',\n phone: 'Phone',\n showUnsubscribe: 'Show unsubscribe link',\n unsubscribeText: 'Unsubscribe text',\n managePreferencesUrl: 'Preferences URL',\n managePreferencesText: 'Preferences text',\n author: 'Author',\n role: 'Role',\n headerRow: 'First row is a header',\n headerBackgroundColor: 'Header background',\n headerTextColor: 'Header text color',\n borderColor: 'Border color',\n addRow: 'Add row',\n addColumn: 'Add column',\n removeRow: 'Remove last row',\n removeColumn: 'Remove last column',\n cell: 'Row {row}, column {column}',\n categoryText: 'Eyebrow',\n headline: 'Headline',\n subtitle: 'Subtitle',\n ctaText: 'Button text',\n ctaUrl: 'Button URL',\n ctaColor: 'Button color',\n padding: 'Vertical padding (px)',\n columnCount: 'Columns',\n bodyBackgroundColor: 'Page background',\n contentBackgroundColor: 'Content background',\n contentWidth: 'Content width (px)',\n fontFamily: 'Font',\n headingColor: 'Heading color',\n linkColor: 'Link color',\n buttonBackgroundColor: 'Button color',\n buttonTextColor: 'Button text color',\n buttonBorderRadius: 'Button corner radius (px)',\n },\n options: {\n left: 'Left',\n center: 'Center',\n right: 'Right',\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n sm: 'Small',\n md: 'Medium',\n lg: 'Large',\n },\n};\n\nexport type EmailEditorLabels = typeof defaultEmailEditorLabels;\n\nexport type EmailEditorLabelOverrides = {\n [K in keyof EmailEditorLabels]?: EmailEditorLabels[K] extends string\n ? string\n : Partial<EmailEditorLabels[K]>;\n};\n\nexport function mergeEmailEditorLabels(\n overrides: EmailEditorLabelOverrides | undefined\n): EmailEditorLabels {\n if (!overrides) return defaultEmailEditorLabels;\n const d = defaultEmailEditorLabels;\n return {\n ...d,\n ...overrides,\n blockTypes: { ...d.blockTypes, ...overrides.blockTypes },\n platforms: { ...d.platforms, ...overrides.platforms },\n fields: { ...d.fields, ...overrides.fields },\n options: { ...d.options, ...overrides.options },\n } as EmailEditorLabels;\n}\n","import {\n generateEmailBlockId,\n type EmailBlock,\n type EmailContentBlock,\n} from './types';\n\ntype Edit = <B extends EmailBlock>(list: B[], index: number) => B[];\n\n/** Apply `edit` to whichever list (top level or a column) contains `id`. */\nfunction editContaining<B extends EmailBlock>(\n blocks: B[],\n id: string,\n edit: Edit\n): B[] {\n const index = blocks.findIndex((b) => b.id === id);\n if (index !== -1) return edit(blocks, index);\n let changed = false;\n const next = blocks.map((block) => {\n if (block.type !== 'columns') return block;\n let hit = false;\n const columns = block.columns.map((column) => {\n const inner = editContaining(column.blocks, id, edit);\n if (inner === column.blocks) return column;\n hit = changed = true;\n return { ...column, blocks: inner };\n });\n return hit ? { ...block, columns } : block;\n });\n return changed ? next : blocks;\n}\n\nexport function findEmailBlock(\n blocks: EmailBlock[],\n id: string | null\n): EmailBlock | undefined {\n if (!id) return undefined;\n for (const block of blocks) {\n if (block.id === id) return block;\n if (block.type === 'columns') {\n for (const column of block.columns) {\n const found = findEmailBlock(column.blocks, id);\n if (found) return found;\n }\n }\n }\n return undefined;\n}\n\nexport function updateEmailBlock(\n blocks: EmailBlock[],\n id: string,\n patch: Partial<EmailBlock>\n): EmailBlock[] {\n return editContaining(blocks, id, (list, i) =>\n list.map((b, j) => (j === i ? ({ ...b, ...patch } as typeof b) : b))\n );\n}\n\nexport function removeEmailBlock(\n blocks: EmailBlock[],\n id: string\n): EmailBlock[] {\n return editContaining(blocks, id, (list, i) =>\n list.filter((_, j) => j !== i)\n );\n}\n\nexport function moveEmailBlock(\n blocks: EmailBlock[],\n id: string,\n delta: number\n): EmailBlock[] {\n return editContaining(blocks, id, (list, i) => {\n const target = i + delta;\n if (target < 0 || target >= list.length) return list;\n const next = [...list];\n const [moved] = next.splice(i, 1);\n next.splice(target, 0, moved);\n return next;\n });\n}\n\nfunction cloneWithNewIds<B extends EmailBlock>(block: B): B {\n const copy = { ...block, id: generateEmailBlockId() };\n if (copy.type === 'columns') {\n copy.columns = copy.columns.map((column) => ({\n ...column,\n id: generateEmailBlockId(),\n blocks: column.blocks.map(cloneWithNewIds),\n }));\n }\n return copy;\n}\n\n/** Returns the new list and the copy's id. */\nexport function duplicateEmailBlock(\n blocks: EmailBlock[],\n id: string\n): { blocks: EmailBlock[]; newId: string | null } {\n let newId: string | null = null;\n const next = editContaining(blocks, id, (list, i) => {\n const copy = cloneWithNewIds(list[i]);\n newId = copy.id;\n return [...list.slice(0, i + 1), copy, ...list.slice(i + 1)];\n });\n return { blocks: next, newId };\n}\n\nexport function addBlockToColumn(\n blocks: EmailBlock[],\n columnsId: string,\n columnIndex: number,\n block: EmailContentBlock\n): EmailBlock[] {\n return blocks.map((b) =>\n b.id === columnsId && b.type === 'columns'\n ? {\n ...b,\n columns: b.columns.map((column, i) =>\n i === columnIndex\n ? { ...column, blocks: [...column.blocks, block] }\n : column\n ),\n }\n : b\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport {\n DndContext,\n DragOverlay,\n PointerSensor,\n closestCenter,\n useDraggable,\n useDroppable,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n arrayMove,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n ChevronDown,\n ChevronUp,\n Code,\n Columns2,\n Copy,\n GripVertical,\n Heading,\n Image as ImageIcon,\n Megaphone,\n Minus,\n Monitor,\n MousePointerClick,\n MoveVertical,\n PanelBottom,\n Quote,\n Redo2,\n Share2,\n Smartphone,\n Table,\n Trash2,\n Type,\n Undo2,\n} from 'lucide-react';\n\nimport { useLiveAnnouncement } from '../../hooks/useLiveAnnouncement';\nimport { cn } from '../../utils/cn';\nimport type { RichTextVariableGroup } from '../RichTextEditor';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../Tabs';\nimport { EmailBlockPreview } from './EmailBlockPreview';\nimport {\n Button,\n EmailBlockSettings,\n EmailDesignPanel,\n} from './EmailBlockSettings';\nimport {\n mergeEmailEditorLabels,\n type EmailEditorLabelOverrides,\n type EmailEditorLabels,\n} from './labels';\nimport { normalizeDesignSettings } from './renderEmailMjml';\nimport {\n addBlockToColumn,\n duplicateEmailBlock,\n findEmailBlock,\n moveEmailBlock,\n removeEmailBlock,\n updateEmailBlock,\n} from './tree';\nimport {\n createEmailBlock,\n resolveDesignSettings,\n type EmailBlock,\n type EmailBlockType,\n type EmailContentBlock,\n type EmailContentTree,\n type EmailDesignSettings,\n type EmailMergeTag,\n} from './types';\n\nconst BLOCK_ICONS: Record<EmailBlockType, React.ElementType> = {\n hero: Megaphone,\n columns: Columns2,\n heading: Heading,\n text: Type,\n button: MousePointerClick,\n image: ImageIcon,\n divider: Minus,\n spacer: MoveVertical,\n social: Share2,\n quote: Quote,\n table: Table,\n html: Code,\n footer: PanelBottom,\n};\n\nexport const EMAIL_BLOCK_TYPES = Object.keys(BLOCK_ICONS) as EmailBlockType[];\n\nconst PALETTE = 'palette:';\nconst CANVAS_END = 'canvas:end';\nconst MOBILE_WIDTH = 375;\n\nfunction fill(\n template: string,\n values: Record<string, string | number>\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) =>\n String(values[key] ?? '')\n );\n}\n\ninterface Snapshot {\n tree: EmailContentTree;\n design: EmailDesignSettings | undefined;\n /** Which controlled channels the commit that created this entry changed. */\n changed: { tree: boolean; design: boolean };\n}\n\nexport interface EmailEditorProps {\n /** The email document. Controlled. */\n value: EmailContentTree;\n /** Called with the next document after every edit. */\n onChange: (value: EmailContentTree) => void;\n /** Global colours, font and width. Merged over `createDefaultDesignSettings()`. */\n design?: EmailDesignSettings;\n /** Enables the Design tab. Omit to make design settings read-only. */\n onDesignChange?: (design: EmailDesignSettings) => void;\n /** Merge fields offered in the text block's Variables menu. */\n mergeTags?: EmailMergeTag[];\n /** Palette order and availability. Defaults to every block type. */\n blockTypes?: EmailBlockType[];\n /** Upload handler for image blocks; resolve with the hosted URL. */\n onUploadImage?: (file: File) => Promise<string>;\n /** Override any user-facing string. */\n labels?: EmailEditorLabelOverrides;\n className?: string;\n}\n\ninterface BlockFrameProps {\n block: EmailBlock;\n selected: boolean;\n labels: EmailEditorLabels;\n onSelect: () => void;\n onMove: (delta: number) => void;\n onDuplicate: () => void;\n onRemove: () => void;\n isFirst: boolean;\n isLast: boolean;\n dragHandle?: React.ReactNode;\n children: React.ReactNode;\n}\n\nfunction BlockFrame({\n block,\n selected,\n labels,\n onSelect,\n onMove,\n onDuplicate,\n onRemove,\n isFirst,\n isLast,\n dragHandle,\n children,\n}: BlockFrameProps) {\n // `?? type` names unsupported block types from host documents at runtime.\n const name = labels.blockTypes[block.type] ?? block.type;\n const tool = 'text-muted-foreground hover:text-foreground h-7 w-7';\n // Frames nest inside columns, so a child's click must not also select its parent.\n const own = (action: () => void) => (e: React.MouseEvent) => {\n e.stopPropagation();\n action();\n };\n return (\n <div\n data-slot=\"email-editor-block\"\n data-selected={selected || undefined}\n className={cn(\n 'relative outline-offset-[-2px]',\n selected\n ? 'outline-primary-500 outline outline-2'\n : 'hover:outline-primary-300 focus-within:outline-primary-300 focus-within:outline-1 focus-within:outline-dashed hover:outline-1 hover:outline-dashed'\n )}\n >\n <div\n data-slot=\"email-editor-block-toolbar\"\n className={cn(\n 'bg-background border-border absolute end-2 -top-3.5 z-10 flex items-center rounded-md border shadow-sm',\n // Reveal on hover of this frame only, not of a frame nested inside it.\n !selected &&\n 'opacity-0 focus-within:opacity-100 [[data-slot=email-editor-block]:hover:not(:has([data-slot=email-editor-block]:hover))>&]:opacity-100'\n )}\n >\n {dragHandle}\n <button\n type=\"button\"\n aria-pressed={selected}\n aria-label={fill(labels.selectBlock, { item: name })}\n onClick={own(onSelect)}\n className=\"text-foreground focus-visible:ring-ring rounded px-2 text-xs font-medium focus-visible:ring-2 focus-visible:outline-none\"\n >\n {name}\n </button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={tool}\n aria-label={labels.moveUp}\n disabled={isFirst}\n onClick={own(() => onMove(-1))}\n >\n <ChevronUp className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={tool}\n aria-label={labels.moveDown}\n disabled={isLast}\n onClick={own(() => onMove(1))}\n >\n <ChevronDown className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={tool}\n aria-label={labels.duplicate}\n onClick={own(onDuplicate)}\n >\n <Copy className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(tool, 'hover:text-destructive')}\n aria-label={labels.remove}\n onClick={own(onRemove)}\n >\n <Trash2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n </div>\n {/* Mouse shortcut for the Select button in the toolbar above. */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n onClick={(e) => {\n e.stopPropagation();\n // A preview link reached by keyboard must select, not navigate away.\n if ((e.target as HTMLElement).closest('a')) e.preventDefault();\n onSelect();\n }}\n className=\"cursor-pointer [&_a]:pointer-events-none\"\n >\n {children}\n </div>\n </div>\n );\n}\n\nfunction SortableBlock({\n id,\n children,\n}: {\n id: string;\n children: (handle: React.ReactNode) => React.ReactNode;\n}) {\n const {\n setNodeRef,\n setActivatorNodeRef,\n listeners,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n // Pointer-only: keyboard users reorder with the Move up/down buttons.\n const handle = (\n <span\n ref={setActivatorNodeRef}\n {...listeners}\n aria-hidden=\"true\"\n className=\"text-muted-foreground flex h-7 w-6 cursor-grab touch-none items-center justify-center\"\n >\n <GripVertical className=\"h-4 w-4\" />\n </span>\n );\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(transform), transition }}\n className={cn(isDragging && 'relative z-20 opacity-60')}\n >\n {children(handle)}\n </div>\n );\n}\n\nfunction PaletteItem({\n type,\n label,\n onAdd,\n}: {\n type: EmailBlockType;\n label: string;\n onAdd: () => void;\n}) {\n const { setNodeRef, listeners } = useDraggable({ id: PALETTE + type });\n const Icon = BLOCK_ICONS[type];\n return (\n <button\n ref={setNodeRef}\n type=\"button\"\n onPointerDown={\n listeners?.onPointerDown as React.PointerEventHandler | undefined\n }\n onClick={onAdd}\n className=\"border-border bg-background hover:bg-muted hover:border-primary-300 text-foreground focus-visible:ring-ring flex w-24 shrink-0 flex-col items-center gap-1 rounded-md border p-2 text-xs focus-visible:ring-2 focus-visible:outline-none lg:w-auto\"\n >\n <Icon className=\"text-muted-foreground h-5 w-5\" aria-hidden=\"true\" />\n {label}\n </button>\n );\n}\n\nfunction CanvasEnd({ empty, label }: { empty: boolean; label: string }) {\n const { setNodeRef, isOver } = useDroppable({ id: CANVAS_END });\n return (\n <div\n ref={setNodeRef}\n className={cn(\n 'text-muted-foreground flex items-center justify-center text-center text-sm',\n empty\n ? 'border-border m-4 min-h-32 rounded-md border-2 border-dashed p-6'\n : 'min-h-8',\n isOver && 'bg-primary-500/10'\n )}\n >\n {empty && label}\n </div>\n );\n}\n\n/**\n * Block-based email builder: palette, sortable canvas, per-block settings and\n * global design. Serialise the document with `renderEmailMjml`.\n */\nexport const EmailEditor = React.forwardRef<HTMLDivElement, EmailEditorProps>(\n (\n {\n value,\n onChange,\n design: designProp,\n onDesignChange,\n mergeTags,\n blockTypes = EMAIL_BLOCK_TYPES,\n onUploadImage,\n labels: labelOverrides,\n className,\n },\n ref\n ) => {\n const labels = React.useMemo(\n () => mergeEmailEditorLabels(labelOverrides),\n [labelOverrides]\n );\n const design = React.useMemo(\n () => normalizeDesignSettings(designProp),\n [designProp]\n );\n const [selectedId, setSelectedId] = React.useState<string | null>(null);\n const [viewport, setViewport] = React.useState<'desktop' | 'mobile'>(\n 'desktop'\n );\n const [dragging, setDragging] = React.useState<string | null>(null);\n const [past, setPast] = React.useState<Snapshot[]>([]);\n const [future, setFuture] = React.useState<Snapshot[]>([]);\n const [announcement, announce] = useLiveAnnouncement();\n\n const variableGroups = React.useMemo<\n RichTextVariableGroup[] | undefined\n >(() => {\n if (!mergeTags?.length) return undefined;\n const groups = new Map<string, RichTextVariableGroup>();\n for (const tag of mergeTags) {\n const group = groups.get(tag.group) ?? {\n label: tag.group,\n variables: [],\n };\n group.variables.push({ label: tag.label, value: tag.token });\n groups.set(tag.group, group);\n }\n return [...groups.values()];\n }, [mergeTags]);\n\n // Async edits (image uploads) must land on the document as it is when they finish.\n const latest = React.useRef({ value, designProp, onChange });\n React.useEffect(() => {\n latest.current = { value, designProp, onChange };\n });\n\n const present = (changed: Snapshot['changed']): Snapshot => ({\n tree: value,\n design: designProp,\n changed,\n });\n const commit = (\n tree: EmailContentTree,\n nextDesign?: EmailDesignSettings\n ) => {\n const current = latest.current;\n const changed = {\n tree: tree !== current.value,\n design: Boolean(nextDesign),\n };\n if (!changed.tree && !changed.design) return;\n setPast((p) => [\n ...p.slice(-49),\n { tree: current.value, design: current.designProp, changed },\n ]);\n setFuture([]);\n if (changed.tree) current.onChange(tree);\n if (nextDesign) onDesignChange?.(nextDesign);\n };\n const setBlocks = (blocks: EmailBlock[]) => commit({ ...value, blocks });\n const patchBlock = (id: string, patch: Partial<EmailBlock>) => {\n const doc = latest.current.value;\n if (!findEmailBlock(doc.blocks, id)) return;\n commit({ ...doc, blocks: updateEmailBlock(doc.blocks, id, patch) });\n };\n // Only replay the channels the entry's commit changed: a design-only undo\n // must not overwrite a document the host may have updated since (and vice\n // versa), nor fire a spurious onChange.\n const restore = (snapshot: Snapshot) => {\n if (snapshot.changed.tree) onChange(snapshot.tree);\n if (snapshot.changed.design) onDesignChange?.(snapshot.design ?? {});\n };\n const undo = () => {\n const previous = past[past.length - 1];\n if (!previous) return;\n setPast((p) => p.slice(0, -1));\n setFuture((f) => [present(previous.changed), ...f]);\n restore(previous);\n };\n const redo = () => {\n const next = future[0];\n if (!next) return;\n setFuture((f) => f.slice(1));\n setPast((p) => [...p, present(next.changed)]);\n restore(next);\n };\n\n // `?? type` covers unsupported block types from host documents at runtime.\n const nameOf = (type: EmailBlockType) => labels.blockTypes[type] ?? type;\n\n const insertBlock = (type: EmailBlockType, index?: number) => {\n const block = createEmailBlock(type);\n const blocks = [...value.blocks];\n // The selection may sit inside columns; insert after its top-level container.\n const selectedIndex = blocks.findIndex((b) =>\n Boolean(findEmailBlock([b], selectedId))\n );\n const at =\n index ?? (selectedIndex === -1 ? blocks.length : selectedIndex + 1);\n blocks.splice(at, 0, block);\n setBlocks(blocks);\n setSelectedId(block.id);\n announce(fill(labels.announceAdded, { item: nameOf(type) }));\n };\n\n const selected = findEmailBlock(value.blocks, selectedId);\n\n const frameProps = (\n block: EmailBlock,\n siblings: EmailBlock[],\n index: number\n ) => ({\n block,\n labels,\n selected: block.id === selectedId,\n isFirst: index === 0,\n isLast: index === siblings.length - 1,\n onSelect: () => setSelectedId(block.id),\n onMove: (delta: number) => {\n setBlocks(moveEmailBlock(value.blocks, block.id, delta));\n announce(\n fill(labels.announceMoved, {\n item: nameOf(block.type),\n position: index + 1 + delta,\n })\n );\n },\n onDuplicate: () => {\n const { blocks, newId } = duplicateEmailBlock(value.blocks, block.id);\n setBlocks(blocks);\n setSelectedId(newId);\n announce(fill(labels.announceDuplicated, { item: nameOf(block.type) }));\n },\n onRemove: () => {\n setBlocks(removeEmailBlock(value.blocks, block.id));\n if (findEmailBlock([block], selectedId)) setSelectedId(null);\n announce(fill(labels.announceRemoved, { item: nameOf(block.type) }));\n },\n });\n\n const renderPreview = (block: EmailBlock) => (\n <EmailBlockPreview\n block={block}\n design={design}\n emptyColumnLabel={labels.emptyColumn}\n unsupportedBlockLabel={labels.unsupportedBlock}\n platformLabels={labels.platforms}\n renderChild={(child) => {\n const column =\n block.type === 'columns'\n ? block.columns.find((c) =>\n c.blocks.some((b) => b.id === child.id)\n )\n : undefined;\n const siblings = column?.blocks ?? [];\n return (\n <BlockFrame\n {...frameProps(child, siblings, siblings.indexOf(child))}\n >\n {renderPreview(child)}\n </BlockFrame>\n );\n }}\n />\n );\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } })\n );\n\n const onDragStart = (event: DragStartEvent) =>\n setDragging(String(event.active.id));\n const onDragEnd = ({ active, over }: DragEndEvent) => {\n setDragging(null);\n if (!over) return;\n const activeId = String(active.id);\n const overId = String(over.id);\n const overIndex = value.blocks.findIndex((b) => b.id === overId);\n if (activeId.startsWith(PALETTE)) {\n insertBlock(\n activeId.slice(PALETTE.length) as EmailBlockType,\n overIndex === -1 ? value.blocks.length : overIndex\n );\n return;\n }\n const from = value.blocks.findIndex((b) => b.id === activeId);\n const to = overId === CANVAS_END ? value.blocks.length - 1 : overIndex;\n if (from === -1 || to === -1 || from === to) return;\n setBlocks(arrayMove(value.blocks, from, to));\n announce(\n fill(labels.announceMoved, {\n item: nameOf(value.blocks[from].type),\n position: to + 1,\n })\n );\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n if (target.closest('input, textarea, select, [contenteditable=\"true\"]'))\n return;\n if (!(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== 'z')\n return;\n event.preventDefault();\n if (event.shiftKey) redo();\n else undo();\n };\n\n const draggingType = dragging?.startsWith(PALETTE)\n ? (dragging.slice(PALETTE.length) as EmailBlockType)\n : (value.blocks.find((b) => b.id === dragging)?.type ?? null);\n\n const panel = 'border-border bg-background flex min-h-0 flex-col';\n const panelBody = 'flex flex-col gap-3 overflow-y-auto p-4';\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onDragCancel={() => setDragging(null)}\n >\n {/* Undo/redo shortcuts for the whole editor; text fields keep their native undo. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={ref}\n data-slot=\"email-editor\"\n onKeyDown={onKeyDown}\n className={cn(\n 'border-border bg-muted/30 text-foreground flex min-h-[640px] flex-col overflow-hidden rounded-lg border lg:flex-row',\n className\n )}\n >\n <aside\n data-slot=\"email-editor-palette\"\n className={cn(panel, 'border-b lg:w-64 lg:border-e lg:border-b-0')}\n >\n <Tabs\n defaultValue=\"blocks\"\n className=\"flex min-h-0 flex-1 flex-col\"\n >\n <TabsList className=\"px-2\">\n <TabsTrigger value=\"blocks\">{labels.blocks}</TabsTrigger>\n {onDesignChange && (\n <TabsTrigger value=\"design\">{labels.design}</TabsTrigger>\n )}\n </TabsList>\n <TabsContent value=\"blocks\" className=\"overflow-y-auto p-3\">\n <div\n className=\"flex gap-2 overflow-x-auto pb-1 lg:grid lg:grid-cols-2 lg:overflow-visible lg:pb-0\"\n aria-label={labels.addBlock}\n role=\"group\"\n >\n {blockTypes.map((type) => (\n <PaletteItem\n key={type}\n type={type}\n label={nameOf(type)}\n onAdd={() => insertBlock(type)}\n />\n ))}\n </div>\n </TabsContent>\n {onDesignChange && (\n <TabsContent value=\"design\" className={panelBody}>\n {/* Raw values, so an in-progress colour (`#12…`) is not snapped\n back to a fallback; only the canvas and MJML normalise. */}\n <EmailDesignPanel\n design={resolveDesignSettings(designProp)}\n labels={labels}\n onChange={(patch) =>\n commit(value, { ...designProp, ...patch })\n }\n />\n </TabsContent>\n )}\n </Tabs>\n </aside>\n\n <section\n data-slot=\"email-editor-canvas\"\n aria-label={labels.canvas}\n className=\"flex min-w-0 flex-1 flex-col\"\n >\n <div className=\"border-border bg-background flex items-center gap-1 border-b px-3 py-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.undo}\n title={labels.undo}\n disabled={!past.length}\n onClick={undo}\n >\n <Undo2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={labels.redo}\n title={labels.redo}\n disabled={!future.length}\n onClick={redo}\n >\n <Redo2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n <div\n role=\"group\"\n aria-label={labels.viewport}\n className=\"ms-auto flex gap-1\"\n >\n {(\n [\n ['desktop', Monitor, labels.desktop],\n ['mobile', Smartphone, labels.mobile],\n ] as const\n ).map(([mode, Icon, label]) => (\n <Button\n key={mode}\n variant={viewport === mode ? 'secondary' : 'ghost'}\n size=\"icon\"\n aria-label={label}\n title={label}\n aria-pressed={viewport === mode}\n onClick={() => setViewport(mode)}\n >\n <Icon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n ))}\n </div>\n </div>\n {/* Clicking the bare backdrop clears the selection. */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n className=\"flex-1 overflow-auto px-2 py-8 sm:px-6\"\n style={{ background: design.bodyBackgroundColor }}\n onClick={(e) =>\n e.target === e.currentTarget && setSelectedId(null)\n }\n >\n <div\n dir=\"ltr\"\n className=\"mx-auto shadow-sm transition-[width]\"\n style={{\n width:\n viewport === 'mobile' ? MOBILE_WIDTH : design.contentWidth,\n maxWidth: '100%',\n background: design.contentBackgroundColor,\n color: design.textColor,\n fontFamily: design.fontFamily,\n fontSize: 16,\n lineHeight: 1.6,\n }}\n >\n <SortableContext\n items={value.blocks.map((b) => b.id)}\n strategy={verticalListSortingStrategy}\n >\n {value.blocks.map((block, index) => (\n <SortableBlock key={block.id} id={block.id}>\n {(handle) => (\n <BlockFrame\n {...frameProps(block, value.blocks, index)}\n dragHandle={handle}\n >\n {renderPreview(block)}\n </BlockFrame>\n )}\n </SortableBlock>\n ))}\n </SortableContext>\n <CanvasEnd\n empty={!value.blocks.length}\n label={labels.emptyCanvas}\n />\n </div>\n </div>\n </section>\n\n <aside\n data-slot=\"email-editor-settings\"\n aria-label={labels.blockSettings}\n className={cn(panel, 'border-t lg:w-80 lg:border-s lg:border-t-0')}\n >\n <h2 className=\"border-border border-b px-4 py-3 text-sm font-semibold\">\n {selected ? nameOf(selected.type) : labels.blockSettings}\n </h2>\n <div className={panelBody}>\n {selected ? (\n <EmailBlockSettings\n key={selected.id}\n block={selected}\n design={design}\n labels={labels}\n variableGroups={variableGroups}\n onUploadImage={onUploadImage}\n onChange={(patch) => patchBlock(selected.id, patch)}\n onAddToColumn={(columnIndex, block: EmailContentBlock) => {\n setBlocks(\n addBlockToColumn(\n value.blocks,\n selected.id,\n columnIndex,\n block\n )\n );\n setSelectedId(block.id);\n announce(\n fill(labels.announceAdded, { item: nameOf(block.type) })\n );\n }}\n />\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n {labels.noSelection}\n </p>\n )}\n </div>\n </aside>\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n </div>\n <DragOverlay dropAnimation={null}>\n {draggingType && dragging?.startsWith(PALETTE) ? (\n <div className=\"bg-background border-primary-500 text-foreground rounded-md border px-3 py-2 text-xs font-medium shadow-lg\">\n {nameOf(draggingType)}\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n }\n);\n\nEmailEditor.displayName = 'EmailEditor';\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var chunkNNEFAUHV_cjs = require('./chunk-NNEFAUHV.cjs');
|
|
4
4
|
var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
|
|
5
5
|
var chunkSCV7C55E_cjs = require('./chunk-SCV7C55E.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkIEY3ZJIT_cjs = require('./chunk-IEY3ZJIT.cjs');
|
|
7
7
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
@@ -51,6 +51,10 @@ var modalContentVariants = classVarianceAuthority.cva(
|
|
|
51
51
|
// Full viewport height on mobile, constrained on larger screens
|
|
52
52
|
"max-h-dvh sm:max-h-[calc(100dvh-2rem)]",
|
|
53
53
|
"min-h-dvh sm:min-h-0",
|
|
54
|
+
// Full-screen on mobile covers the status bar and home indicator, so
|
|
55
|
+
// clear the safe areas there. Overridable for tests and native shells.
|
|
56
|
+
"pt-[var(--mieweb-safe-area-top,env(safe-area-inset-top))] sm:pt-0",
|
|
57
|
+
"pb-[var(--mieweb-safe-area-bottom,env(safe-area-inset-bottom))] sm:pb-0",
|
|
54
58
|
// If a <form> is used as a direct child (wrapping ModalBody + ModalFooter),
|
|
55
59
|
// make it participate in the flex column layout so overflow constraints work.
|
|
56
60
|
"[&>form]:flex [&>form]:flex-col [&>form]:flex-1 [&>form]:min-h-0",
|
|
@@ -89,7 +93,7 @@ function Modal({
|
|
|
89
93
|
}) {
|
|
90
94
|
const generatedId = React__namespace.useId();
|
|
91
95
|
const modalId = id || generatedId;
|
|
92
|
-
const runtime =
|
|
96
|
+
const runtime = chunkIEY3ZJIT_cjs.useMotionRuntime();
|
|
93
97
|
const animatesExit = Boolean(runtime?.enabled);
|
|
94
98
|
const [isExiting, setIsExiting] = React__namespace.useState(false);
|
|
95
99
|
const [prevOpen, setPrevOpen] = React__namespace.useState(open);
|
|
@@ -140,9 +144,9 @@ function Modal({
|
|
|
140
144
|
ModalContext.Provider,
|
|
141
145
|
{
|
|
142
146
|
value: { onClose: () => onOpenChange(false), modalId },
|
|
143
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkIEY3ZJIT_cjs.AnimatedPresence, { onExitComplete: () => setIsExiting(false), children: open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50", children: [
|
|
144
148
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
145
|
-
|
|
149
|
+
chunkIEY3ZJIT_cjs.Animated,
|
|
146
150
|
{
|
|
147
151
|
preset: "overlay",
|
|
148
152
|
mode: "presence",
|
|
@@ -158,7 +162,7 @@ function Modal({
|
|
|
158
162
|
className: "flex min-h-full items-center justify-center p-0 sm:p-4",
|
|
159
163
|
onClick: handleOverlayClick,
|
|
160
164
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
161
|
-
|
|
165
|
+
chunkIEY3ZJIT_cjs.Animated,
|
|
162
166
|
{
|
|
163
167
|
ref: focusTrapRef,
|
|
164
168
|
preset: "modalContent",
|
|
@@ -323,5 +327,5 @@ exports.ModalHeader = ModalHeader;
|
|
|
323
327
|
exports.ModalTitle = ModalTitle;
|
|
324
328
|
exports.modalContentVariants = modalContentVariants;
|
|
325
329
|
exports.modalOverlayVariants = modalOverlayVariants;
|
|
326
|
-
//# sourceMappingURL=chunk-
|
|
327
|
-
//# sourceMappingURL=chunk-
|
|
330
|
+
//# sourceMappingURL=chunk-LC3JL2HB.cjs.map
|
|
331
|
+
//# sourceMappingURL=chunk-LC3JL2HB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["cva","React","useMotionRuntime","useFocusTrap","useEscapeKey","isStorybookDocsMode","jsx","AnimatedPresence","jsxs","Animated","cn"],"mappings":"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","file":"chunk-LC3JL2HB.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { isStorybookDocsMode } from '../../utils/environment';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { Animated, AnimatedPresence, useMotionRuntime } from '../../motion';\n\n/**\n * Modal scroll lock state manager.\n * Uses a singleton pattern with ref-like storage to track open modals\n * and manage body scroll locking across multiple modal instances.\n * Includes reset capability for testing environments.\n */\nconst scrollLockState = {\n count: 0,\n originalOverflow: null as string | null,\n reset() {\n this.count = 0;\n this.originalOverflow = null;\n },\n};\n\n// Export for testing environments\nexport const __resetScrollLockState = () => scrollLockState.reset();\n\nconst modalOverlayVariants = cva(\n ['fixed inset-0', 'bg-black/50 backdrop-blur-sm'],\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\n/**\n * Entry keyframes for the CSS path only.\n *\n * Kept out of the `cva` base so they never run alongside the motion runtime —\n * both drive opacity and transform, and applied together they fight.\n *\n * Entry only: there is no CSS exit. The component unmounts the moment `open`\n * flips to false, so `data-state` is hardcoded `\"open\"` and closed keyframes\n * would be unreachable dead code. That missing exit is the clearest thing the\n * motion opt-in buys back.\n */\nconst MODAL_OVERLAY_FALLBACK_ANIMATION = 'animate-in fade-in-0';\n\nconst MODAL_CONTENT_FALLBACK_ANIMATION =\n 'duration-200 animate-in fade-in-0 zoom-in-95';\n\nconst modalContentVariants = cva(\n [\n 'relative w-full bg-card text-card-foreground',\n 'border border-border shadow-lg',\n // Full-screen on mobile, rounded on larger screens\n 'rounded-none sm:rounded-xl',\n 'flex flex-col',\n // Full viewport height on mobile, constrained on larger screens\n 'max-h-dvh sm:max-h-[calc(100dvh-2rem)]',\n 'min-h-dvh sm:min-h-0',\n // Full-screen on mobile covers the status bar and home indicator, so\n // clear the safe areas there. Overridable for tests and native shells.\n 'pt-[var(--mieweb-safe-area-top,env(safe-area-inset-top))] sm:pt-0',\n 'pb-[var(--mieweb-safe-area-bottom,env(safe-area-inset-bottom))] sm:pb-0',\n // If a <form> is used as a direct child (wrapping ModalBody + ModalFooter),\n // make it participate in the flex column layout so overflow constraints work.\n '[&>form]:flex [&>form]:flex-col [&>form]:flex-1 [&>form]:min-h-0',\n 'focus:outline-none',\n ],\n {\n variants: {\n size: {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n full: 'max-w-[calc(100vw-2rem)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface ModalProps extends VariantProps<typeof modalContentVariants> {\n /** Whether the modal is open */\n open: boolean;\n /** Callback when the modal should close */\n onOpenChange: (open: boolean) => void;\n /** Modal content */\n children: React.ReactNode;\n /** Whether to close when clicking the overlay */\n closeOnOverlayClick?: boolean;\n /** Whether to close when pressing Escape */\n closeOnEscape?: boolean;\n /** Additional class name for the modal content */\n className?: string;\n /** ID for the modal, used for accessibility */\n id?: string;\n /** Accessible label for the modal */\n 'aria-label'?: string;\n /** ID of the element that labels the modal */\n 'aria-labelledby'?: string;\n /** ID of the element that describes the modal */\n 'aria-describedby'?: string;\n}\n\n/**\n * An accessible modal/dialog component.\n *\n * @example\n * ```tsx\n * <Modal open={isOpen} onOpenChange={setIsOpen} size=\"lg\">\n * <ModalHeader>\n * <ModalTitle>Confirm Action</ModalTitle>\n * <ModalClose />\n * </ModalHeader>\n * <ModalBody>\n * Are you sure you want to continue?\n * </ModalBody>\n * <ModalFooter>\n * <Button variant=\"secondary\" onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button onClick={handleConfirm}>Confirm</Button>\n * </ModalFooter>\n * </Modal>\n * ```\n */\nfunction Modal({\n open,\n onOpenChange,\n children,\n size,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n}: ModalProps) {\n const generatedId = React.useId();\n const modalId = id || generatedId;\n\n /*\n * The dialog outlives `open`.\n *\n * With a motion runtime, `AnimatedPresence` keeps the subtree on screen until\n * its exit animation finishes. Guards keyed on `open` alone would therefore\n * release while a `role=\"dialog\" aria-modal=\"true\"` element is still visible:\n * Tab could reach the page behind it and body scrolling would resume under\n * it. `isGuarded` stays true until presence reports the exit is done.\n *\n * Only tracked when a runtime is actually animating. Without one the subtree\n * unmounts on the same frame, and `onExitComplete` would never fire to clear\n * the flag.\n */\n const runtime = useMotionRuntime();\n const animatesExit = Boolean(runtime?.enabled);\n const [isExiting, setIsExiting] = React.useState(false);\n const [prevOpen, setPrevOpen] = React.useState(open);\n\n // Derived synchronously during render (React's \"adjust state when props\n // change\" pattern), not in an effect. An effect runs after commit, which\n // would leave one committed frame with the dialog still on screen but\n // `isGuarded` false — the focus trap would tear down, restore focus, then\n // re-arm and yank focus into the closing dialog, with the scroll lock\n // flickering alongside. Setting state during render re-renders before\n // commit, so the guards never observe the gap.\n if (prevOpen !== open) {\n setPrevOpen(open);\n if (!open && animatesExit) {\n setIsExiting(true);\n }\n }\n\n // If the runtime disappears or is disabled mid-exit, `onExitComplete` will\n // never fire — the subtree is already gone. Without this reset the guards\n // (and the body scroll lock with them) would be held forever.\n React.useEffect(() => {\n if (!animatesExit && isExiting) {\n setIsExiting(false);\n }\n }, [animatesExit, isExiting]);\n\n const isGuarded = open || isExiting;\n\n // Focus trap. Typed as `HTMLElement` because the content element is supplied\n // by `Animated`, which is element-agnostic.\n const focusTrapRef = useFocusTrap<HTMLElement>(isGuarded);\n\n // Handle escape key\n useEscapeKey(() => {\n if (closeOnEscape && open) {\n onOpenChange(false);\n }\n }, open);\n\n // Handle overlay click\n const handleOverlayClick = React.useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onOpenChange(false);\n }\n },\n [closeOnOverlayClick, onOpenChange]\n );\n\n // Prevent body scroll while the modal is on screen (handles multiple modals).\n // Keyed on `isGuarded`, not `open`, so scrolling does not resume underneath a\n // dialog that is still animating out.\n // Skip scroll lock in Storybook docs mode where multiple stories render inline\n React.useEffect(() => {\n // Skip scroll lock entirely in Storybook docs mode\n if (!isGuarded || isStorybookDocsMode()) {\n return undefined;\n }\n\n scrollLockState.count++;\n // Only capture and set overflow when first modal opens\n if (scrollLockState.count === 1) {\n scrollLockState.originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n scrollLockState.count--;\n // Only restore overflow when last modal closes\n if (\n scrollLockState.count === 0 &&\n scrollLockState.originalOverflow !== null\n ) {\n document.body.style.overflow = scrollLockState.originalOverflow;\n scrollLockState.originalOverflow = null;\n }\n };\n }, [isGuarded]);\n\n return (\n <ModalContext.Provider\n value={{ onClose: () => onOpenChange(false), modalId }}\n >\n {/*\n The `open` check lives inside `AnimatedPresence` rather than as an early\n `return null` above. On the CSS path this is identical — the tree\n unmounts immediately. With a motion runtime the subtree is held on\n screen until the overlay and content finish their exit animations.\n */}\n <AnimatedPresence onExitComplete={() => setIsExiting(false)}>\n {open && (\n <div key=\"modal-root\" className=\"fixed inset-0 z-50\">\n {/* Overlay backdrop */}\n <Animated\n preset=\"overlay\"\n mode=\"presence\"\n className={cn(modalOverlayVariants())}\n fallbackClassName={MODAL_OVERLAY_FALLBACK_ANIMATION}\n data-state=\"open\"\n aria-hidden=\"true\"\n />\n {/* Scrollable centering container — click outside to close */}\n <div className=\"fixed inset-0 overflow-y-auto\">\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n className=\"flex min-h-full items-center justify-center p-0 sm:p-4\"\n onClick={handleOverlayClick}\n >\n {/* Content */}\n <Animated\n ref={focusTrapRef}\n preset=\"modalContent\"\n mode=\"presence\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy || `${modalId}-title`}\n aria-describedby={ariaDescribedBy}\n id={modalId}\n tabIndex={-1}\n data-state=\"open\"\n data-slot=\"modal\"\n className={cn(modalContentVariants({ size }), className)}\n fallbackClassName={MODAL_CONTENT_FALLBACK_ANIMATION}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </Animated>\n </div>\n </div>\n </div>\n )}\n </AnimatedPresence>\n </ModalContext.Provider>\n );\n}\n\nModal.displayName = 'Modal';\n\n// ============================================================================\n// Modal Context\n// ============================================================================\n\ninterface ModalContextValue {\n onClose: () => void;\n modalId: string;\n}\n\nconst ModalContext = React.createContext<ModalContextValue | undefined>(\n undefined\n);\n\nfunction useModalContext() {\n const context = React.useContext(ModalContext);\n if (!context) {\n throw new Error('Modal components must be used within a Modal');\n }\n return context;\n}\n\n// ============================================================================\n// Modal Header\n// ============================================================================\n\nexport type ModalHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Header section of a Modal.\n */\nconst ModalHeader = React.forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-header\"\n className={cn(\n 'flex shrink-0 items-center justify-between',\n 'border-border border-b px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nModalHeader.displayName = 'ModalHeader';\n\n// ============================================================================\n// Modal Title\n// ============================================================================\n\nexport type ModalTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\n/**\n * Title for a Modal.\n */\nconst ModalTitle = React.forwardRef<HTMLHeadingElement, ModalTitleProps>(\n ({ className, children, ...props }, ref) => {\n const { modalId } = useModalContext();\n return (\n <h2\n ref={ref}\n id={`${modalId}-title`}\n data-slot=\"modal-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h2>\n );\n }\n);\n\nModalTitle.displayName = 'ModalTitle';\n\n// ============================================================================\n// Modal Close Button\n// ============================================================================\n\nexport type ModalCloseProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Close button for a Modal.\n */\nconst ModalClose = React.forwardRef<HTMLButtonElement, ModalCloseProps>(\n ({ className, children, onClick, ...props }, ref) => {\n const { onClose } = useModalContext();\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (!e.defaultPrevented) {\n onClose();\n }\n },\n [onClick, onClose]\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n data-slot=\"modal-close\"\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-lg',\n 'text-muted-foreground hover:text-foreground',\n 'hover:bg-muted transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n className\n )}\n aria-label=\"Close\"\n {...props}\n >\n {children || <CloseIcon />}\n </button>\n );\n }\n);\n\nModalClose.displayName = 'ModalClose';\n\n// ============================================================================\n// Modal Body\n// ============================================================================\n\nexport type ModalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Main content area of a Modal.\n */\nconst ModalBody = React.forwardRef<HTMLDivElement, ModalBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-body\"\n className={cn('min-h-0 flex-1 overflow-y-auto px-6 py-4', className)}\n {...props}\n />\n )\n);\n\nModalBody.displayName = 'ModalBody';\n\n// ============================================================================\n// Modal Footer\n// ============================================================================\n\nexport type ModalFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Footer section of a Modal, typically for action buttons.\n */\nconst ModalFooter = React.forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"modal-footer\"\n className={cn(\n 'flex shrink-0 items-center justify-end gap-3',\n 'border-border border-t px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nModalFooter.displayName = 'ModalFooter';\n\n// ============================================================================\n// Close Icon\n// ============================================================================\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n modalContentVariants,\n modalOverlayVariants,\n};\n"]}
|