@templatical/editor 0.27.4 → 0.27.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AiFeatureMenu-DVQrznsN.js → AiFeatureMenu-YE9qqElA.js} +1 -1
- package/dist/{BlockPreviewCanvas-D9eC04OA.js → BlockPreviewCanvas-CF7r-mw4.js} +1 -1
- package/dist/{CloudHeaderExtras-DX0j3CJ3.js → CloudHeaderExtras-msYo6uhq.js} +4 -4
- package/dist/{CollaboratorBar-BZ-JCjdM.js → CollaboratorBar-D1Tx8cds.js} +1 -1
- package/dist/{ColorPicker-j0TQu5lE.js → ColorPicker-BNfy9BdG.js} +1 -1
- package/dist/{CountdownToolbar-UPdwNvVI.js → CountdownToolbar-D-o_hwsO.js} +3 -3
- package/dist/{MergeTagSuggestion-DGha0WRp.js → MergeTagSuggestion-DflUPfkT.js} +2 -2
- package/dist/{NumberWithSuffix-D9mPtMJB.js → NumberWithSuffix-DZAktKby.js} +1 -1
- package/dist/{ParagraphEditor-C9-jQ5zP.js → ParagraphEditor-CoN76ofC.js} +16 -16
- package/dist/{RestoreVersionDialog-Ds6gEF5u.js → RestoreVersionDialog-DUXGp-Nw.js} +2 -2
- package/dist/{RichTextEditorContent-CO1se6ln.js → RichTextEditorContent-DxicfnPf.js} +1 -1
- package/dist/{SaveBlockDialog-DJIcncsU.js → SaveBlockDialog-D0B9SKf9.js} +13 -13
- package/dist/{SavedBlocksBrowserModal-BUhhkGEb.js → SavedBlocksBrowserModal-vdci8i18.js} +5 -5
- package/dist/{SavedBlocksPanels-DBfPz4iB.js → SavedBlocksPanels-CTmlYwIT.js} +1 -1
- package/dist/{SavedBlocksPickBar-D9NsfzCB.js → SavedBlocksPickBar-DMtV1UKQ.js} +1 -1
- package/dist/{TestEmailModal-DARwBqpV.js → TestEmailModal-4pHgNCmg.js} +4 -4
- package/dist/{TestEmailPanel-BkgAew1S.js → TestEmailPanel-kp84Z0hs.js} +1 -1
- package/dist/{TitleEditor-BWLwZh84.js → TitleEditor-BdRlIm67.js} +6 -6
- package/dist/{TplModal-CJLs8as_.js → TplModal-CUV1Sd-2.js} +1 -1
- package/dist/{VersionHistoryPanels-s45U7XY-.js → VersionHistoryPanels-dyV9JP5G.js} +1 -1
- package/dist/{VersionPreviewBanner-BIy95B34.js → VersionPreviewBanner-Bb1cnMZ3.js} +1 -1
- package/dist/{blockTypeIcons-BjUkQsAe.js → blockTypeIcons-B13kXe55.js} +1 -1
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{AiFeatureMenu-BhtNkpIq.js → AiFeatureMenu-CS62uVuh.js} +2 -2
- package/dist/cdn/chunks/{AiFeatureMenu-BhtNkpIq.js.map → AiFeatureMenu-CS62uVuh.js.map} +1 -1
- package/dist/cdn/chunks/{BlockPreviewCanvas-Bt7fFzIQ.js → BlockPreviewCanvas-DcCqg909.js} +2 -2
- package/dist/cdn/chunks/{BlockPreviewCanvas-Bt7fFzIQ.js.map → BlockPreviewCanvas-DcCqg909.js.map} +1 -1
- package/dist/cdn/chunks/{CloudHeaderExtras-CScGpeLl.js → CloudHeaderExtras-d_8bZemh.js} +5 -5
- package/dist/cdn/chunks/CloudHeaderExtras-d_8bZemh.js.map +1 -0
- package/dist/cdn/chunks/{CollaboratorBar-BH1lM_Ta.js → CollaboratorBar-CpHDWa9D.js} +2 -2
- package/dist/cdn/chunks/{CollaboratorBar-BH1lM_Ta.js.map → CollaboratorBar-CpHDWa9D.js.map} +1 -1
- package/dist/cdn/chunks/{ColorPicker-d4kY7WWd.js → ColorPicker-QPBbkWAs.js} +2 -2
- package/dist/cdn/chunks/{ColorPicker-d4kY7WWd.js.map → ColorPicker-QPBbkWAs.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownToolbar-BRDbI1mM.js → CountdownToolbar-CMJVzd97.js} +4 -4
- package/dist/cdn/chunks/{CountdownToolbar-BRDbI1mM.js.map → CountdownToolbar-CMJVzd97.js.map} +1 -1
- package/dist/cdn/chunks/{MergeTagSuggestion-DhllqTA3.js → MergeTagSuggestion-Df7jcLpS.js} +2 -2
- package/dist/cdn/chunks/{MergeTagSuggestion-DhllqTA3.js.map → MergeTagSuggestion-Df7jcLpS.js.map} +1 -1
- package/dist/cdn/chunks/{NumberWithSuffix-mm6AfIv4.js → NumberWithSuffix-DNBrbl4H.js} +2 -2
- package/dist/cdn/chunks/{NumberWithSuffix-mm6AfIv4.js.map → NumberWithSuffix-DNBrbl4H.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-BgeeE0Gj.js → ParagraphEditor-CbP_rcqb.js} +17 -17
- package/dist/cdn/chunks/{ParagraphEditor-BgeeE0Gj.js.map → ParagraphEditor-CbP_rcqb.js.map} +1 -1
- package/dist/cdn/chunks/{RestoreVersionDialog-tfoAQAeP.js → RestoreVersionDialog-DYI-M27i.js} +3 -3
- package/dist/cdn/chunks/{RestoreVersionDialog-tfoAQAeP.js.map → RestoreVersionDialog-DYI-M27i.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-DvLBtUcW.js → RichTextEditorContent-C-kbbKaq.js} +2 -2
- package/dist/cdn/chunks/{RichTextEditorContent-DvLBtUcW.js.map → RichTextEditorContent-C-kbbKaq.js.map} +1 -1
- package/dist/cdn/chunks/{SaveBlockDialog-D67K2lHn.js → SaveBlockDialog-BBwDyRpC.js} +14 -14
- package/dist/cdn/chunks/{SaveBlockDialog-D67K2lHn.js.map → SaveBlockDialog-BBwDyRpC.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-BxVR-yDt.js → SavedBlocksBrowserModal-B_zqSoWl.js} +5 -5
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-BxVR-yDt.js.map → SavedBlocksBrowserModal-B_zqSoWl.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPanels-VkKCO0uY.js → SavedBlocksPanels-B_XNxwzs.js} +2 -2
- package/dist/cdn/chunks/{SavedBlocksPanels-VkKCO0uY.js.map → SavedBlocksPanels-B_XNxwzs.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPickBar-BJHQDgUT.js → SavedBlocksPickBar-C3BP5941.js} +2 -2
- package/dist/cdn/chunks/{SavedBlocksPickBar-BJHQDgUT.js.map → SavedBlocksPickBar-C3BP5941.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailModal-CEBFCevy.js → TestEmailModal-CnoOTm5c.js} +5 -5
- package/dist/cdn/chunks/{TestEmailModal-CEBFCevy.js.map → TestEmailModal-CnoOTm5c.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailPanel-C35nqIIl.js → TestEmailPanel-BcvY4bL7.js} +2 -2
- package/dist/cdn/chunks/{TestEmailPanel-C35nqIIl.js.map → TestEmailPanel-BcvY4bL7.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-c2aQCyds.js → TitleEditor-5Ytpa9n2.js} +7 -7
- package/dist/cdn/chunks/{TitleEditor-c2aQCyds.js.map → TitleEditor-5Ytpa9n2.js.map} +1 -1
- package/dist/cdn/chunks/{TplModal-DSTVZKuI.js → TplModal-pGADKFOL.js} +2 -2
- package/dist/cdn/chunks/{TplModal-DSTVZKuI.js.map → TplModal-pGADKFOL.js.map} +1 -1
- package/dist/cdn/chunks/{VersionHistoryPanels-CvWySHUE.js → VersionHistoryPanels-CSryv5rE.js} +2 -2
- package/dist/cdn/chunks/{VersionHistoryPanels-CvWySHUE.js.map → VersionHistoryPanels-CSryv5rE.js.map} +1 -1
- package/dist/cdn/chunks/{VersionPreviewBanner-CBVDWnhq.js → VersionPreviewBanner-C4mr6y2u.js} +2 -2
- package/dist/cdn/chunks/{VersionPreviewBanner-CBVDWnhq.js.map → VersionPreviewBanner-C4mr6y2u.js.map} +1 -1
- package/dist/cdn/chunks/{extensions-Byo2sA1r.js → extensions-P0lpi6k8.js} +3 -3
- package/dist/cdn/chunks/{extensions-Byo2sA1r.js.map → extensions-P0lpi6k8.js.map} +1 -1
- package/dist/cdn/chunks/{src-BAWlZu4B.js → src-DNhD7a2v.js} +2 -2
- package/dist/cdn/chunks/{src-BAWlZu4B.js.map → src-DNhD7a2v.js.map} +1 -1
- package/dist/cdn/chunks/{styleConstants-9oK5kn21.js → styleConstants-C_YAPdQS.js} +8 -8
- package/dist/cdn/chunks/{styleConstants-9oK5kn21.js.map → styleConstants-C_YAPdQS.js.map} +1 -1
- package/dist/cdn/chunks/{tiptap-DmpGap5g.js → tiptap-DWeSx_P8.js} +1012 -987
- package/dist/cdn/chunks/tiptap-DWeSx_P8.js.map +1 -0
- package/dist/cdn/chunks/{useEditorCore-D84laTMj.js → useEditorCore-DTpSiO4S.js} +3 -3
- package/dist/cdn/chunks/{useEditorCore-D84laTMj.js.map → useEditorCore-DTpSiO4S.js.map} +1 -1
- package/dist/cdn/editor.css +1 -1
- package/dist/cdn/editor.js +776 -780
- package/dist/cdn/editor.js.map +1 -1
- package/dist/{dist-Ck9roB6K.js → dist-BLVvhIFj.js} +2 -2
- package/dist/{dist-DMJRSouD.js → dist-C145btxT.js} +255 -250
- package/dist/{dist-C27SeFL5.js → dist-CLc1cpN2.js} +2 -2
- package/dist/{dist-M7m1lYRe.js → dist-CQQNoHxz.js} +2 -2
- package/dist/{dist-g6cbzhZW.js → dist-CclsUQ7r.js} +2 -2
- package/dist/{dist-CYx-E82k.js → dist-CgXIMxZc.js} +2 -2
- package/dist/dist-D-ulkdvF.js +5 -0
- package/dist/{dist-BImfm-46.js → dist-D4Jb08yv.js} +2 -2
- package/dist/{dist-ChYLhoJ4.js → dist-DUn6jY0n.js} +35 -18
- package/dist/{dist-DfpeSdmE.js → dist-Dx-KOuOj.js} +2 -2
- package/dist/{dist-C08jiemd.js → dist-Dz7KUOSg.js} +2 -2
- package/dist/dist-Kf9u4ULN.js +5 -0
- package/dist/{extensions-BV9qfsYr.js → extensions-DWp4eXoE.js} +3 -3
- package/dist/style.css +1 -1
- package/dist/{styleConstants-9oK5kn21.js → styleConstants-C_YAPdQS.js} +7 -7
- package/dist/templatical-editor.js +939 -943
- package/dist/{useEditorCore-D7Gz7_CW.js → useEditorCore--_kmTxxX.js} +2 -2
- package/package.json +20 -20
- package/dist/cdn/chunks/CloudHeaderExtras-CScGpeLl.js.map +0 -1
- package/dist/cdn/chunks/tiptap-DmpGap5g.js.map +0 -1
- package/dist/dist-6YJAWMuf.js +0 -5
- package/dist/dist-8vlm9kfO.js +0 -5
|
@@ -2677,7 +2677,7 @@ var wi = ["innerHTML"], Ti = /* @__PURE__ */ L({
|
|
|
2677
2677
|
viewport: {}
|
|
2678
2678
|
},
|
|
2679
2679
|
setup(e) {
|
|
2680
|
-
let t = e, n = y(() => import("./ParagraphEditor-
|
|
2680
|
+
let t = e, n = y(() => import("./ParagraphEditor-CoN76ofC.js")), { isEditing: r, blockRef: i, toolbarPosition: a, resolvedContent: o, handleDoubleClick: s, handleEditorDone: c } = Ci(() => t.block.content);
|
|
2681
2681
|
return (t, l) => (O(), S("div", {
|
|
2682
2682
|
ref_key: "blockRef",
|
|
2683
2683
|
ref: i,
|
|
@@ -2917,7 +2917,7 @@ var Wi = /* @__PURE__ */ L({
|
|
|
2917
2917
|
viewport: {}
|
|
2918
2918
|
},
|
|
2919
2919
|
setup(e) {
|
|
2920
|
-
let t = e, n = y(() => import("./TitleEditor-
|
|
2920
|
+
let t = e, n = y(() => import("./TitleEditor-BdRlIm67.js")), { isEditing: r, blockRef: i, toolbarPosition: a, resolvedContent: o, handleDoubleClick: s, handleEditorDone: c } = Ci(() => t.block.content), l = F(() => {
|
|
2921
2921
|
let e = {
|
|
2922
2922
|
fontSize: `${Ie[t.block.level]}px`,
|
|
2923
2923
|
textAlign: t.block.textAlign
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@templatical/editor",
|
|
3
3
|
"description": "Vue 3 visual drag-and-drop email editor powered by Templatical",
|
|
4
|
-
"version": "0.27.
|
|
4
|
+
"version": "0.27.5",
|
|
5
5
|
"bugs": "https://github.com/templatical/sdk/issues",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@lucide/vue": "^1.32.0",
|
|
8
|
-
"@tiptap/core": "^3.30.
|
|
9
|
-
"@tiptap/extension-color": "^3.30.
|
|
10
|
-
"@tiptap/extension-font-family": "^3.30.
|
|
11
|
-
"@tiptap/extension-highlight": "^3.30.
|
|
12
|
-
"@tiptap/extension-link": "^3.30.
|
|
13
|
-
"@tiptap/extension-subscript": "^3.30.
|
|
14
|
-
"@tiptap/extension-superscript": "^3.30.
|
|
15
|
-
"@tiptap/extension-text-align": "^3.30.
|
|
16
|
-
"@tiptap/extension-text-style": "^3.30.
|
|
17
|
-
"@tiptap/extension-underline": "^3.30.
|
|
18
|
-
"@tiptap/starter-kit": "^3.30.
|
|
19
|
-
"@tiptap/suggestion": "^3.30.
|
|
20
|
-
"@tiptap/vue-3": "^3.30.
|
|
8
|
+
"@tiptap/core": "^3.30.2",
|
|
9
|
+
"@tiptap/extension-color": "^3.30.2",
|
|
10
|
+
"@tiptap/extension-font-family": "^3.30.2",
|
|
11
|
+
"@tiptap/extension-highlight": "^3.30.2",
|
|
12
|
+
"@tiptap/extension-link": "^3.30.2",
|
|
13
|
+
"@tiptap/extension-subscript": "^3.30.2",
|
|
14
|
+
"@tiptap/extension-superscript": "^3.30.2",
|
|
15
|
+
"@tiptap/extension-text-align": "^3.30.2",
|
|
16
|
+
"@tiptap/extension-text-style": "^3.30.2",
|
|
17
|
+
"@tiptap/extension-underline": "^3.30.2",
|
|
18
|
+
"@tiptap/starter-kit": "^3.30.2",
|
|
19
|
+
"@tiptap/suggestion": "^3.30.2",
|
|
20
|
+
"@tiptap/vue-3": "^3.30.2",
|
|
21
21
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
22
22
|
"@vue/test-utils": "^2.4.11",
|
|
23
23
|
"@vueuse/core": "^14.4.0",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"vue": "^3.5.41",
|
|
34
34
|
"vue-draggable-plus": "^0.6.1",
|
|
35
35
|
"vue-tsc": "^3.3.10",
|
|
36
|
-
"@templatical/core": "0.27.
|
|
37
|
-
"@templatical/
|
|
38
|
-
"@templatical/
|
|
36
|
+
"@templatical/core": "0.27.5",
|
|
37
|
+
"@templatical/types": "0.27.5",
|
|
38
|
+
"@templatical/quality": "0.27.5"
|
|
39
39
|
},
|
|
40
40
|
"exports": {
|
|
41
41
|
".": {
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
"license": "SEE LICENSE IN LICENSE",
|
|
64
64
|
"module": "./dist/templatical-editor.js",
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"@templatical/media-library": "0.27.
|
|
67
|
-
"@templatical/quality": "0.27.
|
|
68
|
-
"@templatical/renderer": "0.27.
|
|
66
|
+
"@templatical/media-library": "0.27.5",
|
|
67
|
+
"@templatical/quality": "0.27.5",
|
|
68
|
+
"@templatical/renderer": "0.27.5"
|
|
69
69
|
},
|
|
70
70
|
"peerDependenciesMeta": {
|
|
71
71
|
"@templatical/renderer": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CloudHeaderExtras-CScGpeLl.js","names":[],"sources":["../../../src/cloud/components/CloudHeaderExtras.vue","../../../src/cloud/components/CloudHeaderExtras.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { defineAsyncComponent } from \"vue\";\nimport { Sparkles } from \"@lucide/vue\";\n\nimport { useCloudI18nStrict } from \"../../composables/useCloudI18n\";\nimport type { CloudAttachment } from \"../runtime\";\n\nconst CollaboratorBar = defineAsyncComponent(\n () => import(\"./CollaboratorBar.vue\"),\n);\nconst AiFeatureMenu = defineAsyncComponent(() => import(\"./AiFeatureMenu.vue\"));\n\n/**\n * The Cloud-only header controls, filled into `EditorHeader`'s three\n * `*-extras` slots.\n *\n * One component with a `part` prop rather than three: the three regions share\n * this file's lazy chunk, so a Cloud session pays one round-trip for all of them\n * and an OSS session pays none.\n *\n * The plan-usage readout and the AI button live here rather than in the shared\n * header because they render **cloud-chunk** strings; OSS translators never see\n * them. Comments are deliberately not here: that feature is shared and\n * provider-backed, so its trigger and its strings belong to the shared header and\n * the OSS chunk.\n */\ndefineProps<{\n part: \"left\" | \"center\" | \"right\";\n cloud: CloudAttachment;\n}>();\n\nconst { t: cloudT, format: cloudFormat } = useCloudI18nStrict();\n</script>\n\n<template>\n <!-- Left: templates used / allowed. A plan *limit*, not a templates concern,\n which is why it sits here and its string stays in the cloud chunk. -->\n <span\n v-if=\"part === 'left' && cloud.featureFlags.templateLimit.value !== null\"\n data-testid=\"cloud-template-usage\"\n class=\"tpl:text-xs tpl:opacity-60 tpl:text-[var(--tpl-text-muted)]\"\n >\n {{\n cloudFormat(cloudT.header.templatesUsed, {\n used: cloud.featureFlags.templateCount.value,\n max: cloud.featureFlags.templateLimit.value,\n })\n }}\n </span>\n\n <!-- Center: who else is in the template right now. -->\n <CollaboratorBar\n v-else-if=\"\n part === 'center' &&\n cloud.collaboration &&\n cloud.isCollaborationEnabled.value\n \"\n :collaborators=\"cloud.collaboration.collaborators.value\"\n :is-connected=\"cloud.websocket.isConnected.value\"\n />\n\n <!-- Right: AI — after the shared header's Comments button and before the\n test-email button, so the shared header is a superset of the OSS one rather\n than a rearrangement. -->\n <template v-else-if=\"part === 'right'\">\n <div\n v-if=\"\n cloud.featureFlags.canUseAiGeneration.value &&\n cloud.featureFlags.hasTemplateSaved.value\n \"\n :ref=\"\n (el) => (cloud.panelState.aiMenuRef.value = el as HTMLElement | null)\n \"\n class=\"tpl:relative\"\n >\n <button\n type=\"button\"\n data-testid=\"ai-menu-trigger\"\n :aria-expanded=\"cloud.panelState.aiMenuOpen.value\"\n class=\"tpl-ai-btn tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:px-4 tpl:py-2 tpl:text-sm tpl:font-semibold tpl:whitespace-nowrap tpl:transition-all tpl:duration-200\"\n :class=\"\n cloud.panelState.aiButtonActive.value\n ? 'tpl-ai-btn--active'\n : 'tpl-ai-btn--idle'\n \"\n @click.stop=\"cloud.panelState.toggleAiMenu\"\n >\n <Sparkles :size=\"16\" :stroke-width=\"2\" class=\"tpl-ai-btn-icon\" />\n {{ cloudT.aiChat.button }}\n </button>\n <Transition\n enter-active-class=\"tpl:transition-all tpl:ease-out\"\n enter-from-class=\"tpl:scale-95 tpl:opacity-0\"\n enter-to-class=\"tpl:scale-100 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-100 tpl:ease-in\"\n leave-from-class=\"tpl:scale-100 tpl:opacity-100\"\n leave-to-class=\"tpl:scale-95 tpl:opacity-0\"\n >\n <div\n v-if=\"cloud.panelState.aiMenuOpen.value\"\n class=\"tpl:absolute tpl:right-0 tpl:top-full tpl:z-50 tpl:mt-1 tpl:origin-top-right\"\n >\n <AiFeatureMenu\n :active-feature=\"cloud.panelState.activeAiFeature.value\"\n @select=\"cloud.panelState.handleAiFeatureSelect\"\n />\n </div>\n </Transition>\n </div>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { defineAsyncComponent } from \"vue\";\nimport { Sparkles } from \"@lucide/vue\";\n\nimport { useCloudI18nStrict } from \"../../composables/useCloudI18n\";\nimport type { CloudAttachment } from \"../runtime\";\n\nconst CollaboratorBar = defineAsyncComponent(\n () => import(\"./CollaboratorBar.vue\"),\n);\nconst AiFeatureMenu = defineAsyncComponent(() => import(\"./AiFeatureMenu.vue\"));\n\n/**\n * The Cloud-only header controls, filled into `EditorHeader`'s three\n * `*-extras` slots.\n *\n * One component with a `part` prop rather than three: the three regions share\n * this file's lazy chunk, so a Cloud session pays one round-trip for all of them\n * and an OSS session pays none.\n *\n * The plan-usage readout and the AI button live here rather than in the shared\n * header because they render **cloud-chunk** strings; OSS translators never see\n * them. Comments are deliberately not here: that feature is shared and\n * provider-backed, so its trigger and its strings belong to the shared header and\n * the OSS chunk.\n */\ndefineProps<{\n part: \"left\" | \"center\" | \"right\";\n cloud: CloudAttachment;\n}>();\n\nconst { t: cloudT, format: cloudFormat } = useCloudI18nStrict();\n</script>\n\n<template>\n <!-- Left: templates used / allowed. A plan *limit*, not a templates concern,\n which is why it sits here and its string stays in the cloud chunk. -->\n <span\n v-if=\"part === 'left' && cloud.featureFlags.templateLimit.value !== null\"\n data-testid=\"cloud-template-usage\"\n class=\"tpl:text-xs tpl:opacity-60 tpl:text-[var(--tpl-text-muted)]\"\n >\n {{\n cloudFormat(cloudT.header.templatesUsed, {\n used: cloud.featureFlags.templateCount.value,\n max: cloud.featureFlags.templateLimit.value,\n })\n }}\n </span>\n\n <!-- Center: who else is in the template right now. -->\n <CollaboratorBar\n v-else-if=\"\n part === 'center' &&\n cloud.collaboration &&\n cloud.isCollaborationEnabled.value\n \"\n :collaborators=\"cloud.collaboration.collaborators.value\"\n :is-connected=\"cloud.websocket.isConnected.value\"\n />\n\n <!-- Right: AI — after the shared header's Comments button and before the\n test-email button, so the shared header is a superset of the OSS one rather\n than a rearrangement. -->\n <template v-else-if=\"part === 'right'\">\n <div\n v-if=\"\n cloud.featureFlags.canUseAiGeneration.value &&\n cloud.featureFlags.hasTemplateSaved.value\n \"\n :ref=\"\n (el) => (cloud.panelState.aiMenuRef.value = el as HTMLElement | null)\n \"\n class=\"tpl:relative\"\n >\n <button\n type=\"button\"\n data-testid=\"ai-menu-trigger\"\n :aria-expanded=\"cloud.panelState.aiMenuOpen.value\"\n class=\"tpl-ai-btn tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-[var(--tpl-radius-sm)] tpl:border-none tpl:px-4 tpl:py-2 tpl:text-sm tpl:font-semibold tpl:whitespace-nowrap tpl:transition-all tpl:duration-200\"\n :class=\"\n cloud.panelState.aiButtonActive.value\n ? 'tpl-ai-btn--active'\n : 'tpl-ai-btn--idle'\n \"\n @click.stop=\"cloud.panelState.toggleAiMenu\"\n >\n <Sparkles :size=\"16\" :stroke-width=\"2\" class=\"tpl-ai-btn-icon\" />\n {{ cloudT.aiChat.button }}\n </button>\n <Transition\n enter-active-class=\"tpl:transition-all tpl:ease-out\"\n enter-from-class=\"tpl:scale-95 tpl:opacity-0\"\n enter-to-class=\"tpl:scale-100 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-100 tpl:ease-in\"\n leave-from-class=\"tpl:scale-100 tpl:opacity-100\"\n leave-to-class=\"tpl:scale-95 tpl:opacity-0\"\n >\n <div\n v-if=\"cloud.panelState.aiMenuOpen.value\"\n class=\"tpl:absolute tpl:right-0 tpl:top-full tpl:z-50 tpl:mt-1 tpl:origin-top-right\"\n >\n <AiFeatureMenu\n :active-feature=\"cloud.panelState.activeAiFeature.value\"\n @select=\"cloud.panelState.handleAiFeatureSelect\"\n />\n </div>\n </Transition>\n </div>\n </template>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAOA,IAAM,IAAkB,QAChB,OAAO,gCACf,GACM,IAAgB,QAA2B,OAAO,8BAAsB,GAqBxE,EAAE,GAAG,GAAQ,QAAQ,MAAgB,EAAmB;mBAOpD,EAAA,SAAI,UAAe,EAAA,MAAM,aAAa,cAAc,UAAK,QADjE,EAAA,GAAA,EAWO,QAXP,GAWO,EALH,EAAA,CAAA,CAAW,CAAC,EAAA,CAAA,CAAM,CAAC,OAAO,eAAa;GAAkB,MAAA,EAAA,MAAM,aAAa,cAAc;GAAoB,KAAA,EAAA,MAAM,aAAa,cAAc;EAS/H,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,SAAI,YAAuB,EAAA,MAAM,iBAAuB,EAAA,MAAM,uBAAuB,SADzG,EAAA,GAAA,EAQE,EAAA,CAAA,GAAA;;GAFC,eAAe,EAAA,MAAM,cAAc,cAAc;GACjD,gBAAc,EAAA,MAAM,UAAU,YAAY;EAMxB,GAAA,MAAA,GAAA,CAAA,iBAAA,cAAA,CAAA,KAAA,EAAA,SAAI,WAAzB,EAAA,GAAA,EA6CW,GAAA,EAAA,KAAA,EAAA,GAAA,CA3CQ,EAAA,MAAM,aAAa,mBAAmB,SAAiB,EAAA,MAAM,aAAa,iBAAiB,SAD5G,EAAA,GAAA,EA2CM,OAAA;;GAtCH,MAAe,MAAQ,EAAA,MAAM,WAAW,UAAU,QAAQ;GAG3D,OAAM;EAEN,GAAA,CAAA,EAcS,UAAA;GAbP,MAAK;GACL,eAAY;GACX,iBAAe,EAAA,MAAM,WAAW,WAAW;GAC5C,OAAK,EAAA,CAAC,wNACa,EAAA,MAAM,WAAW,eAAe,QAAA,uBAAA,kBAAA,CAAA;GAKlD,SAAK,AAAA,EAAA,OAAA,GAAO,GAAA,MAAA,EAAA,MAAM,WAAW,gBAAjB,EAAA,MAAM,WAAW,aAAY,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA;EAE1C,GAAA,CAAA,EAAiE,EAAA,CAAA,GAAA;GAAtD,MAAM;GAAK,gBAAc;GAAG,OAAM;EAAoB,CAAA,GAAA,EAAA,MACjE,EAAG,EAAA,CAAA,CAAM,CAAC,OAAO,MAAM,GAAA,CAAA,CAAA,GAAA,IAAA,CAAA,GAEzB,EAiBa,GAAA;GAhBX,sBAAmB;GACnB,oBAAiB;GACjB,kBAAe;GACf,sBAAmB;GACnB,oBAAiB;GACjB,kBAAe;;GAEf,SAAA,QAQM,CAPE,EAAA,MAAM,WAAW,WAAW,SADpC,EAAA,GAAA,EAQM,OARN,GAQM,CAJJ,EAGE,EAAA,CAAA,GAAA;IAFC,kBAAgB,EAAA,MAAM,WAAW,gBAAgB;IACjD,UAAQ,EAAA,MAAM,WAAW"}
|