@templatical/editor 0.41.0 → 0.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/{AiChatSidebar-a8TPBAl2.js → AiChatSidebar-DOCvzGBe.js} +8 -8
  2. package/dist/{AiFeatureMenu-CroDMqRG.js → AiFeatureMenu-CfijAx4G.js} +4 -4
  3. package/dist/{BlockIssueBadge-D8KsGWY6.js → BlockIssueBadge-BJ3A6mqh.js} +2 -2
  4. package/dist/{BlockPreviewCanvas-Z9SZIgfA.js → BlockPreviewCanvas-DggfBaoJ.js} +33 -33
  5. package/dist/{CloudHeaderExtras-CVqHeqc6.js → CloudHeaderExtras-dFbdqBr5.js} +2 -2
  6. package/dist/{CloudPanels-CmEpQUJB.js → CloudPanels-DmMxhzzZ.js} +4 -4
  7. package/dist/{CollaboratorBar-AIQC9fEF.js → CollaboratorBar-XXk1tOC5.js} +2 -2
  8. package/dist/{CommentsPanel-9k1q-79y.js → CommentsPanel-CGEhbjx0.js} +1 -1
  9. package/dist/{CommentsSidebar-Bc7nORmD.js → CommentsSidebar-CUpst9ou.js} +10 -10
  10. package/dist/{CountdownToolbar-DkC-qSgq.js → CountdownToolbar-B1a_UIuB.js} +3 -3
  11. package/dist/{DesignReferenceSidebar-OoiYJAKS.js → DesignReferenceSidebar-DkAmsBgM.js} +6 -6
  12. package/dist/{IssuesPanel-Dnns3O9z.js → IssuesPanel-lTpsCV4a.js} +5 -5
  13. package/dist/{LogicTagInsertButton-BimKobaG.js → LogicTagInsertButton-B5YymR4U.js} +243 -219
  14. package/dist/{MediaEditModal-C-InB-H2.js → MediaEditModal-B1X8qtJb.js} +1 -1
  15. package/dist/{MediaPanels-CTosUpeo.js → MediaPanels-DO30L1KS.js} +1 -1
  16. package/dist/{MergeTagInput-DqpVzhy7.js → MergeTagInput-B0M_-X0K.js} +1 -1
  17. package/dist/{MergeTagModeToggle-BkIiAgpQ.js → MergeTagModeToggle-B-8W1tK7.js} +4 -4
  18. package/dist/{ParagraphEditor-DaZ03d1U.js → ParagraphEditor-BhhpXgoO.js} +35 -35
  19. package/dist/{RestoreVersionDialog-DHb1mPoF.js → RestoreVersionDialog-DE8aqmdi.js} +3 -3
  20. package/dist/{RichTextEditorContent-AEtfKvLz.js → RichTextEditorContent-AaLAArA0.js} +5 -5
  21. package/dist/{SaveBlockDialog-hGwLDWfE.js → SaveBlockDialog-BJ-hEwLv.js} +8 -8
  22. package/dist/{SavedBlocksBrowserModal-C0lYVBFi.js → SavedBlocksBrowserModal-nLI8aAQ5.js} +9 -9
  23. package/dist/{SavedBlocksPanels-CaTbeVDv.js → SavedBlocksPanels-RnzUMUJI.js} +1 -1
  24. package/dist/{SavedBlocksPickBar-DR2afid2.js → SavedBlocksPickBar-D3QA3Tgy.js} +2 -2
  25. package/dist/{TemplateScoringPanel-Cs0TGtRF.js → TemplateScoringPanel-C6ellAcs.js} +11 -11
  26. package/dist/{TemplateSettings-BD1WNP4C.js → TemplateSettings-C_0qK-zs.js} +6 -6
  27. package/dist/{TestEmailModal-DqoosG1u.js → TestEmailModal-CnyxLhWJ.js} +7 -7
  28. package/dist/{TestEmailPanel-DpozqyHF.js → TestEmailPanel-BRisIL4G.js} +1 -1
  29. package/dist/{TitleEditor-BCBdZLt_.js → TitleEditor-lPITPzw6.js} +12 -12
  30. package/dist/{ToggleSwitch-CJfQ8u57.js → ToggleSwitch-CtZ6adlX.js} +1 -1
  31. package/dist/{Toolbar-C7SjilzH.js → Toolbar-B6dG5_IP.js} +847 -554
  32. package/dist/{TplModal-CVO-2KrU.js → TplModal-BiAf7tWe.js} +2 -2
  33. package/dist/{VersionHistoryMenu-b0A8mS2_.js → VersionHistoryMenu-DdspCRSA.js} +5 -5
  34. package/dist/{VersionHistoryPanels-BzF7dmwa.js → VersionHistoryPanels-C589Jm_B.js} +1 -1
  35. package/dist/{VersionPreviewBanner-xB9r83r0.js → VersionPreviewBanner-XUuLe36h.js} +1 -1
  36. package/dist/{WrapperBlock-BDjOn3fY.js → WrapperBlock-CVQ4t1tY.js} +4 -4
  37. package/dist/{blockTypeIcons-B0Bq1WT1.js → blockTypeIcons-Sg8SY1NQ.js} +2 -2
  38. package/dist/bundle-stats.json +6 -6
  39. package/dist/{cdn/chunks/ca-Ckgw9yd0.js → ca--zGWn9AU.js} +14 -2
  40. package/dist/cdn/chunks/{AiChatSidebar-mKImUXi6.js → AiChatSidebar-DiG-EQ-E.js} +8 -8
  41. package/dist/cdn/chunks/AiChatSidebar-DiG-EQ-E.js.map +1 -0
  42. package/dist/cdn/chunks/{AiFeatureMenu-Cx3qdStQ.js → AiFeatureMenu-BXSPgOzA.js} +5 -5
  43. package/dist/cdn/chunks/AiFeatureMenu-BXSPgOzA.js.map +1 -0
  44. package/dist/cdn/chunks/{BlockIssueBadge-DS1pUf5g.js → BlockIssueBadge-ChQ0mPf5.js} +2 -2
  45. package/dist/cdn/chunks/BlockIssueBadge-ChQ0mPf5.js.map +1 -0
  46. package/dist/cdn/chunks/{BlockPreviewCanvas-D31TNib3.js → BlockPreviewCanvas-CMmv1FTA.js} +28 -28
  47. package/dist/cdn/chunks/BlockPreviewCanvas-CMmv1FTA.js.map +1 -0
  48. package/dist/cdn/chunks/{CloudHeaderExtras-0zdlKiq7.js → CloudHeaderExtras-yvFz2_e-.js} +3 -3
  49. package/dist/cdn/chunks/CloudHeaderExtras-yvFz2_e-.js.map +1 -0
  50. package/dist/cdn/chunks/{CloudPanels-DPh71yOO.js → CloudPanels-DpKck9Na.js} +4 -4
  51. package/dist/cdn/chunks/CloudPanels-DpKck9Na.js.map +1 -0
  52. package/dist/cdn/chunks/{CollaboratorBar-lCZU8qkg.js → CollaboratorBar-Clm1ZVXQ.js} +3 -3
  53. package/dist/cdn/chunks/CollaboratorBar-Clm1ZVXQ.js.map +1 -0
  54. package/dist/cdn/chunks/{CommentsPanel-BtAGZfF6.js → CommentsPanel-CjhxGMjL.js} +2 -2
  55. package/dist/cdn/chunks/CommentsPanel-CjhxGMjL.js.map +1 -0
  56. package/dist/cdn/chunks/{CommentsSidebar-Ws07MXYj.js → CommentsSidebar-D9bqMnlt.js} +16 -16
  57. package/dist/cdn/chunks/CommentsSidebar-D9bqMnlt.js.map +1 -0
  58. package/dist/cdn/chunks/CountdownBlock-sVDjKkRw.js.map +1 -1
  59. package/dist/cdn/chunks/{CountdownToolbar-Bu93WiS8.js → CountdownToolbar-CIRx5w1U.js} +4 -4
  60. package/dist/cdn/chunks/CountdownToolbar-CIRx5w1U.js.map +1 -0
  61. package/dist/cdn/chunks/{DesignReferenceSidebar-BlSdh5B7.js → DesignReferenceSidebar-C1-SbE_R.js} +9 -9
  62. package/dist/cdn/chunks/DesignReferenceSidebar-C1-SbE_R.js.map +1 -0
  63. package/dist/cdn/chunks/{IssuesPanel-CKkv9z9g.js → IssuesPanel-qKY6UDd-.js} +8 -8
  64. package/dist/cdn/chunks/IssuesPanel-qKY6UDd-.js.map +1 -0
  65. package/dist/cdn/chunks/LoadingTrack-_7DH_5aw.js.map +1 -1
  66. package/dist/cdn/chunks/{LogicTagInsertButton-CHc1yZ9v.js → LogicTagInsertButton-CItDS_U1.js} +250 -226
  67. package/dist/cdn/chunks/LogicTagInsertButton-CItDS_U1.js.map +1 -0
  68. package/dist/cdn/chunks/{MediaEditModal-Cw9MhjVz.js → MediaEditModal-CzUtXkpk.js} +2 -2
  69. package/dist/cdn/chunks/MediaEditModal-CzUtXkpk.js.map +1 -0
  70. package/dist/cdn/chunks/{MediaPanels-FD_aX3H5.js → MediaPanels-DOLsh7WC.js} +2 -2
  71. package/dist/cdn/chunks/MediaPanels-DOLsh7WC.js.map +1 -0
  72. package/dist/cdn/chunks/{MergeTagInput--qTYfCWk.js → MergeTagInput-B33u3nxj.js} +2 -2
  73. package/dist/cdn/chunks/MergeTagInput-B33u3nxj.js.map +1 -0
  74. package/dist/cdn/chunks/{MergeTagModeToggle-CdWIGo3Q.js → MergeTagModeToggle-Bz1CH3NT.js} +10 -10
  75. package/dist/cdn/chunks/MergeTagModeToggle-Bz1CH3NT.js.map +1 -0
  76. package/dist/cdn/chunks/{ParagraphEditor-w2qEZTkM.js → ParagraphEditor-J74SIn-m.js} +51 -51
  77. package/dist/cdn/chunks/ParagraphEditor-J74SIn-m.js.map +1 -0
  78. package/dist/cdn/chunks/{RestoreVersionDialog-cnWVN3nX.js → RestoreVersionDialog-CFE7jqDB.js} +3 -3
  79. package/dist/cdn/chunks/RestoreVersionDialog-CFE7jqDB.js.map +1 -0
  80. package/dist/cdn/chunks/{RichTextEditorContent-Fzuu9pLP.js → RichTextEditorContent-dOg1xFqv.js} +5 -5
  81. package/dist/cdn/chunks/RichTextEditorContent-dOg1xFqv.js.map +1 -0
  82. package/dist/cdn/chunks/{SaveBlockDialog-jxQtKnVs.js → SaveBlockDialog-DZOmDCC8.js} +38 -38
  83. package/dist/cdn/chunks/SaveBlockDialog-DZOmDCC8.js.map +1 -0
  84. package/dist/cdn/chunks/{SavedBlocksBrowserModal-DpXWf4Pi.js → SavedBlocksBrowserModal-B43H5zKA.js} +10 -10
  85. package/dist/cdn/chunks/SavedBlocksBrowserModal-B43H5zKA.js.map +1 -0
  86. package/dist/cdn/chunks/{SavedBlocksPanels-B-ASmf1P.js → SavedBlocksPanels-uTSb2xO_.js} +2 -2
  87. package/dist/cdn/chunks/SavedBlocksPanels-uTSb2xO_.js.map +1 -0
  88. package/dist/cdn/chunks/{SavedBlocksPickBar-CEFIQ8Nd.js → SavedBlocksPickBar-BUvmGqHK.js} +3 -3
  89. package/dist/cdn/chunks/SavedBlocksPickBar-BUvmGqHK.js.map +1 -0
  90. package/dist/cdn/chunks/{TemplateScoringPanel-d_Ppowsq.js → TemplateScoringPanel-ebsrVge3.js} +19 -19
  91. package/dist/cdn/chunks/TemplateScoringPanel-ebsrVge3.js.map +1 -0
  92. package/dist/cdn/chunks/{TemplateSettings-Dr5OJ0Gi.js → TemplateSettings-BaEVdUTM.js} +9 -9
  93. package/dist/cdn/chunks/TemplateSettings-BaEVdUTM.js.map +1 -0
  94. package/dist/cdn/chunks/{TestEmailModal-CrjzVw8e.js → TestEmailModal-ide7UP_H.js} +7 -7
  95. package/dist/cdn/chunks/TestEmailModal-ide7UP_H.js.map +1 -0
  96. package/dist/cdn/chunks/{TestEmailPanel-k9vdulTu.js → TestEmailPanel-Cqdsnufx.js} +2 -2
  97. package/dist/cdn/chunks/TestEmailPanel-Cqdsnufx.js.map +1 -0
  98. package/dist/cdn/chunks/{TitleEditor-laILWfKh.js → TitleEditor-CoFzxLPA.js} +16 -16
  99. package/dist/cdn/chunks/TitleEditor-CoFzxLPA.js.map +1 -0
  100. package/dist/cdn/chunks/{ToggleSwitch-0dGCYnRY.js → ToggleSwitch-D-8dCEbI.js} +2 -2
  101. package/dist/cdn/chunks/ToggleSwitch-D-8dCEbI.js.map +1 -0
  102. package/dist/cdn/chunks/{Toolbar-BsiHW9gY.js → Toolbar-BDzhrmGV.js} +814 -566
  103. package/dist/cdn/chunks/Toolbar-BDzhrmGV.js.map +1 -0
  104. package/dist/cdn/chunks/{TplModal-D8DoPbFa.js → TplModal-mLMmolQp.js} +3 -3
  105. package/dist/cdn/chunks/TplModal-mLMmolQp.js.map +1 -0
  106. package/dist/cdn/chunks/{VersionHistoryMenu-B3-hNu9c.js → VersionHistoryMenu-C_bBKOYU.js} +7 -7
  107. package/dist/cdn/chunks/VersionHistoryMenu-C_bBKOYU.js.map +1 -0
  108. package/dist/cdn/chunks/{VersionHistoryPanels-zw1AtzGN.js → VersionHistoryPanels-B9LwOKxm.js} +2 -2
  109. package/dist/cdn/chunks/VersionHistoryPanels-B9LwOKxm.js.map +1 -0
  110. package/dist/cdn/chunks/{VersionPreviewBanner-PzVQSBJE.js → VersionPreviewBanner-CKyrcgxJ.js} +2 -2
  111. package/dist/cdn/chunks/VersionPreviewBanner-CKyrcgxJ.js.map +1 -0
  112. package/dist/cdn/chunks/{WrapperBlock-CpRvfAV0.js → WrapperBlock-DI8vSvTO.js} +4 -4
  113. package/dist/cdn/chunks/WrapperBlock-DI8vSvTO.js.map +1 -0
  114. package/dist/cdn/chunks/blockTypeIcons-CdfCfqHE.js +21 -0
  115. package/dist/cdn/chunks/blockTypeIcons-CdfCfqHE.js.map +1 -0
  116. package/dist/{ca-Ckgw9yd0.js → cdn/chunks/ca--zGWn9AU.js} +16 -0
  117. package/dist/cdn/chunks/ca--zGWn9AU.js.map +1 -0
  118. package/dist/cdn/chunks/ca-BTf1Zbqb.js.map +1 -1
  119. package/dist/cdn/chunks/{cloud-CIT4yPp4.js → cloud-De-eh1u6.js} +2 -2
  120. package/dist/cdn/chunks/cloud-De-eh1u6.js.map +1 -0
  121. package/dist/cdn/chunks/{createCloudRuntime-COUxbPvd.js → createCloudRuntime-DsaUaWvr.js} +3 -3
  122. package/dist/cdn/chunks/createCloudRuntime-DsaUaWvr.js.map +1 -0
  123. package/dist/cdn/chunks/{de-D4dweQw8.js → de-BRNLKcDl.js} +15 -1
  124. package/dist/cdn/chunks/de-BRNLKcDl.js.map +1 -0
  125. package/dist/cdn/chunks/de-mMY5yQJu.js.map +1 -1
  126. package/dist/cdn/chunks/de-xzrh9PA3.js.map +1 -1
  127. package/dist/cdn/chunks/dist-BRZhN8qJ.js.map +1 -1
  128. package/dist/cdn/chunks/dist-CXB2_kBa.js.map +1 -1
  129. package/dist/cdn/chunks/draggable-IB4x6w2O.js.map +1 -1
  130. package/dist/cdn/chunks/{editor-modal-CKu8HhiB.js → editor-modal-CZQArGNj.js} +88 -88
  131. package/dist/cdn/chunks/editor-modal-CZQArGNj.js.map +1 -0
  132. package/dist/cdn/chunks/emojiData-6m0DBh7O.js.map +1 -1
  133. package/dist/cdn/chunks/en-9unxBjV8.js +2 -0
  134. package/dist/cdn/chunks/en-ChVeGQBY.js.map +1 -1
  135. package/dist/{en-VE7R7NyL.js → cdn/chunks/en-JJjqHMjy.js} +16 -0
  136. package/dist/cdn/chunks/en-JJjqHMjy.js.map +1 -0
  137. package/dist/cdn/chunks/{es-B9OhP8H3.js → es-BIh8BxV9.js} +15 -1
  138. package/dist/cdn/chunks/es-BIh8BxV9.js.map +1 -0
  139. package/dist/cdn/chunks/es-BT4LSpE2.js.map +1 -1
  140. package/dist/cdn/chunks/{extensions-CafoGF65.js → extensions-Dy251lPd.js} +5 -5
  141. package/dist/cdn/chunks/extensions-Dy251lPd.js.map +1 -0
  142. package/dist/cdn/chunks/formatAbsoluteDateTime-DMmop3C-.js.map +1 -1
  143. package/dist/cdn/chunks/formatRelativeTime-CtUU-QZ8.js.map +1 -1
  144. package/dist/{fr-wrXhIi00.js → cdn/chunks/fr-C5VUZogP.js} +16 -0
  145. package/dist/cdn/chunks/fr-C5VUZogP.js.map +1 -0
  146. package/dist/cdn/chunks/fr-CI7OJoql.js.map +1 -1
  147. package/dist/cdn/chunks/htmlparser-ClUZ6waR.js.map +1 -1
  148. package/dist/cdn/chunks/{icons-BKkJ-5xF.js → icons-CQnjugjy.js} +86 -45
  149. package/dist/cdn/chunks/icons-CQnjugjy.js.map +1 -0
  150. package/dist/cdn/chunks/ja-DhlWUfke.js.map +1 -1
  151. package/dist/cdn/chunks/{ja-fKnVWXHC.js → ja-x5JYxaCW.js} +15 -1
  152. package/dist/cdn/chunks/ja-x5JYxaCW.js.map +1 -0
  153. package/dist/cdn/chunks/keys-DCWeHkSF.js.map +1 -1
  154. package/dist/cdn/chunks/liquid.browser-BypTT2oc.js.map +1 -1
  155. package/dist/cdn/chunks/logger-ByvdoAwq.js.map +1 -1
  156. package/dist/cdn/chunks/nl-D8y5OWGB.js.map +1 -1
  157. package/dist/cdn/chunks/{nl-DeFatKJe.js → nl-UXxFyXV6.js} +15 -1
  158. package/dist/cdn/chunks/nl-UXxFyXV6.js.map +1 -0
  159. package/dist/cdn/chunks/{preRenderCustomBlocks-Dpj-_cOj.js → preRenderCustomBlocks-h4ZFBKbD.js} +2 -2
  160. package/dist/cdn/chunks/preRenderCustomBlocks-h4ZFBKbD.js.map +1 -0
  161. package/dist/cdn/chunks/pt-BR-CoCwRUi0.js.map +1 -1
  162. package/dist/{pt-BR-Bh1J8ey6.js → cdn/chunks/pt-BR-DHm3SP6W.js} +16 -0
  163. package/dist/cdn/chunks/pt-BR-DHm3SP6W.js.map +1 -0
  164. package/dist/cdn/chunks/pt-BR-DMCbUBvJ.js.map +1 -1
  165. package/dist/cdn/chunks/pusher-BbIHJKf3.js.map +1 -1
  166. package/dist/cdn/chunks/readableTextColor-f8Kykfnh.js.map +1 -1
  167. package/dist/cdn/chunks/{socialIcons-BvYNMn1G.js → socialIcons-ZOCwCCyn.js} +3 -3
  168. package/dist/cdn/chunks/socialIcons-ZOCwCCyn.js.map +1 -0
  169. package/dist/cdn/chunks/{src-DveVYoWS.js → src-BR3I3gOW.js} +265 -224
  170. package/dist/cdn/chunks/src-BR3I3gOW.js.map +1 -0
  171. package/dist/cdn/chunks/{src-Cnc5E71L.js → src-fZSLjhjy.js} +12 -12
  172. package/dist/cdn/chunks/src-fZSLjhjy.js.map +1 -0
  173. package/dist/cdn/chunks/{src-L6HEdwFn.js → src-nhIF5-mf.js} +179 -166
  174. package/dist/cdn/chunks/src-nhIF5-mf.js.map +1 -0
  175. package/dist/cdn/chunks/styleConstants-C_YAPdQS.js.map +1 -1
  176. package/dist/cdn/chunks/templateSettingsFields-YCFVBVYh.js.map +1 -1
  177. package/dist/cdn/chunks/timeouts-DHPZQ0G3.js.map +1 -1
  178. package/dist/cdn/chunks/{tiptap-DhLuKyDc.js → tiptap-D1u8JIUW.js} +1916 -1917
  179. package/dist/cdn/chunks/tiptap-D1u8JIUW.js.map +1 -0
  180. package/dist/cdn/chunks/useAliveFlag-DAlQLbM2.js.map +1 -1
  181. package/dist/cdn/chunks/useCloudI18n-CrjWbpbu.js.map +1 -1
  182. package/dist/cdn/chunks/{useEditorCore-DZmtKwJh.js → useEditorCore-D4kzTMtQ.js} +458 -446
  183. package/dist/cdn/chunks/useEditorCore-D4kzTMtQ.js.map +1 -0
  184. package/dist/cdn/chunks/useEditorRoot-CshefZLP.js.map +1 -1
  185. package/dist/cdn/chunks/useI18n-CyO_Nmca.js.map +1 -1
  186. package/dist/cdn/chunks/{useLogicTag-DF7-l66G.js → useLogicTag-J_i_hvZg.js} +2 -2
  187. package/dist/cdn/chunks/useLogicTag-J_i_hvZg.js.map +1 -0
  188. package/dist/cdn/chunks/{useMergeTag-DbIHw4NG.js → useMergeTag-C5MyHYxJ.js} +2 -2
  189. package/dist/cdn/chunks/useMergeTag-C5MyHYxJ.js.map +1 -0
  190. package/dist/cdn/chunks/{usePopoverPosition-BJRvAb-h.js → usePopoverPosition-DGXjXKjM.js} +25 -12
  191. package/dist/cdn/chunks/usePopoverPosition-DGXjXKjM.js.map +1 -0
  192. package/dist/cdn/chunks/useScrollToBlock-DgHZJvID.js.map +1 -1
  193. package/dist/cdn/editor.css +1 -1
  194. package/dist/cdn/editor.js +493 -464
  195. package/dist/cdn/editor.js.map +1 -1
  196. package/dist/{check-eqb2JhqU.js → check-BMx_TLAS.js} +1 -1
  197. package/dist/{chevron-down-Dkr-7Ywl.js → chevron-down-KZf5mh9_.js} +1 -1
  198. package/dist/{chevron-right-Bge4XF_B.js → chevron-right-BLZ60Vxw.js} +1 -1
  199. package/dist/{chevron-up-CQAyl0kC.js → chevron-up-B9ynB8eU.js} +1 -1
  200. package/dist/{circle-alert-CYgTHKWr.js → circle-alert-pjvFFDrF.js} +1 -1
  201. package/dist/{clock-BgSJZJP5.js → clock-CiiTBfF3.js} +1 -1
  202. package/dist/{cloud-DsqqUfzh.js → cloud-AO_X8T9g.js} +1 -1
  203. package/dist/{copy-mw6PVnOJ.js → copy-BF0_pQjH.js} +1 -1
  204. package/dist/{createCloudRuntime-iLflkYzP.js → createCloudRuntime-D641nhri.js} +2 -2
  205. package/dist/{createLucideIcon-BxY5yz5u.js → createLucideIcon-C2YOVVWx.js} +8 -8
  206. package/dist/{de-D4dweQw8.js → de-BRNLKcDl.js} +14 -0
  207. package/dist/{dist-CQSVro7b.js → dist-B0dkvy7z.js} +1 -1
  208. package/dist/{dist-BJM3eFyT.js → dist-BPWuzECC.js} +1 -1
  209. package/dist/{dist-EDkj3Ub1.js → dist-BUHovM4k.js} +1 -1
  210. package/dist/{dist-BmsLcnrO.js → dist-BwoEME8p.js} +1 -1
  211. package/dist/{dist-DerFNpDY.js → dist-C2Ge44fD.js} +760 -761
  212. package/dist/{dist-BdHF7nyq.js → dist-CIxmOOSG.js} +5 -5
  213. package/dist/{dist-wyXxj3R1.js → dist-CJ7RZARo.js} +1 -1
  214. package/dist/{dist-Bl4rxpX9.js → dist-CxmLZQso.js} +1 -1
  215. package/dist/{dist-DyrEOKEJ.js → dist-DRmafAUz.js} +1 -1
  216. package/dist/{dist-Djmzp6wi.js → dist-DdOAotfz.js} +1 -1
  217. package/dist/{dist-BxVnMgXZ.js → dist-W_ERo6c_.js} +1 -1
  218. package/dist/{dist-DbUZvK04.js → dist-iLUVPysa.js} +263 -222
  219. package/dist/{dist-DQbOebGW.js → dist-p-LkiWIQ.js} +1 -1
  220. package/dist/{editor-modal-qzmEVcIk.js → editor-modal-99FB40dl.js} +16 -16
  221. package/dist/en-BvOjRLiw.js +2 -0
  222. package/dist/{cdn/chunks/en-VE7R7NyL.js → en-JJjqHMjy.js} +14 -2
  223. package/dist/{es-B9OhP8H3.js → es-BIh8BxV9.js} +14 -0
  224. package/dist/{extensions-DDhjuVKy.js → extensions-DqQXxrvP.js} +13 -13
  225. package/dist/{eye-DphkRtAD.js → eye-RdXYgrQZ.js} +1 -1
  226. package/dist/{cdn/chunks/fr-wrXhIi00.js → fr-C5VUZogP.js} +14 -2
  227. package/dist/{image-up-Qi2BXD7T.js → image-up-BwdoReQt.js} +1 -1
  228. package/dist/{info-VSyAs02q.js → info-zFMSGrL1.js} +1 -1
  229. package/dist/{ja-fKnVWXHC.js → ja-x5JYxaCW.js} +14 -0
  230. package/dist/{link-CNuozGqD.js → link-D7orqFBT.js} +1 -1
  231. package/dist/{list-BA0I5Wmu.js → list-BGt4Pgxc.js} +1 -1
  232. package/dist/{loader-circle-z5eeqasv.js → loader-circle-BVBgkRGz.js} +1 -1
  233. package/dist/{message-circle-BsQ9hEup.js → message-circle-D8YLsarv.js} +1 -1
  234. package/dist/{nl-DeFatKJe.js → nl-UXxFyXV6.js} +14 -0
  235. package/dist/{package-OkXfuRoO.js → package-CuFvk0L5.js} +1 -1
  236. package/dist/{pencil-DFVFA7Dj.js → pencil-DRYbmZW7.js} +1 -1
  237. package/dist/{plus-D8bkVjZ7.js → plus-Dv0b3kh0.js} +1 -1
  238. package/dist/{preRenderCustomBlocks-BBSqQgke.js → preRenderCustomBlocks-CTstI3Q-.js} +4 -4
  239. package/dist/{cdn/chunks/pt-BR-Bh1J8ey6.js → pt-BR-DHm3SP6W.js} +14 -2
  240. package/dist/{refresh-cw-DPB7YFuz.js → refresh-cw-gYTIS5bJ.js} +1 -1
  241. package/dist/{search-C-dCgqIa.js → search-D84_Ki_a.js} +1 -1
  242. package/dist/{send-Cm2fy2zm.js → send-Cn-8_H_U.js} +1 -1
  243. package/dist/{shield-check-COgBYFDF.js → shield-check-BOoVWJtD.js} +1 -1
  244. package/dist/{smartphone-v0u_MOEV.js → smartphone-4Ej3PBw5.js} +1 -1
  245. package/dist/{socialIcons-O7PZCW2P.js → socialIcons-CzRJskEk.js} +47 -47
  246. package/dist/{sparkles-Ds0RF8Iu.js → sparkles-D3vnNe7O.js} +1 -1
  247. package/dist/style.css +1 -1
  248. package/dist/templatical-editor.js +432 -403
  249. package/dist/{text-align-start-DiavaIm6.js → text-align-start-Ci2h_Xly.js} +1 -1
  250. package/dist/{trash-DnOkfu2V.js → trash-wmi4UKvv.js} +1 -1
  251. package/dist/{triangle-alert-DGLAyXnh.js → triangle-alert-DJ0r2wmQ.js} +1 -1
  252. package/dist/{upload-BBDme2cy.js → upload-XMde-TXf.js} +1 -1
  253. package/dist/{useEditorCore-dcdHB_7H.js → useEditorCore-Dhit8Ygg.js} +894 -882
  254. package/dist/{useLogicTag-D9pvgxQR.js → useLogicTag-BaH8gey0.js} +1 -1
  255. package/dist/{useMergeTag-BaVFPdlq.js → useMergeTag-Cyad1yBE.js} +1 -1
  256. package/dist/{usePopoverPosition-DH7z3Ghm.js → usePopoverPosition-BYmd-lhR.js} +24 -11
  257. package/dist/{useScrollToBlock-Dj4v3rxr.js → useScrollToBlock-B4F7KCrf.js} +1 -1
  258. package/dist/{x-3BHV3Q6K.js → x-BWrtpVl-.js} +1 -1
  259. package/package.json +10 -10
  260. package/dist/cdn/chunks/AiChatSidebar-mKImUXi6.js.map +0 -1
  261. package/dist/cdn/chunks/AiFeatureMenu-Cx3qdStQ.js.map +0 -1
  262. package/dist/cdn/chunks/BlockIssueBadge-DS1pUf5g.js.map +0 -1
  263. package/dist/cdn/chunks/BlockPreviewCanvas-D31TNib3.js.map +0 -1
  264. package/dist/cdn/chunks/CloudHeaderExtras-0zdlKiq7.js.map +0 -1
  265. package/dist/cdn/chunks/CloudPanels-DPh71yOO.js.map +0 -1
  266. package/dist/cdn/chunks/CollaboratorBar-lCZU8qkg.js.map +0 -1
  267. package/dist/cdn/chunks/CommentsPanel-BtAGZfF6.js.map +0 -1
  268. package/dist/cdn/chunks/CommentsSidebar-Ws07MXYj.js.map +0 -1
  269. package/dist/cdn/chunks/CountdownToolbar-Bu93WiS8.js.map +0 -1
  270. package/dist/cdn/chunks/DesignReferenceSidebar-BlSdh5B7.js.map +0 -1
  271. package/dist/cdn/chunks/IssuesPanel-CKkv9z9g.js.map +0 -1
  272. package/dist/cdn/chunks/LogicTagInsertButton-CHc1yZ9v.js.map +0 -1
  273. package/dist/cdn/chunks/MediaEditModal-Cw9MhjVz.js.map +0 -1
  274. package/dist/cdn/chunks/MediaPanels-FD_aX3H5.js.map +0 -1
  275. package/dist/cdn/chunks/MergeTagInput--qTYfCWk.js.map +0 -1
  276. package/dist/cdn/chunks/MergeTagModeToggle-CdWIGo3Q.js.map +0 -1
  277. package/dist/cdn/chunks/ParagraphEditor-w2qEZTkM.js.map +0 -1
  278. package/dist/cdn/chunks/RestoreVersionDialog-cnWVN3nX.js.map +0 -1
  279. package/dist/cdn/chunks/RichTextEditorContent-Fzuu9pLP.js.map +0 -1
  280. package/dist/cdn/chunks/SaveBlockDialog-jxQtKnVs.js.map +0 -1
  281. package/dist/cdn/chunks/SavedBlocksBrowserModal-DpXWf4Pi.js.map +0 -1
  282. package/dist/cdn/chunks/SavedBlocksPanels-B-ASmf1P.js.map +0 -1
  283. package/dist/cdn/chunks/SavedBlocksPickBar-CEFIQ8Nd.js.map +0 -1
  284. package/dist/cdn/chunks/TemplateScoringPanel-d_Ppowsq.js.map +0 -1
  285. package/dist/cdn/chunks/TemplateSettings-Dr5OJ0Gi.js.map +0 -1
  286. package/dist/cdn/chunks/TestEmailModal-CrjzVw8e.js.map +0 -1
  287. package/dist/cdn/chunks/TestEmailPanel-k9vdulTu.js.map +0 -1
  288. package/dist/cdn/chunks/TitleEditor-laILWfKh.js.map +0 -1
  289. package/dist/cdn/chunks/ToggleSwitch-0dGCYnRY.js.map +0 -1
  290. package/dist/cdn/chunks/Toolbar-BsiHW9gY.js.map +0 -1
  291. package/dist/cdn/chunks/TplModal-D8DoPbFa.js.map +0 -1
  292. package/dist/cdn/chunks/VersionHistoryMenu-B3-hNu9c.js.map +0 -1
  293. package/dist/cdn/chunks/VersionHistoryPanels-zw1AtzGN.js.map +0 -1
  294. package/dist/cdn/chunks/VersionPreviewBanner-PzVQSBJE.js.map +0 -1
  295. package/dist/cdn/chunks/WrapperBlock-CpRvfAV0.js.map +0 -1
  296. package/dist/cdn/chunks/blockTypeIcons-raBjStuv.js +0 -21
  297. package/dist/cdn/chunks/blockTypeIcons-raBjStuv.js.map +0 -1
  298. package/dist/cdn/chunks/ca-Ckgw9yd0.js.map +0 -1
  299. package/dist/cdn/chunks/cloud-CIT4yPp4.js.map +0 -1
  300. package/dist/cdn/chunks/createCloudRuntime-COUxbPvd.js.map +0 -1
  301. package/dist/cdn/chunks/de-D4dweQw8.js.map +0 -1
  302. package/dist/cdn/chunks/editor-modal-CKu8HhiB.js.map +0 -1
  303. package/dist/cdn/chunks/en-DqzAdO8F.js +0 -2
  304. package/dist/cdn/chunks/en-VE7R7NyL.js.map +0 -1
  305. package/dist/cdn/chunks/es-B9OhP8H3.js.map +0 -1
  306. package/dist/cdn/chunks/extensions-CafoGF65.js.map +0 -1
  307. package/dist/cdn/chunks/fr-wrXhIi00.js.map +0 -1
  308. package/dist/cdn/chunks/icons-BKkJ-5xF.js.map +0 -1
  309. package/dist/cdn/chunks/ja-fKnVWXHC.js.map +0 -1
  310. package/dist/cdn/chunks/nl-DeFatKJe.js.map +0 -1
  311. package/dist/cdn/chunks/preRenderCustomBlocks-Dpj-_cOj.js.map +0 -1
  312. package/dist/cdn/chunks/pt-BR-Bh1J8ey6.js.map +0 -1
  313. package/dist/cdn/chunks/socialIcons-BvYNMn1G.js.map +0 -1
  314. package/dist/cdn/chunks/src-Cnc5E71L.js.map +0 -1
  315. package/dist/cdn/chunks/src-DveVYoWS.js.map +0 -1
  316. package/dist/cdn/chunks/src-L6HEdwFn.js.map +0 -1
  317. package/dist/cdn/chunks/tiptap-DhLuKyDc.js.map +0 -1
  318. package/dist/cdn/chunks/useEditorCore-DZmtKwJh.js.map +0 -1
  319. package/dist/cdn/chunks/useLogicTag-DF7-l66G.js.map +0 -1
  320. package/dist/cdn/chunks/useMergeTag-DbIHw4NG.js.map +0 -1
  321. package/dist/cdn/chunks/usePopoverPosition-BJRvAb-h.js.map +0 -1
  322. package/dist/en-1tgLzB8q.js +0 -2
@@ -1,7 +1,7 @@
1
1
  import { E as e, H as t, I as n, N as r, Q as i, S as a, at as o, b as s, d as c, f as l, g as u, h as d, l as f, lt as p, m, n as h, p as g } from "./draggable-IB4x6w2O.js";
2
- import { w as _ } from "./useEditorCore-DZmtKwJh.js";
2
+ import { b as _ } from "./useEditorCore-D4kzTMtQ.js";
3
3
  import { J as v, Z as y } from "./keys-DCWeHkSF.js";
4
- import { n as b } from "./usePopoverPosition-BJRvAb-h.js";
4
+ import { n as b } from "./usePopoverPosition-DGXjXKjM.js";
5
5
  //#region src/components/TplModal.vue?vue&type=script&setup=true&lang.ts
6
6
  var x = ["data-tpl-theme"], S = /* @__PURE__ */ a({
7
7
  __name: "TplModal",
@@ -49,4 +49,4 @@ var x = ["data-tpl-theme"], S = /* @__PURE__ */ a({
49
49
  //#endregion
50
50
  export { S as t };
51
51
 
52
- //# sourceMappingURL=TplModal-D8DoPbFa.js.map
52
+ //# sourceMappingURL=TplModal-mLMmolQp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TplModal-mLMmolQp.js","names":["_unref","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_normalizeStyle","_withModifiers","_createElementVNode","_renderSlot","_createCommentVNode","_sfc_main","inject","withCtx","renderSlot","openBlock","ref","defineComponent","unref","createVNode","Teleport","computed","createElementBlock","createCommentVNode","withModifiers","normalizeStyle","Transition","createBaseVNode","useFocusTrap","THEME_STYLES_KEY","UI_THEME_KEY","usePopoverRoot","_hoisted_1","TplModal_default","__emit","props","__props","emit","dialogRef","isVisible","tplUiTheme","themeStyles","popoverRoot","handleKeydown","event","createBlock","_cache","_ctx"],"sources":["../../../src/components/TplModal.vue","../../../src/components/TplModal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useFocusTrap } from \"../composables\";\nimport { usePopoverRoot } from \"../composables/usePopoverRoot\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../keys\";\nimport { computed, inject, ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"keydown\", event: KeyboardEvent): void;\n}>();\n\nconst dialogRef = ref<HTMLElement | null>(null);\nconst isVisible = computed(() => props.visible);\nuseFocusTrap(dialogRef, isVisible);\n\nconst tplUiTheme = inject(UI_THEME_KEY);\n\n// The backdrop below carries the bare `tpl` class, which re-declares every\n// `--tpl-*` token from the base `.tpl` rule. A custom property declared on an\n// element beats one inherited from an ancestor, so that re-declaration shadows\n// the consumer's `theme` config — which lives as inline styles on the editor\n// root — for this whole teleported subtree. Re-applying `themeStyles` here is\n// what restores it, and doing it on the backdrop covers every dialog rendered\n// through this wrapper rather than each one remembering to. `data-tpl-theme`\n// does the same job for the dark token block. See the invariant in\n// `tests/theme-token-scope.test.ts` (issue #487).\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n emit(\"keydown\", event);\n}\n</script>\n\n<template>\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <Transition\n enter-active-class=\"tpl:transition\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <!-- The backdrop is the reference box every slotted panel caps against,\n which is why it owns the gutter (`p-4`) rather than each panel\n carrying its own margin. `inset-0` gives it a definite height; the\n wrapper below spans that height so a panel's percentage cap\n (`max-h-[90%]` / `max-h-[80%]`) has an unbroken chain to resolve\n through. Those numbers are the `vh` values they replaced, so an\n untrapped editor renders exactly as before.\n\n Panels must never cap in `vh`. `fixed` covers the viewport only while\n nothing traps it, and an ancestor with `transform`, `filter`,\n `backdrop-filter`, `will-change: transform`, `contain: paint`,\n `container-type` or a transform animation becomes the containing\n block for fixed descendants. The editor is embedded in someone\n else's page, so any of those can sit above it: `inset-0` then\n resolves to that ancestor's box while a `vh` cap still resolves to\n the viewport, and the panel overflows a container that usually also\n has `overflow: hidden`. That is issue #575 — in a 420px host inside a\n 720px viewport, a 648px panel clipped ~113px off both the top and the\n bottom, with no scrollbar to reach the buttons. Capping against the\n backdrop is self-correcting whether or not the trap is present.\n Locked by `tests/overlay-height-scope.test.ts`.\n\n The padding belongs here and not on the wrapper: preflight is\n omitted, so non-form elements keep `content-box` and padding on an\n `h-full` element would add to 100% and overflow by exactly the\n padding (the trap behind issue #115). Insets size the backdrop's\n border box, so padding here safely shrinks the content box instead. -->\n <!-- `z-10` is the one z-index inside `.tpl-popover-root` that has to be\n real. The root is a single stacking context, so its residents\n otherwise paint in teleport-anchor order — and this modal's anchor is\n established when the editor mounts, while a link dialog's is\n established later, when a paragraph enters edit mode. Without a\n number, a picker opened FROM that dialog renders behind it. Any\n positive value beats the `auto` siblings; 10 stays far below the\n suggestion popup (9999) and `SmallScreenNotice` (10001), and cannot\n escape the root's own 10000 either way. -->\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n :style=\"themeStyles\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <!-- `h-full` only, deliberately no `w-full`: height is what has to\n become definite, and widening this element would change what\n `w-full` on a panel resolves against. Panels are shrink-to-fit\n horizontally — the test-email dialog stays compact until its\n preview opens, and the saved-blocks browser pins an explicit width\n precisely because this wrapper is shrink-to-fit. Constraining one\n axis leaves all of that intact.\n\n It repeats `@click.self` because it now covers the backdrop's full\n height: clicks in the gap above or below the panel land here, so\n without it click-outside-to-close would only work on the padding\n ring and the columns either side. -->\n <div\n ref=\"dialogRef\"\n class=\"tpl:flex tpl:h-full tpl:items-center tpl:justify-center\"\n @click.self=\"emit('close')\"\n >\n <slot />\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useFocusTrap } from \"../composables\";\nimport { usePopoverRoot } from \"../composables/usePopoverRoot\";\nimport { THEME_STYLES_KEY, UI_THEME_KEY } from \"../keys\";\nimport { computed, inject, ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"keydown\", event: KeyboardEvent): void;\n}>();\n\nconst dialogRef = ref<HTMLElement | null>(null);\nconst isVisible = computed(() => props.visible);\nuseFocusTrap(dialogRef, isVisible);\n\nconst tplUiTheme = inject(UI_THEME_KEY);\n\n// The backdrop below carries the bare `tpl` class, which re-declares every\n// `--tpl-*` token from the base `.tpl` rule. A custom property declared on an\n// element beats one inherited from an ancestor, so that re-declaration shadows\n// the consumer's `theme` config — which lives as inline styles on the editor\n// root — for this whole teleported subtree. Re-applying `themeStyles` here is\n// what restores it, and doing it on the backdrop covers every dialog rendered\n// through this wrapper rather than each one remembering to. `data-tpl-theme`\n// does the same job for the dark token block. See the invariant in\n// `tests/theme-token-scope.test.ts` (issue #487).\nconst themeStyles = inject(THEME_STYLES_KEY, null);\nconst popoverRoot = usePopoverRoot();\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n emit(\"keydown\", event);\n}\n</script>\n\n<template>\n <Teleport v-if=\"popoverRoot\" :to=\"popoverRoot\">\n <Transition\n enter-active-class=\"tpl:transition\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <!-- The backdrop is the reference box every slotted panel caps against,\n which is why it owns the gutter (`p-4`) rather than each panel\n carrying its own margin. `inset-0` gives it a definite height; the\n wrapper below spans that height so a panel's percentage cap\n (`max-h-[90%]` / `max-h-[80%]`) has an unbroken chain to resolve\n through. Those numbers are the `vh` values they replaced, so an\n untrapped editor renders exactly as before.\n\n Panels must never cap in `vh`. `fixed` covers the viewport only while\n nothing traps it, and an ancestor with `transform`, `filter`,\n `backdrop-filter`, `will-change: transform`, `contain: paint`,\n `container-type` or a transform animation becomes the containing\n block for fixed descendants. The editor is embedded in someone\n else's page, so any of those can sit above it: `inset-0` then\n resolves to that ancestor's box while a `vh` cap still resolves to\n the viewport, and the panel overflows a container that usually also\n has `overflow: hidden`. That is issue #575 — in a 420px host inside a\n 720px viewport, a 648px panel clipped ~113px off both the top and the\n bottom, with no scrollbar to reach the buttons. Capping against the\n backdrop is self-correcting whether or not the trap is present.\n Locked by `tests/overlay-height-scope.test.ts`.\n\n The padding belongs here and not on the wrapper: preflight is\n omitted, so non-form elements keep `content-box` and padding on an\n `h-full` element would add to 100% and overflow by exactly the\n padding (the trap behind issue #115). Insets size the backdrop's\n border box, so padding here safely shrinks the content box instead. -->\n <!-- `z-10` is the one z-index inside `.tpl-popover-root` that has to be\n real. The root is a single stacking context, so its residents\n otherwise paint in teleport-anchor order — and this modal's anchor is\n established when the editor mounts, while a link dialog's is\n established later, when a paragraph enters edit mode. Without a\n number, a picker opened FROM that dialog renders behind it. Any\n positive value beats the `auto` siblings; 10 stays far below the\n suggestion popup (9999) and `SmallScreenNotice` (10001), and cannot\n escape the root's own 10000 either way. -->\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n :style=\"themeStyles\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <!-- `h-full` only, deliberately no `w-full`: height is what has to\n become definite, and widening this element would change what\n `w-full` on a panel resolves against. Panels are shrink-to-fit\n horizontally — the test-email dialog stays compact until its\n preview opens, and the saved-blocks browser pins an explicit width\n precisely because this wrapper is shrink-to-fit. Constraining one\n axis leaves all of that intact.\n\n It repeats `@click.self` because it now covers the backdrop's full\n height: clicks in the gap above or below the panel land here, so\n without it click-outside-to-close would only work on the padding\n ring and the columns either side. -->\n <div\n ref=\"dialogRef\"\n class=\"tpl:flex tpl:h-full tpl:items-center tpl:justify-center\"\n @click.self=\"emit('close')\"\n >\n <slot />\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n"],"mappings":";;;;;;;;;;EAMA,IAAMqC,IAAQC,GAIRC,IAAOH,GAKPI,IAAYtB,EAAwB,IAAI,GACxCuB,IAAYlB,QAAec,EAAM,OAAO;EAC9C,EAAaG,GAAWC,CAAS;EAEjC,IAAMC,IAAa5B,EAAOkB,CAAY,GAWhCW,IAAc7B,EAAOiB,GAAkB,IAAI,GAC3Ca,IAAcX,EAAe;EAEnC,SAASY,EAAc,GAA4B;GAIjD,AAHIC,EAAM,QAAQ,YAChBP,EAAK,OAAO,GAEdA,EAAK,WAAWO,CAAK;EACvB;mBAIkB9C,EAAA4C,CAAA,KAAhB3C,EAAA,GAAAC,EA+EWC,GAAA;;GA/EmB,IAAIH,EAAA4C,CAAA;EAChCxC,GAAAA,CAAAA,EA6EaC,GAAA;GA5EX,sBAAmB;GACnB,oBAAiB;GACjB,kBAAe;GACf,sBAAmB;GACnB,oBAAiB;GACjB,kBAAe;;GAsCf,SAAAC,QAgCM,CA/BEgC,EAAA,WADRrC,EAAA,GAAAM,EAgCM,OAAA;;IA9BH,kBAAgBP,EAAA0C,CAAA;IACjB,OAAM;IACN,OAIClC,EAAA,CAJD;KAAA,oBAAA;KAAA,mBAAA;KAAA,2BAAA;IAAA,GAKQR,EAAA2C,CAAA,CAAW,CAAA;IAClB,SAAK,AAAAK,EAAA,OAAAvC,GAAA,MAAO8B,EAAI,OAAA,GAAA,CAAA,MAAA,CAAA;IAChB,WAASM;GAcVnC,GAAAA,CAAAA,EAMM,OAAA;IALA,SAAA;IAAJ,KAAI8B;IACJ,OAAM;IACL,SAAK,AAAAQ,EAAA,OAAAvC,GAAA,MAAO8B,EAAI,OAAA,GAAA,CAAA,MAAA,CAAA;GAEjB5B,GAAAA,CAAAA,EAAQsC,EAAA,QAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,IAAAf,CAAA,KAAAT,EAAA,IAAA,EAAA,CAAA,CAAA"}
@@ -2,7 +2,7 @@ import { E as e, F as t, H as n, N as r, Q as i, S as a, at as o, b as s, ct as
2
2
  import { t as v } from "./dist-CXB2_kBa.js";
3
3
  import { X as y } from "./keys-DCWeHkSF.js";
4
4
  import { t as b } from "./useI18n-CyO_Nmca.js";
5
- import { Ft as x, It as S, Pt as C, it as w, kt as T } from "./icons-BKkJ-5xF.js";
5
+ import { At as x, Ft as S, It as C, Lt as w, at as T } from "./icons-CQnjugjy.js";
6
6
  import { t as E } from "./formatAbsoluteDateTime-DMmop3C-.js";
7
7
  import { t as ee } from "./formatRelativeTime-CtUU-QZ8.js";
8
8
  //#region src/components/VersionHistoryMenu.vue?vue&type=script&setup=true&lang.ts
@@ -91,7 +91,7 @@ var D = [
91
91
  title: o(U).versionHistory.olderVersion,
92
92
  "aria-label": o(U).versionHistory.olderVersion,
93
93
  onClick: f(Q, ["stop"])
94
- }, [s(o(x), {
94
+ }, [s(o(C), {
95
95
  size: 14,
96
96
  "stroke-width": 2
97
97
  })], 8, D),
@@ -102,16 +102,16 @@ var D = [
102
102
  title: o(U).versionHistory.tooltip,
103
103
  "aria-label": o(U).versionHistory.tooltip,
104
104
  onClick: f(te, ["stop"])
105
- }, [s(o(T), {
105
+ }, [s(o(x), {
106
106
  size: 16,
107
107
  "stroke-width": 1.5
108
- }), s(o(S), {
108
+ }), s(o(w), {
109
109
  class: c(["tpl:transition-transform", { "tpl:rotate-180": K.value }]),
110
110
  size: 10,
111
111
  "stroke-width": 2
112
112
  }, null, 8, ["class"])], 8, O),
113
113
  s(p, { name: "tpl-dropdown" }, {
114
- default: n(() => [K.value ? (r(), u("div", k, [m("div", A, g(o(U).versionHistory.dropdownTitle), 1), a.isLoading && a.versions.length === 0 ? (r(), u("div", j, [s(o(w), {
114
+ default: n(() => [K.value ? (r(), u("div", k, [m("div", A, g(o(U).versionHistory.dropdownTitle), 1), a.isLoading && a.versions.length === 0 ? (r(), u("div", j, [s(o(T), {
115
115
  class: "tpl:animate-spin tpl:text-[var(--tpl-primary)]",
116
116
  size: 20,
117
117
  "stroke-width": 2
@@ -137,7 +137,7 @@ var D = [
137
137
  title: o(U).versionHistory.newerVersion,
138
138
  "aria-label": o(U).versionHistory.newerVersion,
139
139
  onClick: f(Z, ["stop"])
140
- }, [s(o(C), {
140
+ }, [s(o(S), {
141
141
  size: 14,
142
142
  "stroke-width": 2
143
143
  })], 8, z)
@@ -147,4 +147,4 @@ var D = [
147
147
  //#endregion
148
148
  export { B as default };
149
149
 
150
- //# sourceMappingURL=VersionHistoryMenu-B3-hNu9c.js.map
150
+ //# sourceMappingURL=VersionHistoryMenu-C_bBKOYU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionHistoryMenu-C_bBKOYU.js","names":["_openBlock","_createElementBlock","_createElementVNode","_unref","_withModifiers","_createVNode","_normalizeClass","_Transition","_withCtx","_toDisplayString","_Fragment","_renderList","_createCommentVNode","_createTextVNode","_sfc_main","inject","renderList","withCtx","openBlock","ref","defineComponent","unref","createVNode","normalizeClass","computed","createElementBlock","createCommentVNode","withModifiers","Transition","createBaseVNode","Fragment","toDisplayString","createTextVNode","onClickOutside","UI_LOCALE_KEY","useI18n","Clock","ChevronRight","ChevronLeft","ChevronDown","LoaderCircle","formatAbsoluteDateTime","formatRelativeTime","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","VersionHistoryMenu_default","__emit","props","__props","emit","uiLocale","isOpen","dropdownRef","currentIndex","v","canGoNewer","canGoOlder","goNewer","goOlder","toggleDropdown","selectVersion","version","formatDate","result","dateString","t","format"],"sources":["../../../src/components/VersionHistoryMenu.vue","../../../src/components/VersionHistoryMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * The header's version-history control: step older / newer through the list, or\n * open the dropdown and jump straight to one.\n *\n * Shared by both editors. Reads the `TemplateVersion` contract, so any\n * provider drives it.\n */\nimport { computed, inject, ref } from \"vue\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport {\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n Clock,\n LoaderCircle,\n} from \"@lucide/vue\";\nimport type { TemplateVersion } from \"@templatical/types\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { formatAbsoluteDateTime } from \"../utils/formatAbsoluteDateTime\";\nimport { formatRelativeTime } from \"../utils/formatRelativeTime\";\nimport { UI_LOCALE_KEY } from \"../keys\";\n\nconst props = defineProps<{\n versions: TemplateVersion[];\n isLoading: boolean;\n isRestoring: boolean;\n /** Which version is on the canvas, or `null` while editing normally. */\n previewingId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"open\"): void;\n (e: \"navigate\", version: TemplateVersion): void;\n}>();\n\nconst { t, format } = useI18n();\nconst uiLocale = inject(UI_LOCALE_KEY, undefined);\n\nconst isOpen = ref(false);\nconst dropdownRef = ref<HTMLElement | null>(null);\n\n/**\n * Position in the list (0 = newest), derived from what is actually previewed\n * rather than tracked locally. A local index went stale the moment the user\n * cancelled a preview — the arrows then stepped from wherever they had left off\n * instead of from the top.\n */\nconst currentIndex = computed(() =>\n props.previewingId === null\n ? -1\n : props.versions.findIndex((v) => v.id === props.previewingId),\n);\n\nconst canGoNewer = computed(\n () => currentIndex.value > 0 && !props.isRestoring && !props.isLoading,\n);\n\nconst canGoOlder = computed(\n () =>\n currentIndex.value < props.versions.length - 1 &&\n props.versions.length > 0 &&\n !props.isRestoring &&\n !props.isLoading,\n);\n\nfunction goNewer(): void {\n if (!canGoNewer.value) return;\n emit(\"navigate\", props.versions[currentIndex.value - 1]);\n}\n\nfunction goOlder(): void {\n if (!canGoOlder.value) return;\n emit(\"navigate\", props.versions[currentIndex.value + 1]);\n}\n\nfunction toggleDropdown(): void {\n isOpen.value = !isOpen.value;\n // Always on open, never only when empty: history grows behind the user's back\n // (every save may record one), so a list fetched once would go stale silently.\n if (isOpen.value) emit(\"open\");\n}\n\nfunction selectVersion(version: TemplateVersion): void {\n emit(\"navigate\", version);\n isOpen.value = false;\n}\n\nfunction formatDate(dateString: string): string {\n const result = formatRelativeTime(dateString, t.time, format, 7);\n if (result !== null) return result;\n\n // Past the relative window, `Intl` builds the label — in the EDITOR's locale,\n // not the browser's, which is what put \"Mar 4\" in a German menu.\n return formatAbsoluteDateTime(dateString, uiLocale, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nonClickOutside(dropdownRef, () => {\n isOpen.value = false;\n});\n</script>\n\n<template>\n <div\n ref=\"dropdownRef\"\n class=\"tpl:relative tpl:flex tpl:items-center tpl:gap-0.5\"\n data-testid=\"version-history\"\n >\n <!-- Step to an older version -->\n <button\n class=\"tpl:flex tpl:size-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-30 tpl:disabled:hover:bg-transparent tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-older\"\n :disabled=\"!canGoOlder\"\n :title=\"t.versionHistory.olderVersion\"\n :aria-label=\"t.versionHistory.olderVersion\"\n @click.stop=\"goOlder\"\n >\n <ChevronLeft :size=\"14\" :stroke-width=\"2\" />\n </button>\n\n <!-- History dropdown toggle -->\n <button\n class=\"tpl:flex tpl:h-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:gap-0.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:px-1.5 tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-toggle\"\n :aria-expanded=\"isOpen\"\n :title=\"t.versionHistory.tooltip\"\n :aria-label=\"t.versionHistory.tooltip\"\n @click.stop=\"toggleDropdown\"\n >\n <Clock :size=\"16\" :stroke-width=\"1.5\" />\n <ChevronDown\n class=\"tpl:transition-transform\"\n :class=\"{ 'tpl:rotate-180': isOpen }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n\n <Transition name=\"tpl-dropdown\">\n <div\n v-if=\"isOpen\"\n class=\"tpl-scale-in tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:w-72 tpl:-translate-x-1/2 tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:bg-[var(--tpl-bg)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n data-testid=\"version-history-dropdown\"\n >\n <div\n class=\"tpl:border-b tpl:px-3 tpl:py-2 tpl:text-xs tpl:font-semibold tpl:text-[var(--tpl-text)] tpl:border-[var(--tpl-border)]\"\n >\n {{ t.versionHistory.dropdownTitle }}\n </div>\n\n <div\n v-if=\"isLoading && versions.length === 0\"\n class=\"tpl:flex tpl:items-center tpl:justify-center tpl:py-8\"\n role=\"status\"\n aria-busy=\"true\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin tpl:text-[var(--tpl-primary)]\"\n :size=\"20\"\n :stroke-width=\"2\"\n />\n </div>\n\n <div\n v-else-if=\"versions.length === 0\"\n class=\"tpl:px-3 tpl:py-6 tpl:text-center tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-empty\"\n >\n {{ t.versionHistory.empty }}\n </div>\n\n <div v-else class=\"tpl:max-h-64 tpl:overflow-y-auto\">\n <button\n v-for=\"version in versions\"\n :key=\"version.id\"\n class=\"tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:border-l-2 tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-all tpl:hover:border-l-[var(--tpl-primary)] tpl:hover:bg-[var(--tpl-bg-hover)]\"\n :class=\"\n version.id === previewingId\n ? 'tpl:border-l-[var(--tpl-primary)] tpl:bg-[var(--tpl-bg-active)]'\n : 'tpl:border-l-transparent'\n \"\n style=\"background-color: transparent\"\n data-testid=\"version-history-entry\"\n :data-version-id=\"version.id\"\n :disabled=\"isRestoring\"\n @click=\"selectVersion(version)\"\n >\n <div class=\"tpl:flex tpl:flex-col tpl:gap-0.5\">\n <div\n class=\"tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)]\"\n >\n <span>{{\n version.label ?? formatDate(version.createdAt)\n }}</span>\n <span\n v-if=\"version.isAutomatic\"\n class=\"tpl:rounded tpl:px-1 tpl:py-0.5 tpl:text-xs tpl:font-normal tpl:bg-[var(--tpl-bg-active)] tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.versionHistory.auto }}\n </span>\n </div>\n <!-- A labelled version still shows when it was taken, and by whom\n if the store tracks that; an unlabelled one already leads with\n the date, so the line would repeat it. -->\n <div\n v-if=\"version.label || version.author?.name\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <template v-if=\"version.label\">{{\n formatDate(version.createdAt)\n }}</template>\n <template v-if=\"version.label && version.author?.name\">\n ·\n </template>\n <template v-if=\"version.author?.name\">{{\n version.author.name\n }}</template>\n </div>\n </div>\n </button>\n </div>\n </div>\n </Transition>\n\n <!-- Step to a newer version -->\n <button\n class=\"tpl:flex tpl:size-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-30 tpl:disabled:hover:bg-transparent tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-newer\"\n :disabled=\"!canGoNewer\"\n :title=\"t.versionHistory.newerVersion\"\n :aria-label=\"t.versionHistory.newerVersion\"\n @click.stop=\"goNewer\"\n >\n <ChevronRight :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * The header's version-history control: step older / newer through the list, or\n * open the dropdown and jump straight to one.\n *\n * Shared by both editors. Reads the `TemplateVersion` contract, so any\n * provider drives it.\n */\nimport { computed, inject, ref } from \"vue\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport {\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n Clock,\n LoaderCircle,\n} from \"@lucide/vue\";\nimport type { TemplateVersion } from \"@templatical/types\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { formatAbsoluteDateTime } from \"../utils/formatAbsoluteDateTime\";\nimport { formatRelativeTime } from \"../utils/formatRelativeTime\";\nimport { UI_LOCALE_KEY } from \"../keys\";\n\nconst props = defineProps<{\n versions: TemplateVersion[];\n isLoading: boolean;\n isRestoring: boolean;\n /** Which version is on the canvas, or `null` while editing normally. */\n previewingId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"open\"): void;\n (e: \"navigate\", version: TemplateVersion): void;\n}>();\n\nconst { t, format } = useI18n();\nconst uiLocale = inject(UI_LOCALE_KEY, undefined);\n\nconst isOpen = ref(false);\nconst dropdownRef = ref<HTMLElement | null>(null);\n\n/**\n * Position in the list (0 = newest), derived from what is actually previewed\n * rather than tracked locally. A local index went stale the moment the user\n * cancelled a preview — the arrows then stepped from wherever they had left off\n * instead of from the top.\n */\nconst currentIndex = computed(() =>\n props.previewingId === null\n ? -1\n : props.versions.findIndex((v) => v.id === props.previewingId),\n);\n\nconst canGoNewer = computed(\n () => currentIndex.value > 0 && !props.isRestoring && !props.isLoading,\n);\n\nconst canGoOlder = computed(\n () =>\n currentIndex.value < props.versions.length - 1 &&\n props.versions.length > 0 &&\n !props.isRestoring &&\n !props.isLoading,\n);\n\nfunction goNewer(): void {\n if (!canGoNewer.value) return;\n emit(\"navigate\", props.versions[currentIndex.value - 1]);\n}\n\nfunction goOlder(): void {\n if (!canGoOlder.value) return;\n emit(\"navigate\", props.versions[currentIndex.value + 1]);\n}\n\nfunction toggleDropdown(): void {\n isOpen.value = !isOpen.value;\n // Always on open, never only when empty: history grows behind the user's back\n // (every save may record one), so a list fetched once would go stale silently.\n if (isOpen.value) emit(\"open\");\n}\n\nfunction selectVersion(version: TemplateVersion): void {\n emit(\"navigate\", version);\n isOpen.value = false;\n}\n\nfunction formatDate(dateString: string): string {\n const result = formatRelativeTime(dateString, t.time, format, 7);\n if (result !== null) return result;\n\n // Past the relative window, `Intl` builds the label — in the EDITOR's locale,\n // not the browser's, which is what put \"Mar 4\" in a German menu.\n return formatAbsoluteDateTime(dateString, uiLocale, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nonClickOutside(dropdownRef, () => {\n isOpen.value = false;\n});\n</script>\n\n<template>\n <div\n ref=\"dropdownRef\"\n class=\"tpl:relative tpl:flex tpl:items-center tpl:gap-0.5\"\n data-testid=\"version-history\"\n >\n <!-- Step to an older version -->\n <button\n class=\"tpl:flex tpl:size-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-30 tpl:disabled:hover:bg-transparent tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-older\"\n :disabled=\"!canGoOlder\"\n :title=\"t.versionHistory.olderVersion\"\n :aria-label=\"t.versionHistory.olderVersion\"\n @click.stop=\"goOlder\"\n >\n <ChevronLeft :size=\"14\" :stroke-width=\"2\" />\n </button>\n\n <!-- History dropdown toggle -->\n <button\n class=\"tpl:flex tpl:h-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:gap-0.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:px-1.5 tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-toggle\"\n :aria-expanded=\"isOpen\"\n :title=\"t.versionHistory.tooltip\"\n :aria-label=\"t.versionHistory.tooltip\"\n @click.stop=\"toggleDropdown\"\n >\n <Clock :size=\"16\" :stroke-width=\"1.5\" />\n <ChevronDown\n class=\"tpl:transition-transform\"\n :class=\"{ 'tpl:rotate-180': isOpen }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n\n <Transition name=\"tpl-dropdown\">\n <div\n v-if=\"isOpen\"\n class=\"tpl-scale-in tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:w-72 tpl:-translate-x-1/2 tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:bg-[var(--tpl-bg)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n data-testid=\"version-history-dropdown\"\n >\n <div\n class=\"tpl:border-b tpl:px-3 tpl:py-2 tpl:text-xs tpl:font-semibold tpl:text-[var(--tpl-text)] tpl:border-[var(--tpl-border)]\"\n >\n {{ t.versionHistory.dropdownTitle }}\n </div>\n\n <div\n v-if=\"isLoading && versions.length === 0\"\n class=\"tpl:flex tpl:items-center tpl:justify-center tpl:py-8\"\n role=\"status\"\n aria-busy=\"true\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin tpl:text-[var(--tpl-primary)]\"\n :size=\"20\"\n :stroke-width=\"2\"\n />\n </div>\n\n <div\n v-else-if=\"versions.length === 0\"\n class=\"tpl:px-3 tpl:py-6 tpl:text-center tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-empty\"\n >\n {{ t.versionHistory.empty }}\n </div>\n\n <div v-else class=\"tpl:max-h-64 tpl:overflow-y-auto\">\n <button\n v-for=\"version in versions\"\n :key=\"version.id\"\n class=\"tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:border-l-2 tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-all tpl:hover:border-l-[var(--tpl-primary)] tpl:hover:bg-[var(--tpl-bg-hover)]\"\n :class=\"\n version.id === previewingId\n ? 'tpl:border-l-[var(--tpl-primary)] tpl:bg-[var(--tpl-bg-active)]'\n : 'tpl:border-l-transparent'\n \"\n style=\"background-color: transparent\"\n data-testid=\"version-history-entry\"\n :data-version-id=\"version.id\"\n :disabled=\"isRestoring\"\n @click=\"selectVersion(version)\"\n >\n <div class=\"tpl:flex tpl:flex-col tpl:gap-0.5\">\n <div\n class=\"tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:font-medium tpl:text-[var(--tpl-text)]\"\n >\n <span>{{\n version.label ?? formatDate(version.createdAt)\n }}</span>\n <span\n v-if=\"version.isAutomatic\"\n class=\"tpl:rounded tpl:px-1 tpl:py-0.5 tpl:text-xs tpl:font-normal tpl:bg-[var(--tpl-bg-active)] tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.versionHistory.auto }}\n </span>\n </div>\n <!-- A labelled version still shows when it was taken, and by whom\n if the store tracks that; an unlabelled one already leads with\n the date, so the line would repeat it. -->\n <div\n v-if=\"version.label || version.author?.name\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <template v-if=\"version.label\">{{\n formatDate(version.createdAt)\n }}</template>\n <template v-if=\"version.label && version.author?.name\">\n ·\n </template>\n <template v-if=\"version.author?.name\">{{\n version.author.name\n }}</template>\n </div>\n </div>\n </button>\n </div>\n </div>\n </Transition>\n\n <!-- Step to a newer version -->\n <button\n class=\"tpl:flex tpl:size-7 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:bg-transparent tpl:transition-colors tpl:hover:bg-[var(--tpl-bg-hover)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-30 tpl:disabled:hover:bg-transparent tpl:text-[var(--tpl-text-muted)]\"\n data-testid=\"version-history-newer\"\n :disabled=\"!canGoNewer\"\n :title=\"t.versionHistory.newerVersion\"\n :aria-label=\"t.versionHistory.newerVersion\"\n @click.stop=\"goNewer\"\n >\n <ChevronRight :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n</template>\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ var c = /* @__PURE__ */ t({
5
5
  __name: "VersionHistoryPanels",
6
6
  props: { feature: {} },
7
7
  setup(t) {
8
- let c = t, l = s(() => import("./VersionPreviewBanner-PzVQSBJE.js")), u = s(() => import("./RestoreVersionDialog-cnWVN3nX.js"));
8
+ let c = t, l = s(() => import("./VersionPreviewBanner-CKyrcgxJ.js")), u = s(() => import("./RestoreVersionDialog-CFE7jqDB.js"));
9
9
  async function d() {
10
10
  try {
11
11
  await c.feature.requestRestore();
@@ -45,4 +45,4 @@ var c = /* @__PURE__ */ t({
45
45
  //#endregion
46
46
  export { c as default };
47
47
 
48
- //# sourceMappingURL=VersionHistoryPanels-zw1AtzGN.js.map
48
+ //# sourceMappingURL=VersionHistoryPanels-B9LwOKxm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionHistoryPanels-B9LwOKxm.js","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","_unref","_createCommentVNode","_sfc_main","openBlock","defineComponent","unref","createElementBlock","createCommentVNode","createBlock","Fragment","defineAsyncComponent","VersionHistoryPanels_default","props","__props","VersionPreviewBanner","RestoreVersionDialog","handleRequestRestore","handleSaveAndRestore","handleDiscardAndRestore","_cache"],"sources":["../../../src/components/VersionHistoryPanels.vue","../../../src/components/VersionHistoryPanels.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Mount point for the version-history chrome that sits outside the header,\n * shared by the OSS and Cloud editors.\n *\n * Same shape as `SavedBlocksPanels.vue` / `TestEmailPanel.vue`: everything here\n * is `defineAsyncComponent` behind a `v-if` on its own state, and the editors in\n * turn lazy-load *this* wrapper and render it only when a\n * `VersionHistoryProvider` is configured — so a consumer without one downloads\n * none of it.\n *\n * The header's dropdown control is not here for one reason only: it has to sit\n * in the header's centre column. It is lazily imported at those two sites\n * instead, and covered by the same CDN chunk guard.\n */\nimport { defineAsyncComponent } from \"vue\";\nimport type { UseVersionHistoryFeatureReturn } from \"../composables/useVersionHistoryFeature\";\n\nconst props = defineProps<{\n feature: UseVersionHistoryFeatureReturn;\n}>();\n\nconst VersionPreviewBanner = defineAsyncComponent(\n () => import(\"./VersionPreviewBanner.vue\"),\n);\n// Its own chunk, fetched only if a restore is attempted with unsaved work —\n// which for a Cloud session (autosave on) is the uncommon case.\nconst RestoreVersionDialog = defineAsyncComponent(\n () => import(\"./RestoreVersionDialog.vue\"),\n);\n\n/**\n * Every action here swallows its rejection: the feature already reported it\n * through `onError` and rolled the canvas back, and an unhandled rejection out\n * of a DOM event binding helps nobody.\n */\nasync function handleRequestRestore(): Promise<void> {\n try {\n await props.feature.requestRestore();\n } catch {\n /* reported through onError */\n }\n}\n\nasync function handleSaveAndRestore(): Promise<void> {\n try {\n await props.feature.saveAndRestore();\n } catch {\n /* reported through onError */\n }\n}\n\nasync function handleDiscardAndRestore(): Promise<void> {\n try {\n await props.feature.discardAndRestore();\n } catch {\n /* reported through onError */\n }\n}\n</script>\n\n<template>\n <VersionPreviewBanner\n v-if=\"feature.isPreviewing.value\"\n :visible=\"feature.isPreviewing.value\"\n :can-restore=\"feature.canRestore.value\"\n @cancel=\"feature.cancelPreview()\"\n @confirm=\"handleRequestRestore\"\n />\n\n <RestoreVersionDialog\n v-if=\"feature.isConfirmingRestore.value\"\n :visible=\"feature.isConfirmingRestore.value\"\n :can-save=\"feature.canSaveBeforeRestore.value\"\n :is-busy=\"feature.isConfirmBusy.value\"\n @cancel=\"feature.cancelRestoreConfirm()\"\n @save-and-restore=\"handleSaveAndRestore\"\n @discard-and-restore=\"handleDiscardAndRestore\"\n />\n</template>\n","<script setup lang=\"ts\">\n/**\n * Mount point for the version-history chrome that sits outside the header,\n * shared by the OSS and Cloud editors.\n *\n * Same shape as `SavedBlocksPanels.vue` / `TestEmailPanel.vue`: everything here\n * is `defineAsyncComponent` behind a `v-if` on its own state, and the editors in\n * turn lazy-load *this* wrapper and render it only when a\n * `VersionHistoryProvider` is configured — so a consumer without one downloads\n * none of it.\n *\n * The header's dropdown control is not here for one reason only: it has to sit\n * in the header's centre column. It is lazily imported at those two sites\n * instead, and covered by the same CDN chunk guard.\n */\nimport { defineAsyncComponent } from \"vue\";\nimport type { UseVersionHistoryFeatureReturn } from \"../composables/useVersionHistoryFeature\";\n\nconst props = defineProps<{\n feature: UseVersionHistoryFeatureReturn;\n}>();\n\nconst VersionPreviewBanner = defineAsyncComponent(\n () => import(\"./VersionPreviewBanner.vue\"),\n);\n// Its own chunk, fetched only if a restore is attempted with unsaved work —\n// which for a Cloud session (autosave on) is the uncommon case.\nconst RestoreVersionDialog = defineAsyncComponent(\n () => import(\"./RestoreVersionDialog.vue\"),\n);\n\n/**\n * Every action here swallows its rejection: the feature already reported it\n * through `onError` and rolled the canvas back, and an unhandled rejection out\n * of a DOM event binding helps nobody.\n */\nasync function handleRequestRestore(): Promise<void> {\n try {\n await props.feature.requestRestore();\n } catch {\n /* reported through onError */\n }\n}\n\nasync function handleSaveAndRestore(): Promise<void> {\n try {\n await props.feature.saveAndRestore();\n } catch {\n /* reported through onError */\n }\n}\n\nasync function handleDiscardAndRestore(): Promise<void> {\n try {\n await props.feature.discardAndRestore();\n } catch {\n /* reported through onError */\n }\n}\n</script>\n\n<template>\n <VersionPreviewBanner\n v-if=\"feature.isPreviewing.value\"\n :visible=\"feature.isPreviewing.value\"\n :can-restore=\"feature.canRestore.value\"\n @cancel=\"feature.cancelPreview()\"\n @confirm=\"handleRequestRestore\"\n />\n\n <RestoreVersionDialog\n v-if=\"feature.isConfirmingRestore.value\"\n :visible=\"feature.isConfirmingRestore.value\"\n :can-save=\"feature.canSaveBeforeRestore.value\"\n :is-busy=\"feature.isConfirmBusy.value\"\n @cancel=\"feature.cancelRestoreConfirm()\"\n @save-and-restore=\"handleSaveAndRestore\"\n @discard-and-restore=\"handleDiscardAndRestore\"\n />\n</template>\n"],"mappings":";;;;;;;EAkBA,IAAMgB,IAAQC,GAIRC,IAAuBJ,QACrB,OAAO,qCACf,GAGMK,IAAuBL,QACrB,OAAO,qCACf;EAOA,eAAeM,IAAsC;GACnD,IAAI;IACF,MAAMJ,EAAM,QAAQ,eAAe;GACrC,QAAQ,CAER;EACF;EAEA,eAAeK,IAAsC;GACnD,IAAI;IACF,MAAML,EAAM,QAAQ,eAAe;GACrC,QAAQ,CAER;EACF;EAEA,eAAeM,IAAyC;GACtD,IAAI;IACF,MAAMN,EAAM,QAAQ,kBAAkB;GACxC,QAAQ,CAER;EACF;oBAKUT,EAAA,GAAAG,EAAAG,GAAA,MAAA,CAAAI,EAAA,QAAQ,aAAa,SAD7BjB,EAAA,GAAAG,EAMEC,EAAAc,CAAA,GAAA;;GAJC,SAASD,EAAA,QAAQ,aAAa;GAC9B,eAAaA,EAAA,QAAQ,WAAW;GAChC,UAAM,AAAAM,EAAA,QAAA,MAAEN,EAAA,QAAQ,cAAa;GAC7B,WAASG;EAIJ,GAAA,MAAA,GAAA,CAAA,WAAA,aAAA,CAAA,KAAAT,EAAA,IAAA,EAAA,GAAAM,EAAA,QAAQ,oBAAoB,SADpCjB,EAAA,GAAAG,EAQEC,EAAAe,CAAA,GAAA;;GANC,SAASF,EAAA,QAAQ,oBAAoB;GACrC,YAAUA,EAAA,QAAQ,qBAAqB;GACvC,WAASA,EAAA,QAAQ,cAAc;GAC/B,UAAM,AAAAM,EAAA,QAAA,MAAEN,EAAA,QAAQ,qBAAoB;GACpC,kBAAkBI;GAClB,qBAAqBC"}
@@ -1,6 +1,6 @@
1
1
  import { N as e, S as t, at as n, b as r, ct as i, g as a, h as o, p as s, ut as c } from "./draggable-IB4x6w2O.js";
2
2
  import { t as l } from "./useI18n-CyO_Nmca.js";
3
- import { kt as u } from "./icons-BKkJ-5xF.js";
3
+ import { At as u } from "./icons-CQnjugjy.js";
4
4
  import { f as d, v as f } from "./styleConstants-C_YAPdQS.js";
5
5
  //#region src/components/VersionPreviewBanner.vue?vue&type=script&setup=true&lang.ts
6
6
  var p = {
@@ -37,4 +37,4 @@ var p = {
37
37
  //#endregion
38
38
  export { g as default };
39
39
 
40
- //# sourceMappingURL=VersionPreviewBanner-PzVQSBJE.js.map
40
+ //# sourceMappingURL=VersionPreviewBanner-CKyrcgxJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionPreviewBanner-CKyrcgxJ.js","names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_toDisplayString","_normalizeClass","_createCommentVNode","_sfc_main","openBlock","defineComponent","unref","createVNode","normalizeClass","createElementBlock","createCommentVNode","createBaseVNode","toDisplayString","useI18n","Clock","ghostBtnClass","primaryBtnClass","_hoisted_1","_hoisted_2","_hoisted_3","VersionPreviewBanner_default","__emit","emit","__props","t","_cache"],"sources":["../../../src/components/VersionPreviewBanner.vue","../../../src/components/VersionPreviewBanner.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ghostBtnClass, primaryBtnClass } from \"../constants/styleConstants\";\n/**\n * Shown while a past version is on the canvas instead of the user's own work.\n * Cancel puts the pre-preview content back; Restore makes the version current.\n *\n * Lives outside `src/cloud/` because version history is a BYO provider, not a\n * Cloud feature — a consumer's own `versionHistory` provider drives this banner\n * with no Cloud involved.\n */\nimport { Clock } from \"@lucide/vue\";\nimport { useI18n } from \"../composables/useI18n\";\n\ndefineProps<{\n visible: boolean;\n /**\n * Whether the provider supplied `restore`. When it didn't, history is\n * browse-and-preview only, so the confirm action does not render at all\n * rather than rendering disabled — the same discipline saved blocks uses.\n */\n canRestore: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n (e: \"confirm\"): void;\n}>();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div\n v-if=\"visible\"\n class=\"tpl-preview-banner tpl:absolute tpl:top-14 tpl:right-0 tpl:left-0 tpl:z-40 tpl:flex tpl:items-center tpl:justify-center tpl:gap-4 tpl:px-4 tpl:py-3 tpl:bg-[var(--tpl-primary-light)] tpl:border-b tpl:border-[var(--tpl-primary)]\"\n data-testid=\"version-preview-banner\"\n role=\"status\"\n >\n <div\n class=\"tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]\"\n >\n <Clock\n :size=\"18\"\n :stroke-width=\"2\"\n class=\"tpl:text-[var(--tpl-primary)]\"\n />\n <span>{{ t.versionPreview.message }}</span>\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n :class=\"ghostBtnClass\"\n style=\"background-color: transparent\"\n data-testid=\"version-preview-cancel\"\n @click=\"emit('cancel')\"\n >\n {{ t.versionPreview.cancel }}\n </button>\n <button\n v-if=\"canRestore\"\n :class=\"primaryBtnClass\"\n data-testid=\"version-preview-restore\"\n @click=\"emit('confirm')\"\n >\n {{ t.versionPreview.restore }}\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ghostBtnClass, primaryBtnClass } from \"../constants/styleConstants\";\n/**\n * Shown while a past version is on the canvas instead of the user's own work.\n * Cancel puts the pre-preview content back; Restore makes the version current.\n *\n * Lives outside `src/cloud/` because version history is a BYO provider, not a\n * Cloud feature — a consumer's own `versionHistory` provider drives this banner\n * with no Cloud involved.\n */\nimport { Clock } from \"@lucide/vue\";\nimport { useI18n } from \"../composables/useI18n\";\n\ndefineProps<{\n visible: boolean;\n /**\n * Whether the provider supplied `restore`. When it didn't, history is\n * browse-and-preview only, so the confirm action does not render at all\n * rather than rendering disabled — the same discipline saved blocks uses.\n */\n canRestore: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n (e: \"confirm\"): void;\n}>();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div\n v-if=\"visible\"\n class=\"tpl-preview-banner tpl:absolute tpl:top-14 tpl:right-0 tpl:left-0 tpl:z-40 tpl:flex tpl:items-center tpl:justify-center tpl:gap-4 tpl:px-4 tpl:py-3 tpl:bg-[var(--tpl-primary-light)] tpl:border-b tpl:border-[var(--tpl-primary)]\"\n data-testid=\"version-preview-banner\"\n role=\"status\"\n >\n <div\n class=\"tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:text-[var(--tpl-text)]\"\n >\n <Clock\n :size=\"18\"\n :stroke-width=\"2\"\n class=\"tpl:text-[var(--tpl-primary)]\"\n />\n <span>{{ t.versionPreview.message }}</span>\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n :class=\"ghostBtnClass\"\n style=\"background-color: transparent\"\n data-testid=\"version-preview-cancel\"\n @click=\"emit('cancel')\"\n >\n {{ t.versionPreview.cancel }}\n </button>\n <button\n v-if=\"canRestore\"\n :class=\"primaryBtnClass\"\n data-testid=\"version-preview-restore\"\n @click=\"emit('confirm')\"\n >\n {{ t.versionPreview.restore }}\n </button>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAuBA,IAAM2B,IAAOD,GAKP,EAAE,SAAMR,EAAQ;mBAKZU,EAAA,WADR5B,EAAA,GAAAC,EAkCM,OAlCNqB,GAkCM,CA5BJpB,EASM,OATNqB,GASM,CANJpB,EAIEC,EAAAe,CAAA,GAAA;GAHC,MAAM;GACN,gBAAc;GACf,OAAM;EAERjB,CAAAA,GAAAA,EAA2C,QAAA,MAAAG,EAAlCD,EAAAyB,CAAA,CAAC,CAAC,eAAe,OAAO,GAAA,CAAA,CAAA,CAAA,GAEnC3B,EAiBM,OAjBNsB,GAiBM,CAhBJtB,EAOS,UAAA;GANN,OAAKI,EAAEF,EAAAgB,CAAA,CAAa;GACrB,OAAA,EAAA,oBAAA,cAAA;GACA,eAAY;GACX,SAAK,AAAAU,EAAA,QAAA,MAAEH,EAAI,QAAA;EAET,GAAAtB,EAAAD,EAAAyB,CAAA,CAAC,CAAC,eAAe,MAAM,GAAA,CAAA,GAGpBD,EAAA,cADR5B,EAAA,GAAAC,EAOS,UAAA;;GALN,OAAKK,EAAEF,EAAAiB,CAAA,CAAe;GACvB,eAAY;GACX,SAAK,AAAAS,EAAA,QAAA,MAAEH,EAAI,SAAA;EAET,GAAAtB,EAAAD,EAAAyB,CAAA,CAAC,CAAC,eAAe,OAAO,GAAA,CAAA,KAAAd,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAAA,EAAA,IAAA,EAAA"}
@@ -1,5 +1,5 @@
1
1
  import { E as e, F as t, N as n, R as r, S as i, at as a, f as o, g as s, lt as c, m as l, u } from "./draggable-IB4x6w2O.js";
2
- import { d, f, l as p } from "./useEditorCore-DZmtKwJh.js";
2
+ import { C as d, E as f, T as p } from "./useEditorCore-D4kzTMtQ.js";
3
3
  import { s as m } from "./keys-DCWeHkSF.js";
4
4
  function h(e, t = "desktop") {
5
5
  return t === "mobile" ? 375 : e?.width ?? 600;
@@ -12,7 +12,7 @@ var g = "width 300ms cubic-bezier(0.34, 1.56, 0.64, 1)", _ = ["data-block-id"],
12
12
  viewport: {}
13
13
  },
14
14
  setup(i) {
15
- let h = i, g = e(m, null), v = o(() => d(h.block) ?? {});
15
+ let h = i, g = e(m, null), v = o(() => p(h.block) ?? {});
16
16
  function y(e) {
17
17
  return f(e, g, {});
18
18
  }
@@ -23,7 +23,7 @@ var g = "width 300ms cubic-bezier(0.34, 1.56, 0.64, 1)", _ = ["data-block-id"],
23
23
  }, [(n(!0), s(u, null, t(i.block.children, (e) => (n(), s("div", {
24
24
  key: e.id,
25
25
  "data-block-id": e.id,
26
- style: c(a(p)(e))
26
+ style: c(a(d)(e))
27
27
  }, [(n(), l(r(y(e)), {
28
28
  block: e,
29
29
  viewport: i.viewport
@@ -33,4 +33,4 @@ var g = "width 300ms cubic-bezier(0.34, 1.56, 0.64, 1)", _ = ["data-block-id"],
33
33
  //#endregion
34
34
  export { g as n, h as r, v as t };
35
35
 
36
- //# sourceMappingURL=WrapperBlock-CpRvfAV0.js.map
36
+ //# sourceMappingURL=WrapperBlock-DI8vSvTO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WrapperBlock-DI8vSvTO.js","names":["_openBlock","_createElementBlock","_normalizeStyle","_Fragment","_renderList","_unref","_createBlock","_resolveDynamicComponent","_sfc_main","inject","renderList","openBlock","resolveDynamicComponent","defineComponent","unref","computed","createElementBlock","normalizeStyle","createBlock","getBlockWrapperStyle","resolveBlockComponent","getWrapperStyle","BLOCK_REGISTRY_KEY","getEmailFrameWidth","viewport","settings","EMAIL_FRAME_WIDTH_TRANSITION","_hoisted_1","WrapperBlock_default","props","__props","blockRegistry","wrapperStyle","getBlockComponent","block","Fragment","child"],"sources":["../../../src/utils/emailFrameWidth.ts","../../../src/components/blocks/WrapperBlock.vue","../../../src/components/blocks/WrapperBlock.vue"],"sourcesContent":["import type { TemplateSettings, ViewportSize } from \"@templatical/types\";\n\n/**\n * Width a mobile preview renders at. Not the template's own width — a phone\n * viewport is narrower than any sensible email body, so every viewport-aware\n * surface clamps to this.\n */\nexport const MOBILE_EMAIL_WIDTH = 375;\n\n/**\n * Fallback body width when no template settings are available — headless mounts\n * and tests. Matches `createDefaultTemplateContent`'s default.\n */\nexport const DEFAULT_EMAIL_WIDTH = 600;\n\n/**\n * The width an email body lays itself out against, for a given viewport.\n *\n * **The single source of truth for every surface that renders blocks**: the\n * canvas, the preview canvas, and the save dialog's scaled preview rows. They\n * have to agree — `SavedBlockPreviewRow` divides by this number to compute its\n * `transform: scale()`, so if it and the canvas disagreed the rows would be\n * scaled by the wrong factor and overflow or under-fill their frame. Sharing one\n * function makes that agreement structural instead of three constants that happen\n * to match today.\n *\n * Pass the *current* template's settings even when previewing content from\n * elsewhere (a saved block stores only `Block[]`): the current settings are what\n * the content will actually be rendered at.\n */\nexport function getEmailFrameWidth(\n settings: TemplateSettings | undefined,\n viewport: ViewportSize = \"desktop\",\n): number {\n if (viewport === \"mobile\") return MOBILE_EMAIL_WIDTH;\n return settings?.width ?? DEFAULT_EMAIL_WIDTH;\n}\n\n/**\n * Band of email background shown on each side of the content column.\n *\n * A surface that renders blocks at exactly the body width has nowhere for\n * `settings.backgroundColor` to show: a full-width section's own background\n * covers every pixel of it, so the body colour reads as unset even though the\n * sent email paints it across the whole client viewport. The gutter is what\n * makes it visible, mirroring how `mj-body background-color` renders beside the\n * centred content.\n *\n * Fixed rather than \"fill the container\" so the band never overwhelms the\n * content on a wide monitor. `Canvas.vue` adds it to both sides of a fixed\n * stage; `BlockPreviewCanvas` treats it as the cap on a fluid one, because a\n * fixed 792px stage overflows every dialog it lives in.\n */\nexport const EMAIL_GUTTER = 96;\n\n/**\n * How a viewport switch animates the frame.\n *\n * Lives here rather than being written out per call site so every surface that\n * switches viewport eases identically — the canvas's toggle and the test-email\n * dialog's should feel like the same control, not two similar ones. The slight\n * overshoot in the curve is deliberate and matches the editor's other viewport\n * transitions.\n *\n * Only `width` transitions: block content re-flows for the new viewport in the\n * same frame, exactly as it does on the canvas, so animating height as well would\n * lag the reflow behind the frame.\n */\nexport const EMAIL_FRAME_WIDTH_TRANSITION =\n \"width 300ms cubic-bezier(0.34, 1.56, 0.64, 1)\";\n","<script setup lang=\"ts\">\nimport {\n getBlockWrapperStyle,\n getWrapperStyle,\n resolveBlockComponent,\n} from \"../../utils/blockComponentResolver\";\nimport type {\n Block,\n ViewportSize,\n WrapperBlock as WrapperBlockType,\n} from \"@templatical/types\";\nimport { computed, inject } from \"vue\";\nimport { BLOCK_REGISTRY_KEY } from \"../../keys\";\n\ndefineOptions({ name: \"WrapperBlock\" });\n\nconst props = defineProps<{\n block: WrapperBlockType;\n viewport: ViewportSize;\n}>();\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY, null);\n\nconst wrapperStyle = computed(() => getWrapperStyle(props.block) ?? {});\n\nfunction getBlockComponent(block: Block) {\n // Children resolve through the registry (title, section, …). No local\n // fallback map: a Canvas import of PreviewSectionBlock (or a preview import\n // of SectionBlock) would pull the other surface's tree into this band.\n return resolveBlockComponent(block, blockRegistry, {});\n}\n</script>\n\n<template>\n <div data-testid=\"layout-wrapper\" class=\"tpl:w-full\" :style=\"wrapperStyle\">\n <div\n v-for=\"child in block.children\"\n :key=\"child.id\"\n :data-block-id=\"child.id\"\n :style=\"getBlockWrapperStyle(child)\"\n >\n <component\n :is=\"getBlockComponent(child)\"\n :block=\"child\"\n :viewport=\"viewport\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n getBlockWrapperStyle,\n getWrapperStyle,\n resolveBlockComponent,\n} from \"../../utils/blockComponentResolver\";\nimport type {\n Block,\n ViewportSize,\n WrapperBlock as WrapperBlockType,\n} from \"@templatical/types\";\nimport { computed, inject } from \"vue\";\nimport { BLOCK_REGISTRY_KEY } from \"../../keys\";\n\ndefineOptions({ name: \"WrapperBlock\" });\n\nconst props = defineProps<{\n block: WrapperBlockType;\n viewport: ViewportSize;\n}>();\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY, null);\n\nconst wrapperStyle = computed(() => getWrapperStyle(props.block) ?? {});\n\nfunction getBlockComponent(block: Block) {\n // Children resolve through the registry (title, section, …). No local\n // fallback map: a Canvas import of PreviewSectionBlock (or a preview import\n // of SectionBlock) would pull the other surface's tree into this band.\n return resolveBlockComponent(block, blockRegistry, {});\n}\n</script>\n\n<template>\n <div data-testid=\"layout-wrapper\" class=\"tpl:w-full\" :style=\"wrapperStyle\">\n <div\n v-for=\"child in block.children\"\n :key=\"child.id\"\n :data-block-id=\"child.id\"\n :style=\"getBlockWrapperStyle(child)\"\n >\n <component\n :is=\"getBlockComponent(child)\"\n :block=\"child\"\n :viewport=\"viewport\"\n />\n </div>\n </div>\n</template>\n"],"mappings":";;;AA8BA,SAAgBuB,EACd,GACA,IAAyB,WACjB;CAER,OADIC,MAAa,WAAU,MACpBC,GAAU,SAAA;AACnB;AAgCA,IAAaC,IACX;;;;;;;;ECrDF,IAAMG,IAAQC,GAKRC,IAAgBtB,EAAOa,GAAoB,IAAI,GAE/CU,IAAejB,QAAeM,EAAgBQ,EAAM,KAAK,KAAK,CAAC,CAAC;EAEtE,SAASI,EAAkB,GAAc;GAIvC,OAAOb,EAAsBc,GAAOH,GAAe,CAAC,CAAC;EACvD;oBAIE/B,EAAA,GAAAC,EAaM,OAAA;GAbD,eAAY;GAAiB,OAAM;GAAc,OAAKC,EAAE8B,EAAA,KAAY;EACvEhC,GAAAA,EAAAA,EAAA,EAAA,GAAAC,EAWME,GAAA,MAAAC,EAVY0B,EAAA,MAAM,WAAf,OADT9B,EAAA,GAAAC,EAWM,OAAA;GATH,KAAKmC,EAAM;GACX,iBAAeA,EAAM;GACrB,OAAKlC,EAAEG,EAAAc,CAAA,CAAoB,CAACiB,CAAK,CAAA;EAElCpC,GAAAA,EAAAA,EAAA,GAAAM,EAIEC,EAHK0B,EAAkBG,CAAK,CAAA,GAAA;GAC3B,OAAOA;GACP,UAAUN,EAAA"}
@@ -0,0 +1,21 @@
1
+ import { G as e, H as t, K as n, Ot as r, Q as i, Z as a, ht as o, j as s, kt as c, p as l, pt as u, tt as d, y as f } from "./icons-CQnjugjy.js";
2
+ //#region src/utils/blockTypeIcons.ts
3
+ var p = {
4
+ section: r,
5
+ title: o,
6
+ paragraph: n,
7
+ image: u,
8
+ button: t,
9
+ divider: d,
10
+ video: e,
11
+ social: s,
12
+ menu: a,
13
+ table: f,
14
+ spacer: i,
15
+ countdown: l,
16
+ html: c
17
+ };
18
+ //#endregion
19
+ export { p as t };
20
+
21
+ //# sourceMappingURL=blockTypeIcons-CdfCfqHE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockTypeIcons-CdfCfqHE.js","names":["Play","RectangleHorizontal","Pilcrow","Columns3","MoveVertical","Navigation","Heading","Share2","Code","Timer","Image","Minus","Table","blockTypeIcons"],"sources":["../../../src/utils/blockTypeIcons.ts"],"sourcesContent":["import {\n Code,\n Columns3,\n Heading,\n Image,\n Minus,\n MoveVertical,\n Navigation,\n Pilcrow,\n Play,\n RectangleHorizontal,\n Share2,\n Table,\n Timer,\n} from \"@lucide/vue\";\nimport type { Component } from \"vue\";\n\nexport const blockTypeIcons: Record<string, Component> = {\n section: Columns3,\n title: Heading,\n paragraph: Pilcrow,\n image: Image,\n button: RectangleHorizontal,\n divider: Minus,\n video: Play,\n social: Share2,\n menu: Navigation,\n table: Table,\n spacer: MoveVertical,\n countdown: Timer,\n html: Code,\n};\n"],"mappings":";;AAiBA,IAAaa,IAA4C;CACvD,SAASV;CACT,OAAOG;CACP,WAAWJ;CACX,OAAOQ;CACP,QAAQT;CACR,SAASU;CACT,OAAOX;CACP,QAAQO;CACR,MAAMF;CACN,OAAOO;CACP,QAAQR;CACR,WAAWK;CACX,MAAMD;AACR"}
@@ -359,6 +359,19 @@ var e = {
359
359
  spacing: "Espaiat",
360
360
  padding: "Farciment",
361
361
  background: "Fons",
362
+ borderWidth: "Amplada de la vora",
363
+ borderStyle: "Estil de la vora",
364
+ borderColor: "Color de la vora",
365
+ border: "Vora",
366
+ borderSide: "Costat",
367
+ linkSides: "La mateixa vora a tots els costats",
368
+ unlinkSides: "Defineix cada costat per separat",
369
+ linkCorners: "El mateix radi a totes les cantonades",
370
+ unlinkCorners: "Defineix cada cantonada per separat",
371
+ cornerTopLeft: "A dalt a l'esquerra",
372
+ cornerTopRight: "A dalt a la dreta",
373
+ cornerBottomRight: "A baix a la dreta",
374
+ cornerBottomLeft: "A baix a l'esquerra",
362
375
  color: "Color",
363
376
  display: "Visualització",
364
377
  showOnDesktop: "Mostra a l'escriptori",
@@ -422,6 +435,7 @@ var e = {
422
435
  hexValue: "Valor del color en Hex",
423
436
  notSet: "No definit",
424
437
  clear: "Neteja el color",
438
+ transparent: "Transparent",
425
439
  presetColors: "Colors predefinits"
426
440
  },
427
441
  mergeTag: {
@@ -621,3 +635,5 @@ var e = {
621
635
  };
622
636
  //#endregion
623
637
  export { e as default };
638
+
639
+ //# sourceMappingURL=ca--zGWn9AU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ca--zGWn9AU.js","names":["ca"],"sources":["../../../src/i18n/locales/ca.ts"],"sourcesContent":["import type en from \"./en\";\n\nconst ca: typeof en = {\n // Footer (OSS only)\n footer: {\n poweredBy: \"Amb la tecnologia de\",\n openSource: \"Codi obert\",\n },\n\n // Header — nom de la plantilla + estat de desat. Només es mostra quan hi ha un\n // proveïdor de plantilles configurat.\n header: {\n save: \"Desa\",\n saving: \"S'està desant...\",\n saved: \"Desat\",\n unsaved: \"Sense desar\",\n saveFailed: \"No s'ha pogut desar\",\n saveNoTemplate: \"Primer carrega o crea una plantilla\",\n templateName: \"Nom de la plantilla\",\n rename: \"Canvia el nom de la plantilla\",\n untitled: \"Sense títol\",\n updatedAt: \"Actualitzat {time}\",\n createdAt: \"Creat {time}\",\n updatedJustNow: \"Actualitzat ara mateix\",\n createdJustNow: \"Creat ara mateix\",\n },\n\n // Relative timestamps, shared by every surface that shows one: the header's\n // updated line, saved blocks, comments and version history.\n time: {\n justNow: \"Ara mateix\",\n minutesAgo: \"fa {minutes} min\",\n hoursAgo: \"fa {hours} h\",\n daysAgo: \"fa {days} d\",\n },\n\n // History (undo/redo)\n history: {\n collabWarning: \"Desfer pot afectar els canvis recents dels col·laboradors\",\n undo: \"Desfer\",\n redo: \"Refer\",\n },\n\n // Viewport toggle\n viewport: {\n label: \"Àrea de visualització\",\n desktop: \"Escriptori\",\n mobile: \"Mòbil\",\n },\n\n // Dark mode preview\n darkMode: {\n enable: \"Vista prèvia del mode fosc\",\n disable: \"Vista prèvia del mode clar\",\n },\n\n // Preview mode\n previewMode: {\n enable: \"Mode de vista prèvia\",\n disable: \"Surt de la vista prèvia\",\n },\n\n // Sidebar - Block types\n blocks: {\n section: \"Secció\",\n image: \"Imatge\",\n title: \"Títol\",\n paragraph: \"Paràgraf\",\n button: \"Botó\",\n divider: \"Divisor\",\n video: \"Vídeo\",\n social: \"Xarxes socials\",\n spacer: \"Espaiador\",\n html: \"HTML\",\n menu: \"Menú\",\n table: \"Taula\",\n countdown: \"Compta enrere\",\n },\n\n // Placeholder text a newly inserted block starts with. Author-facing\n // prompts, meant to be overwritten — so they follow the editor UI locale.\n // Recipient-facing defaults live in `i18n/contentDefaults.ts` and follow\n // the template's own `settings.locale` instead.\n blockDefaults: {\n title: \"Escriviu el vostre títol\",\n paragraph: \"Escriviu aquí el vostre text\",\n button: \"Feu clic aquí\",\n },\n\n // Right sidebar\n sidebar: {\n content: \"Contingut\",\n settings: \"Configuració\",\n noSelection: \"Cap element seleccionat\",\n noSelectionHint: \"Selecciona un bloc al llenç per editar-lo\",\n },\n\n // Toolbar - Common\n toolbar: {\n duplicate: \"Duplica\",\n delete: \"Elimina\",\n },\n\n // Title editor toolbar\n titleEditor: {\n toolbar: \"Format del títol\",\n bold: \"Negreta (Ctrl+B)\",\n italic: \"Cursiva (Ctrl+I)\",\n addLink: \"Afegeix un enllaç\",\n },\n\n // Paragraph editor toolbar\n paragraphEditor: {\n toolbar: \"Format del text\",\n bold: \"Negreta (Ctrl+B)\",\n italic: \"Cursiva (Ctrl+I)\",\n underline: \"Subratllat (Ctrl+U)\",\n strikethrough: \"Text ratllat\",\n subscript: \"Subíndex\",\n superscript: \"Superíndex\",\n addLink: \"Afegeix un enllaç\",\n bulletList: \"Llista de vinyetes\",\n numberedList: \"Llista numerada\",\n alignLeft: \"Alinea a l'esquerra\",\n alignCenter: \"Alinea al centre\",\n alignRight: \"Alinea a la dreta\",\n alignJustify: \"Justifica\",\n clearFormatting: \"Neteja el format\",\n insertEmoji: \"Insereix un emoji\",\n fontFamily: \"Tipus de lletra\",\n defaultFont: \"Per defecte\",\n fontSize: \"Mida de la font\",\n defaultSize: \"Per defecte\",\n textColor: \"Color del text\",\n highlightColor: \"Color de ressaltat\",\n lineHeight: \"Interlínia\",\n letterSpacing: \"Espaiat de lletres\",\n emojiItemLabel: \"Insereix l'emoji {emoji}\",\n },\n\n // Block actions (BlockWrapper)\n blockActions: {\n drag: \"Arrossega per reordenar, o prem Espai per moure amb el teclat\",\n dragLifted:\n \"Movent {block}. Utilitza les fletxes amunt i avall per reposicionar, Espai o Retorn per deixar anar, Esc per cancel·lar.\",\n duplicate: \"Duplica el bloc\",\n delete: \"Elimina el bloc\",\n hiddenOnViewport: \"Ocult a {viewport}\",\n saveAsBlock: \"Desa com a bloc\",\n conditionToggle: \"Alterna la condició de visualització\",\n comments: \"Comentaris ({count})\",\n lifted: \"{block} aixecat. Posició {position} de {total}.\",\n moved: \"{block} mogut a la posició {position} de {total}.\",\n dropped: \"{block} deixat anar a la posició {position} de {total}.\",\n cancelled:\n \"Moviment cancel·lat. {block} ha tornat a la posició {position}.\",\n },\n\n // Toolbar - Section\n section: {\n dropHere: \"Deixa anar els blocs aquí\",\n columns: \"Columnes\",\n column1: \"1 columna\",\n column2: \"2 columnes\",\n column3: \"3 columnes\",\n ratio12: \"Proporció 1:2\",\n ratio21: \"Proporció 2:1\",\n borderRadius: \"Radi de la vora\",\n wrapperEnable: \"Afegeix un contenidor\",\n wrapperLayoutConflict:\n \"Aquest editor ja emmarca el correu. Un marc extra en aquesta secció no és compatible — la vista prèvia i l'exportació fallaran.\",\n stackOnMobile: \"Apila en mòbil\",\n },\n\n // Text editor link dialog\n linkDialog: {\n editLink: \"Edita l'enllaç\",\n insertLink: \"Insereix l'enllaç\",\n updateLink: \"Actualitza l'enllaç\",\n removeLink: \"Elimina l'enllaç\",\n cancel: \"Cancel·la\",\n urlPlaceholder: \"https://example.com\",\n urlLabel: \"URL\",\n colorLabel: \"Color de l'enllaç\",\n },\n\n // Toolbar - Title\n title: {\n level: \"Nivell d'encapçalament\",\n heading1: \"Encapçalament 1 (36px)\",\n heading2: \"Encapçalament 2 (28px)\",\n heading3: \"Encapçalament 3 (22px)\",\n heading4: \"Encapçalament 4 (18px)\",\n fontFamily: \"Tipus de lletra\",\n inheritFont: \"Utilitza la font de la plantilla\",\n color: \"Color\",\n align: \"Alineació\",\n alignLeft: \"Esquerra\",\n alignCenter: \"Centre\",\n alignRight: \"Dreta\",\n },\n\n // Emoji picker\n emoji: {\n smileys: \"Emoticones\",\n gestures: \"Gestos\",\n objects: \"Objectes\",\n },\n\n // Toolbar - Image\n image: {\n imageUrl: \"URL de la imatge\",\n imageUrlPlaceholder: \"https://...\",\n altText: \"Text alternatiu\",\n altTextPlaceholder: \"Descripció de la imatge\",\n width: \"Amplada\",\n fullWidth: \"Amplada completa\",\n widthCustom: \"Personalitzada\",\n height: \"Alçada\",\n heightAuto: \"Automàtica\",\n heightCustom: \"Personalitzada\",\n borderRadius: \"Radi de la vora\",\n linkUrl: \"URL de l'enllaç\",\n openInNewTab: \"Obre en una pestanya nova\",\n placeholderUrl: \"Imatge de mostra\",\n optional: \"(opcional)\",\n placeholderUrlPlaceholder: \"https://... (només per al disseny)\",\n placeholderUrlTooltip:\n \"Com que la URL de la imatge utilitza una etiqueta de fusió, podeu proporcionar una imatge real aquí per previsualitzar el disseny mentre dissenyeu. Això no s'inclou a la sortida final.\",\n clickToAdd: \"Feu clic per afegir la URL de la imatge\",\n browseMedia: \"Explora multimèdia\",\n dropToUpload: \"Deixeu anar la imatge per pujar-la\",\n uploading: \"Pujant…\",\n decorative: \"Imatge decorativa\",\n decorativeHint:\n \"Ocult per als lectors de pantalla. Utilitzeu-lo només per a espaiadors i detalls visuals.\",\n },\n\n // Toolbar - Video\n video: {\n videoUrl: \"URL del vídeo\",\n videoUrlPlaceholder: \"https://youtube.com/...\",\n openInNewTab: \"Obre en una pestanya nova\",\n customThumbnail: \"Miniatura personalitzada\",\n optional: \"(opcional)\",\n thumbnailPlaceholder: \"Generat automàticament des de la URL del vídeo\",\n altText: \"Text alternatiu\",\n altTextPlaceholder: \"Descripció del vídeo\",\n width: \"Amplada\",\n fullWidth: \"Amplada completa\",\n height: \"Alçada\",\n heightAuto: \"Automàtica\",\n heightCustom: \"Personalitzada\",\n placeholderUrl: \"Miniatura de mostra\",\n placeholderUrlPlaceholder: \"https://... (només per al disseny)\",\n placeholderUrlTooltip:\n \"Com que la URL del vídeo utilitza una etiqueta de fusió, podeu proporcionar una miniatura real aquí per previsualitzar el disseny mentre dissenyeu. Això no s'inclou a la sortida final.\",\n addVideo: \"Afegeix una URL de vídeo\",\n },\n\n // Toolbar - Button\n button: {\n fontFamily: \"Tipus de lletra\",\n inheritFont: \"Utilitza la font de la plantilla\",\n text: \"Text\",\n url: \"URL\",\n urlPlaceholder: \"https://...\",\n openInNewTab: \"Obre en una pestanya nova\",\n background: \"Fons\",\n textColor: \"Color del text\",\n borderRadius: \"Radi de la vora\",\n fontSize: \"Mida de la font\",\n width: \"Amplada\",\n widthAuto: \"Ajusta al contingut\",\n fullWidth: \"Amplada completa\",\n widthCustom: \"Personalitzada\",\n },\n\n // Toolbar - Divider\n divider: {\n style: \"Estil\",\n solid: \"Sòlid\",\n dashed: \"Amb guions\",\n dotted: \"Amb punts\",\n color: \"Color\",\n thickness: \"Gruix\",\n },\n\n // Toolbar - Social Icons\n social: {\n icons: \"Icones\",\n addIcon: \"Afegeix una icona\",\n addIcons: \"Afegeix icones de xarxes socials\",\n removeIcon: \"Elimina\",\n urlPlaceholder: \"https://...\",\n style: \"Estil\",\n styleSolid: \"Sòlid\",\n styleOutlined: \"Contornejat\",\n styleRounded: \"Arrodonit\",\n styleSquare: \"Quadrat\",\n styleCircle: \"Cercle\",\n size: \"Mida\",\n sizeSmall: \"S\",\n sizeMedium: \"M\",\n sizeLarge: \"L\",\n spacing: \"Espaiat\",\n align: \"Alineació\",\n platforms: {\n facebook: \"Facebook\",\n twitter: \"X (Twitter)\",\n instagram: \"Instagram\",\n linkedin: \"LinkedIn\",\n youtube: \"YouTube\",\n tiktok: \"TikTok\",\n pinterest: \"Pinterest\",\n email: \"Correu electrònic\",\n website: \"Lloc web\",\n whatsapp: \"WhatsApp\",\n telegram: \"Telegram\",\n discord: \"Discord\",\n snapchat: \"Snapchat\",\n reddit: \"Reddit\",\n github: \"GitHub\",\n dribbble: \"Dribbble\",\n behance: \"Behance\",\n },\n },\n\n // Toolbar - Menu\n menu: {\n items: \"Elements del menú\",\n addItem: \"Afegeix un element\",\n removeItem: \"Elimina\",\n text: \"Text\",\n urlPlaceholder: \"https://example.com\",\n openInNewTab: \"Obre en una pestanya nova\",\n bold: \"Negreta\",\n underline: \"Subratllat\",\n color: \"Color\",\n linkColor: \"Color de l'enllaç\",\n fontSize: \"Mida de la font\",\n fontFamily: \"Tipus de lletra\",\n separator: \"Separador\",\n separatorColor: \"Color del separador\",\n spacing: \"Espaiat\",\n textAlign: \"Alineació\",\n addLinks: \"Afegeix enllaços al menú\",\n },\n\n // Toolbar - Table\n table: {\n dimensions: \"Dimensions\",\n rows: \"Files\",\n columns: \"Columnes\",\n hasHeaderRow: \"Fila de capçalera\",\n headerBackgroundColor: \"Fons de la capçalera\",\n noHeaderBg: \"Sense fons\",\n borderColor: \"Color de la vora\",\n borderWidth: \"Gruix de la vora\",\n cellPadding: \"Farciment de la cel·la\",\n fontFamily: \"Tipus de lletra\",\n fontSize: \"Mida de la font\",\n color: \"Color del text\",\n textAlign: \"Alineació\",\n cellPlaceholder: \"Introdueix el text...\",\n empty: \"Afegeix una taula\",\n },\n\n // Toolbar - Paragraph\n paragraph: {\n paragraphSpacing: \"Espaiat entre paràgrafs\",\n },\n\n // Toolbar - Spacer\n spacer: {\n height: \"Alçada\",\n },\n\n // Toolbar - Countdown\n countdown: {\n targetDate: \"Data límit\",\n timezone: \"Zona horària\",\n display: \"Visualització\",\n days: \"Dies\",\n hours: \"Hores\",\n minutes: \"Minuts\",\n seconds: \"Segons\",\n separator: \"Separador\",\n fontFamily: \"Tipus de lletra\",\n inheritFont: \"Per defecte\",\n digitFontSize: \"Mida dels dígits\",\n digitColor: \"Color dels dígits\",\n labelColor: \"Color de l'etiqueta\",\n labelFontSize: \"Mida de l'etiqueta\",\n background: \"Fons\",\n labels: \"Etiquetes\",\n expiry: \"Missatge de caducitat\",\n expiredMessagePlaceholder: \"Aquesta oferta ha caducat\",\n expiredImageUrl: \"URL de la imatge caducada\",\n hideOnExpiry: \"Oculta quan hagi caducat\",\n setDate: \"Defineix una data límit al panell de configuració\",\n hidden: \"Ocult (caducat)\",\n },\n\n // Custom Blocks\n customBlocks: {\n definitionNotFound:\n \"Tipus de bloc desconegut: aquest bloc no està registrat\",\n renderError:\n \"No s'ha pogut renderitzar aquest bloc. Comproveu si hi ha errors a la plantilla del bloc.\",\n fields: {\n required: \"Obligatori\",\n addItem: \"Afegeix un element\",\n removeItem: \"Elimina\",\n maxItemsReached: \"S'ha arribat al límit màxim d'elements\",\n minItemsRequired: \"Es requereix un mínim de {count} elements\",\n },\n toolbar: {\n noDefinition:\n \"Enregistreu aquest tipus de bloc a la configuració de l'SDK per editar-ne les propietats\",\n },\n dataSource: {\n fetchButton: \"Carrega el contingut\",\n changeButton: \"Canvia\",\n fetching: \"Carregant...\",\n readOnlyTooltip: \"Aquest valor es carrega des de la vostra font de dades\",\n fetchError: \"No s'ha pogut carregar el contingut\",\n },\n },\n\n // Toolbar - HTML\n html: {\n content: \"Contingut HTML\",\n preview: \"Bloc HTML personalitzat\",\n empty: \"Afegeix contingut HTML al panell\",\n sanitizationHint:\n \"L'HTML s'exporta tal qual i no es depura — assegura't que el contingut sigui segur.\",\n },\n\n // Toolbar - Common block settings\n blockSettings: {\n spacing: \"Espaiat\",\n padding: \"Farciment\",\n background: \"Fons\",\n borderWidth: \"Amplada de la vora\",\n borderStyle: \"Estil de la vora\",\n borderColor: \"Color de la vora\",\n border: \"Vora\",\n borderSide: \"Costat\",\n linkSides: \"La mateixa vora a tots els costats\",\n unlinkSides: \"Defineix cada costat per separat\",\n linkCorners: \"El mateix radi a totes les cantonades\",\n unlinkCorners: \"Defineix cada cantonada per separat\",\n cornerTopLeft: \"A dalt a l'esquerra\",\n cornerTopRight: \"A dalt a la dreta\",\n cornerBottomRight: \"A baix a la dreta\",\n cornerBottomLeft: \"A baix a l'esquerra\",\n color: \"Color\",\n display: \"Visualització\",\n showOnDesktop: \"Mostra a l'escriptori\",\n showOnMobile: \"Mostra al mòbil\",\n hiddenOnDevice: \"Ocult a {device}\",\n displayCondition: \"Condició de visualització\",\n selectCondition: \"Selecciona una condició\",\n removeCondition: \"Elimina la condició\",\n noCondition: \"Sempre visible\",\n conditionApplied: \"Condició aplicada\",\n customCondition: \"Condició personalitzada\",\n customConditionLabel: \"Nom de la condició\",\n customConditionBefore: \"Abans (lògica d'obertura)\",\n customConditionAfter: \"Després (lògica de tancament)\",\n applyCondition: \"Aplica\",\n cancelCondition: \"Cancel·la\",\n customBadge: \"Personalitzat\",\n restoreHiddenBlocks: \"Mostra tots els blocs ocults\",\n },\n\n // Template settings\n templateSettings: {\n layout: \"Disposició\",\n widthPreset: \"Amplada predefinida\",\n customWidth: \"Amplada personalitzada\",\n appearance: \"Aparença\",\n backgroundColor: \"Color de fons\",\n textColor: \"Color del text\",\n linkColor: \"Color de l'enllaç\",\n linkUnderline: \"Subratllar enllaços\",\n fontFamily: \"Tipus de lletra\",\n preheaderText: \"Text de la precapçalera\",\n preheaderTextPlaceholder:\n \"Text de vista prèvia que es mostra després de la línia de l'assumpte a la bústia...\",\n preheaderTextHint:\n \"Aquest text apareix després de la línia de l'assumpte a les vistes prèvies dels clients de correu. Admet etiquetes de fusió.\",\n language: \"Idioma\",\n contentLocale: \"Idioma del contingut\",\n contentLocaleHint:\n \"Codi BCP 47 (p. ex. ca, en, de). Estableix l'atribut lang del correu renderitzat perquè els lectors de pantalla pronunciïn el contingut correctament.\",\n contentDirection: \"De dreta a esquerra\",\n contentDirectionHint:\n \"Direcció d'escriptura del correu, independent de l'idioma de l'editor. Si no s'indica, segueix l'idioma del contingut (àrab, hebreu, …).\",\n tips: \"Consells\",\n tip1: \"600px és l'amplada estàndard per a les plantilles de correu electrònic\",\n tip2: \"Utilitzeu fonts segures per a la web per obtenir la millor compatibilitat\",\n tip3: \"Els fons clars funcionen millor per a la llegibilitat\",\n },\n\n // Spacing control\n spacingControl: {\n lockAll: \"Bloqueja tots els costats\",\n unlock: \"Desbloqueja els costats\",\n top: \"Superior\",\n right: \"Dret\",\n bottom: \"Inferior\",\n left: \"Esquerre\",\n decreaseTop: \"Disminueix superior\",\n increaseTop: \"Augmenta superior\",\n decreaseLeft: \"Disminueix esquerre\",\n increaseLeft: \"Augmenta esquerre\",\n decreaseRight: \"Disminueix dret\",\n increaseRight: \"Augmenta dret\",\n decreaseBottom: \"Disminueix inferior\",\n increaseBottom: \"Augmenta inferior\",\n },\n\n // Color Picker\n colorPicker: {\n pickColor: \"Tria un color\",\n hexValue: \"Valor del color en Hex\",\n notSet: \"No definit\",\n clear: \"Neteja el color\",\n transparent: \"Transparent\",\n presetColors: \"Colors predefinits\",\n },\n\n // Merge Tag\n mergeTag: {\n editAsText: \"Edita com a text\",\n fieldGroup: \"Valor amb etiquetes de fusió\",\n remove: \"Elimina l'etiqueta de fusió\",\n insert: \"Insereix l'etiqueta de fusió\",\n insertShort: \"Etiqueta de fusió\",\n editValue: \"Edita el valor de l'etiqueta de fusió\",\n changeTag: \"Canvia l'etiqueta de fusió: {label}\",\n unknownLabel: \"Etiqueta de fusió\",\n deleteMergeTag: \"Elimina l'etiqueta de fusió\",\n suggestionEmpty: \"No hi ha etiquetes de fusió coincidents\",\n picker: {\n title: \"Insereix l'etiqueta de fusió\",\n changeTitle: \"Canvia l'etiqueta de fusió\",\n searchPlaceholder: \"Cerca etiquetes de fusió\",\n searchAriaLabel: \"Cerca etiquetes de fusió\",\n noResults: \"No hi ha etiquetes de fusió coincidents\",\n empty: \"No hi ha etiquetes de fusió configurades\",\n otherGroup: \"Altres\",\n close: \"Tanca\",\n groupCount: \"{count}\",\n sample: \"Vista prèvia: {sample}\",\n },\n },\n\n // Logic tags (standalone, separate from merge tags)\n logicTag: {\n insert: \"Insereix lògica\",\n insertShort: \"Lògica\",\n picker: {\n title: \"Insereix lògica\",\n searchPlaceholder: \"Cerca etiquetes de lògica\",\n searchAriaLabel: \"Cerca etiquetes de lògica\",\n noResults: \"No hi ha etiquetes de lògica coincidents\",\n empty: \"No hi ha etiquetes de lògica configurades\",\n otherGroup: \"Altres\",\n close: \"Tanca\",\n },\n },\n\n // Canvas\n canvas: {\n noBlocks: \"Encara no hi ha blocs\",\n dragHint: \"Comenceu des de zero arrossegant blocs des de la barra lateral\",\n dropHere: \"Deixeu anar aquí\",\n aiHintChat: \"o deixeu que\",\n aiHintChatSuffix:\n \"generi una plantilla completa per a vosaltres en pocs segons\",\n aiHintDesign:\n \"Teniu un disseny existent? Pugeu una captura de pantalla, una imatge o un PDF i\",\n aiHintDesignSuffix: \"el recrearà a l'instant\",\n },\n\n // Sidebar\n savedBlocks: {\n title: \"Blocs desats\",\n saveAsBlock: \"Desa com a bloc\",\n name: \"Nom\",\n namePlaceholder: \"p. ex. Encapçalament, Peu de pàgina, CTA...\",\n save: \"Desa el bloc\",\n saving: \"S'està desant...\",\n cancel: \"Cancel·la\",\n empty: \"Encara no hi ha blocs desats\",\n emptyHint:\n \"Desa blocs de les teves plantilles per reutilitzar-los més tard.\",\n noResults: \"Cap bloc desat coincideix amb la teva cerca\",\n search: \"Cerca blocs desats...\",\n loading: \"S'estan carregant els blocs desats…\",\n category: \"Categoria\",\n categoryPlaceholder: \"p. ex. Capçaleres, Promocions... (opcional)\",\n allCategories: \"Totes les categories\",\n filterByCategory: \"Filtra per categoria\",\n insert: \"Insereix\",\n rename: \"Canvia el nom\",\n delete: \"Elimina\",\n deleteConfirm: \"Vols eliminar aquest bloc desat?\",\n blockCount: \"{count} bloc(s)\",\n browse: \"Explora els blocs desats\",\n selectToPreview: \"Selecciona un bloc desat per previsualitzar-lo\",\n insertAtBeginning: \"Al principi\",\n insertAfterBlock: \"Després de {block}\",\n insertAtEnd: \"Al final\",\n insertPosition: \"Posició d'inserció\",\n close: \"Tanca\",\n pickToolbar: \"Selecció de bloc desat\",\n pickCount: \"{count} bloc(s) seleccionat(s)\",\n pickHint: \"Fes clic als blocs per afegir-los o treure'ls\",\n savingCount: \"S'estan desant {count} bloc(s):\",\n reorderHint: \"Arrossega per reordenar: els blocs es desen en aquest ordre\",\n reorderHandle: \"Reordena {block}, posició {position} de {total}\",\n reorderAnnouncement: \"{block} mogut a la posició {position} de {total}\",\n expand: \"Amplia\",\n collapse: \"Redueix\",\n expandPreview: \"Amplia la vista prèvia de {block}\",\n collapsePreview: \"Redueix la vista prèvia de {block}\",\n },\n comments: {\n button: \"Comentaris\",\n title: \"Comentaris\",\n close: \"Tancar\",\n placeholder: \"Escriu un comentari...\",\n replyPlaceholder: \"Escriu una resposta...\",\n reply: \"Respondre\",\n resolve: \"Resoldre\",\n unresolve: \"Reobrir\",\n delete: \"Eliminar\",\n edit: \"Editar\",\n cancel: \"Cancel·lar\",\n save: \"Desar\",\n noComments: \"Encara no hi ha comentaris\",\n noCommentsHint:\n \"Comença una conversa afegint un comentari a la plantilla o a un bloc concret.\",\n deleteConfirm: \"Vols eliminar aquest comentari?\",\n filterAll: \"Tots\",\n filterUnresolved: \"Sense resoldre\",\n filterBlock: \"Aquest bloc\",\n jumpToBlock: \"Bloc\",\n ownedByYou: \"Tu\",\n edited: \"editat\",\n resolvedBy: \"Resolt per {name}\",\n replyOne: \"{count} resposta\",\n replyMany: \"{count} respostes\",\n missingBlock: \"Bloc no trobat\",\n saveTemplateFirst: \"Desa la plantilla abans de comentar en aquest bloc.\",\n },\n versionHistory: {\n tooltip: \"Historial de versions\",\n dropdownTitle: \"Historial de versions\",\n empty: \"Encara no hi ha versions\",\n auto: \"auto\",\n olderVersion: \"Versió anterior\",\n newerVersion: \"Versió més recent\",\n },\n versionPreview: {\n message: \"Estàs veient una versió anterior d’aquesta plantilla.\",\n cancel: \"Cancel·la\",\n restore: \"Restaura aquesta versió\",\n restoreConfirm: {\n title: \"Vols restaurar aquesta versió?\",\n unsavedWithSave:\n \"Tens canvis sense desar. Desa’ls primer i es mantindran a l’historial; si restaures sense desar, es perdran.\",\n unsavedNoSave:\n \"Tens canvis sense desar i cap lloc on desar-los. Si restaures aquesta versió, es perdran.\",\n saveAndRestore: \"Desa i restaura\",\n restoreAnyway: \"Restaura igualment\",\n cancel: \"Cancel·la\",\n },\n },\n previewResolution: {\n resolving: \"S’està resolent la vista prèvia…\",\n failed:\n \"No s’ha pogut resoldre la vista prèvia; es mostra la plantilla sense resoldre.\",\n hint: \"La vista prèvia utilitza dades resoltes pel teu backend.\",\n },\n mergeTagPreview: {\n label: \"Vista d’etiquetes de combinació\",\n sample: \"Exemple\",\n labelView: \"Etiqueta\",\n },\n testEmail: {\n title: \"Envia un correu de prova\",\n recipientLabel: \"Destinatari\",\n recipientPlaceholder: \"tu@exemple.cat\",\n invalidAddress: \"Introduïu una adreça de correu vàlida.\",\n preview: \"Previsualització\",\n previewHint:\n \"Les etiquetes de combinació es mostren sense resoldre — el vostre backend les omple.\",\n previewHintSample:\n \"Les etiquetes de combinació mostren valors d’exemple; el teu backend insereix les dades reals.\",\n recipientNotAllowed:\n \"Aquesta adreça no és a la llista de destinataris permesos.\",\n send: \"Envia\",\n sending: \"S'està enviant...\",\n cancel: \"Cancel·la\",\n success: \"Correu de prova enviat correctament\",\n button: \"Prova\",\n },\n sidebarNav: {\n browseSavedBlocks: \"Explora els blocs desats\",\n palette: \"Paleta de blocs\",\n insertBlock: \"Insereix un bloc de tipus {block}\",\n },\n\n // Landmark region labels for assistive technology\n landmarks: {\n canvas: \"Llenç del correu\",\n blockToolbar: \"Propietats del bloc\",\n rightSidebar: \"Propietats del bloc i configuració de la plantilla\",\n reorderAnnouncements: \"Avisos de reordenació de blocs\",\n },\n\n // Design Reference (cloud)\n errors: {\n editorLoading: \"Carregant l'editor...\",\n editorLoadFailed: \"No s'ha pogut carregar l'editor.\",\n retry: \"Torna-ho a provar\",\n },\n\n issues: {\n panelTitle: \"Problemes\",\n panelTabLabel: \"Problemes\",\n groupErrors: \"Errors\",\n groupWarnings: \"Avisos\",\n groupInfo: \"Informació\",\n jump: \"Vés al bloc\",\n fix: \"Corregeix\",\n emptyState: \"Sense problemes, tot correcte.\",\n badgeError: \"Té errors\",\n badgeWarning: \"Té avisos\",\n issueCountTooltip: \"{count} problema/es\",\n },\n\n smallScreen: {\n title: \"Cal una pantalla més gran\",\n message:\n \"L'editor necessita més espai del que ofereix aquesta pantalla. Obriu-lo en una tauleta o ordinador d'escriptori per començar a editar.\",\n },\n};\n\nexport default ca;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ca-BTf1Zbqb.js","names":[],"sources":["../../../../media-library/src/i18n/locales/ca.ts"],"sourcesContent":["const ca = {\n mediaLibrary: {\n title: \"Biblioteca multimèdia\",\n searchPlaceholder: \"Cerca fitxers...\",\n allFiles: \"Tots els fitxers\",\n filterAll: \"Tots els tipus\",\n filterImages: \"Imatges\",\n filterDocuments: \"Documents\",\n filterVideos: \"Vídeos\",\n filterAudio: \"Àudio\",\n newFolder: \"Carpeta nova\",\n folderName: \"Nom de la carpeta\",\n noFiles: \"No s'ha trobat cap fitxer\",\n noSearchResults: \"Cap fitxer no coincideix amb la cerca\",\n dropOrClick: \"Deixa anar els fitxers aquí o fes clic per pujar-los\",\n acceptedFormats: \"Imatges, PDF, vídeo, àudio i documents (màx. 10 MB)\",\n uploading: \"S'està pujant...\",\n uploadingProgress: \"S'està pujant {current} de {total}...\",\n selectImage: \"Selecciona una imatge\",\n selectFile: \"Selecciona un fitxer\",\n deleteSelected: \"Suprimeix\",\n copyUrl: \"Copia l'URL\",\n copied: \"S'ha copiat!\",\n browseMedia: \"Explora la biblioteca multimèdia\",\n renameFolder: \"Canvia el nom de la carpeta\",\n addSubfolder: \"Afegeix una subcarpeta\",\n subfolderName: \"Nom de la subcarpeta\",\n sortNewest: \"Més recents primer\",\n sortOldest: \"Més antics primer\",\n sortNameAsc: \"Nom de l'A a la Z\",\n sortNameDesc: \"Nom de la Z a l'A\",\n sortSizeAsc: \"Més petits primer\",\n sortSizeDesc: \"Més grans primer\",\n moveSelected: \"Mou\",\n moveToRoot: \"Tots els fitxers\",\n currentFolder: \"(actual)\",\n confirmDelete: \"Ho confirmes?\",\n renameFile: \"Canvia el nom\",\n editFile: \"Edita el fitxer\",\n fileName: \"Nom del fitxer\",\n altText: \"Text alternatiu\",\n altTextPlaceholder: \"Descriu aquesta imatge per millorar l'accessibilitat\",\n saveChanges: \"Desa\",\n cancel: \"Cancel·la\",\n frequentlyUsed: \"Utilitzats freqüentment\",\n deleteWarningTitle: \"Suprimeix el fitxer\",\n deleteWarningMessage: \"N'estàs segur? Aquesta acció és irreversible.\",\n deleteWarningUsageNote:\n \"Els fitxers següents s'utilitzen en plantilles. Si els suprimeixes, és possible que aquestes plantilles deixin de funcionar correctament.\",\n deleteAnyway: \"Suprimeix\",\n usedInTemplates: \"Utilitzat en {count} plantilla(es)\",\n viewGrid: \"Visualització de quadrícula\",\n viewList: \"Visualització de llista\",\n showFolders: \"Mostra les carpetes\",\n hideFolders: \"Amaga les carpetes\",\n importFromUrl: \"Importa des d'un URL\",\n importUrlPlaceholder: \"https://example.com/image.jpg\",\n import: \"Importa\",\n importing: \"S'està important...\",\n importError: \"No s'ha pogut importar des de l'URL\",\n replaceFile: \"Substitueix el fitxer\",\n replaceWarningTitle: \"Substitueix el fitxer\",\n replaceWarningMessage:\n \"Estàs a punt de substituir aquest fitxer. El fitxer de substitució ha de tenir la mateixa extensió ({extension}).\",\n replaceWarningUsageNote:\n \"Aquest fitxer s'utilitza en {count} plantilla(es). En substituir-lo, s'actualitzaran totes les referències.\",\n replaceSelectFile: \"Selecciona el fitxer de substitució\",\n replace: \"Substitueix\",\n replacing: \"S'està substituint...\",\n replaceError: \"No s'ha pogut substituir el fitxer\",\n saving: \"S'està desant...\",\n cropAspectRatio: \"Relació d'aspecte\",\n cropFree: \"Lliure\",\n cropSquare: \"1:1\",\n cropLandscape43: \"4:3\",\n cropLandscape169: \"16:9\",\n cropOriginal: \"Original\",\n cropMaxWidth: \"Amplada màxima\",\n cropMaxHeight: \"Alçada màxima\",\n cropOutputSize: \"Mida de sortida\",\n cropPixels: \"px\",\n cropOptional: \"(opcional)\",\n close: \"Tanca\",\n searchAriaLabel: \"Cerca fitxers\",\n filterAriaLabel: \"Filtra per tipus\",\n filesListAriaLabel: \"Fitxers\",\n loading: \"S'està carregant\",\n expandFolder: \"Expandeix la carpeta\",\n collapseFolder: \"Redueix la carpeta\",\n deleteFolder: \"Suprimeix la carpeta\",\n deleteFolderConfirm: \"Confirma la supressió\",\n storageTooltip: \"{used} de {total} utilitzats ({remaining} restants)\",\n },\n};\nexport default ca;\n"],"mappings":";AAAA,IAAM,IAAK,EACT,cAAc;CACZ,OAAO;CACP,mBAAmB;CACnB,UAAU;CACV,WAAW;CACX,cAAc;CACd,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb,WAAW;CACX,YAAY;CACZ,SAAS;CACT,iBAAiB;CACjB,aAAa;CACb,iBAAiB;CACjB,WAAW;CACX,mBAAmB;CACnB,aAAa;CACb,YAAY;CACZ,gBAAgB;CAChB,SAAS;CACT,QAAQ;CACR,aAAa;CACb,cAAc;CACd,cAAc;CACd,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,cAAc;CACd,aAAa;CACb,cAAc;CACd,cAAc;CACd,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,UAAU;CACV,UAAU;CACV,SAAS;CACT,oBAAoB;CACpB,aAAa;CACb,QAAQ;CACR,gBAAgB;CAChB,oBAAoB;CACpB,sBAAsB;CACtB,wBACE;CACF,cAAc;CACd,iBAAiB;CACjB,UAAU;CACV,UAAU;CACV,aAAa;CACb,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,QAAQ;CACR,WAAW;CACX,aAAa;CACb,aAAa;CACb,qBAAqB;CACrB,uBACE;CACF,yBACE;CACF,mBAAmB;CACnB,SAAS;CACT,WAAW;CACX,cAAc;CACd,QAAQ;CACR,iBAAiB;CACjB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;CAClB,cAAc;CACd,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,cAAc;CACd,OAAO;CACP,iBAAiB;CACjB,iBAAiB;CACjB,oBAAoB;CACpB,SAAS;CACT,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,qBAAqB;CACrB,gBAAgB;AAClB,EACF"}
1
+ {"version":3,"file":"ca-BTf1Zbqb.js","names":["ca"],"sources":["../../../../media-library/src/i18n/locales/ca.ts"],"sourcesContent":["const ca = {\n mediaLibrary: {\n title: \"Biblioteca multimèdia\",\n searchPlaceholder: \"Cerca fitxers...\",\n allFiles: \"Tots els fitxers\",\n filterAll: \"Tots els tipus\",\n filterImages: \"Imatges\",\n filterDocuments: \"Documents\",\n filterVideos: \"Vídeos\",\n filterAudio: \"Àudio\",\n newFolder: \"Carpeta nova\",\n folderName: \"Nom de la carpeta\",\n noFiles: \"No s'ha trobat cap fitxer\",\n noSearchResults: \"Cap fitxer no coincideix amb la cerca\",\n dropOrClick: \"Deixa anar els fitxers aquí o fes clic per pujar-los\",\n acceptedFormats: \"Imatges, PDF, vídeo, àudio i documents (màx. 10 MB)\",\n uploading: \"S'està pujant...\",\n uploadingProgress: \"S'està pujant {current} de {total}...\",\n selectImage: \"Selecciona una imatge\",\n selectFile: \"Selecciona un fitxer\",\n deleteSelected: \"Suprimeix\",\n copyUrl: \"Copia l'URL\",\n copied: \"S'ha copiat!\",\n browseMedia: \"Explora la biblioteca multimèdia\",\n renameFolder: \"Canvia el nom de la carpeta\",\n addSubfolder: \"Afegeix una subcarpeta\",\n subfolderName: \"Nom de la subcarpeta\",\n sortNewest: \"Més recents primer\",\n sortOldest: \"Més antics primer\",\n sortNameAsc: \"Nom de l'A a la Z\",\n sortNameDesc: \"Nom de la Z a l'A\",\n sortSizeAsc: \"Més petits primer\",\n sortSizeDesc: \"Més grans primer\",\n moveSelected: \"Mou\",\n moveToRoot: \"Tots els fitxers\",\n currentFolder: \"(actual)\",\n confirmDelete: \"Ho confirmes?\",\n renameFile: \"Canvia el nom\",\n editFile: \"Edita el fitxer\",\n fileName: \"Nom del fitxer\",\n altText: \"Text alternatiu\",\n altTextPlaceholder: \"Descriu aquesta imatge per millorar l'accessibilitat\",\n saveChanges: \"Desa\",\n cancel: \"Cancel·la\",\n frequentlyUsed: \"Utilitzats freqüentment\",\n deleteWarningTitle: \"Suprimeix el fitxer\",\n deleteWarningMessage: \"N'estàs segur? Aquesta acció és irreversible.\",\n deleteWarningUsageNote:\n \"Els fitxers següents s'utilitzen en plantilles. Si els suprimeixes, és possible que aquestes plantilles deixin de funcionar correctament.\",\n deleteAnyway: \"Suprimeix\",\n usedInTemplates: \"Utilitzat en {count} plantilla(es)\",\n viewGrid: \"Visualització de quadrícula\",\n viewList: \"Visualització de llista\",\n showFolders: \"Mostra les carpetes\",\n hideFolders: \"Amaga les carpetes\",\n importFromUrl: \"Importa des d'un URL\",\n importUrlPlaceholder: \"https://example.com/image.jpg\",\n import: \"Importa\",\n importing: \"S'està important...\",\n importError: \"No s'ha pogut importar des de l'URL\",\n replaceFile: \"Substitueix el fitxer\",\n replaceWarningTitle: \"Substitueix el fitxer\",\n replaceWarningMessage:\n \"Estàs a punt de substituir aquest fitxer. El fitxer de substitució ha de tenir la mateixa extensió ({extension}).\",\n replaceWarningUsageNote:\n \"Aquest fitxer s'utilitza en {count} plantilla(es). En substituir-lo, s'actualitzaran totes les referències.\",\n replaceSelectFile: \"Selecciona el fitxer de substitució\",\n replace: \"Substitueix\",\n replacing: \"S'està substituint...\",\n replaceError: \"No s'ha pogut substituir el fitxer\",\n saving: \"S'està desant...\",\n cropAspectRatio: \"Relació d'aspecte\",\n cropFree: \"Lliure\",\n cropSquare: \"1:1\",\n cropLandscape43: \"4:3\",\n cropLandscape169: \"16:9\",\n cropOriginal: \"Original\",\n cropMaxWidth: \"Amplada màxima\",\n cropMaxHeight: \"Alçada màxima\",\n cropOutputSize: \"Mida de sortida\",\n cropPixels: \"px\",\n cropOptional: \"(opcional)\",\n close: \"Tanca\",\n searchAriaLabel: \"Cerca fitxers\",\n filterAriaLabel: \"Filtra per tipus\",\n filesListAriaLabel: \"Fitxers\",\n loading: \"S'està carregant\",\n expandFolder: \"Expandeix la carpeta\",\n collapseFolder: \"Redueix la carpeta\",\n deleteFolder: \"Suprimeix la carpeta\",\n deleteFolderConfirm: \"Confirma la supressió\",\n storageTooltip: \"{used} de {total} utilitzats ({remaining} restants)\",\n },\n};\nexport default ca;\n"],"mappings":";AAAA,IAAMA,IAAK,EACT,cAAc;CACZ,OAAO;CACP,mBAAmB;CACnB,UAAU;CACV,WAAW;CACX,cAAc;CACd,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb,WAAW;CACX,YAAY;CACZ,SAAS;CACT,iBAAiB;CACjB,aAAa;CACb,iBAAiB;CACjB,WAAW;CACX,mBAAmB;CACnB,aAAa;CACb,YAAY;CACZ,gBAAgB;CAChB,SAAS;CACT,QAAQ;CACR,aAAa;CACb,cAAc;CACd,cAAc;CACd,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,cAAc;CACd,aAAa;CACb,cAAc;CACd,cAAc;CACd,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,UAAU;CACV,UAAU;CACV,SAAS;CACT,oBAAoB;CACpB,aAAa;CACb,QAAQ;CACR,gBAAgB;CAChB,oBAAoB;CACpB,sBAAsB;CACtB,wBACE;CACF,cAAc;CACd,iBAAiB;CACjB,UAAU;CACV,UAAU;CACV,aAAa;CACb,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,QAAQ;CACR,WAAW;CACX,aAAa;CACb,aAAa;CACb,qBAAqB;CACrB,uBACE;CACF,yBACE;CACF,mBAAmB;CACnB,SAAS;CACT,WAAW;CACX,cAAc;CACd,QAAQ;CACR,iBAAiB;CACjB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;CAClB,cAAc;CACd,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,cAAc;CACd,OAAO;CACP,iBAAiB;CACjB,iBAAiB;CACjB,oBAAoB;CACpB,SAAS;CACT,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,qBAAqB;CACrB,gBAAgB;AAClB,EACF"}
@@ -1,6 +1,6 @@
1
1
  import { r as e } from "./rolldown-runtime-B0aSnxlc.js";
2
2
  import { B as t, Q as n, Y as r, f as i } from "./draggable-IB4x6w2O.js";
3
- import { t as a } from "./src-DveVYoWS.js";
3
+ import { t as a } from "./src-BR3I3gOW.js";
4
4
  //#region ../core/src/cloud/auth.ts
5
5
  function o(e) {
6
6
  let t = e instanceof a ? e.statusCode : void 0;
@@ -1733,4 +1733,4 @@ function re(e) {
1733
1733
  //#endregion
1734
1734
  export { o as C, s as S, E as _, Y as a, C as b, W as c, V as d, I as f, k as g, N as h, X as i, G as l, P as m, ne as n, J as o, F as p, Z as r, K as s, re as t, U as u, T as v, v as x, w as y };
1735
1735
 
1736
- //# sourceMappingURL=cloud-CIT4yPp4.js.map
1736
+ //# sourceMappingURL=cloud-De-eh1u6.js.map