@templatical/editor 0.25.1 → 0.26.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/dist/{AiChatSidebar-BYMdVldY.js → AiChatSidebar-c-3yyjN1.js} +14 -14
- package/dist/{AiFeatureMenu-BhHhnu9G.js → AiFeatureMenu-B-COyG7k.js} +7 -7
- package/dist/{BlockIssueBadge-De36PJC4.js → BlockIssueBadge-Buk3_6QF.js} +5 -5
- package/dist/{BlockPreviewCanvas-BxSoA1QV.js → BlockPreviewCanvas-CJPHGI93.js} +3 -3
- package/dist/{CloudEditor-BXfuytQj.js → CloudEditor-BdSQ8hfv.js} +26 -26
- package/dist/{CollaboratorBar-D9AfWRTH.js → CollaboratorBar-mGoi6yye.js} +4 -4
- package/dist/{ColorPicker-VPq4ASC8.js → ColorPicker-ClETsjA3.js} +6 -6
- package/dist/{CommentsSidebar-C8BLy3Pr.js → CommentsSidebar-CdRCCSDD.js} +15 -15
- package/dist/{CountdownBlock-Bs2Q_bFX.js → CountdownBlock-DuyvGcr8.js} +3 -3
- package/dist/{CountdownToolbar-Cic6cdOw.js → CountdownToolbar-CBE9wRaV.js} +4 -4
- package/dist/{DesignReferenceSidebar-k-26nkJI.js → DesignReferenceSidebar-CgYkySre.js} +11 -11
- package/dist/{IssuesPanel-NPzwTPYW.js → IssuesPanel-Do7RLXsP.js} +8 -8
- package/dist/{LoadingTrack-DH3OEM3z.js → LoadingTrack-BexpNuTV.js} +1 -1
- package/dist/{MergeTagModeToggle-DEGyx8tw.js → MergeTagModeToggle-hAJgIKhw.js} +6 -6
- package/dist/{MergeTagSuggestion-DvisJ9im.js → MergeTagSuggestion-BJ43ihWR.js} +34 -32
- package/dist/{NumberWithSuffix-CuHCIwSn.js → NumberWithSuffix-D37ZWiZh.js} +2 -2
- package/dist/{ParagraphEditor-DK_IPi9H.js → ParagraphEditor-DBG63S70.js} +74 -80
- package/dist/{RichTextEditorContent-DznIQcdY.js → RichTextEditorContent-fbYJXAio.js} +8 -8
- package/dist/{SaveBlockDialog-R9PbMsy-.js → SaveBlockDialog-Dq9UVihi.js} +10 -10
- package/dist/{SavedBlocksBrowserModal-ttPAklPE.js → SavedBlocksBrowserModal-CtFG4zeV.js} +11 -11
- package/dist/{SavedBlocksPanels-BCwQgKLF.js → SavedBlocksPanels-DNVdso_W.js} +2 -2
- package/dist/{SavedBlocksPickBar-DD5Ddv9t.js → SavedBlocksPickBar-Cv4dIpP-.js} +4 -4
- package/dist/{SnapshotHistory-BXSTGgBh.js → SnapshotHistory-DsOtMHOV.js} +10 -10
- package/dist/{TemplateScoringPanel-Ue6Dfnjb.js → TemplateScoringPanel-BZUsb3FD.js} +15 -15
- package/dist/{TestEmailModal-KPFc5oSv.js → TestEmailModal-CIwqtGfr.js} +11 -11
- package/dist/{TestEmailPanel-b8GHTrnE.js → TestEmailPanel-l6LDmBGM.js} +2 -2
- package/dist/{TitleEditor-8ln7UBr_.js → TitleEditor-imoBUynh.js} +12 -12
- package/dist/{TplModal-D_FA3Wm3.js → TplModal-DDDHcoir.js} +5 -5
- package/dist/{blockTypeIcons-BoZeK6l7.js → blockTypeIcons-CfLN4A6t.js} +2 -2
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{AiChatSidebar-D6jGwb4y.js → AiChatSidebar-BHqNxNcX.js} +35 -35
- package/dist/cdn/chunks/{AiChatSidebar-D6jGwb4y.js.map → AiChatSidebar-BHqNxNcX.js.map} +1 -1
- package/dist/cdn/chunks/{AiFeatureMenu-BtEcjxLL.js → AiFeatureMenu-D2AIDwEG.js} +13 -13
- package/dist/cdn/chunks/{AiFeatureMenu-BtEcjxLL.js.map → AiFeatureMenu-D2AIDwEG.js.map} +1 -1
- package/dist/cdn/chunks/{BlockIssueBadge-dnqZk6pl.js → BlockIssueBadge-BEEY9o2o.js} +5 -5
- package/dist/cdn/chunks/{BlockIssueBadge-dnqZk6pl.js.map → BlockIssueBadge-BEEY9o2o.js.map} +1 -1
- package/dist/cdn/chunks/{BlockPreviewCanvas-D8pfTFWi.js → BlockPreviewCanvas-DH5ULGkw.js} +22 -22
- package/dist/cdn/chunks/{BlockPreviewCanvas-D8pfTFWi.js.map → BlockPreviewCanvas-DH5ULGkw.js.map} +1 -1
- package/dist/cdn/chunks/{CloudEditor-BJ4-pPAl.js → CloudEditor-C0nB1JfD.js} +67 -67
- package/dist/cdn/chunks/{CloudEditor-BJ4-pPAl.js.map → CloudEditor-C0nB1JfD.js.map} +1 -1
- package/dist/cdn/chunks/{CollaboratorBar-SeUOuLeJ.js → CollaboratorBar-f6Ni7KNH.js} +12 -12
- package/dist/cdn/chunks/{CollaboratorBar-SeUOuLeJ.js.map → CollaboratorBar-f6Ni7KNH.js.map} +1 -1
- package/dist/cdn/chunks/{ColorPicker-yxvrro60.js → ColorPicker-W_UyiVGc.js} +131 -131
- package/dist/cdn/chunks/{ColorPicker-yxvrro60.js.map → ColorPicker-W_UyiVGc.js.map} +1 -1
- package/dist/cdn/chunks/{CommentsSidebar-FPbg-FuU.js → CommentsSidebar-BLRZRSSC.js} +112 -112
- package/dist/cdn/chunks/{CommentsSidebar-FPbg-FuU.js.map → CommentsSidebar-BLRZRSSC.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownBlock-D2Oth7YY.js → CountdownBlock-vLTkTI9e.js} +11 -11
- package/dist/cdn/chunks/{CountdownBlock-D2Oth7YY.js.map → CountdownBlock-vLTkTI9e.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownToolbar-BNgTBQGB.js → CountdownToolbar-DPjcgcVR.js} +41 -41
- package/dist/cdn/chunks/{CountdownToolbar-BNgTBQGB.js.map → CountdownToolbar-DPjcgcVR.js.map} +1 -1
- package/dist/cdn/chunks/{DesignReferenceSidebar-ChB_HBK1.js → DesignReferenceSidebar-DBoEBKxQ.js} +34 -34
- package/dist/cdn/chunks/{DesignReferenceSidebar-ChB_HBK1.js.map → DesignReferenceSidebar-DBoEBKxQ.js.map} +1 -1
- package/dist/cdn/chunks/{IssuesPanel-CjiZ8cLW.js → IssuesPanel-DKTS4QVb.js} +32 -32
- package/dist/cdn/chunks/{IssuesPanel-CjiZ8cLW.js.map → IssuesPanel-DKTS4QVb.js.map} +1 -1
- package/dist/cdn/chunks/{LoadingTrack-CiNg9s16.js → LoadingTrack-C52ZGL5q.js} +2 -2
- package/dist/cdn/chunks/{LoadingTrack-CiNg9s16.js.map → LoadingTrack-C52ZGL5q.js.map} +1 -1
- package/dist/cdn/chunks/{MergeTagModeToggle-CiYbOKzd.js → MergeTagModeToggle-D8iKvz7v.js} +28 -28
- package/dist/cdn/chunks/{MergeTagModeToggle-CiYbOKzd.js.map → MergeTagModeToggle-D8iKvz7v.js.map} +1 -1
- package/dist/cdn/chunks/{MergeTagSuggestion-CvZLI6Np.js → MergeTagSuggestion-Dn8dExNa.js} +18 -18
- package/dist/cdn/chunks/{MergeTagSuggestion-CvZLI6Np.js.map → MergeTagSuggestion-Dn8dExNa.js.map} +1 -1
- package/dist/cdn/chunks/{NumberWithSuffix-vVwCWrd_.js → NumberWithSuffix-BXrRdfq1.js} +22 -22
- package/dist/cdn/chunks/{NumberWithSuffix-vVwCWrd_.js.map → NumberWithSuffix-BXrRdfq1.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-o4hs9mgy.js → ParagraphEditor-Cuc83Blj.js} +58 -58
- package/dist/cdn/chunks/{ParagraphEditor-o4hs9mgy.js.map → ParagraphEditor-Cuc83Blj.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-BAriGldd.js → RichTextEditorContent-DtL49Jpo.js} +20 -20
- package/dist/cdn/chunks/{RichTextEditorContent-BAriGldd.js.map → RichTextEditorContent-DtL49Jpo.js.map} +1 -1
- package/dist/cdn/chunks/{SaveBlockDialog-D3-oILb5.js → SaveBlockDialog-B8KHhVkI.js} +50 -50
- package/dist/cdn/chunks/{SaveBlockDialog-D3-oILb5.js.map → SaveBlockDialog-B8KHhVkI.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-jMnNd4wn.js → SavedBlocksBrowserModal-B-sjsIJv.js} +62 -62
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-jMnNd4wn.js.map → SavedBlocksBrowserModal-B-sjsIJv.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPanels-BDd8FH6l.js → SavedBlocksPanels-Bb-eDMAh.js} +3 -3
- package/dist/cdn/chunks/{SavedBlocksPanels-BDd8FH6l.js.map → SavedBlocksPanels-Bb-eDMAh.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPickBar-BNkLe8In.js → SavedBlocksPickBar-GudFfXa4.js} +12 -12
- package/dist/cdn/chunks/{SavedBlocksPickBar-BNkLe8In.js.map → SavedBlocksPickBar-GudFfXa4.js.map} +1 -1
- package/dist/cdn/chunks/{SnapshotHistory-CYVi7fvQ.js → SnapshotHistory-Srpzt2na.js} +26 -26
- package/dist/cdn/chunks/{SnapshotHistory-CYVi7fvQ.js.map → SnapshotHistory-Srpzt2na.js.map} +1 -1
- package/dist/cdn/chunks/{TemplateScoringPanel-D0KrxVnr.js → TemplateScoringPanel-NucRtAP0.js} +42 -42
- package/dist/cdn/chunks/{TemplateScoringPanel-D0KrxVnr.js.map → TemplateScoringPanel-NucRtAP0.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailModal-_RbTD787.js → TestEmailModal-DLeoJqaJ.js} +31 -31
- package/dist/cdn/chunks/{TestEmailModal-_RbTD787.js.map → TestEmailModal-DLeoJqaJ.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailPanel-BAnKtbSu.js → TestEmailPanel-Dr7Dkq2P.js} +3 -3
- package/dist/cdn/chunks/{TestEmailPanel-BAnKtbSu.js.map → TestEmailPanel-Dr7Dkq2P.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-LiUvXGPw.js → TitleEditor-DzYRr18C.js} +35 -35
- package/dist/cdn/chunks/{TitleEditor-LiUvXGPw.js.map → TitleEditor-DzYRr18C.js.map} +1 -1
- package/dist/cdn/chunks/{TplModal-C1iguuZz.js → TplModal-byw7-3wg.js} +17 -17
- package/dist/cdn/chunks/{TplModal-C1iguuZz.js.map → TplModal-byw7-3wg.js.map} +1 -1
- package/dist/cdn/chunks/blockTypeIcons-FXlMM3PL.js +21 -0
- package/dist/cdn/chunks/{blockTypeIcons-CrPzyP_k.js.map → blockTypeIcons-FXlMM3PL.js.map} +1 -1
- package/dist/cdn/chunks/{cloud-CxNsW3hp.js → cloud-CuItCnN_.js} +4 -4
- package/dist/cdn/chunks/{cloud-CxNsW3hp.js.map → cloud-CuItCnN_.js.map} +1 -1
- package/dist/cdn/chunks/{dist-BLF-S9_A.js → dist-B2HKGHnc.js} +9 -7
- package/dist/cdn/chunks/{dist-BLF-S9_A.js.map → dist-B2HKGHnc.js.map} +1 -1
- package/dist/cdn/chunks/{dist-Dp46rwVY.js → dist-C6z8AjBC.js} +2 -2
- package/dist/cdn/chunks/{dist-Dp46rwVY.js.map → dist-C6z8AjBC.js.map} +1 -1
- package/dist/cdn/chunks/{draggable-BRF_Q_jB.js → draggable-DCs9qL-b.js} +114 -92
- package/dist/cdn/chunks/{draggable-BRF_Q_jB.js.map → draggable-DCs9qL-b.js.map} +1 -1
- package/dist/cdn/chunks/{extensions-yNQlgLNE.js → extensions-B7laxHjs.js} +22 -22
- package/dist/cdn/chunks/{extensions-yNQlgLNE.js.map → extensions-B7laxHjs.js.map} +1 -1
- package/dist/cdn/chunks/{htmlparser-CPhs2cYE.js → htmlparser-DTML8Gvz.js} +8 -7
- package/dist/cdn/chunks/{htmlparser-CPhs2cYE.js.map → htmlparser-DTML8Gvz.js.map} +1 -1
- package/dist/cdn/chunks/{icons-DN008liP.js → icons-CvYN6zrM.js} +74 -80
- package/dist/cdn/chunks/icons-CvYN6zrM.js.map +1 -0
- package/dist/cdn/chunks/{keys-CZOBuCQd.js → keys-Cmc2Yl3D.js} +2 -2
- package/dist/cdn/chunks/{keys-CZOBuCQd.js.map → keys-Cmc2Yl3D.js.map} +1 -1
- package/dist/cdn/chunks/{liquid.browser-CZaQe87t.js → liquid.browser-UlAOKBjI.js} +120 -110
- package/dist/cdn/chunks/liquid.browser-UlAOKBjI.js.map +1 -0
- package/dist/cdn/chunks/{pusher-kUlkqMvR.js → pusher-BbIHJKf3.js} +29 -25
- package/dist/cdn/chunks/{pusher-kUlkqMvR.js.map → pusher-BbIHJKf3.js.map} +1 -1
- package/dist/cdn/chunks/{src-uc_Mb_yH.js → src-BYKYmEOD.js} +7 -6
- package/dist/cdn/chunks/src-BYKYmEOD.js.map +1 -0
- package/dist/cdn/chunks/{src-D_3bXt7-.js → src-Bi-Qhtfs.js} +3 -3
- package/dist/cdn/chunks/{src-D_3bXt7-.js.map → src-Bi-Qhtfs.js.map} +1 -1
- package/dist/cdn/chunks/{src-B2LpXMIw.js → src-C0N74uvF.js} +280 -277
- package/dist/cdn/chunks/{src-B2LpXMIw.js.map → src-C0N74uvF.js.map} +1 -1
- package/dist/cdn/chunks/{src-CZjSXPYq.js → src-EKTTBQ0y.js} +3 -2
- package/dist/cdn/chunks/src-EKTTBQ0y.js.map +1 -0
- package/dist/cdn/chunks/{styles-BzP13r-I.js → styles-C7s-VtJi.js} +1112 -1094
- package/dist/cdn/chunks/styles-C7s-VtJi.js.map +1 -0
- package/dist/cdn/chunks/{tiptap-CgwK_fKJ.js → tiptap-C44S1Cmh.js} +3681 -2965
- package/dist/cdn/chunks/tiptap-C44S1Cmh.js.map +1 -0
- package/dist/cdn/chunks/{useAliveFlag-Ctyt3GgH.js → useAliveFlag-Dxwgo6P4.js} +2 -2
- package/dist/cdn/chunks/{useAliveFlag-Ctyt3GgH.js.map → useAliveFlag-Dxwgo6P4.js.map} +1 -1
- package/dist/cdn/chunks/{useCloudI18n-CML0BxqX.js → useCloudI18n-8wkJtuJD.js} +3 -3
- package/dist/cdn/chunks/{useCloudI18n-CML0BxqX.js.map → useCloudI18n-8wkJtuJD.js.map} +1 -1
- package/dist/cdn/chunks/{useEditorCore-CTYH6u4r.js → useEditorCore-C_nUXiph.js} +275 -275
- package/dist/cdn/chunks/useEditorCore-C_nUXiph.js.map +1 -0
- package/dist/cdn/chunks/{useI18n-aRMtgYRj.js → useI18n-UMs0F71x.js} +3 -3
- package/dist/cdn/chunks/{useI18n-aRMtgYRj.js.map → useI18n-UMs0F71x.js.map} +1 -1
- package/dist/cdn/chunks/{useMergeTag-8a8BnIZp.js → useMergeTag-CPa_9VOq.js} +4 -4
- package/dist/cdn/chunks/{useMergeTag-8a8BnIZp.js.map → useMergeTag-CPa_9VOq.js.map} +1 -1
- package/dist/cdn/chunks/{usePopoverPosition-Dm1jv3y5.js → usePopoverPosition-cf8Y-ynK.js} +3 -3
- package/dist/cdn/chunks/{usePopoverPosition-Dm1jv3y5.js.map → usePopoverPosition-cf8Y-ynK.js.map} +1 -1
- package/dist/cdn/editor.js +47 -47
- package/dist/cdn/editor.js.map +1 -1
- package/dist/{check-Bqimqf7l.js → check-On4TSac-.js} +1 -1
- package/dist/{chevron-down-CYOoeGBd.js → chevron-down-69EiBGoB.js} +1 -1
- package/dist/{chevron-up-DYknsfm0.js → chevron-up-Dh3MG1Dw.js} +1 -1
- package/dist/{circle-alert-6q_jgtv_.js → circle-alert-cilwzafX.js} +1 -1
- package/dist/{clock-CnadSSTD.js → clock-Dt0APH92.js} +1 -1
- package/dist/{cloud-BJLg_SlM.js → cloud-C7-FhzMc.js} +2 -2
- package/dist/{createLucideIcon-D7GKhya2.js → createLucideIcon-C8WzBYCv.js} +3 -3
- package/dist/dist-6YJAWMuf.js +5 -0
- package/dist/dist-8vlm9kfO.js +5 -0
- package/dist/{dist-DSIgxp0v.js → dist-BImfm-46.js} +2 -2
- package/dist/{dist-DDfXShPv.js → dist-BpKxrUi2.js} +1 -1
- package/dist/{dist-B6Px6GPj.js → dist-C08jiemd.js} +7 -7
- package/dist/{dist-BxbTVeY0.js → dist-C27SeFL5.js} +15 -15
- package/dist/{dist-nR6mxyqI.js → dist-CYx-E82k.js} +2 -2
- package/dist/{dist-CcQFPJMF.js → dist-ChYLhoJ4.js} +2300 -1704
- package/dist/{dist-C31bMR4x.js → dist-Cl8J0IES.js} +270 -182
- package/dist/{dist-CQ0fVBQ3.js → dist-D5zCZFdU.js} +2 -1
- package/dist/{dist-Dx71pluS.js → dist-DMJRSouD.js} +470 -440
- package/dist/{dist-DyCHUyRR.js → dist-DfpeSdmE.js} +2 -2
- package/dist/{dist-DX4x6mQ1.js → dist-M7m1lYRe.js} +47 -47
- package/dist/{dist-CRH880TV.js → dist-g6cbzhZW.js} +2 -2
- package/dist/{extensions-CbiWtzS6.js → extensions-CxwhoG8v.js} +19 -19
- package/dist/{image-up-BfukboIn.js → image-up-Ceggh_R3.js} +1 -1
- package/dist/{info-DSYRzSZo.js → info-DO5odBcZ.js} +1 -1
- package/dist/{keys-BI6VSUh4.js → keys-fwF3qZax.js} +1 -1
- package/dist/{liquid.browser-BECWFL5Z.js → liquid.browser-B-rGrnrQ.js} +119 -109
- package/dist/{list-checks-URZOyLhr.js → list-checks-BSkPKbuI.js} +1 -1
- package/dist/{loader-circle-GADaYcyQ.js → loader-circle-bO7o7_HD.js} +1 -1
- package/dist/{message-circle-B62fdo0b.js → message-circle-BEkAk65X.js} +1 -1
- package/dist/{pencil-BGwkOpD_.js → pencil-t6m0EtKL.js} +1 -1
- package/dist/{refresh-cw-Z4wXfduO.js → refresh-cw-CkOYVzK5.js} +1 -1
- package/dist/{runtime-dom.esm-bundler-BkOsapVg.js → runtime-dom.esm-bundler-CepEmvwF.js} +13 -10
- package/dist/{scan-line-D8Oh5xos.js → scan-line-DwSVj25O.js} +1 -1
- package/dist/{send-BYp4k38T.js → send-CWsWN8PQ.js} +1 -1
- package/dist/{shield-check-Cm0RePnW.js → shield-check-qje8Kufw.js} +1 -1
- package/dist/{sparkles-BHEE-vRD.js → sparkles-DumaWRW-.js} +1 -1
- package/dist/{styles-B0MEBpOK.js → styles-C_slTGwp.js} +454 -436
- package/dist/templatical-editor.js +11 -11
- package/dist/{text-align-start-CHrg3vK8.js → text-align-start-Ir8Ah4mT.js} +1 -1
- package/dist/{trash-2-BoNT8wbq.js → trash-2-CklAFCmO.js} +1 -1
- package/dist/{triangle-alert-CiN0ssB3.js → triangle-alert-BBi4n93g.js} +1 -1
- package/dist/{upload-WvZGBySw.js → upload-sVqqppuv.js} +1 -1
- package/dist/{useAliveFlag-eT67QCMf.js → useAliveFlag-cvyBxHp7.js} +1 -1
- package/dist/{useCloudI18n-KgIWl-IE.js → useCloudI18n-DKVm6PCa.js} +2 -2
- package/dist/{useEditorCore-BMbxdUbY.js → useEditorCore-r4gWzCBA.js} +893 -893
- package/dist/{useI18n-BkHfCWC6.js → useI18n-DoVKdCTH.js} +2 -2
- package/dist/{useMergeTag-CZ4XYAxu.js → useMergeTag-C-_WxrgL.js} +3 -3
- package/dist/{usePopoverPosition-D93u-EZm.js → usePopoverPosition-C0dPEF4X.js} +3 -3
- package/dist/{vue.runtime.esm-bundler-0R1UhmZB.js → vue.runtime.esm-bundler-D1diBMsm.js} +119 -95
- package/dist/{x-B4WnJVRx.js → x-Mby7KlhS.js} +1 -1
- package/package.json +23 -23
- package/dist/cdn/chunks/blockTypeIcons-CrPzyP_k.js +0 -21
- package/dist/cdn/chunks/icons-DN008liP.js.map +0 -1
- package/dist/cdn/chunks/liquid.browser-CZaQe87t.js.map +0 -1
- package/dist/cdn/chunks/src-CZjSXPYq.js.map +0 -1
- package/dist/cdn/chunks/src-uc_Mb_yH.js.map +0 -1
- package/dist/cdn/chunks/styles-BzP13r-I.js.map +0 -1
- package/dist/cdn/chunks/tiptap-CgwK_fKJ.js.map +0 -1
- package/dist/cdn/chunks/useEditorCore-CTYH6u4r.js.map +0 -1
- package/dist/dist-CkPvZCld.js +0 -5
- package/dist/dist-iCEDH3cC.js +0 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { K as e, T as t } from "./draggable-
|
|
2
|
-
import { H as n } from "./keys-
|
|
1
|
+
import { K as e, T as t } from "./draggable-DCs9qL-b.js";
|
|
2
|
+
import { H as n } from "./keys-Cmc2Yl3D.js";
|
|
3
3
|
//#region src/composables/useI18n.ts
|
|
4
4
|
function r(r) {
|
|
5
5
|
let i = r ?? t(n, null);
|
|
@@ -16,4 +16,4 @@ function r(r) {
|
|
|
16
16
|
//#endregion
|
|
17
17
|
export { r as t };
|
|
18
18
|
|
|
19
|
-
//# sourceMappingURL=useI18n-
|
|
19
|
+
//# sourceMappingURL=useI18n-UMs0F71x.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useI18n-
|
|
1
|
+
{"version":3,"file":"useI18n-UMs0F71x.js","names":[],"sources":["../../../src/composables/useI18n.ts"],"sourcesContent":["import type { Translations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\nimport { TRANSLATIONS_KEY } from \"../keys\";\n\nexport interface UseI18nReturn {\n /** Current translations object */\n t: Translations;\n /** Format a string with placeholders */\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\n/**\n * Composable for internationalization.\n * Provides access to the current locale's translations.\n *\n * @param translationsOverride - Optional translations to use instead of injected value\n */\nexport function useI18n(translationsOverride?: Translations): UseI18nReturn {\n const injected =\n translationsOverride ??\n (inject(TRANSLATIONS_KEY, null) as Translations | Ref<Translations> | null);\n\n if (!injected) {\n throw new Error(\n \"useI18n() requires a translations provider. Ensure the component is a descendant of Editor or CloudEditor.\",\n );\n }\n\n const t: Translations = isRef(injected) ? injected.value : injected;\n\n /**\n * Format a string with placeholders.\n * e.g., format('{minutes}m ago', { minutes: 5 }) -> '5m ago'\n */\n function format(\n template: string,\n values: Record<string, string | number>,\n ): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n return key in values ? String(values[key]) : `{${key}}`;\n });\n }\n\n return {\n t,\n format,\n };\n}\n"],"mappings":";;;AAiBA,SAAgB,EAAQ,GAAoD;CAC1E,IAAM,IACJ,KACC,EAAO,GAAkB,IAAI;CAEhC,IAAI,CAAC,GACH,MAAU,MACR,4GACF;CAGF,IAAM,IAAkB,EAAM,CAAQ,IAAI,EAAS,QAAQ;CAM3D,SAAS,EACP,GACA,GACQ;EACR,OAAO,EAAS,QAAQ,eAAe,GAAG,MACjC,KAAO,IAAS,OAAO,EAAO,EAAI,IAAI,IAAI,EAAI,EACtD;CACH;CAEA,OAAO;EACL;EACA;CACF;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { T as e, Z as t } from "./draggable-
|
|
2
|
-
import { f as n, o as r, r as i } from "./src-
|
|
3
|
-
import { A as a, D as o, E as s, N as c, O as l } from "./keys-
|
|
1
|
+
import { T as e, Z as t } from "./draggable-DCs9qL-b.js";
|
|
2
|
+
import { f as n, o as r, r as i } from "./src-EKTTBQ0y.js";
|
|
3
|
+
import { A as a, D as o, E as s, N as c, O as l } from "./keys-Cmc2Yl3D.js";
|
|
4
4
|
//#region src/composables/useMergeTag.ts
|
|
5
5
|
function u() {
|
|
6
6
|
let u = e(s, []), d = e(a, i.liquid), f = e(c, null), p = e(o, !0), m = e(l, null), h = t(!1);
|
|
@@ -43,4 +43,4 @@ function u() {
|
|
|
43
43
|
//#endregion
|
|
44
44
|
export { u as t };
|
|
45
45
|
|
|
46
|
-
//# sourceMappingURL=useMergeTag-
|
|
46
|
+
//# sourceMappingURL=useMergeTag-CPa_9VOq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMergeTag-
|
|
1
|
+
{"version":3,"file":"useMergeTag-CPa_9VOq.js","names":[],"sources":["../../../src/composables/useMergeTag.ts"],"sourcesContent":["import type { MergeTag, SyntaxPreset } from \"@templatical/types\";\nimport {\n isMergeTagValue as checkIsMergeTagValue,\n getMergeTagLabel as resolveMergeTagLabel,\n SYNTAX_PRESETS,\n} from \"@templatical/types\";\nimport { inject, ref, type Ref } from \"vue\";\nimport {\n MERGE_TAGS_KEY,\n MERGE_TAG_SYNTAX_KEY,\n MERGE_TAG_AUTOCOMPLETE_KEY,\n MERGE_TAG_PICKER_KEY,\n ON_REQUEST_MERGE_TAG_KEY,\n} from \"../keys\";\n\nexport interface UseMergeTagReturn {\n /** Available merge tags from config */\n mergeTags: MergeTag[];\n /** Whether a merge tag request is in progress */\n isRequesting: Ref<boolean>;\n /**\n * Whether the \"Insert merge tag\" button should be shown. True when\n * either `onRequestMergeTag` is provided or `mergeTags.tags` is\n * non-empty (the built-in picker then handles the click).\n */\n canRequestMergeTag: boolean;\n /** Whether typing-based autocomplete is enabled by configuration */\n autocomplete: boolean;\n /** The resolved syntax preset for merge tags */\n syntax: SyntaxPreset;\n /** Check if a value matches the configured merge tag syntax */\n isMergeTagValue: (value: string) => boolean;\n /** Get the human-readable label for a merge tag value */\n getMergeTagLabel: (value: string) => string;\n /**\n * Request a merge tag from the user. Precedence: when\n * `onRequestMergeTag` is set it owns the UX; otherwise the built-in\n * picker opens with the configured `mergeTags.tags`; otherwise null.\n */\n requestMergeTag: () => Promise<MergeTag | null>;\n}\n\n/**\n * Composable for merge tag functionality.\n * Provides utilities for detecting, displaying, and requesting merge tags.\n */\nexport function useMergeTag(): UseMergeTagReturn {\n const mergeTags = inject(MERGE_TAGS_KEY, []);\n const syntax = inject(MERGE_TAG_SYNTAX_KEY, SYNTAX_PRESETS.liquid);\n const onRequestMergeTag = inject(ON_REQUEST_MERGE_TAG_KEY, null);\n const autocomplete = inject(MERGE_TAG_AUTOCOMPLETE_KEY, true);\n // Picker may be null in headless contexts (tests, non-editor consumers).\n // requestMergeTag() returns null in that case rather than throwing.\n const picker = inject(MERGE_TAG_PICKER_KEY, null);\n\n const isRequesting = ref(false);\n\n function isMergeTagValue(value: string): boolean {\n return checkIsMergeTagValue(value, syntax);\n }\n\n function getMergeTagLabel(value: string): string {\n return resolveMergeTagLabel(value, mergeTags);\n }\n\n /**\n * Request a merge tag from the user. Precedence:\n * 1. `onRequestMergeTag` callback (consumer-owned UX)\n * 2. Built-in picker over `mergeTags.tags`\n * 3. null (nothing configured)\n */\n async function requestMergeTag(): Promise<MergeTag | null> {\n if (onRequestMergeTag) {\n isRequesting.value = true;\n try {\n return await onRequestMergeTag();\n } finally {\n isRequesting.value = false;\n }\n }\n if (mergeTags.length > 0 && picker) {\n isRequesting.value = true;\n try {\n return await picker.open(mergeTags);\n } finally {\n isRequesting.value = false;\n }\n }\n return null;\n }\n\n const canRequestMergeTag = !!onRequestMergeTag || mergeTags.length > 0;\n\n return {\n mergeTags,\n isRequesting,\n canRequestMergeTag,\n autocomplete,\n syntax,\n isMergeTagValue,\n getMergeTagLabel,\n requestMergeTag,\n };\n}\n"],"mappings":";;;;AA8CA,SAAgB,IAAiC;CAC/C,IAAM,IAAY,EAAO,GAAgB,CAAC,CAAC,GACrC,IAAS,EAAO,GAAsB,EAAe,MAAM,GAC3D,IAAoB,EAAO,GAA0B,IAAI,GACzD,IAAe,EAAO,GAA4B,EAAI,GAGtD,IAAS,EAAO,GAAsB,IAAI,GAE1C,IAAe,EAAI,EAAK;CAE9B,SAAS,EAAgB,GAAwB;EAC/C,OAAO,EAAqB,GAAO,CAAM;CAC3C;CAEA,SAAS,EAAiB,GAAuB;EAC/C,OAAO,EAAqB,GAAO,CAAS;CAC9C;CAQA,eAAe,IAA4C;EACzD,IAAI,GAAmB;GACrB,EAAa,QAAQ;GACrB,IAAI;IACF,OAAO,MAAM,EAAkB;GACjC,UAAU;IACR,EAAa,QAAQ;GACvB;EACF;EACA,IAAI,EAAU,SAAS,KAAK,GAAQ;GAClC,EAAa,QAAQ;GACrB,IAAI;IACF,OAAO,MAAM,EAAO,KAAK,CAAS;GACpC,UAAU;IACR,EAAa,QAAQ;GACvB;EACF;EACA,OAAO;CACT;CAIA,OAAO;EACL;EACA;EACA,oBALyB,CAAC,CAAC,KAAqB,EAAU,SAAS;EAMnE;EACA;EACA,iBAAA;EACA,kBAAA;EACA;CACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as e, Z as t } from "./draggable-
|
|
2
|
-
import { F as n } from "./keys-
|
|
1
|
+
import { T as e, Z as t } from "./draggable-DCs9qL-b.js";
|
|
2
|
+
import { F as n } from "./keys-Cmc2Yl3D.js";
|
|
3
3
|
//#region src/utils/resolveColorsConfig.ts
|
|
4
4
|
var r = {
|
|
5
5
|
presets: [],
|
|
@@ -58,4 +58,4 @@ function l() {
|
|
|
58
58
|
//#endregion
|
|
59
59
|
export { r as a, o as i, c as n, a as o, s as r, l as t };
|
|
60
60
|
|
|
61
|
-
//# sourceMappingURL=usePopoverPosition-
|
|
61
|
+
//# sourceMappingURL=usePopoverPosition-cf8Y-ynK.js.map
|
package/dist/cdn/chunks/{usePopoverPosition-Dm1jv3y5.js.map → usePopoverPosition-cf8Y-ynK.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePopoverPosition-Dm1jv3y5.js","names":[],"sources":["../../../src/utils/resolveColorsConfig.ts","../../../src/utils/color.ts","../../../src/composables/usePopoverRoot.ts","../../../src/composables/usePopoverPosition.ts"],"sourcesContent":["import type { ColorsConfig } from \"@templatical/types\";\n\n/**\n * Normalized color-picker configuration handed to the provide/inject layer and\n * to `ColorPicker`. `presets` defaults to an empty array and `allowCustom` to\n * `true`, so consumers never branch on `undefined`.\n *\n * `allowCustomIgnored` is a validation signal, not a rendered value: it is\n * `true` when `allowCustom: false` was requested but forced back to `true`\n * because there were no presets to fall back on. This util stays pure — it\n * never logs; the consumer that owns the config surface emits the warning\n * (today that is `useEditorCore` for the editor-level config), the same split\n * `resolvePaletteBlocks` / `Sidebar.vue` use.\n */\nexport interface ResolvedColors {\n presets: string[];\n allowCustom: boolean;\n allowCustomIgnored: boolean;\n /**\n * Preset entries dropped because they are not a valid `#rgb` / `#rrggbb` hex\n * string (see the validity rule on {@link resolveColorsConfig}). Collected —\n * not logged — so the config-owning consumer can warn once listing them,\n * exactly as `allowCustomIgnored` is surfaced. Reflects THIS resolution's\n * `colors.presets` input only: when a `fallback`'s already-resolved (already\n * filtered) presets are inherited, its invalids are never re-reported here.\n */\n invalidPresets: string[];\n}\n\n/**\n * The unconfigured baseline: no presets, free-form entry allowed — i.e. the\n * picker behaves exactly as it did before the `colors` option existed. Used as\n * the inject default and as the fallback for the top-level resolution.\n */\nexport const DEFAULT_RESOLVED_COLORS: ResolvedColors = {\n presets: [],\n allowCustom: true,\n allowCustomIgnored: false,\n invalidPresets: [],\n};\n\n/**\n * A valid preset is a `#rgb` or `#rrggbb` hex string. 4-/8-digit alpha hex is\n * deliberately rejected: the wheel (vanilla-colorful) is RGB-only,\n * `normalizeColorToHex` drops alpha on the DOM round-trip so a selected alpha\n * preset would never read back as selected, and alpha degrades unpredictably\n * across email clients.\n */\nconst VALID_PRESET_HEX = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/**\n * Resolve a `ColorsConfig` against an already-resolved `fallback`, applying\n * precedence per property (`input` → `fallback` → default) plus the shared\n * validation rule.\n *\n * The editor-level call passes no `fallback` (it defaults to\n * {@link DEFAULT_RESOLVED_COLORS}) and its result is provided via `COLORS_KEY`.\n * The `fallback` parameter is the nested-resolution seam: a narrower config can\n * be resolved against a broader already-resolved one, inheriting whichever\n * property it does not set.\n *\n * Validation: entries in `colors.presets` that aren't valid hex\n * ({@link VALID_PRESET_HEX}) are dropped from `presets` and collected into\n * `invalidPresets` for the caller to warn about. Separately, `allowCustom:\n * false` with no presets anywhere in the chain is ignored — forced back to\n * `true`, with `allowCustomIgnored` set so the caller can warn — because\n * hiding the wheel and hex input without a preset grid would leave the picker\n * unable to set a color. Filtering runs BEFORE that guard, so an all-invalid\n * list with `allowCustom: false` cascades into the forced-true path. This\n * mirrors how `paletteBlocks` is resolved: `resolvePaletteBlocks` collects the\n * offending entries and the consumer warns; this util stays pure the same way.\n */\nexport function resolveColorsConfig(\n colors: ColorsConfig | undefined,\n fallback: ResolvedColors = DEFAULT_RESOLVED_COLORS,\n): ResolvedColors {\n // Validate only presets this resolution actually supplies. When it inherits\n // `fallback.presets`, those were already resolved (already filtered), so\n // re-validating would double-report an upstream invalid entry.\n let presets: string[];\n let invalidPresets: string[];\n if (colors?.presets === undefined) {\n presets = fallback.presets;\n invalidPresets = [];\n } else {\n presets = [];\n invalidPresets = [];\n for (const entry of colors.presets) {\n if (VALID_PRESET_HEX.test(entry)) {\n presets.push(entry);\n } else {\n invalidPresets.push(entry);\n }\n }\n }\n\n const requestedAllowCustom = colors?.allowCustom ?? fallback.allowCustom;\n\n const allowCustomIgnored = !requestedAllowCustom && presets.length === 0;\n const allowCustom = allowCustomIgnored ? true : requestedAllowCustom;\n\n return { presets, allowCustom, allowCustomIgnored, invalidPresets };\n}\n","/**\n * Normalize a browser-serialized `rgb()/rgba()` color to `#rrggbb`. The browser\n * serializes an inline `style=\"color:#hex\"` to `rgb(...)`, so reading a stored\n * color back via `element.style.color` (e.g. a TipTap textStyle/highlight mark,\n * or a saved link color) surfaces `rgb(...)` — mismatching the hex used\n * everywhere else, and unparseable by the hex-only picker (`vanilla-colorful`)\n * and the native `<input type=\"color\">`. Non-rgb input (already hex, a keyword,\n * or empty) is returned unchanged.\n */\nexport function normalizeColorToHex(value: string): string {\n const m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(value.trim());\n if (!m) return value;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, \"0\");\n return `#${toHex(m[1])}${toHex(m[2])}${toHex(m[3])}`;\n}\n\n/**\n * Canonicalize a hex color to the lowercase 6-digit form used for preset\n * membership tests. Runs {@link normalizeColorToHex} first (so a\n * browser-serialized `rgb(...)` round-trip collapses to hex), then expands a\n * 3-digit shorthand (`#abc` → `#aabbcc`) and lowercases it. Non-hex input (a\n * keyword, or empty) is returned unchanged after that rgb normalization —\n * the caller decides whether that counts as a member.\n *\n * Kept separate from `normalizeColorToHex` (which is left untouched) because a\n * configured preset may be `#abc` while the browser round-trips the selected\n * value to `#aabbcc`, and a factory default may be `#FFFFFF` while the preset\n * is `#ffffff` — bare equality misses both. Preset-selection display\n * (`ColorPicker`) and the off-palette defaults audit (`collectOffPaletteDefaults`)\n * both compare through this one function so the two membership tests can't drift.\n */\nexport function canonicalizeHexColor(value: string): string {\n const hex = normalizeColorToHex(value);\n const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(hex);\n if (short) {\n return `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}`.toLowerCase();\n }\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return hex.toLowerCase();\n }\n return hex;\n}\n","import { inject, ref, type Ref } from \"vue\";\nimport { POPOVER_ROOT_KEY } from \"../keys\";\n\n/**\n * Returns the editor's shared popover mount ref — the `<div\n * class=\"tpl-popover-root\" />` rendered at the top level of `Editor.vue` /\n * `CloudEditor.vue`. Teleport targets that previously hard-coded\n * `to=\"body\"` (RichTextLinkDialog, TitleEditor toolbar, ParagraphToolbar,\n * TplModal) inject this and teleport to `popoverRoot.value` instead, so\n * popups stay inside the editor's effective DOM root (shadow-aware).\n *\n * Falls back to a never-resolving `ref(null)` when no provider is in scope.\n * Components must guard with `v-if=\"popoverRoot\"` before teleporting —\n * with the fallback, isolated component tests that don't mount the editor\n * shell simply render nothing rather than blow up.\n *\n * Internal — not exported from the package entry.\n */\nexport function usePopoverRoot(): Ref<HTMLElement | null> {\n return inject(POPOVER_ROOT_KEY, ref<HTMLElement | null>(null));\n}\n","import { usePopoverRoot } from \"./usePopoverRoot\";\n\n/**\n * Coordinate helper for popovers that teleport into the shared popover root\n * (`.tpl-popover-root`, `position: relative`) and position themselves with\n * `position: absolute`.\n *\n * Callers compute a target point in **viewport** space — from\n * `getBoundingClientRect()`, `useElementBounding`, or a TipTap caret rect —\n * and `toLocal` converts it to coordinates **local to the popover root** by\n * subtracting the root's own viewport rect.\n *\n * Why this exists: a `position: fixed` popover resolves its coordinates\n * against the nearest ancestor that establishes a containing block — and any\n * `transform` / `filter` / `will-change` on an ancestor of the editor (a\n * consumer's scroll-parallax wrapper, route-transition, reveal animation…)\n * does exactly that, even while its computed `transform` reads `none` (a\n * running/animated transform still promotes the element). The fixed popover\n * would then be offset by that ancestor's position. Anchoring `absolute`\n * inside the (positioned) popover root instead makes the placement immune:\n * both points are read in viewport space, so the subtraction cancels the\n * ancestor offset, and the popover tracks the editor if the ancestor moves.\n *\n * Read `toLocal` inside a `computed` for a reactive result (recomputes with\n * its viewport-coordinate dependencies), or call it once when a popover opens.\n * Falls back to the viewport coordinates unchanged when no popover root is in\n * scope (isolated component tests / headless callers).\n *\n * Internal — not exported from the package entry.\n */\nexport function usePopoverPosition(): {\n toLocal: (viewport: { top: number; left: number }) => {\n top: number;\n left: number;\n };\n} {\n const popoverRoot = usePopoverRoot();\n function toLocal(viewport: { top: number; left: number }): {\n top: number;\n left: number;\n } {\n const rect = popoverRoot.value?.getBoundingClientRect();\n if (!rect) return { top: viewport.top, left: viewport.left };\n return { top: viewport.top - rect.top, left: viewport.left - rect.left };\n }\n return { toLocal };\n}\n"],"mappings":";;;AAkCA,IAAa,IAA0C;CACrD,SAAS,CAAC;CACV,aAAa;CACb,oBAAoB;CACpB,gBAAgB,CAAC;AACnB,GASM,IAAmB;AAwBzB,SAAgB,EACd,GACA,IAA2B,GACX;CAIhB,IAAI,GACA;CACJ,IAAI,GAAQ,YAAY,KAAA,GAEtB,AADA,IAAU,EAAS,SACnB,IAAiB,CAAC;MACb;EAEL,AADA,IAAU,CAAC,GACX,IAAiB,CAAC;EAClB,KAAK,IAAM,KAAS,EAAO,SACzB,AAAI,EAAiB,KAAK,CAAK,IAC7B,EAAQ,KAAK,CAAK,IAElB,EAAe,KAAK,CAAK;CAG/B;CAEA,IAAM,IAAuB,GAAQ,eAAe,EAAS,aAEvD,IAAqB,CAAC,KAAwB,EAAQ,WAAW;CAGvE,OAAO;EAAE;EAAS,aAFE,IAAqB,KAAO;EAEjB;EAAoB;CAAe;AACpE;;;AC7FA,SAAgB,EAAoB,GAAuB;CACzD,IAAM,IAAI,4CAA4C,KAAK,EAAM,KAAK,CAAC;CACvE,IAAI,CAAC,GAAG,OAAO;CACf,IAAM,KAAS,MAAc,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CACnE,OAAO,IAAI,EAAM,EAAE,EAAE,IAAI,EAAM,EAAE,EAAE,IAAI,EAAM,EAAE,EAAE;AACnD;AAiBA,SAAgB,EAAqB,GAAuB;CAC1D,IAAM,IAAM,EAAoB,CAAK,GAC/B,IAAQ,qCAAqC,KAAK,CAAG;CAO3D,OANI,IACK,IAAI,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,YAAY,IAEvF,kBAAkB,KAAK,CAAG,IACrB,EAAI,YAAY,IAElB;AACT;;;ACvBA,SAAgB,IAA0C;CACxD,OAAO,EAAO,GAAkB,EAAwB,IAAI,CAAC;AAC/D;;;ACUA,SAAgB,IAKd;CACA,IAAM,IAAc,EAAe;CACnC,SAAS,EAAQ,GAGf;EACA,IAAM,IAAO,EAAY,OAAO,sBAAsB;EAEtD,OADK,IACE;GAAE,KAAK,EAAS,MAAM,EAAK;GAAK,MAAM,EAAS,OAAO,EAAK;EAAK,IADrD;GAAE,KAAK,EAAS;GAAK,MAAM,EAAS;EAAK;CAE7D;CACA,OAAO,EAAE,WAAQ;AACnB"}
|
|
1
|
+
{"version":3,"file":"usePopoverPosition-cf8Y-ynK.js","names":[],"sources":["../../../src/utils/resolveColorsConfig.ts","../../../src/utils/color.ts","../../../src/composables/usePopoverRoot.ts","../../../src/composables/usePopoverPosition.ts"],"sourcesContent":["import type { ColorsConfig } from \"@templatical/types\";\n\n/**\n * Normalized color-picker configuration handed to the provide/inject layer and\n * to `ColorPicker`. `presets` defaults to an empty array and `allowCustom` to\n * `true`, so consumers never branch on `undefined`.\n *\n * `allowCustomIgnored` is a validation signal, not a rendered value: it is\n * `true` when `allowCustom: false` was requested but forced back to `true`\n * because there were no presets to fall back on. This util stays pure — it\n * never logs; the consumer that owns the config surface emits the warning\n * (today that is `useEditorCore` for the editor-level config), the same split\n * `resolvePaletteBlocks` / `Sidebar.vue` use.\n */\nexport interface ResolvedColors {\n presets: string[];\n allowCustom: boolean;\n allowCustomIgnored: boolean;\n /**\n * Preset entries dropped because they are not a valid `#rgb` / `#rrggbb` hex\n * string (see the validity rule on {@link resolveColorsConfig}). Collected —\n * not logged — so the config-owning consumer can warn once listing them,\n * exactly as `allowCustomIgnored` is surfaced. Reflects THIS resolution's\n * `colors.presets` input only: when a `fallback`'s already-resolved (already\n * filtered) presets are inherited, its invalids are never re-reported here.\n */\n invalidPresets: string[];\n}\n\n/**\n * The unconfigured baseline: no presets, free-form entry allowed — i.e. the\n * picker behaves exactly as it did before the `colors` option existed. Used as\n * the inject default and as the fallback for the top-level resolution.\n */\nexport const DEFAULT_RESOLVED_COLORS: ResolvedColors = {\n presets: [],\n allowCustom: true,\n allowCustomIgnored: false,\n invalidPresets: [],\n};\n\n/**\n * A valid preset is a `#rgb` or `#rrggbb` hex string. 4-/8-digit alpha hex is\n * deliberately rejected: the wheel (vanilla-colorful) is RGB-only,\n * `normalizeColorToHex` drops alpha on the DOM round-trip so a selected alpha\n * preset would never read back as selected, and alpha degrades unpredictably\n * across email clients.\n */\nconst VALID_PRESET_HEX = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/**\n * Resolve a `ColorsConfig` against an already-resolved `fallback`, applying\n * precedence per property (`input` → `fallback` → default) plus the shared\n * validation rule.\n *\n * The editor-level call passes no `fallback` (it defaults to\n * {@link DEFAULT_RESOLVED_COLORS}) and its result is provided via `COLORS_KEY`.\n * The `fallback` parameter is the nested-resolution seam: a narrower config can\n * be resolved against a broader already-resolved one, inheriting whichever\n * property it does not set.\n *\n * Validation: entries in `colors.presets` that aren't valid hex\n * ({@link VALID_PRESET_HEX}) are dropped from `presets` and collected into\n * `invalidPresets` for the caller to warn about. Separately, `allowCustom:\n * false` with no presets anywhere in the chain is ignored — forced back to\n * `true`, with `allowCustomIgnored` set so the caller can warn — because\n * hiding the wheel and hex input without a preset grid would leave the picker\n * unable to set a color. Filtering runs BEFORE that guard, so an all-invalid\n * list with `allowCustom: false` cascades into the forced-true path. This\n * mirrors how `paletteBlocks` is resolved: `resolvePaletteBlocks` collects the\n * offending entries and the consumer warns; this util stays pure the same way.\n */\nexport function resolveColorsConfig(\n colors: ColorsConfig | undefined,\n fallback: ResolvedColors = DEFAULT_RESOLVED_COLORS,\n): ResolvedColors {\n // Validate only presets this resolution actually supplies. When it inherits\n // `fallback.presets`, those were already resolved (already filtered), so\n // re-validating would double-report an upstream invalid entry.\n let presets: string[];\n let invalidPresets: string[];\n if (colors?.presets === undefined) {\n presets = fallback.presets;\n invalidPresets = [];\n } else {\n presets = [];\n invalidPresets = [];\n for (const entry of colors.presets) {\n if (VALID_PRESET_HEX.test(entry)) {\n presets.push(entry);\n } else {\n invalidPresets.push(entry);\n }\n }\n }\n\n const requestedAllowCustom = colors?.allowCustom ?? fallback.allowCustom;\n\n const allowCustomIgnored = !requestedAllowCustom && presets.length === 0;\n const allowCustom = allowCustomIgnored ? true : requestedAllowCustom;\n\n return { presets, allowCustom, allowCustomIgnored, invalidPresets };\n}\n","/**\n * Normalize a browser-serialized `rgb()/rgba()` color to `#rrggbb`. The browser\n * serializes an inline `style=\"color:#hex\"` to `rgb(...)`, so reading a stored\n * color back via `element.style.color` (e.g. a TipTap textStyle/highlight mark,\n * or a saved link color) surfaces `rgb(...)` — mismatching the hex used\n * everywhere else, and unparseable by the hex-only picker (`vanilla-colorful`)\n * and the native `<input type=\"color\">`. Non-rgb input (already hex, a keyword,\n * or empty) is returned unchanged.\n */\nexport function normalizeColorToHex(value: string): string {\n const m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(value.trim());\n if (!m) return value;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, \"0\");\n return `#${toHex(m[1])}${toHex(m[2])}${toHex(m[3])}`;\n}\n\n/**\n * Canonicalize a hex color to the lowercase 6-digit form used for preset\n * membership tests. Runs {@link normalizeColorToHex} first (so a\n * browser-serialized `rgb(...)` round-trip collapses to hex), then expands a\n * 3-digit shorthand (`#abc` → `#aabbcc`) and lowercases it. Non-hex input (a\n * keyword, or empty) is returned unchanged after that rgb normalization —\n * the caller decides whether that counts as a member.\n *\n * Kept separate from `normalizeColorToHex` (which is left untouched) because a\n * configured preset may be `#abc` while the browser round-trips the selected\n * value to `#aabbcc`, and a factory default may be `#FFFFFF` while the preset\n * is `#ffffff` — bare equality misses both. Preset-selection display\n * (`ColorPicker`) and the off-palette defaults audit (`collectOffPaletteDefaults`)\n * both compare through this one function so the two membership tests can't drift.\n */\nexport function canonicalizeHexColor(value: string): string {\n const hex = normalizeColorToHex(value);\n const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(hex);\n if (short) {\n return `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}`.toLowerCase();\n }\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return hex.toLowerCase();\n }\n return hex;\n}\n","import { inject, ref, type Ref } from \"vue\";\nimport { POPOVER_ROOT_KEY } from \"../keys\";\n\n/**\n * Returns the editor's shared popover mount ref — the `<div\n * class=\"tpl-popover-root\" />` rendered at the top level of `Editor.vue` /\n * `CloudEditor.vue`. Teleport targets that previously hard-coded\n * `to=\"body\"` (RichTextLinkDialog, TitleEditor toolbar, ParagraphToolbar,\n * TplModal) inject this and teleport to `popoverRoot.value` instead, so\n * popups stay inside the editor's effective DOM root (shadow-aware).\n *\n * Falls back to a never-resolving `ref(null)` when no provider is in scope.\n * Components must guard with `v-if=\"popoverRoot\"` before teleporting —\n * with the fallback, isolated component tests that don't mount the editor\n * shell simply render nothing rather than blow up.\n *\n * Internal — not exported from the package entry.\n */\nexport function usePopoverRoot(): Ref<HTMLElement | null> {\n return inject(POPOVER_ROOT_KEY, ref<HTMLElement | null>(null));\n}\n","import { usePopoverRoot } from \"./usePopoverRoot\";\n\n/**\n * Coordinate helper for popovers that teleport into the shared popover root\n * (`.tpl-popover-root`, `position: relative`) and position themselves with\n * `position: absolute`.\n *\n * Callers compute a target point in **viewport** space — from\n * `getBoundingClientRect()`, `useElementBounding`, or a TipTap caret rect —\n * and `toLocal` converts it to coordinates **local to the popover root** by\n * subtracting the root's own viewport rect.\n *\n * Why this exists: a `position: fixed` popover resolves its coordinates\n * against the nearest ancestor that establishes a containing block — and any\n * `transform` / `filter` / `will-change` on an ancestor of the editor (a\n * consumer's scroll-parallax wrapper, route-transition, reveal animation…)\n * does exactly that, even while its computed `transform` reads `none` (a\n * running/animated transform still promotes the element). The fixed popover\n * would then be offset by that ancestor's position. Anchoring `absolute`\n * inside the (positioned) popover root instead makes the placement immune:\n * both points are read in viewport space, so the subtraction cancels the\n * ancestor offset, and the popover tracks the editor if the ancestor moves.\n *\n * Read `toLocal` inside a `computed` for a reactive result (recomputes with\n * its viewport-coordinate dependencies), or call it once when a popover opens.\n * Falls back to the viewport coordinates unchanged when no popover root is in\n * scope (isolated component tests / headless callers).\n *\n * Internal — not exported from the package entry.\n */\nexport function usePopoverPosition(): {\n toLocal: (viewport: { top: number; left: number }) => {\n top: number;\n left: number;\n };\n} {\n const popoverRoot = usePopoverRoot();\n function toLocal(viewport: { top: number; left: number }): {\n top: number;\n left: number;\n } {\n const rect = popoverRoot.value?.getBoundingClientRect();\n if (!rect) return { top: viewport.top, left: viewport.left };\n return { top: viewport.top - rect.top, left: viewport.left - rect.left };\n }\n return { toLocal };\n}\n"],"mappings":";;;AAkCA,IAAa,IAA0C;CACrD,SAAS,CAAC;CACV,aAAa;CACb,oBAAoB;CACpB,gBAAgB,CAAC;AACnB,GASM,IAAmB;AAwBzB,SAAgB,EACd,GACA,IAA2B,GACX;CAIhB,IAAI,GACA;CACJ,IAAI,GAAQ,YAAY,KAAA,GAEtB,AADA,IAAU,EAAS,SACnB,IAAiB,CAAC;MACb;EAEL,AADA,IAAU,CAAC,GACX,IAAiB,CAAC;EAClB,KAAK,IAAM,KAAS,EAAO,SACzB,AAAI,EAAiB,KAAK,CAAK,IAC7B,EAAQ,KAAK,CAAK,IAElB,EAAe,KAAK,CAAK;CAG/B;CAEA,IAAM,IAAuB,GAAQ,eAAe,EAAS,aAEvD,IAAqB,CAAC,KAAwB,EAAQ,WAAW;CAGvE,OAAO;EAAE;EAAS,aAFE,IAAqB,KAAO;EAEjB;EAAoB;CAAe;AACpE;;;AC7FA,SAAgB,EAAoB,GAAuB;CACzD,IAAM,IAAI,4CAA4C,KAAK,EAAM,KAAK,CAAC;CACvE,IAAI,CAAC,GAAG,OAAO;CACf,IAAM,KAAS,MAAc,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CACnE,OAAO,IAAI,EAAM,EAAE,EAAE,IAAI,EAAM,EAAE,EAAE,IAAI,EAAM,EAAE,EAAE;AACnD;AAiBA,SAAgB,EAAqB,GAAuB;CAC1D,IAAM,IAAM,EAAoB,CAAK,GAC/B,IAAQ,qCAAqC,KAAK,CAAG;CAO3D,OANI,IACK,IAAI,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,YAAY,IAEvF,kBAAkB,KAAK,CAAG,IACrB,EAAI,YAAY,IAElB;AACT;;;ACvBA,SAAgB,IAA0C;CACxD,OAAO,EAAO,GAAkB,EAAwB,IAAI,CAAC;AAC/D;;;ACUA,SAAgB,IAKd;CACA,IAAM,IAAc,EAAe;CACnC,SAAS,EAAQ,GAGf;EACA,IAAM,IAAO,EAAY,OAAO,sBAAsB;EAEtD,OADK,IACE;GAAE,KAAK,EAAS,MAAM,EAAK;GAAK,MAAM,EAAS,OAAO,EAAK;EAAK,IADrD;GAAE,KAAK,EAAS;GAAK,MAAM,EAAS;EAAK;CAE7D;CACA,OAAO,EAAE,WAAQ;AACnB"}
|
package/dist/cdn/editor.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { A as e, C as t, H as n, M as r, V as i, Z as a, b as o, ct as s, g as c, h as l, it as u, j as d, l as f,
|
|
1
|
+
import { A as e, C as t, H as n, M as r, V as i, Z as a, b as o, ct as s, g as c, h as l, it as u, j as d, l as f, lt as p, m, n as ee, p as h, r as g, s as _, st as v, v as y, x as b, y as x } from "./chunks/draggable-DCs9qL-b.js";
|
|
2
2
|
import { r as S } from "./chunks/timeouts-SsLMC4a3.js";
|
|
3
|
-
import { I as C, v as w } from "./chunks/src-
|
|
4
|
-
import { F as T, R as
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
7
|
-
import { a as
|
|
8
|
-
import { n as
|
|
3
|
+
import { I as C, v as w } from "./chunks/src-EKTTBQ0y.js";
|
|
4
|
+
import { F as T, R as E, b as te, t as ne, w as D } from "./chunks/useEditorCore-C_nUXiph.js";
|
|
5
|
+
import { I as re, M as ie } from "./chunks/icons-CvYN6zrM.js";
|
|
6
|
+
import { t as O } from "./chunks/_plugin-vue_export-helper-B3ysoDQm.js";
|
|
7
|
+
import { a as ae, c as oe, d as se, f as ce, i as le, l as ue, m as de, n as fe, o as pe, p as k, r as me, s as he, t as ge, u as _e } from "./chunks/styles-C7s-VtJi.js";
|
|
8
|
+
import { n as ve, t as ye } from "./chunks/MergeTagModeToggle-D8iKvz7v.js";
|
|
9
9
|
//#region src/Editor.vue?vue&type=script&setup=true&lang.ts
|
|
10
|
-
var
|
|
10
|
+
var be = ["data-tpl-theme"], A = {
|
|
11
11
|
class: "tpl-header tpl:absolute tpl:top-0 tpl:right-0 tpl:left-0 tpl:z-50 tpl:grid tpl:h-14 tpl:grid-cols-[1fr_auto_1fr] tpl:items-center tpl:px-4 tpl:shadow-[var(--tpl-shadow-md)] tpl:border-b tpl:border-[var(--tpl-border)]",
|
|
12
12
|
style: {
|
|
13
13
|
"background-color": "color-mix(in srgb, var(--tpl-bg) 80%, transparent)",
|
|
14
14
|
"backdrop-filter": "blur(12px)",
|
|
15
15
|
"-webkit-backdrop-filter": "blur(12px)"
|
|
16
16
|
}
|
|
17
|
-
}, j = { class: "tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, M = { class: "tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, N = ["aria-label", "title"], xe = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, Se = { class: "tpl:flex tpl:justify-center tpl:p-8" }, Ce = ["aria-label"], P = /*#__PURE__*/
|
|
17
|
+
}, j = { class: "tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, M = { class: "tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, N = ["aria-label", "title"], xe = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, Se = { class: "tpl:flex tpl:justify-center tpl:p-8" }, Ce = ["aria-label"], P = /*#__PURE__*/ O(/* @__PURE__ */ b({
|
|
18
18
|
__name: "Editor",
|
|
19
19
|
props: {
|
|
20
20
|
config: {},
|
|
@@ -23,19 +23,19 @@ var k = ["data-tpl-theme"], A = {
|
|
|
23
23
|
shadowRoot: {}
|
|
24
24
|
},
|
|
25
25
|
setup(t, { expose: g }) {
|
|
26
|
-
let b = t, S =
|
|
26
|
+
let b = t, S = E({
|
|
27
27
|
content: b.config.content,
|
|
28
28
|
templateDefaults: b.config.templateDefaults
|
|
29
|
-
}), C = a(null), w = b.config.savedBlocks ?
|
|
29
|
+
}), C = a(null), w = b.config.savedBlocks ? de({
|
|
30
30
|
provider: b.config.savedBlocks,
|
|
31
31
|
editor: S,
|
|
32
32
|
onError: b.config.onError
|
|
33
|
-
}) : null, T = o(() => import("./chunks/SavedBlocksPanels-
|
|
33
|
+
}) : null, T = o(() => import("./chunks/SavedBlocksPanels-Bb-eDMAh.js")), D = b.config.testEmail ? ce({
|
|
34
34
|
provider: b.config.testEmail,
|
|
35
35
|
getContent: () => S.content.value,
|
|
36
36
|
renderMjml: F,
|
|
37
37
|
onError: b.config.onError
|
|
38
|
-
}) : null,
|
|
38
|
+
}) : null, O = o(() => import("./chunks/TestEmailPanel-Dr7Dkq2P.js")), P = ne({
|
|
39
39
|
editor: S,
|
|
40
40
|
containerEl: C,
|
|
41
41
|
config: {
|
|
@@ -53,7 +53,7 @@ var k = ["data-tpl-theme"], A = {
|
|
|
53
53
|
onRequestMedia: b.config.onRequestMedia,
|
|
54
54
|
resolvePreview: b.config.resolvePreview,
|
|
55
55
|
resolveImageUrl: b.config.resolveImageUrl,
|
|
56
|
-
lint:
|
|
56
|
+
lint: se(b.config),
|
|
57
57
|
onSave: b.config.onSave ? () => b.config.onSave(JSON.parse(JSON.stringify(S.state.content))) : void 0
|
|
58
58
|
},
|
|
59
59
|
translations: b.translations,
|
|
@@ -61,18 +61,18 @@ var k = ["data-tpl-theme"], A = {
|
|
|
61
61
|
autoSaveOptions: b.config.onChange ? { onChange: () => b.config.onChange(JSON.parse(JSON.stringify(S.state.content))) } : null,
|
|
62
62
|
capabilities: {
|
|
63
63
|
...w ? { savedBlocks: w.capability } : {},
|
|
64
|
-
...
|
|
64
|
+
...D ? { testEmail: D.capability } : {}
|
|
65
65
|
},
|
|
66
66
|
editorRoot: b.shadowRoot
|
|
67
67
|
});
|
|
68
68
|
function F() {
|
|
69
|
-
return
|
|
69
|
+
return k({
|
|
70
70
|
getContent: () => S.content.value,
|
|
71
71
|
renderCustomBlock: P.registry.renderCustomBlock,
|
|
72
72
|
getCustomBlockStylesheet: (e) => P.registry.getDefinition(e)?.stylesheet
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
|
-
let { showNotice: I } =
|
|
75
|
+
let { showNotice: I } = te(() => b.config.smallScreenNotice);
|
|
76
76
|
return e(async () => {
|
|
77
77
|
await b.fontsManager.loadCustomFonts();
|
|
78
78
|
}), d(() => {
|
|
@@ -86,50 +86,50 @@ var k = ["data-tpl-theme"], A = {
|
|
|
86
86
|
}), (e, a) => (r(), c("div", {
|
|
87
87
|
ref_key: "rootEl",
|
|
88
88
|
ref: C,
|
|
89
|
-
class:
|
|
89
|
+
class: v(["tpl tpl:relative tpl:h-full tpl:overflow-hidden", { "tpl:dark": u(S).state.darkMode }]),
|
|
90
90
|
"data-tpl-theme": u(P).resolvedTheme.value,
|
|
91
|
-
style:
|
|
91
|
+
style: s(u(P).themeStyles.value),
|
|
92
92
|
onDragover: a[7] ||= f(() => {}, ["prevent"]),
|
|
93
93
|
onDrop: a[8] ||= f(() => {}, ["prevent"])
|
|
94
94
|
}, [
|
|
95
|
-
x(
|
|
95
|
+
x(ue),
|
|
96
96
|
h("header", A, [
|
|
97
97
|
a[9] ||= h("div", { class: "tpl:flex tpl:items-center tpl:gap-2.5" }, null, -1),
|
|
98
98
|
h("div", j, [
|
|
99
|
-
x(
|
|
99
|
+
x(ve, {
|
|
100
100
|
viewport: u(S).state.viewport,
|
|
101
101
|
onChange: u(S).setViewport
|
|
102
102
|
}, null, 8, ["viewport", "onChange"]),
|
|
103
|
-
x(
|
|
103
|
+
x(le, {
|
|
104
104
|
"dark-mode": u(S).state.darkMode,
|
|
105
105
|
onChange: u(S).setDarkMode
|
|
106
106
|
}, null, 8, ["dark-mode", "onChange"]),
|
|
107
|
-
x(
|
|
107
|
+
x(ae, {
|
|
108
108
|
"preview-mode": u(S).state.previewMode,
|
|
109
109
|
onChange: u(S).setPreviewMode
|
|
110
110
|
}, null, 8, ["preview-mode", "onChange"]),
|
|
111
|
-
u(S).state.previewMode && !u(P).previewResolution.supersedesSamples.value ? (r(),
|
|
111
|
+
u(S).state.previewMode && !u(P).previewResolution.supersedesSamples.value ? (r(), m(ye, {
|
|
112
112
|
key: 0,
|
|
113
113
|
"sample-mode": u(P).mergeTagSampleMode.value,
|
|
114
114
|
onChange: a[0] ||= (e) => u(P).mergeTagSampleMode.value = e
|
|
115
115
|
}, null, 8, ["sample-mode"])) : l("", !0)
|
|
116
116
|
]),
|
|
117
|
-
h("div", M, [u(
|
|
117
|
+
h("div", M, [u(D)?.isAvailable.value ? (r(), c("button", {
|
|
118
118
|
key: 0,
|
|
119
119
|
type: "button",
|
|
120
120
|
"data-testid": "test-email-trigger",
|
|
121
121
|
"aria-label": u(P).t.testEmail.title,
|
|
122
122
|
title: u(P).t.testEmail.title,
|
|
123
123
|
class: "tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-[120ms] tpl:ease-[cubic-bezier(0.16,1,0.3,1)] tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text-muted)] hover:tpl:bg-[var(--tpl-bg-hover)] hover:tpl:text-[var(--tpl-text)]",
|
|
124
|
-
onClick: a[1] ||= (e) => u(
|
|
125
|
-
}, [x(u(
|
|
124
|
+
onClick: a[1] ||= (e) => u(D).open()
|
|
125
|
+
}, [x(u(ie), {
|
|
126
126
|
size: 14,
|
|
127
127
|
"stroke-width": 1.75
|
|
128
|
-
}), y(" " +
|
|
128
|
+
}), y(" " + p(u(P).t.testEmail.button), 1)], 8, N)) : l("", !0)])
|
|
129
129
|
]),
|
|
130
|
-
n(x(
|
|
130
|
+
n(x(oe, null, null, 512), [[_, !u(S).state.previewMode]]),
|
|
131
131
|
h("div", {
|
|
132
|
-
class:
|
|
132
|
+
class: v(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto tpl:bg-[var(--tpl-canvas-bg)]", [u(S).state.previewMode ? "tpl:left-0 tpl:right-0" : "tpl:left-12 tpl:right-[320px]", "tpl:top-14"]]),
|
|
133
133
|
style: { transition: "all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)" }
|
|
134
134
|
}, [h("div", xe, [x(ee, { name: "tpl-restore-btn" }, {
|
|
135
135
|
default: i(() => [u(P).conditionPreview.hasHiddenBlocks.value && u(P).appliesConditionFilter.value ? (r(), c("button", {
|
|
@@ -138,12 +138,12 @@ var k = ["data-tpl-theme"], A = {
|
|
|
138
138
|
style: { "backdrop-filter": "blur(8px)" },
|
|
139
139
|
"data-testid": "restore-hidden-blocks",
|
|
140
140
|
onClick: a[2] ||= (e) => u(P).conditionPreview.reset()
|
|
141
|
-
}, [x(u(
|
|
141
|
+
}, [x(u(re), {
|
|
142
142
|
size: 13,
|
|
143
143
|
"stroke-width": 2
|
|
144
|
-
}), y(" " +
|
|
144
|
+
}), y(" " + p(u(P).t.blockSettings.restoreHiddenBlocks), 1)])) : l("", !0)]),
|
|
145
145
|
_: 1
|
|
146
|
-
})]), h("div", Se, [x(
|
|
146
|
+
})]), h("div", Se, [x(_e, {
|
|
147
147
|
viewport: u(S).state.viewport,
|
|
148
148
|
content: u(P).previewResolution.content.value,
|
|
149
149
|
"selected-block-id": u(S).state.selectedBlockId,
|
|
@@ -158,7 +158,7 @@ var k = ["data-tpl-theme"], A = {
|
|
|
158
158
|
"preview-mode",
|
|
159
159
|
"onSelectBlock"
|
|
160
160
|
])])], 2),
|
|
161
|
-
t.config.branding === !1 ? l("", !0) : (r(),
|
|
161
|
+
t.config.branding === !1 ? l("", !0) : (r(), m(me, {
|
|
162
162
|
key: 0,
|
|
163
163
|
"position-class": [u(S).state.previewMode ? "tpl:left-0 tpl:right-0" : "tpl:left-12 tpl:right-[320px]"]
|
|
164
164
|
}, null, 8, ["position-class"])),
|
|
@@ -168,8 +168,8 @@ var k = ["data-tpl-theme"], A = {
|
|
|
168
168
|
"aria-live": "polite",
|
|
169
169
|
"aria-atomic": "true",
|
|
170
170
|
"aria-label": u(P).t.landmarks.reorderAnnouncements
|
|
171
|
-
},
|
|
172
|
-
n(x(
|
|
171
|
+
}, p(u(P).keyboardReorder.announcement.value), 9, Ce),
|
|
172
|
+
n(x(he, {
|
|
173
173
|
"selected-block": u(S).selectedBlock.value,
|
|
174
174
|
settings: u(S).content.value.settings,
|
|
175
175
|
onUpdateBlock: a[3] ||= (e) => u(S).updateBlock(u(S).state.selectedBlockId, e),
|
|
@@ -185,18 +185,18 @@ var k = ["data-tpl-theme"], A = {
|
|
|
185
185
|
ref: (e) => u(P).popoverRoot.value = e,
|
|
186
186
|
class: "tpl-popover-root"
|
|
187
187
|
}, null, 512),
|
|
188
|
-
x(
|
|
189
|
-
x(
|
|
190
|
-
u(w)?.isAvailable.value ? (r(),
|
|
188
|
+
x(fe),
|
|
189
|
+
x(ge),
|
|
190
|
+
u(w)?.isAvailable.value ? (r(), m(u(T), {
|
|
191
191
|
key: 1,
|
|
192
192
|
feature: u(w)
|
|
193
193
|
}, null, 8, ["feature"])) : l("", !0),
|
|
194
|
-
u(
|
|
194
|
+
u(D)?.isAvailable.value ? (r(), m(u(O), {
|
|
195
195
|
key: 2,
|
|
196
|
-
feature: u(
|
|
196
|
+
feature: u(D)
|
|
197
197
|
}, null, 8, ["feature"])) : l("", !0),
|
|
198
|
-
u(I) ? (r(),
|
|
199
|
-
], 46,
|
|
198
|
+
u(I) ? (r(), m(pe, { key: 3 })) : l("", !0)
|
|
199
|
+
], 46, be));
|
|
200
200
|
}
|
|
201
201
|
}), [["__scopeId", "data-v-40001312"]]), F = /* #__PURE__ */ Object.assign({
|
|
202
202
|
"./locales/ca.ts": () => import("./chunks/ca-D1zgI9fQ.js"),
|
|
@@ -287,7 +287,7 @@ function X(e) {
|
|
|
287
287
|
async function Me(e) {
|
|
288
288
|
let n = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
289
289
|
if (!n) throw Error(`[Templatical] Container element not found: ${e.container}`);
|
|
290
|
-
let r = await G(e.locale ?? "en"), i =
|
|
290
|
+
let r = await G(e.locale ?? "en"), i = D(e.fonts);
|
|
291
291
|
X(n);
|
|
292
292
|
let o = q(n, e.shadowDom ?? !0), s = a(null), c = g({ setup() {
|
|
293
293
|
return () => t(P, {
|
|
@@ -320,7 +320,7 @@ async function Me(e) {
|
|
|
320
320
|
getCustomBlockStylesheet(e) {
|
|
321
321
|
if (s.value) return s.value.getCustomBlockStylesheet(e);
|
|
322
322
|
},
|
|
323
|
-
toMjml: () =>
|
|
323
|
+
toMjml: () => k(l)
|
|
324
324
|
};
|
|
325
325
|
return l;
|
|
326
326
|
}
|
|
@@ -332,7 +332,7 @@ function $(e) {
|
|
|
332
332
|
async function Ne(e) {
|
|
333
333
|
let n = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
334
334
|
if (!n) throw Error(`[Templatical] Container element not found: ${e.container}`);
|
|
335
|
-
let { default: r } = await import("./chunks/CloudEditor-
|
|
335
|
+
let { default: r } = await import("./chunks/CloudEditor-C0nB1JfD.js"), [i, o] = await Promise.all([G(e.locale ?? "en"), we(e.locale ?? "en")]), s = D(e.fonts);
|
|
336
336
|
$(n);
|
|
337
337
|
let c = q(n, e.shadowDom ?? !0), l = a(null);
|
|
338
338
|
return await new Promise((a, u) => {
|
|
@@ -382,6 +382,6 @@ function Pe() {
|
|
|
382
382
|
Y && X(Y);
|
|
383
383
|
}
|
|
384
384
|
//#endregion
|
|
385
|
-
export { T as createLocalStorageSavedBlocksProvider, H as getBaseLocale, Oe as getSupportedCloudLocales, De as getSupportedLocales, Me as init, Ne as initCloud, Ee as isCloudLocaleSupported, Te as isLocaleSupported, Pe as unmount,
|
|
385
|
+
export { T as createLocalStorageSavedBlocksProvider, H as getBaseLocale, Oe as getSupportedCloudLocales, De as getSupportedLocales, Me as init, Ne as initCloud, Ee as isCloudLocaleSupported, Te as isLocaleSupported, Pe as unmount, D as useFonts };
|
|
386
386
|
|
|
387
387
|
//# sourceMappingURL=editor.js.map
|