@templatical/editor 0.0.5 → 0.1.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 (169) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +69 -0
  3. package/dist/{AiChatSidebar-DwME3f-a.js → AiChatSidebar-DSbBLDkW.js} +9 -9
  4. package/dist/{AiFeatureMenu-DJvWL1GZ.js → AiFeatureMenu-d04gmgud.js} +5 -5
  5. package/dist/{CloudEditor-Fe0ssRgi.js → CloudEditor-CjO4tzbV.js} +218 -227
  6. package/dist/{CollaboratorBar-DTT0EkZn.js → CollaboratorBar-DYBSTuMW.js} +3 -3
  7. package/dist/{CommentsSidebar-DrJhQRXK.js → CommentsSidebar-CQvUh5xt.js} +9 -9
  8. package/dist/CountdownBlock-D3olfssJ.js +92 -0
  9. package/dist/CountdownToolbar-ClpBwFoX.js +210 -0
  10. package/dist/{DesignReferenceSidebar-DdOht5zn.js → DesignReferenceSidebar-BOfeETis.js} +5 -5
  11. package/dist/{LoadingTrack-vK8W2PJf.js → LoadingTrack-CdqDYVR-.js} +1 -1
  12. package/dist/{ModuleBrowserModal-CiV_jOEM.js → ModuleBrowserModal-DKSSQonv.js} +7 -7
  13. package/dist/{ModulePreviewCanvas-Bmy6Y1WE.js → ModulePreviewCanvas-CoLNuu1o.js} +32 -32
  14. package/dist/NumberWithSuffix-_0l3Q4jq.js +424 -0
  15. package/dist/{ParagraphEditor-CoQ3NlS7.js → ParagraphEditor-C9R2ou7x.js} +57 -56
  16. package/dist/{RichTextEditorContent-CHJlh7HJ.js → RichTextEditorContent-BcY3Rcp4.js} +2 -2
  17. package/dist/{SaveModuleDialog-CD2ZYq1o.js → SaveModuleDialog-DmFe4VUc.js} +3 -3
  18. package/dist/{SnapshotHistory-DltsKvhP.js → SnapshotHistory-CAhikAOr.js} +7 -7
  19. package/dist/{TemplateScoringPanel-DmnmUE3y.js → TemplateScoringPanel-b5DnyIll.js} +10 -10
  20. package/dist/{TestEmailModal-Dl633j9o.js → TestEmailModal-BmDIzGYz.js} +3 -3
  21. package/dist/{TitleEditor-C7fds2Nc.js → TitleEditor-DtRYx-LS.js} +11 -11
  22. package/dist/{TplModal-C5_CF-qn.js → TplModal-BLbMDMd6.js} +4 -4
  23. package/dist/{_plugin-vue_export-helper-B1-bu7yR.js → _plugin-vue_export-helper-BHUPLLh1.js} +2 -2
  24. package/dist/{blockTypeIcons-BrKZB10B.js → blockTypeIcons-CEU2dMe1.js} +2 -2
  25. package/dist/cdn/chunks/{AiFeatureMenu-C5UQmEgV.js → AiFeatureMenu-DWMSYD2J.js} +4 -4
  26. package/dist/cdn/chunks/{AiFeatureMenu-C5UQmEgV.js.map → AiFeatureMenu-DWMSYD2J.js.map} +1 -1
  27. package/dist/cdn/chunks/{CloudEditor-DeTolKnf.js → CloudEditor-HrfSfr3G.js} +179 -188
  28. package/dist/cdn/chunks/CloudEditor-HrfSfr3G.js.map +1 -0
  29. package/dist/cdn/chunks/{CollaboratorBar-DO1nxSrr.js → CollaboratorBar-Cfok52TZ.js} +4 -4
  30. package/dist/cdn/chunks/{CollaboratorBar-DO1nxSrr.js.map → CollaboratorBar-Cfok52TZ.js.map} +1 -1
  31. package/dist/cdn/chunks/CountdownBlock-CkV21NEM.js +93 -0
  32. package/dist/cdn/chunks/CountdownBlock-CkV21NEM.js.map +1 -0
  33. package/dist/cdn/chunks/CountdownToolbar-CEmbR7kt.js +212 -0
  34. package/dist/cdn/chunks/CountdownToolbar-CEmbR7kt.js.map +1 -0
  35. package/dist/cdn/chunks/{ModuleBrowserModal-ChBr3aXj.js → ModuleBrowserModal-sASaPRot.js} +7 -7
  36. package/dist/cdn/chunks/{ModuleBrowserModal-ChBr3aXj.js.map → ModuleBrowserModal-sASaPRot.js.map} +1 -1
  37. package/dist/cdn/chunks/{ModulePreviewCanvas-DkSvri9H.js → ModulePreviewCanvas-D8zsajMf.js} +19 -19
  38. package/dist/cdn/chunks/{ModulePreviewCanvas-DkSvri9H.js.map → ModulePreviewCanvas-D8zsajMf.js.map} +1 -1
  39. package/dist/cdn/chunks/NumberWithSuffix-k5Te7Tuw.js +425 -0
  40. package/dist/cdn/chunks/NumberWithSuffix-k5Te7Tuw.js.map +1 -0
  41. package/dist/cdn/chunks/{ParagraphEditor-DU3oUKA7.js → ParagraphEditor-C1vQWGzW.js} +37 -37
  42. package/dist/cdn/chunks/ParagraphEditor-C1vQWGzW.js.map +1 -0
  43. package/dist/cdn/chunks/{RichTextEditorContent-BrsW1p9s.js → RichTextEditorContent-CT8dBB0R.js} +5 -5
  44. package/dist/cdn/chunks/{RichTextEditorContent-BrsW1p9s.js.map → RichTextEditorContent-CT8dBB0R.js.map} +1 -1
  45. package/dist/cdn/chunks/{SaveModuleDialog-CjqKkTEc.js → SaveModuleDialog-BkwKrB0N.js} +5 -5
  46. package/dist/cdn/chunks/{SaveModuleDialog-CjqKkTEc.js.map → SaveModuleDialog-BkwKrB0N.js.map} +1 -1
  47. package/dist/cdn/chunks/{TitleEditor-C8FYbadT.js → TitleEditor-BXqt42Px.js} +11 -11
  48. package/dist/cdn/chunks/{TitleEditor-C8FYbadT.js.map → TitleEditor-BXqt42Px.js.map} +1 -1
  49. package/dist/cdn/chunks/{blockTypeIcons-5QwYklNq.js → blockTypeIcons-BS6pWyGO.js} +3 -3
  50. package/dist/cdn/chunks/{blockTypeIcons-5QwYklNq.js.map → blockTypeIcons-BS6pWyGO.js.map} +1 -1
  51. package/dist/cdn/chunks/{de-BvYD17KT.js → de-3exf7MYE.js} +1 -1
  52. package/dist/cdn/chunks/{de-BvYD17KT.js.map → de-3exf7MYE.js.map} +1 -1
  53. package/dist/cdn/chunks/{de-BB3dgVOc.js → de-C8LxVUsb.js} +1 -1
  54. package/dist/cdn/chunks/de-C8LxVUsb.js.map +1 -0
  55. package/dist/cdn/chunks/{dist-KYv9v_1z2.js → dist-BpOx-ugr.js} +10 -3
  56. package/dist/cdn/chunks/dist-BpOx-ugr.js.map +1 -0
  57. package/dist/cdn/chunks/{draggable-BQNU47zu.js → draggable-Bcb86AsV.js} +1591 -1563
  58. package/dist/cdn/chunks/draggable-Bcb86AsV.js.map +1 -0
  59. package/dist/cdn/chunks/{emojiData-BVEJHcNH.js → emojiData-DUHzsh4j.js} +1 -1
  60. package/dist/cdn/chunks/{emojiData-BVEJHcNH.js.map → emojiData-DUHzsh4j.js.map} +1 -1
  61. package/dist/cdn/chunks/{en-DeDcpnoS.js → en-BoEycuqw.js} +1 -1
  62. package/dist/cdn/chunks/en-BoEycuqw.js.map +1 -0
  63. package/dist/cdn/chunks/{en-CpotcOPr.js → en-KNPUKxYp.js} +1 -1
  64. package/dist/cdn/chunks/{en-CpotcOPr.js.map → en-KNPUKxYp.js.map} +1 -1
  65. package/dist/cdn/chunks/{extensions-Bj7USRLr.js → extensions-DBxH6pz0.js} +21 -21
  66. package/dist/cdn/chunks/{extensions-Bj7USRLr.js.map → extensions-DBxH6pz0.js.map} +1 -1
  67. package/dist/cdn/chunks/{features-Ds0XUfte.js → features-C3n7AeUc.js} +1338 -1422
  68. package/dist/cdn/chunks/features-C3n7AeUc.js.map +1 -0
  69. package/dist/cdn/chunks/{icons-fWsuSvgd.js → icons-Hmpb0_8s.js} +2 -2
  70. package/dist/cdn/chunks/icons-Hmpb0_8s.js.map +1 -0
  71. package/dist/cdn/chunks/{liquid.browser-C1VIYISn.js → liquid.browser-CEMn-ZqL.js} +24 -17
  72. package/dist/cdn/chunks/liquid.browser-CEMn-ZqL.js.map +1 -0
  73. package/dist/cdn/chunks/{media-library-BGQm_OyC.js → media-library-C1wCpRY1.js} +114 -110
  74. package/dist/cdn/chunks/media-library-C1wCpRY1.js.map +1 -0
  75. package/dist/cdn/chunks/{pusher-DJPhQnE8.js → pusher-DwSQn6BA.js} +11 -8
  76. package/dist/cdn/chunks/pusher-DwSQn6BA.js.map +1 -0
  77. package/dist/cdn/chunks/readableTextColor-Cd_cgWO_.js.map +1 -1
  78. package/dist/cdn/chunks/{rolldown-runtime-DPITmOBR.js → rolldown-runtime-BNuo_Jkg.js} +1 -1
  79. package/dist/cdn/chunks/{src-3i8rPuqd.js → src-BUszJqfd.js} +8 -8
  80. package/dist/cdn/chunks/{src-3i8rPuqd.js.map → src-BUszJqfd.js.map} +1 -1
  81. package/dist/cdn/chunks/{styleConstants-DFe3I4Op.js → styleConstants-DP1VOca8.js} +1 -1
  82. package/dist/cdn/chunks/{styleConstants-DFe3I4Op.js.map → styleConstants-DP1VOca8.js.map} +1 -1
  83. package/dist/cdn/chunks/{styles-Dgijy53u.js → styles-U2VFFgxC.js} +623 -1239
  84. package/dist/cdn/chunks/styles-U2VFFgxC.js.map +1 -0
  85. package/dist/cdn/chunks/{tiptap-BhxaWR8R.js → tiptap-w5IqC8oW.js} +1610 -1364
  86. package/dist/cdn/chunks/tiptap-w5IqC8oW.js.map +1 -0
  87. package/dist/cdn/editor.css +1 -1
  88. package/dist/cdn/editor.js +92 -97
  89. package/dist/cdn/editor.js.map +1 -1
  90. package/dist/{check-B7kDuZmP.js → check-BDE2uFIC.js} +1 -1
  91. package/dist/{chevron-down-DJLW2Q9Z.js → chevron-down-BL1DcOiT.js} +1 -1
  92. package/dist/{circle-alert-E2vYPs5r.js → circle-alert-1tetIFJU.js} +1 -1
  93. package/dist/{clock-lWIIQA3C.js → clock-CNc3isoG.js} +1 -1
  94. package/dist/{dist-DysAFIPy.js → dist-7SaUYnxo.js} +385 -357
  95. package/dist/{dist-DmOE-Ubp.js → dist-BKZ5gvJf.js} +5 -5
  96. package/dist/{dist-CG-vEqSU.js → dist-CLg2qE0p.js} +2 -2
  97. package/dist/dist-CdzaZZSx.js +5 -0
  98. package/dist/dist-Cl9giA3B.js +5 -0
  99. package/dist/{dist-C_ymrGFi.js → dist-CpHKN3mI.js} +541 -508
  100. package/dist/{dist-4LiM9FDd.js → dist-DMuaebdo.js} +2 -2
  101. package/dist/{dist-ChAGLpWo.js → dist-DW_4_uv3.js} +2 -2
  102. package/dist/{dist-C1BIRHCQ.js → dist-DYG6FL7b.js} +2 -2
  103. package/dist/{dist-DrvKRSU6.js → dist-DbFMBx8E.js} +2 -2
  104. package/dist/{dist-D_HQYSY-.js → dist-Dn9cOicG.js} +2 -2
  105. package/dist/{dist-Ci5lFuUy.js → dist-ENKQZrNg.js} +138 -132
  106. package/dist/{dist-Bu7veieH.js → dist-fEtcLxee.js} +15 -15
  107. package/dist/{extensions-DWx_jj8v.js → extensions-Y880c0sP.js} +3 -3
  108. package/dist/{image-up-X4xIq4ea.js → image-up-4ZmaHFga.js} +1 -1
  109. package/dist/index.d.ts +234 -0
  110. package/dist/{liquid.browser-BemTg3sZ.js → liquid.browser-DZ62L7up.js} +20 -15
  111. package/dist/{loader-circle-BTQQxC3l.js → loader-circle-C7YEH4do.js} +1 -1
  112. package/dist/{message-circle-Blgm6V_h.js → message-circle-B_lxRh4z.js} +1 -1
  113. package/dist/{refresh-cw-Bb4PEeW1.js → refresh-cw-DmZNoimV.js} +1 -1
  114. package/dist/rolldown-runtime-gEudmnaM.js +23 -0
  115. package/dist/{scan-line-7lZPfOdm.js → scan-line-Cc9KlXo5.js} +1 -1
  116. package/dist/{send-C0ltAQrv.js → send-CMwNWTPX.js} +1 -1
  117. package/dist/{shield-check-f-qv4RKs.js → shield-check-DZFf4LTh.js} +1 -1
  118. package/dist/{sparkles-KhBCGlqB.js → sparkles-D80W88H8.js} +1 -1
  119. package/dist/{styleConstants-Cxw88naD.js → styleConstants-Codo7aUT.js} +6 -45
  120. package/dist/styles-unyYKihg.js +2942 -0
  121. package/dist/templatical-editor.css +1 -1
  122. package/dist/templatical-editor.js +85 -90
  123. package/dist/text-align-start-Cje6pwo4.js +43 -0
  124. package/dist/{trash-2-OwjZ-guZ.js → trash-2-BWvxOB4Q.js} +1 -1
  125. package/dist/{triangle-alert-DOSRIUYZ.js → triangle-alert-C6y94qVX.js} +1 -1
  126. package/dist/{useEditorCore-DUGD6pq_.js → useEditorCore-CQwWl2js.js} +1143 -1247
  127. package/dist/{x-CGlq2XQe.js → x-IyhJ6V90.js} +1 -1
  128. package/package.json +70 -52
  129. package/dist/cdn/chunks/AiChatSidebar-X_Bv3Qys.js +0 -2
  130. package/dist/cdn/chunks/CloudEditor-DeTolKnf.js.map +0 -1
  131. package/dist/cdn/chunks/CommentsSidebar-4MTw_hue.js +0 -2
  132. package/dist/cdn/chunks/DesignReferenceSidebar-Bswh4Yx4.js +0 -2
  133. package/dist/cdn/chunks/ParagraphEditor-DU3oUKA7.js.map +0 -1
  134. package/dist/cdn/chunks/SnapshotHistory-KME4xmn_.js +0 -2
  135. package/dist/cdn/chunks/TemplateScoringPanel-DgB3xDN6.js +0 -2
  136. package/dist/cdn/chunks/TestEmailModal-DdpvRbYf.js +0 -2
  137. package/dist/cdn/chunks/de-BB3dgVOc.js.map +0 -1
  138. package/dist/cdn/chunks/dist-BF5c3Dr-.js +0 -2
  139. package/dist/cdn/chunks/dist-BGzvIxcJ.js +0 -2
  140. package/dist/cdn/chunks/dist-CFemF8rI.js +0 -2
  141. package/dist/cdn/chunks/dist-Co6uFhFK.js +0 -2
  142. package/dist/cdn/chunks/dist-DCikBY9K.js +0 -2
  143. package/dist/cdn/chunks/dist-DUILafAC.js +0 -2
  144. package/dist/cdn/chunks/dist-DghiKH0A.js +0 -2
  145. package/dist/cdn/chunks/dist-Dw8ckvfK.js +0 -2
  146. package/dist/cdn/chunks/dist-H07p0KAw.js +0 -2
  147. package/dist/cdn/chunks/dist-KYv9v_1z2.js.map +0 -1
  148. package/dist/cdn/chunks/dist-MjnKIc0W.js +0 -2
  149. package/dist/cdn/chunks/dist-odp0vGRv.js +0 -2
  150. package/dist/cdn/chunks/draggable-BQNU47zu.js.map +0 -1
  151. package/dist/cdn/chunks/en-DeDcpnoS.js.map +0 -1
  152. package/dist/cdn/chunks/features-Ds0XUfte.js.map +0 -1
  153. package/dist/cdn/chunks/icons-fWsuSvgd.js.map +0 -1
  154. package/dist/cdn/chunks/liquid.browser-C1VIYISn.js.map +0 -1
  155. package/dist/cdn/chunks/media-library-BGQm_OyC.js.map +0 -1
  156. package/dist/cdn/chunks/pusher-DJPhQnE8.js.map +0 -1
  157. package/dist/cdn/chunks/styles-Dgijy53u.js.map +0 -1
  158. package/dist/cdn/chunks/tiptap-BhxaWR8R.js.map +0 -1
  159. package/dist/dist-DkypH7qG.js +0 -5
  160. package/dist/dist-Dxnd0GRf.js +0 -5
  161. package/dist/styles-fdXNRqI3.js +0 -3556
  162. package/dist/templatical-editor.umd.cjs +0 -179
  163. /package/dist/cdn/chunks/{_rolldown_dynamic_import_helper-DMEI4TQ3.js → _rolldown_dynamic_import_helper-BRcA6nWq.js} +0 -0
  164. /package/dist/{de-D7TLGIPA.js → de-DCRASLfd.js} +0 -0
  165. /package/dist/{emojiData-BfWQS72m.js → emojiData-CyACq8qV.js} +0 -0
  166. /package/dist/{en-DvtiEMwP.js → en-BC0igPeg.js} +0 -0
  167. /package/dist/{formatRelativeTime-DX3FgqN9.js → formatRelativeTime-mRxw8HK8.js} +0 -0
  168. /package/dist/{readableTextColor-LDlmVEUv.js → readableTextColor-B809bF5J.js} +0 -0
  169. /package/dist/{useMergeTag-BZ3X0bNr.js → useMergeTag-CSXcnFBc.js} +0 -0
@@ -1,8 +1,8 @@
1
- import "./useEditorCore-DUGD6pq_.js";
2
1
  import { T as e, b as t, f as n } from "./keys-C0MQRs8d.js";
3
2
  import { t as r } from "./useI18n-D6m7ZUgY.js";
4
- import { t as i } from "./loader-circle-BTQQxC3l.js";
5
- import { t as a } from "./TplModal-C5_CF-qn.js";
3
+ import "./useEditorCore-CQwWl2js.js";
4
+ import { t as i } from "./loader-circle-C7YEH4do.js";
5
+ import { t as a } from "./TplModal-BLbMDMd6.js";
6
6
  import { Fragment as o, computed as s, createBlock as c, createCommentVNode as ee, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as f, defineComponent as p, normalizeClass as m, normalizeStyle as h, openBlock as g, ref as _, renderList as v, toDisplayString as y, unref as b, vModelText as x, watch as S, withCtx as te, withDirectives as ne } from "vue";
7
7
  //#region src/cloud/components/SaveModuleDialog.vue?vue&type=script&setup=true&lang.ts
8
8
  var C = ["aria-busy"], w = {
@@ -1,11 +1,11 @@
1
- import "./useEditorCore-DUGD6pq_.js";
2
- import { t as e } from "./dist-CG-vEqSU.js";
1
+ import { t as e } from "./dist-CLg2qE0p.js";
3
2
  import { t } from "./useI18n-D6m7ZUgY.js";
4
- import { n } from "./_plugin-vue_export-helper-B1-bu7yR.js";
5
- import { t as r } from "./chevron-down-DJLW2Q9Z.js";
6
- import { t as i } from "./clock-lWIIQA3C.js";
7
- import { t as a } from "./loader-circle-BTQQxC3l.js";
8
- import { t as o } from "./formatRelativeTime-DX3FgqN9.js";
3
+ import "./useEditorCore-CQwWl2js.js";
4
+ import { n } from "./_plugin-vue_export-helper-BHUPLLh1.js";
5
+ import { t as r } from "./chevron-down-BL1DcOiT.js";
6
+ import { t as i } from "./clock-CNc3isoG.js";
7
+ import { t as a } from "./loader-circle-C7YEH4do.js";
8
+ import { t as o } from "./formatRelativeTime-mRxw8HK8.js";
9
9
  import { Fragment as s, Transition as c, computed as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createVNode as p, defineComponent as m, normalizeClass as h, openBlock as g, ref as _, renderList as v, toDisplayString as y, unref as b, watch as x, withCtx as S, withModifiers as C } from "vue";
10
10
  var w = n("chevron-left", [["path", {
11
11
  d: "m15 18-6-6 6-6",
@@ -1,15 +1,15 @@
1
1
  import { T as e, f as t, g as n, x as r } from "./keys-C0MQRs8d.js";
2
2
  import { t as ee } from "./useI18n-D6m7ZUgY.js";
3
- import { n as i, t as a } from "./_plugin-vue_export-helper-B1-bu7yR.js";
4
- import { t as te } from "./chevron-down-DJLW2Q9Z.js";
5
- import { t as o } from "./circle-alert-E2vYPs5r.js";
6
- import { n as ne, r as re, t as s } from "./refresh-cw-Bb4PEeW1.js";
7
- import { t as ie } from "./loader-circle-BTQQxC3l.js";
8
- import { t as c } from "./shield-check-f-qv4RKs.js";
9
- import { t as l } from "./sparkles-KhBCGlqB.js";
10
- import { t as u } from "./triangle-alert-DOSRIUYZ.js";
11
- import { t as d } from "./x-CGlq2XQe.js";
12
- import { t as f } from "./LoadingTrack-vK8W2PJf.js";
3
+ import { n as i, t as a } from "./_plugin-vue_export-helper-BHUPLLh1.js";
4
+ import { t as te } from "./chevron-down-BL1DcOiT.js";
5
+ import { t as o } from "./circle-alert-1tetIFJU.js";
6
+ import { n as ne, r as re, t as s } from "./refresh-cw-DmZNoimV.js";
7
+ import { t as ie } from "./loader-circle-C7YEH4do.js";
8
+ import { t as c } from "./shield-check-DZFf4LTh.js";
9
+ import { t as l } from "./sparkles-D80W88H8.js";
10
+ import { t as u } from "./triangle-alert-C6y94qVX.js";
11
+ import { t as d } from "./x-IyhJ6V90.js";
12
+ import { t as f } from "./LoadingTrack-CdqDYVR-.js";
13
13
  import { Fragment as p, Transition as ae, createBlock as m, createCommentVNode as h, createElementBlock as g, createElementVNode as _, createTextVNode as v, createVNode as y, defineComponent as b, inject as x, normalizeClass as oe, normalizeStyle as S, openBlock as C, ref as se, renderList as w, resolveDynamicComponent as T, toDisplayString as E, unref as D, watch as ce, withCtx as le } from "vue";
14
14
  var O = i("shield-x", [
15
15
  ["path", {
@@ -1,7 +1,7 @@
1
- import "./useEditorCore-DUGD6pq_.js";
2
1
  import { t as e } from "./useI18n-D6m7ZUgY.js";
3
- import { t } from "./loader-circle-BTQQxC3l.js";
4
- import { t as n } from "./TplModal-C5_CF-qn.js";
2
+ import "./useEditorCore-CQwWl2js.js";
3
+ import { t } from "./loader-circle-C7YEH4do.js";
4
+ import { t as n } from "./TplModal-BLbMDMd6.js";
5
5
  import { Fragment as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, normalizeClass as d, openBlock as f, ref as p, renderList as m, toDisplayString as h, unref as g, vModelSelect as _, watch as v, withCtx as y, withDirectives as b } from "vue";
6
6
  //#region src/cloud/components/TestEmailModal.vue?vue&type=script&setup=true&lang.ts
7
7
  var x = ["aria-busy"], S = {
@@ -1,9 +1,9 @@
1
- import { b as e } from "./useEditorCore-DUGD6pq_.js";
2
- import { S as t, w as n } from "./keys-C0MQRs8d.js";
3
- import { t as r } from "./useI18n-D6m7ZUgY.js";
4
- import { a as i, i as a, n as o, r as s, t as c } from "./RichTextEditorContent-CHJlh7HJ.js";
5
- import { t as l } from "./loader-circle-BTQQxC3l.js";
6
- import { t as u } from "./scan-line-7lZPfOdm.js";
1
+ import { S as e, w as t } from "./keys-C0MQRs8d.js";
2
+ import { t as n } from "./useI18n-D6m7ZUgY.js";
3
+ import { b as r } from "./useEditorCore-CQwWl2js.js";
4
+ import { a as i, i as a, n as o, r as s, t as c } from "./RichTextEditorContent-BcY3Rcp4.js";
5
+ import { t as l } from "./loader-circle-C7YEH4do.js";
6
+ import { t as u } from "./scan-line-Cc9KlXo5.js";
7
7
  import { Fragment as d, Teleport as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createTextVNode as _, createVNode as v, defineComponent as y, inject as b, isRef as x, normalizeClass as S, normalizeStyle as C, openBlock as w, toDisplayString as T, unref as E } from "vue";
8
8
  //#region src/components/blocks/TitleEditor.vue?vue&type=script&setup=true&lang.ts
9
9
  var D = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme", "aria-label"], k = ["aria-label", "title"], ee = ["aria-label", "title"], A = ["aria-label", "title"], j = {
@@ -20,17 +20,17 @@ var D = { class: "tpl-text-editor-wrapper tpl:relative" }, O = ["data-tpl-theme"
20
20
  },
21
21
  emits: ["done"],
22
22
  setup(y, { emit: P }) {
23
- let F = y, I = P, L = b(t, null), R = b(n, null), { t: z } = r(), { editor: B, EditorContent: V, isLoading: H, initError: U, retry: W, showLinkDialog: G, linkUrl: K, linkDialogRef: q, mergeTagEnabled: J, openLinkDialog: Y, insertLink: X, removeLink: Z, closeLinkDialog: Q, handleLinkKeydown: te, handleAddMergeTag: $ } = e({
23
+ let F = y, I = P, L = b(e, null), R = b(t, null), { t: z } = n(), { editor: B, EditorContent: V, isLoading: H, initError: U, retry: W, showLinkDialog: G, linkUrl: K, linkDialogRef: q, mergeTagEnabled: J, openLinkDialog: Y, insertLink: X, removeLink: Z, closeLinkDialog: Q, handleLinkKeydown: te, handleAddMergeTag: $ } = r({
24
24
  blockId: () => F.block.id,
25
25
  blockContent: () => F.block.content,
26
26
  onDone: () => I("done"),
27
27
  editorName: "TitleEditor",
28
28
  async loadExtensions({ mergeTags: e, syntax: t }) {
29
29
  let [{ Editor: n, EditorContent: r }, { default: i }, { default: a }, { MergeTagNode: o, LogicMergeTagNode: s }] = await Promise.all([
30
- import("./dist-Ci5lFuUy.js").then((e) => e.r),
31
- import("./dist-DysAFIPy.js"),
32
- import("./dist-Bu7veieH.js"),
33
- import("./extensions-DWx_jj8v.js")
30
+ import("./dist-ENKQZrNg.js").then((e) => e.r),
31
+ import("./dist-7SaUYnxo.js"),
32
+ import("./dist-fEtcLxee.js"),
33
+ import("./extensions-Y880c0sP.js")
34
34
  ]);
35
35
  return {
36
36
  TiptapEditor: n,
@@ -1,5 +1,5 @@
1
- import { w as e } from "./useEditorCore-DUGD6pq_.js";
2
- import { w as t } from "./keys-C0MQRs8d.js";
1
+ import { w as e } from "./keys-C0MQRs8d.js";
2
+ import { w as t } from "./useEditorCore-CQwWl2js.js";
3
3
  import { Teleport as n, Transition as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createVNode as l, defineComponent as u, inject as d, openBlock as f, ref as p, renderSlot as m, unref as h, withCtx as g, withModifiers as _ } from "vue";
4
4
  //#region src/cloud/components/TplModal.vue?vue&type=script&setup=true&lang.ts
5
5
  var v = ["data-tpl-theme"], y = /* @__PURE__ */ u({
@@ -8,8 +8,8 @@ var v = ["data-tpl-theme"], y = /* @__PURE__ */ u({
8
8
  emits: ["close", "keydown"],
9
9
  setup(u, { emit: y }) {
10
10
  let b = u, x = y, S = p(null);
11
- e(S, i(() => b.visible));
12
- let C = d(t);
11
+ t(S, i(() => b.visible));
12
+ let C = d(e);
13
13
  function w(e) {
14
14
  e.key === "Escape" && x("close"), x("keydown", e);
15
15
  }
@@ -1,5 +1,5 @@
1
1
  import { computed as e, h as t, inject as n } from "vue";
2
- //#region ../../node_modules/.bun/@lucide+vue@1.7.0+cc44681ce9393ba4/node_modules/@lucide/vue/dist/esm/shared/src/utils/isEmptyString.js
2
+ //#region ../../node_modules/.pnpm/@lucide+vue@1.14.0_vue@3.5.33_typescript@6.0.3_/node_modules/@lucide/vue/dist/esm/shared/src/utils/isEmptyString.mjs
3
3
  var r = (e) => e === "", i = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), a = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), o = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), s = (e) => {
4
4
  let t = o(e);
5
5
  return t.charAt(0).toUpperCase() + t.slice(1);
@@ -18,7 +18,7 @@ function u() {
18
18
  return n(l, {});
19
19
  }
20
20
  //#endregion
21
- //#region ../../node_modules/.bun/@lucide+vue@1.7.0+cc44681ce9393ba4/node_modules/@lucide/vue/dist/esm/Icon.js
21
+ //#region ../../node_modules/.pnpm/@lucide+vue@1.14.0_vue@3.5.33_typescript@6.0.3_/node_modules/@lucide/vue/dist/esm/Icon.mjs
22
22
  var d = ({ name: n, iconNode: o, absoluteStrokeWidth: l, "absolute-stroke-width": d, strokeWidth: f, "stroke-width": p, size: m, color: h, ...g }, { slots: _ }) => {
23
23
  let { size: v, color: y, strokeWidth: b = 2, absoluteStrokeWidth: x = !1, class: S = "" } = u(), C = e(() => {
24
24
  let e = r(l) || r(d) || l === !0 || d === !0 || x === !0, t = f || p || b || c["stroke-width"];
@@ -1,5 +1,5 @@
1
- import { D as e, E as t, M as n, O as r, k as i } from "./useEditorCore-DUGD6pq_.js";
2
- import { n as a } from "./_plugin-vue_export-helper-B1-bu7yR.js";
1
+ import { D as e, E as t, M as n, O as r, k as i } from "./useEditorCore-CQwWl2js.js";
2
+ import { n as a } from "./_plugin-vue_export-helper-BHUPLLh1.js";
3
3
  var o = a("columns-3", [
4
4
  ["rect", {
5
5
  width: "18",
@@ -1,5 +1,5 @@
1
- import { F as e, N as t, R as n, S as r, _ as i, ct as a, d as o, h as s, lt as c, m as l, p as u } from "./draggable-BQNU47zu.js";
2
- import { $ as d, Mt as f, Xt as p, at as m, gt as h, jt as g, ot as _ } from "./features-Ds0XUfte.js";
1
+ import { F as e, N as t, R as n, S as r, _ as i, ct as a, d as o, h as s, lt as c, m as l, p as u } from "./draggable-Bcb86AsV.js";
2
+ import { $ as d, At as f, Yt as p, at as m, gt as h, jt as g, ot as _ } from "./features-C3n7AeUc.js";
3
3
  //#region src/cloud/components/AiFeatureMenu.vue?vue&type=script&setup=true&lang.ts
4
4
  var v = {
5
5
  class: "tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]",
@@ -12,7 +12,7 @@ var v = {
12
12
  props: { activeFeature: {} },
13
13
  emits: ["select"],
14
14
  setup(r, { emit: d }) {
15
- let C = d, { t: w } = g(), T = p(f, "AiFeatureMenu"), E = {
15
+ let C = d, { t: w } = f(), T = p(g, "AiFeatureMenu"), E = {
16
16
  "ai-chat": "chat",
17
17
  "design-reference": "designToTemplate",
18
18
  scoring: "scoring"
@@ -56,4 +56,4 @@ var v = {
56
56
  //#endregion
57
57
  export { C as default };
58
58
 
59
- //# sourceMappingURL=AiFeatureMenu-C5UQmEgV.js.map
59
+ //# sourceMappingURL=AiFeatureMenu-DWMSYD2J.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AiFeatureMenu-C5UQmEgV.js","names":[],"sources":["../../../src/cloud/components/AiFeatureMenu.vue","../../../src/cloud/components/AiFeatureMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t } = useI18n();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistant;\n if (key === \"design-reference\") return t.aiMenu.designToTemplate;\n return t.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return t.aiMenu.designToTemplateDesc;\n return t.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t } = useI18n();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistant;\n if (key === \"design-reference\") return t.aiMenu.designToTemplate;\n return t.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return t.aiMenu.designToTemplateDesc;\n return t.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAaA,IAAM,IAAO,GAIP,EAAE,SAAM,GAAS,EAEjB,IAAW,EAAc,GAAe,gBAAgB,EAExD,IAAkD;GACtD,WAAW;GACX,oBAAoB;GACpB,SAAS;GACV,EAEK,IAA2D;GAC/D;IAAE,KAAK;IAAW,MAAM;IAAU;GAClC;IAAE,KAAK;IAAoB,MAAM;IAAS;GAC1C;IAAE,KAAK;IAAW,MAAM;IAAa;GACtC,EAEK,IAAW,QACf,EAAY,QAAQ,MAAM,EAAS,iBAAiB,EAAa,EAAE,KAAK,CAAC,CAC1E;EAED,SAAS,EAAS,GAAwB;AAGxC,UAFI,MAAQ,YAAkB,EAAE,OAAO,cACnC,MAAQ,qBAA2B,EAAE,OAAO,mBACzC,EAAE,OAAO;;EAGlB,SAAS,EAAe,GAAwB;AAG9C,UAFI,MAAQ,YAAkB,EAAE,OAAO,kBACnC,MAAQ,qBAA2B,EAAE,OAAO,uBACzC,EAAE,OAAO;;yBAKhB,EA0CM,OA1CN,GA0CM,EAAA,EAAA,GAAA,EAtCJ,EAqCS,GAAA,MAAA,EApCW,EAAA,QAAX,YADT,EAqCS,UAAA;GAnCN,KAAK,EAAQ;GACd,OAAM;GACL,OAAK,EAAA,EAAA,iBAAuC,EAAA,kBAAkB,EAAQ,MAAA,6BAAA,eAAA,CAAA;GAMtE,UAAK,MAAE,EAAI,UAAW,EAAQ,IAAG;MAElC,EAcM,OAAA;GAbJ,OAAM;GACL,OAAK,EAAA;qBAA2C,EAAA,kBAAkB,EAAQ,MAAA,uBAAA;WAA8G,EAAA,kBAAkB,EAAQ,MAAA,kBAAA;;YAWnN,EAA6D,EAA7C,EAAQ,KAAI,EAAA;GAAG,MAAM;GAAK,gBAAc;YAE1D,EASM,OATN,GASM,CARJ,EAEO,QAFP,GAEO,EADF,EAAS,EAAQ,IAAG,CAAA,EAAA,EAAA,EAEzB,EAIO,QAJP,GAIO,EADF,EAAe,EAAQ,IAAG,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA"}
1
+ {"version":3,"file":"AiFeatureMenu-DWMSYD2J.js","names":[],"sources":["../../../src/cloud/components/AiFeatureMenu.vue","../../../src/cloud/components/AiFeatureMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t } = useI18n();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistant;\n if (key === \"design-reference\") return t.aiMenu.designToTemplate;\n return t.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return t.aiMenu.designToTemplateDesc;\n return t.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t } = useI18n();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistant;\n if (key === \"design-reference\") return t.aiMenu.designToTemplate;\n return t.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return t.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return t.aiMenu.designToTemplateDesc;\n return t.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAaA,IAAM,IAAO,GAIP,EAAE,SAAM,GAAS,EAEjB,IAAW,EAAc,GAAe,gBAAgB,EAExD,IAAkD;GACtD,WAAW;GACX,oBAAoB;GACpB,SAAS;GACV,EAEK,IAA2D;GAC/D;IAAE,KAAK;IAAW,MAAM;IAAU;GAClC;IAAE,KAAK;IAAoB,MAAM;IAAS;GAC1C;IAAE,KAAK;IAAW,MAAM;IAAa;GACtC,EAEK,IAAW,QACf,EAAY,QAAQ,MAAM,EAAS,iBAAiB,EAAa,EAAE,KAAK,CAAC,CAC1E;EAED,SAAS,EAAS,GAAwB;AAGxC,UAFI,MAAQ,YAAkB,EAAE,OAAO,cACnC,MAAQ,qBAA2B,EAAE,OAAO,mBACzC,EAAE,OAAO;;EAGlB,SAAS,EAAe,GAAwB;AAG9C,UAFI,MAAQ,YAAkB,EAAE,OAAO,kBACnC,MAAQ,qBAA2B,EAAE,OAAO,uBACzC,EAAE,OAAO;;yBAKhB,EA0CM,OA1CN,GA0CM,EAAA,EAAA,GAAA,EAtCJ,EAqCS,GAAA,MAAA,EApCW,EAAA,QAAX,YADT,EAqCS,UAAA;GAnCN,KAAK,EAAQ;GACd,OAAM;GACL,OAAK,EAAA,EAAA,iBAAuC,EAAA,kBAAkB,EAAQ,MAAA,6BAAA,eAAA,CAAA;GAMtE,UAAK,MAAE,EAAI,UAAW,EAAQ,IAAG;MAElC,EAcM,OAAA;GAbJ,OAAM;GACL,OAAK,EAAA;qBAA2C,EAAA,kBAAkB,EAAQ,MAAA,uBAAA;WAA8G,EAAA,kBAAkB,EAAQ,MAAA,kBAAA;;YAWnN,EAA6D,EAA7C,EAAQ,KAAI,EAAA;GAAG,MAAM;GAAK,gBAAc;YAE1D,EASM,OATN,GASM,CARJ,EAEO,QAFP,GAEO,EADF,EAAS,EAAQ,IAAG,CAAA,EAAA,EAAA,EAEzB,EAIO,QAJP,GAIO,EADF,EAAe,EAAQ,IAAG,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA"}