@templatical/editor 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/{AiChatSidebar-X4viKtvs.js → AiChatSidebar-CIkS8DsO.js} +3 -3
  2. package/dist/{AiFeatureMenu-DDAamRaA.js → AiFeatureMenu-Cji1LBJJ.js} +3 -3
  3. package/dist/{BlockIssueBadge-Qxrl7Ujl.js → BlockIssueBadge-BQiT0FML.js} +2 -2
  4. package/dist/{BlockPreviewCanvas-Cf-kxbEr.js → BlockPreviewCanvas-DAnwZofk.js} +10 -6
  5. package/dist/{CloudEditor-JIzhj1Xq.js → CloudEditor-CXaft6Ej.js} +60 -58
  6. package/dist/{CollaboratorBar-tC7AACTb.js → CollaboratorBar-BR-rL2wG.js} +2 -2
  7. package/dist/{ColorPicker--_2PbzFk.js → ColorPicker-B4ArSUhy.js} +3 -3
  8. package/dist/{CommentsSidebar-Ci2Ov8FG.js → CommentsSidebar-Bm5GLDts.js} +4 -4
  9. package/dist/{CountdownBlock-aZIKfBWY.js → CountdownBlock-CIVAQDVu.js} +1 -1
  10. package/dist/{CountdownToolbar-DHp6T0Q_.js → CountdownToolbar-DBmb3tlb.js} +3 -3
  11. package/dist/{DesignReferenceSidebar-DQsC-3hB.js → DesignReferenceSidebar-CnyJ8L-j.js} +3 -3
  12. package/dist/{IssuesPanel-CoOfib44.js → IssuesPanel-D3XgmYCt.js} +2 -2
  13. package/dist/{MergeTagModeToggle-CiFiSV0C.js → MergeTagModeToggle-BK0fI3P2.js} +3 -3
  14. package/dist/{NumberWithSuffix-CXFbUqsx.js → NumberWithSuffix-Cjj9UNIp.js} +1 -1
  15. package/dist/{ParagraphEditor-Cy-bpEjI.js → ParagraphEditor-jGnbJEA2.js} +8 -8
  16. package/dist/{RichTextEditorContent-CYJko6id.js → RichTextEditorContent-DaaKdzjb.js} +4 -4
  17. package/dist/{SaveBlockDialog-CNTSaMEa.js → SaveBlockDialog-B3ngEldp.js} +7 -7
  18. package/dist/{SavedBlocksBrowserModal-CvxS5-YX.js → SavedBlocksBrowserModal-DawN3XaB.js} +6 -6
  19. package/dist/{SavedBlocksPanels-CNdUxS89.js → SavedBlocksPanels-eDC9Y46N.js} +1 -1
  20. package/dist/{SavedBlocksPickBar-BvXKhblL.js → SavedBlocksPickBar-CQbbXmzj.js} +2 -2
  21. package/dist/{SnapshotHistory-BqPSIV9L.js → SnapshotHistory-COxKtHM-.js} +4 -4
  22. package/dist/{TemplateScoringPanel-CMEuz9yF.js → TemplateScoringPanel-bUuqOO1z.js} +3 -3
  23. package/dist/{TestEmailModal-BDhnnCBx.js → TestEmailModal-CytkbZVQ.js} +87 -56
  24. package/dist/{TestEmailPanel--RwnwLn2.js → TestEmailPanel-CHUY7VZn.js} +1 -1
  25. package/dist/{TitleEditor-F7E_pU9H.js → TitleEditor-aMR1bOyY.js} +7 -7
  26. package/dist/{TplModal-BIiS24Of.js → TplModal-fmYNYdyp.js} +3 -3
  27. package/dist/{blockTypeIcons-C6PnLMp7.js → blockTypeIcons-C6b9rg88.js} +1 -1
  28. package/dist/bundle-stats.json +6 -6
  29. package/dist/{cdn/chunks/ca-CO4nq6TX.js → ca-8Dvbwo50.js} +5 -2
  30. package/dist/cdn/chunks/{AiChatSidebar-UbF3ePzR.js → AiChatSidebar-bkBKpNgE.js} +4 -4
  31. package/dist/cdn/chunks/{AiChatSidebar-UbF3ePzR.js.map → AiChatSidebar-bkBKpNgE.js.map} +1 -1
  32. package/dist/cdn/chunks/{AiFeatureMenu-OIwoJzHG.js → AiFeatureMenu-CI4SYTq2.js} +4 -4
  33. package/dist/cdn/chunks/{AiFeatureMenu-OIwoJzHG.js.map → AiFeatureMenu-CI4SYTq2.js.map} +1 -1
  34. package/dist/cdn/chunks/{BlockIssueBadge-Bd2EuT1C.js → BlockIssueBadge-CRnx8Dv9.js} +3 -3
  35. package/dist/cdn/chunks/{BlockIssueBadge-Bd2EuT1C.js.map → BlockIssueBadge-CRnx8Dv9.js.map} +1 -1
  36. package/dist/cdn/chunks/{BlockPreviewCanvas-C-ut8GkJ.js → BlockPreviewCanvas-CXCWhqbp.js} +11 -7
  37. package/dist/cdn/chunks/BlockPreviewCanvas-CXCWhqbp.js.map +1 -0
  38. package/dist/cdn/chunks/{CloudEditor-D87qsqbZ.js → CloudEditor-D-t7RyDh.js} +62 -60
  39. package/dist/cdn/chunks/CloudEditor-D-t7RyDh.js.map +1 -0
  40. package/dist/cdn/chunks/{CollaboratorBar-Br4RvNrA.js → CollaboratorBar-DcXYo47v.js} +3 -3
  41. package/dist/cdn/chunks/{CollaboratorBar-Br4RvNrA.js.map → CollaboratorBar-DcXYo47v.js.map} +1 -1
  42. package/dist/cdn/chunks/{ColorPicker-B-ymPPtU.js → ColorPicker-_1O7YU2z.js} +4 -4
  43. package/dist/cdn/chunks/{ColorPicker-B-ymPPtU.js.map → ColorPicker-_1O7YU2z.js.map} +1 -1
  44. package/dist/cdn/chunks/{CommentsSidebar-Tv_WTcJv.js → CommentsSidebar-BEgLBYX-.js} +5 -5
  45. package/dist/cdn/chunks/{CommentsSidebar-Tv_WTcJv.js.map → CommentsSidebar-BEgLBYX-.js.map} +1 -1
  46. package/dist/cdn/chunks/{CountdownBlock-cEcXSK91.js → CountdownBlock-CPnQA44g.js} +2 -2
  47. package/dist/cdn/chunks/{CountdownBlock-cEcXSK91.js.map → CountdownBlock-CPnQA44g.js.map} +1 -1
  48. package/dist/cdn/chunks/{CountdownToolbar-CLp3_ebk.js → CountdownToolbar-Cdo-30U4.js} +4 -4
  49. package/dist/cdn/chunks/{CountdownToolbar-CLp3_ebk.js.map → CountdownToolbar-Cdo-30U4.js.map} +1 -1
  50. package/dist/cdn/chunks/{DesignReferenceSidebar-YeqxSsxO.js → DesignReferenceSidebar-DPqBr-ut.js} +4 -4
  51. package/dist/cdn/chunks/{DesignReferenceSidebar-YeqxSsxO.js.map → DesignReferenceSidebar-DPqBr-ut.js.map} +1 -1
  52. package/dist/cdn/chunks/{IssuesPanel-BhsvC3XQ.js → IssuesPanel-DoQWb23r.js} +3 -3
  53. package/dist/cdn/chunks/{IssuesPanel-BhsvC3XQ.js.map → IssuesPanel-DoQWb23r.js.map} +1 -1
  54. package/dist/cdn/chunks/{MergeTagModeToggle-DrdxQA0K.js → MergeTagModeToggle-CWuVC3MU.js} +4 -4
  55. package/dist/cdn/chunks/{MergeTagModeToggle-DrdxQA0K.js.map → MergeTagModeToggle-CWuVC3MU.js.map} +1 -1
  56. package/dist/cdn/chunks/{NumberWithSuffix-BK_Xh4w4.js → NumberWithSuffix-DQ4sgvt5.js} +2 -2
  57. package/dist/cdn/chunks/{NumberWithSuffix-BK_Xh4w4.js.map → NumberWithSuffix-DQ4sgvt5.js.map} +1 -1
  58. package/dist/cdn/chunks/{ParagraphEditor-DKz4vTWB.js → ParagraphEditor-Uv5LPF3W.js} +9 -9
  59. package/dist/cdn/chunks/{ParagraphEditor-DKz4vTWB.js.map → ParagraphEditor-Uv5LPF3W.js.map} +1 -1
  60. package/dist/cdn/chunks/{RichTextEditorContent-CJ2WVicQ.js → RichTextEditorContent-Bt3s09qY.js} +5 -5
  61. package/dist/cdn/chunks/{RichTextEditorContent-CJ2WVicQ.js.map → RichTextEditorContent-Bt3s09qY.js.map} +1 -1
  62. package/dist/cdn/chunks/{SaveBlockDialog-DTemkKPX.js → SaveBlockDialog-BAew6EFd.js} +8 -8
  63. package/dist/cdn/chunks/{SaveBlockDialog-DTemkKPX.js.map → SaveBlockDialog-BAew6EFd.js.map} +1 -1
  64. package/dist/cdn/chunks/{SavedBlocksBrowserModal-DbMaIbeH.js → SavedBlocksBrowserModal-Dn4IJDJW.js} +6 -6
  65. package/dist/cdn/chunks/{SavedBlocksBrowserModal-DbMaIbeH.js.map → SavedBlocksBrowserModal-Dn4IJDJW.js.map} +1 -1
  66. package/dist/cdn/chunks/{SavedBlocksPanels-CUffuDAC.js → SavedBlocksPanels-B62U5DYW.js} +2 -2
  67. package/dist/cdn/chunks/{SavedBlocksPanels-CUffuDAC.js.map → SavedBlocksPanels-B62U5DYW.js.map} +1 -1
  68. package/dist/cdn/chunks/{SavedBlocksPickBar-D7SmNz2n.js → SavedBlocksPickBar-CyRKZg2T.js} +3 -3
  69. package/dist/cdn/chunks/{SavedBlocksPickBar-D7SmNz2n.js.map → SavedBlocksPickBar-CyRKZg2T.js.map} +1 -1
  70. package/dist/cdn/chunks/{SnapshotHistory-m5Z8bTej.js → SnapshotHistory-QQt0DKey.js} +4 -4
  71. package/dist/cdn/chunks/{SnapshotHistory-m5Z8bTej.js.map → SnapshotHistory-QQt0DKey.js.map} +1 -1
  72. package/dist/cdn/chunks/{TemplateScoringPanel-DgRU5fty.js → TemplateScoringPanel-BwyCMcit.js} +65 -65
  73. package/dist/cdn/chunks/{TemplateScoringPanel-DgRU5fty.js.map → TemplateScoringPanel-BwyCMcit.js.map} +1 -1
  74. package/dist/cdn/chunks/{TestEmailModal-Ce8-vzGh.js → TestEmailModal-B5UQkDJp.js} +89 -58
  75. package/dist/cdn/chunks/TestEmailModal-B5UQkDJp.js.map +1 -0
  76. package/dist/cdn/chunks/{TestEmailPanel-BlmIKKSL.js → TestEmailPanel-CvuBq4RA.js} +2 -2
  77. package/dist/cdn/chunks/{TestEmailPanel-BlmIKKSL.js.map → TestEmailPanel-CvuBq4RA.js.map} +1 -1
  78. package/dist/cdn/chunks/{TitleEditor-C6_bQxYR.js → TitleEditor-B9W954u9.js} +8 -8
  79. package/dist/cdn/chunks/{TitleEditor-C6_bQxYR.js.map → TitleEditor-B9W954u9.js.map} +1 -1
  80. package/dist/cdn/chunks/{TplModal-D6bFON2K.js → TplModal-B8UsvWc8.js} +4 -4
  81. package/dist/cdn/chunks/{TplModal-D6bFON2K.js.map → TplModal-B8UsvWc8.js.map} +1 -1
  82. package/dist/{ca-CO4nq6TX.js → cdn/chunks/ca-8Dvbwo50.js} +7 -0
  83. package/dist/cdn/chunks/{ca-CO4nq6TX.js.map → ca-8Dvbwo50.js.map} +1 -1
  84. package/dist/cdn/chunks/{cloud-CRlDc0Ev.js → cloud-DOaGUdR0.js} +2 -2
  85. package/dist/cdn/chunks/{cloud-CRlDc0Ev.js.map → cloud-DOaGUdR0.js.map} +1 -1
  86. package/dist/{de-CUeaFJph.js → cdn/chunks/de-CieSMCUp.js} +7 -0
  87. package/dist/cdn/chunks/{de-CUeaFJph.js.map → de-CieSMCUp.js.map} +1 -1
  88. package/dist/{en-zCYIPAL5.js → cdn/chunks/en-D0t_2Fq_.js} +7 -0
  89. package/dist/cdn/chunks/{en-zCYIPAL5.js.map → en-D0t_2Fq_.js.map} +1 -1
  90. package/dist/cdn/chunks/{es-BSiH7YkP.js → es-DwDoNuLM.js} +6 -1
  91. package/dist/cdn/chunks/{es-BSiH7YkP.js.map → es-DwDoNuLM.js.map} +1 -1
  92. package/dist/cdn/chunks/{extensions-CKMD_er_.js → extensions-5jgtarD-.js} +19 -19
  93. package/dist/cdn/chunks/{extensions-CKMD_er_.js.map → extensions-5jgtarD-.js.map} +1 -1
  94. package/dist/{fr-DTVJ3det.js → cdn/chunks/fr-CSEEzv1_.js} +7 -0
  95. package/dist/cdn/chunks/{fr-DTVJ3det.js.map → fr-CSEEzv1_.js.map} +1 -1
  96. package/dist/cdn/chunks/keys-BxPCfHBH.js +12 -0
  97. package/dist/cdn/chunks/keys-BxPCfHBH.js.map +1 -0
  98. package/dist/{nl-BqSquFS3.js → cdn/chunks/nl-xyk1T2mA.js} +7 -0
  99. package/dist/cdn/chunks/{nl-BqSquFS3.js.map → nl-xyk1T2mA.js.map} +1 -1
  100. package/dist/{pt-BR-CMljK37h.js → cdn/chunks/pt-BR-yr6uOJgn.js} +7 -0
  101. package/dist/cdn/chunks/{pt-BR-CMljK37h.js.map → pt-BR-yr6uOJgn.js.map} +1 -1
  102. package/dist/cdn/chunks/{src-B4UhYbI8.js → src-B8W42vT-.js} +152 -152
  103. package/dist/cdn/chunks/{src-B4UhYbI8.js.map → src-B8W42vT-.js.map} +1 -1
  104. package/dist/cdn/chunks/{src-B3HKHglu.js → src-C417zeUg.js} +20 -20
  105. package/dist/cdn/chunks/{src-B3HKHglu.js.map → src-C417zeUg.js.map} +1 -1
  106. package/dist/cdn/chunks/{src-D5mfLR4V.js → src-CZjSXPYq.js} +8 -3
  107. package/dist/cdn/chunks/src-CZjSXPYq.js.map +1 -0
  108. package/dist/cdn/chunks/{src-CumZZNXZ.js → src-Dpj0x27M.js} +2 -2
  109. package/dist/cdn/chunks/{src-CumZZNXZ.js.map → src-Dpj0x27M.js.map} +1 -1
  110. package/dist/cdn/chunks/{styles--m9OCb_Z.js → styles-DANwMzW2.js} +743 -724
  111. package/dist/cdn/chunks/styles-DANwMzW2.js.map +1 -0
  112. package/dist/cdn/chunks/{useCloudI18n-sx1pqEbY.js → useCloudI18n-CjVzv11v.js} +2 -2
  113. package/dist/cdn/chunks/{useCloudI18n-sx1pqEbY.js.map → useCloudI18n-CjVzv11v.js.map} +1 -1
  114. package/dist/cdn/chunks/{useEditorCore-ZqF7P99K.js → useEditorCore-DfW-thCr.js} +472 -401
  115. package/dist/cdn/chunks/useEditorCore-DfW-thCr.js.map +1 -0
  116. package/dist/cdn/chunks/{useI18n-vD57BfVR.js → useI18n-DniEFeIl.js} +2 -2
  117. package/dist/cdn/chunks/{useI18n-vD57BfVR.js.map → useI18n-DniEFeIl.js.map} +1 -1
  118. package/dist/cdn/chunks/{useMergeTag-HatzNGgc.js → useMergeTag-Bk9_f5cc.js} +6 -6
  119. package/dist/cdn/chunks/{useMergeTag-HatzNGgc.js.map → useMergeTag-Bk9_f5cc.js.map} +1 -1
  120. package/dist/cdn/chunks/{usePopoverPosition-BdQ3Sv4B.js → usePopoverPosition-C4xFJCJ2.js} +2 -2
  121. package/dist/cdn/chunks/{usePopoverPosition-BdQ3Sv4B.js.map → usePopoverPosition-C4xFJCJ2.js.map} +1 -1
  122. package/dist/cdn/editor.css +1 -1
  123. package/dist/cdn/editor.js +21 -19
  124. package/dist/cdn/editor.js.map +1 -1
  125. package/dist/{cloud-R8ci6yR1.js → cloud-BZn3jqoL.js} +1 -1
  126. package/dist/{cdn/chunks/de-CUeaFJph.js → de-CieSMCUp.js} +5 -2
  127. package/dist/{dist-Ba5Q-UX1.js → dist-CQ0fVBQ3.js} +7 -2
  128. package/dist/{cdn/chunks/en-zCYIPAL5.js → en-D0t_2Fq_.js} +5 -2
  129. package/dist/{es-BSiH7YkP.js → es-DwDoNuLM.js} +5 -0
  130. package/dist/{extensions-CGxj6-2o.js → extensions-BjvyU9Ea.js} +3 -3
  131. package/dist/{cdn/chunks/fr-DTVJ3det.js → fr-CSEEzv1_.js} +5 -2
  132. package/dist/index.d.ts +26 -0
  133. package/dist/keys-BFPiNAIn.js +10 -0
  134. package/dist/{cdn/chunks/nl-BqSquFS3.js → nl-xyk1T2mA.js} +5 -2
  135. package/dist/{cdn/chunks/pt-BR-CMljK37h.js → pt-BR-yr6uOJgn.js} +5 -2
  136. package/dist/style.css +1 -1
  137. package/dist/{styles-C9AMvkJk.js → styles-C9GM-bBC.js} +885 -866
  138. package/dist/templatical-editor.js +93 -91
  139. package/dist/{useCloudI18n-BC_QV2Z7.js → useCloudI18n-B2lItQ6O.js} +1 -1
  140. package/dist/{useEditorCore-Dojb-P2f.js → useEditorCore-Ck_hBiGA.js} +908 -837
  141. package/dist/{useI18n-DzOcl2wl.js → useI18n-C1KcdX_K.js} +1 -1
  142. package/dist/{useMergeTag-BFxXCv3p.js → useMergeTag-DHCwRMfH.js} +3 -3
  143. package/dist/{usePopoverPosition-Dtr1Mp1x.js → usePopoverPosition-ClnEh_Cp.js} +1 -1
  144. package/package.json +7 -7
  145. package/dist/cdn/chunks/BlockPreviewCanvas-C-ut8GkJ.js.map +0 -1
  146. package/dist/cdn/chunks/CloudEditor-D87qsqbZ.js.map +0 -1
  147. package/dist/cdn/chunks/TestEmailModal-Ce8-vzGh.js.map +0 -1
  148. package/dist/cdn/chunks/keys-CswSK7eb.js +0 -12
  149. package/dist/cdn/chunks/keys-CswSK7eb.js.map +0 -1
  150. package/dist/cdn/chunks/src-D5mfLR4V.js.map +0 -1
  151. package/dist/cdn/chunks/styles--m9OCb_Z.js.map +0 -1
  152. package/dist/cdn/chunks/useEditorCore-ZqF7P99K.js.map +0 -1
  153. package/dist/keys-uWpGv4Pq.js +0 -10
@@ -1,5 +1,5 @@
1
1
  import { K as e, T as t } from "./draggable-JcMTNF3U.js";
2
- import { c as n } from "./keys-CswSK7eb.js";
2
+ import { l as n } from "./keys-BxPCfHBH.js";
3
3
  //#region src/composables/useCloudI18n.ts
4
4
  function r(e, t) {
5
5
  return e.replace(/\{(\w+)\}/g, (e, n) => n in t ? String(t[n]) : `{${n}}`);
@@ -22,4 +22,4 @@ function a(e) {
22
22
  //#endregion
23
23
  export { a as n, i as t };
24
24
 
25
- //# sourceMappingURL=useCloudI18n-sx1pqEbY.js.map
25
+ //# sourceMappingURL=useCloudI18n-CjVzv11v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCloudI18n-sx1pqEbY.js","names":[],"sources":["../../../src/composables/useCloudI18n.ts"],"sourcesContent":["import type { CloudTranslations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\nimport { CLOUD_TRANSLATIONS_KEY } from \"../keys\";\n\nexport interface UseCloudI18nReturn {\n /** Cloud translations, or null when running in OSS mode (no cloud chunk loaded). */\n t: CloudTranslations | null;\n /** Format a string with placeholders. */\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\nexport interface UseCloudI18nStrictReturn {\n t: CloudTranslations;\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\nfunction format(\n template: string,\n values: Record<string, string | number>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n return key in values ? String(values[key]) : `{${key}}`;\n });\n}\n\n/**\n * Composable for cloud-only translations.\n * Returns `t: null` when no cloud chunk is provided (OSS mode), so shared\n * components can guard with `v-if=\"cloudT\"` and render the cloud branch only\n * when both the cloud capability and its translations are available.\n *\n * For cloud-only components that always have cloud translations available,\n * use `useCloudI18nStrict()` to get a non-null type.\n */\nexport function useCloudI18n(\n translationsOverride?: CloudTranslations,\n): UseCloudI18nReturn {\n const injected =\n translationsOverride ??\n (inject(CLOUD_TRANSLATIONS_KEY, null) as\n CloudTranslations | Ref<CloudTranslations> | null);\n\n const t: CloudTranslations | null = injected\n ? isRef(injected)\n ? injected.value\n : injected\n : null;\n\n return { t, format };\n}\n\n/**\n * Strict variant of `useCloudI18n()` for cloud-only components.\n * Throws if cloud translations were not provided.\n */\nexport function useCloudI18nStrict(\n translationsOverride?: CloudTranslations,\n): UseCloudI18nStrictReturn {\n const { t, format: f } = useCloudI18n(translationsOverride);\n if (!t) {\n throw new Error(\n \"useCloudI18nStrict() requires a cloud translations provider. Ensure the component is a descendant of CloudEditor.\",\n );\n }\n return { t, format: f };\n}\n"],"mappings":";;;AAgBA,SAAS,EACP,GACA,GACQ;CACR,OAAO,EAAS,QAAQ,eAAe,GAAG,MACjC,KAAO,IAAS,OAAO,EAAO,EAAI,IAAI,IAAI,EAAI,EACtD;AACH;AAWA,SAAgB,EACd,GACoB;CACpB,IAAM,IACJ,KACC,EAAO,GAAwB,IAAI;CAStC,OAAO;EAAE,GAN2B,IAChC,EAAM,CAAQ,IACZ,EAAS,QACT,IACF;EAEQ;CAAO;AACrB;AAMA,SAAgB,EACd,GAC0B;CAC1B,IAAM,EAAE,GAAG,QAAQ,MAAM,EAAa,CAAoB;CAC1D,IAAI,CAAC,GACH,MAAU,MACR,mHACF;CAEF,OAAO;EAAE;EAAG,QAAQ;CAAE;AACxB"}
1
+ {"version":3,"file":"useCloudI18n-CjVzv11v.js","names":[],"sources":["../../../src/composables/useCloudI18n.ts"],"sourcesContent":["import type { CloudTranslations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\nimport { CLOUD_TRANSLATIONS_KEY } from \"../keys\";\n\nexport interface UseCloudI18nReturn {\n /** Cloud translations, or null when running in OSS mode (no cloud chunk loaded). */\n t: CloudTranslations | null;\n /** Format a string with placeholders. */\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\nexport interface UseCloudI18nStrictReturn {\n t: CloudTranslations;\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\nfunction format(\n template: string,\n values: Record<string, string | number>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n return key in values ? String(values[key]) : `{${key}}`;\n });\n}\n\n/**\n * Composable for cloud-only translations.\n * Returns `t: null` when no cloud chunk is provided (OSS mode), so shared\n * components can guard with `v-if=\"cloudT\"` and render the cloud branch only\n * when both the cloud capability and its translations are available.\n *\n * For cloud-only components that always have cloud translations available,\n * use `useCloudI18nStrict()` to get a non-null type.\n */\nexport function useCloudI18n(\n translationsOverride?: CloudTranslations,\n): UseCloudI18nReturn {\n const injected =\n translationsOverride ??\n (inject(CLOUD_TRANSLATIONS_KEY, null) as\n CloudTranslations | Ref<CloudTranslations> | null);\n\n const t: CloudTranslations | null = injected\n ? isRef(injected)\n ? injected.value\n : injected\n : null;\n\n return { t, format };\n}\n\n/**\n * Strict variant of `useCloudI18n()` for cloud-only components.\n * Throws if cloud translations were not provided.\n */\nexport function useCloudI18nStrict(\n translationsOverride?: CloudTranslations,\n): UseCloudI18nStrictReturn {\n const { t, format: f } = useCloudI18n(translationsOverride);\n if (!t) {\n throw new Error(\n \"useCloudI18nStrict() requires a cloud translations provider. Ensure the component is a descendant of CloudEditor.\",\n );\n }\n return { t, format: f };\n}\n"],"mappings":";;;AAgBA,SAAS,EACP,GACA,GACQ;CACR,OAAO,EAAS,QAAQ,eAAe,GAAG,MACjC,KAAO,IAAS,OAAO,EAAO,EAAI,IAAI,IAAI,EAAI,EACtD;AACH;AAWA,SAAgB,EACd,GACoB;CACpB,IAAM,IACJ,KACC,EAAO,GAAwB,IAAI;CAStC,OAAO;EAAE,GAN2B,IAChC,EAAM,CAAQ,IACZ,EAAS,QACT,IACF;EAEQ;CAAO;AACrB;AAMA,SAAgB,EACd,GAC0B;CAC1B,IAAM,EAAE,GAAG,QAAQ,MAAM,EAAa,CAAoB;CAC1D,IAAI,CAAC,GACH,MAAU,MACR,mHACF;CAEF,OAAO;EAAE;EAAG,QAAQ;CAAE;AACxB"}