@oneclick.dev/cms-core-modules 0.0.123 → 0.0.125
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/AppointmentListTable-CWzbwqR-.js +1 -0
- package/dist/AppointmentListTable-DoZuBstk.mjs +270 -0
- package/dist/ContentEditor-BlNbqkAz.js +324 -0
- package/dist/{ContentEditor-MDGolnIP.mjs → ContentEditor-D754iLJS.mjs} +7985 -26820
- package/dist/{Detail-Dk8E6_uF.mjs → Detail-BOxWQ1QQ.mjs} +15 -14
- package/dist/{Detail-Cn9Bk0u0.mjs → Detail-BfKW0uZE.mjs} +26 -25
- package/dist/Detail-DFVu2F38.mjs +11 -0
- package/dist/Detail-DJea_fCd.js +1 -0
- package/dist/Detail-DPJacXfm.js +1 -0
- package/dist/Detail-DSLZ7_bM.js +1 -0
- package/dist/Detail-DUGThL9Y.js +1 -0
- package/dist/{Detail-B_scnidb.mjs → Detail-D_LlEeHu.mjs} +35 -34
- package/dist/Editor-D4evcdhv.mjs +768 -0
- package/dist/Editor-gLLtuJbY.js +1 -0
- package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-BjKpsqT9.js +1 -0
- package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-D5v5AhLe.mjs +76 -0
- package/dist/Knowledge-B66vxz--.js +1 -0
- package/dist/Knowledge-BnMTTuJ7.mjs +742 -0
- package/dist/Overview-0hFXiuYo.js +1 -0
- package/dist/Overview-BE4uYPx0.mjs +745 -0
- package/dist/Overview-BTx5LF4J.js +1 -0
- package/dist/Overview-CCu2PHai.mjs +289 -0
- package/dist/Overview-CQRpFhbJ.mjs +286 -0
- package/dist/Overview-CTs7sX4d.js +1 -0
- package/dist/Overview-Cj89XXKN.js +1 -0
- package/dist/Overview-D2u-leeO.js +1 -0
- package/dist/Overview-D_2wozCG.mjs +1733 -0
- package/dist/Overview-D_c18mbR.mjs +248 -0
- package/dist/Overview-Dffo-zH4.mjs +11 -0
- package/dist/Overview-g4Rcj245.js +1 -0
- package/dist/{TableCalculationWidget-CrqcLGfU.mjs → TableCalculationWidget-B_LFoOYm.mjs} +3 -3
- package/dist/{TableCalculationWidget-CkQPrVUd.js → TableCalculationWidget-CahOIcbk.js} +1 -1
- package/dist/TableDataWidget-BwqWFH4A.js +1 -0
- package/dist/TableDataWidget-RsVxcDsL.mjs +112 -0
- package/dist/TableOverviewCard-BPWCqo56.js +1 -0
- package/dist/{TableOverviewCard-Ci0d4o4w.mjs → TableOverviewCard-D667DDag.mjs} +113 -127
- package/dist/TableResultView.vue_vue_type_script_setup_true_lang-C3XiOXgb.js +1 -0
- package/dist/TableResultView.vue_vue_type_script_setup_true_lang-sp0TLio0.mjs +547 -0
- package/dist/{TableRowActionCard-BhdnnPaq.mjs → TableRowActionCard-BPYJ-Kjy.mjs} +95 -101
- package/dist/TableRowActionCard-Bnqj1YIe.js +1 -0
- package/dist/TableView-CwhZ9YN2.js +4 -0
- package/dist/TableView-DX9PKS8N.mjs +9673 -0
- package/dist/TemplateBuilder.vue_vue_type_script_setup_true_lang-BgDdzbLe.js +1 -0
- package/dist/TemplateBuilder.vue_vue_type_script_setup_true_lang-D85V4nrQ.mjs +2886 -0
- package/dist/Test-CzmOmi53.mjs +447 -0
- package/dist/Test-USDtNFY1.js +1 -0
- package/dist/UserDetail-DpUL3mhk.mjs +1483 -0
- package/dist/UserDetail-KRIfxaYd.js +1 -0
- package/dist/cms-core-modules.css +1 -1
- package/dist/dateRangePresets-CaPVagHY.mjs +453 -0
- package/dist/dateRangePresets-gxQCiZ6c.js +1 -0
- package/dist/index-6hZ6MYY6.js +1 -0
- package/dist/index-BVmmicu3.mjs +14 -0
- package/dist/index-CQuN5rKx.js +1 -0
- package/dist/index-ChHD_1Cf.js +144 -0
- package/dist/index-CnDGeInm.js +1 -0
- package/dist/index-CqDTc5Ig.mjs +20 -0
- package/dist/index-CvV4nVWI.js +1 -0
- package/dist/index-CyvvAdt4.js +1 -0
- package/dist/index-DH2z0W_w.mjs +19012 -0
- package/dist/index-DIRD7t5_.mjs +20 -0
- package/dist/index-DZKzj48V.mjs +17 -0
- package/dist/index-OJuBYR60.mjs +57 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +480 -103
- package/dist/orders-C_sz8J9b.js +1 -0
- package/dist/{orders-BfTLIm7U.mjs → orders-Cgdggzvx.mjs} +84 -84
- package/dist/server-handlers.cjs.js +1 -1
- package/dist/server-handlers.mjs +2696 -605
- package/dist/src/appointments/chat-components/AppointmentListTable.vue.d.ts +3 -0
- package/dist/src/appointments/index.d.ts +93 -3
- package/dist/src/appointments/reservation-summary.d.ts +48 -0
- package/dist/src/appointments/server.d.ts +1 -0
- package/dist/src/appointments/tools.d.ts +93 -3
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Container.d.ts +1 -1
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Row.d.ts +7 -0
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Stack.d.ts +7 -0
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/helpers/resizeHistory.d.ts +9 -0
- package/dist/src/contentManager/components/content-editor/tiptap-menus/ElementEditorMenu.vue.d.ts +3 -1
- package/dist/src/filezone/config.d.ts +31 -0
- package/dist/src/filezone/index.d.ts +43 -0
- package/dist/src/filezone/index.vue.d.ts +2 -0
- package/dist/src/filezone/metadata.d.ts +2 -0
- package/dist/src/filezone/pages/Overview.vue.d.ts +4 -0
- package/dist/src/filezone/permissions.d.ts +5 -0
- package/dist/src/filezone/routes.d.ts +5 -0
- package/dist/src/filezone/server.d.ts +36 -0
- package/dist/src/firebaseAuthManager/components/DeleteUserDialog.vue.d.ts +25 -0
- package/dist/src/firebaseAuthManager/components/ReasonActionDialog.vue.d.ts +23 -0
- package/dist/src/firebaseAuthManager/components/UserStatusBadge.vue.d.ts +5 -0
- package/dist/src/firebaseAuthManager/config.d.ts +151 -0
- package/dist/src/firebaseAuthManager/index.d.ts +163 -0
- package/dist/src/firebaseAuthManager/index.vue.d.ts +14 -0
- package/dist/src/firebaseAuthManager/metadata.d.ts +2 -0
- package/dist/src/firebaseAuthManager/pages/Overview.vue.d.ts +2 -0
- package/dist/src/firebaseAuthManager/pages/UserDetail.vue.d.ts +2 -0
- package/dist/src/firebaseAuthManager/permissions.d.ts +5 -0
- package/dist/src/firebaseAuthManager/routes.d.ts +5 -0
- package/dist/src/firebaseAuthManager/server.d.ts +162 -0
- package/dist/src/firebaseAuthManager/types.d.ts +84 -0
- package/dist/src/formBuilder/components/FormPreviewDialog.vue.d.ts +12 -0
- package/dist/src/formBuilder/components/FormStatusBadge.vue.d.ts +9 -0
- package/dist/src/formBuilder/config.d.ts +31 -0
- package/dist/src/formBuilder/index.d.ts +44 -0
- package/dist/src/formBuilder/index.vue.d.ts +14 -0
- package/dist/src/formBuilder/lib/forms.d.ts +11 -0
- package/dist/src/formBuilder/metadata.d.ts +2 -0
- package/dist/src/formBuilder/pages/Editor.vue.d.ts +2 -0
- package/dist/src/formBuilder/pages/Overview.vue.d.ts +2 -0
- package/dist/src/formBuilder/permissions.d.ts +5 -0
- package/dist/src/formBuilder/routes.d.ts +5 -0
- package/dist/src/formBuilder/server.d.ts +87 -0
- package/dist/src/formBuilder/tools.d.ts +1 -0
- package/dist/src/formBuilder/types.d.ts +46 -0
- package/dist/src/helpbot/composables/useHelpbotApi.d.ts +18 -0
- package/dist/src/helpbot/config.d.ts +17 -0
- package/dist/src/helpbot/index.d.ts +29 -0
- package/dist/src/helpbot/index.vue.d.ts +2 -0
- package/dist/src/helpbot/metadata.d.ts +2 -0
- package/dist/src/helpbot/pages/Knowledge.vue.d.ts +4 -0
- package/dist/src/helpbot/pages/Overview.vue.d.ts +2 -0
- package/dist/src/helpbot/pages/Test.vue.d.ts +4 -0
- package/dist/src/helpbot/permissions.d.ts +5 -0
- package/dist/src/helpbot/routes.d.ts +5 -0
- package/dist/src/helpbot/types.d.ts +42 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/mailTemplates/builder-types.d.ts +40 -0
- package/dist/src/mailTemplates/components/BlockRenderer.vue.d.ts +24 -0
- package/dist/src/mailTemplates/components/DesignPanel.vue.d.ts +13 -0
- package/dist/src/mailTemplates/components/EmailCanvas.vue.d.ts +44 -0
- package/dist/src/mailTemplates/components/RichTextEditor.vue.d.ts +10 -0
- package/dist/src/mailTemplates/components/RightSidebar.vue.d.ts +18 -0
- package/dist/src/mailTemplates/components/SettingsPanel.vue.d.ts +15 -0
- package/dist/src/mailTemplates/components/TemplateBuilder.vue.d.ts +2 -0
- package/dist/src/mailTemplates/components/TemplateList.vue.d.ts +19 -1
- package/dist/src/mailTemplates/components/rich-text.d.ts +6 -0
- package/dist/src/mailTemplates/config.d.ts +10 -4
- package/dist/src/mailTemplates/defaults.d.ts +10 -0
- package/dist/src/mailTemplates/editor-state.d.ts +21 -0
- package/dist/src/mailTemplates/index.d.ts +11 -5
- package/dist/src/mailTemplates/index.vue.d.ts +2 -4
- package/dist/src/mailTemplates/metadata.d.ts +1 -1
- package/dist/src/mailTemplates/pages/Detail.vue.d.ts +1 -13
- package/dist/src/mailTemplates/pages/Overview.vue.d.ts +1 -13
- package/dist/src/mailTemplates/server.d.ts +23 -0
- package/dist/src/server-handlers.d.ts +6 -0
- package/dist/src/table/badge-filter-utils.d.ts +8 -0
- package/dist/src/table/chat-components/TableOverviewCard.vue.d.ts +2 -7
- package/dist/src/table/chat-components/TableResultView.vue.d.ts +3 -7
- package/dist/src/table/components/TableDisplayCell.vue.d.ts +8 -0
- package/dist/src/table/components/columns/BadgeColumnSettings.vue.d.ts +9 -0
- package/dist/src/table/components/columns/ColumnColorSelect.vue.d.ts +11 -0
- package/dist/src/table/components/columns/ColumnDisplaySettings.vue.d.ts +9 -0
- package/dist/src/table/components/columns/ColumnTypeSelect.vue.d.ts +11 -0
- package/dist/src/table/components/columns/ColumnValueSourceInput.vue.d.ts +15 -0
- package/dist/src/table/components/columns/DialogTableColumnItem.vue.d.ts +8 -11
- package/dist/src/table/components/columns/ProgressColumnSettings.vue.d.ts +8 -0
- package/dist/src/table/components/stats/StatDialog.vue.d.ts +6 -10
- package/dist/src/table/components/stats/Stats.vue.d.ts +9 -15
- package/dist/src/table/composables/useTableClock.d.ts +4 -0
- package/dist/src/table/display-utils.d.ts +35 -0
- package/dist/src/table/row-value.d.ts +1 -0
- package/dist/src/table/stat-utils.d.ts +9 -0
- package/dist/src/table/tool-utils.d.ts +1 -1
- package/dist/src/table/types.d.ts +54 -1
- package/dist/src/whatsappBusiness/analytics.d.ts +4 -0
- package/dist/src/whatsappBusiness/components/AccountPanel.vue.d.ts +2 -0
- package/dist/src/whatsappBusiness/components/InsightsPanel.vue.d.ts +5 -0
- package/dist/src/whatsappBusiness/components/TemplateDialog.vue.d.ts +14 -0
- package/dist/src/whatsappBusiness/components/TemplatesPanel.vue.d.ts +5 -0
- package/dist/src/whatsappBusiness/components/presentation.d.ts +4 -0
- package/dist/src/whatsappBusiness/config.d.ts +51 -0
- package/dist/src/whatsappBusiness/connection.d.ts +77 -0
- package/dist/src/whatsappBusiness/index.d.ts +63 -0
- package/dist/src/whatsappBusiness/index.vue.d.ts +5 -0
- package/dist/src/whatsappBusiness/metadata.d.ts +2 -0
- package/dist/src/whatsappBusiness/pages/Overview.vue.d.ts +2 -0
- package/dist/src/whatsappBusiness/permissions.d.ts +5 -0
- package/dist/src/whatsappBusiness/provider.d.ts +21 -0
- package/dist/src/whatsappBusiness/routes.d.ts +5 -0
- package/dist/src/whatsappBusiness/server.d.ts +14 -0
- package/dist/src/whatsappBusiness/templates.d.ts +94 -0
- package/dist/src/whatsappBusiness/types.d.ts +162 -0
- package/dist/{tool-sandbox-DoF1PsyS.js → tool-sandbox-BSkKdH7V.js} +1 -1
- package/dist/{tool-sandbox-DdkMLkDK.mjs → tool-sandbox-DU9b1B7v.mjs} +1 -1
- package/dist/types-9N-DKxNj.mjs +250 -0
- package/dist/types-B5MifmeF.mjs +2696 -0
- package/dist/types-Cem0vPo_.js +1 -0
- package/dist/types-D5dgTskW.js +1 -0
- package/dist/useHelpbotApi-BIIungOh.js +1 -0
- package/dist/useHelpbotApi-HC9JSiSn.mjs +229 -0
- package/dist/{useTableAgentTools-D5mzGf3A.js → useTableAgentTools-BrUot49I.js} +1 -1
- package/dist/{useTableAgentTools-DcN3kYRL.mjs → useTableAgentTools-r5InEI4p.mjs} +8 -8
- package/dist/vee-validate-zod-CWZwNTWE.js +1 -0
- package/dist/vee-validate-zod-D0WaDgDZ.mjs +1780 -0
- package/package.json +2 -2
- package/src/appointments/tools.ts +52 -2
- package/src/formBuilder/tools.ts +1 -0
- package/dist/AppointmentListTable-DZJNmTMb.mjs +0 -177
- package/dist/AppointmentListTable-Dieu9US_.js +0 -1
- package/dist/ContentEditor-C-Wm48ai.js +0 -467
- package/dist/Detail-BCUUNWvp.js +0 -1
- package/dist/Detail-Byk781b4.mjs +0 -26
- package/dist/Detail-DGg_xXZc.js +0 -1
- package/dist/Detail-Sc2qZdxj.js +0 -1
- package/dist/Detail-mvSGbnFU.js +0 -1
- package/dist/Overview-BDlBCUI_.js +0 -1
- package/dist/Overview-Su8ZUbMs.mjs +0 -26
- package/dist/TableDataWidget-7qvC3Egd.js +0 -1
- package/dist/TableDataWidget-DMTSoGRO.mjs +0 -121
- package/dist/TableOverviewCard-AFq-puJs.js +0 -1
- package/dist/TableResultView.vue_vue_type_script_setup_true_lang-CBn-Oxl9.mjs +0 -534
- package/dist/TableResultView.vue_vue_type_script_setup_true_lang-C_Lv-SmJ.js +0 -1
- package/dist/TableRowActionCard-IzB6tNN-.js +0 -1
- package/dist/TableView-BkwoKREo.js +0 -4
- package/dist/TableView-C4Zyp8d7.mjs +0 -8228
- package/dist/TemplateList.vue_vue_type_script_setup_true_lang-B_AtWnHa.js +0 -1
- package/dist/TemplateList.vue_vue_type_script_setup_true_lang-Cmovy7kk.mjs +0 -40
- package/dist/dateRangePresets-B-l5b_wR.mjs +0 -48
- package/dist/dateRangePresets-CPWqst_x.js +0 -1
- package/dist/orders-DUa2PVoa.js +0 -1
- package/dist/vee-validate-zod-SjDT8X35.mjs +0 -4404
- package/dist/vee-validate-zod-VCmLnrtQ.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),te=require("@oneclick.dev/cms-kit"),i=require("lucide-vue-next"),O=require("./index-ijdf0d9-.js"),Ee=require("./_plugin-vue_export-helper-BHFhmbuH.js"),de=require("./index-ChHD_1Cf.js"),ce={bodyBg:"#f4f4f5",contentBg:"#ffffff",footerBg:"#f4f4f5",footerTextColor:"#71717a",primaryColor:"#18181b",primaryForeground:"#ffffff",textColor:"#18181b",secondaryTextColor:"#71717a",linkColor:"#2563eb",fontFamily:"Arial, Helvetica, sans-serif",borderRadius:8,contentWidth:600,contentPadding:40,logoUrl:"",footerText:"© {{year}} {{agency_name}}. All rights reserved.",showUnsubscribe:!0,showSocialLinks:!1};function xe(l){switch(l){case"header":return{text:"Heading",level:"h2",align:"left"};case"text":return{html:"<p>Enter your text here...</p>"};case"button":return{text:"Click Here",url:"#",align:"center",variant:"primary"};case"image":return{src:"",alt:"Image",width:600,align:"center"};case"divider":return{color:"#e5e7eb"};case"spacer":return{height:24};case"columns":return{columns:[{label:"Label",value:"Value"},{label:"Label",value:"Value"}]};default:return{}}}const we=[{name:"Welcome Email",subject:"Welcome to {{agency_name}}, {{user_name}}!",description:"Sent when a new user is invited to the dashboard.",category:"onboarding",status:"active",blocks:[{id:"welcome-header",type:"header",content:{text:"Welcome aboard, {{user_name}}!",level:"h1",align:"center"}},{id:"welcome-text",type:"text",content:{html:"<p>You've been invited to join <strong>{{project_name}}</strong> on {{agency_name}}. Click the button below to get started.</p>"}},{id:"welcome-btn",type:"button",content:{text:"Accept Invitation",url:"{{invite_url}}",align:"center",variant:"primary"}},{id:"welcome-divider",type:"divider",content:{color:"#e5e7eb"}},{id:"welcome-footer",type:"text",content:{html:`<p style="text-align:center">If you didn't expect this invitation, you can safely ignore this email.</p>`}}]},{name:"Password Reset",subject:"Reset your password — {{agency_name}}",description:"Sent when a user requests a password reset.",category:"authentication",status:"active",blocks:[{id:"reset-header",type:"header",content:{text:"Password Reset",level:"h2",align:"left"}},{id:"reset-text",type:"text",content:{html:"<p>Hi {{user_name}},</p><p>We received a request to reset the password for your account ({{user_email}}). Click the button below to choose a new password.</p>"}},{id:"reset-btn",type:"button",content:{text:"Reset Password",url:"{{reset_url}}",align:"center",variant:"primary"}},{id:"reset-spacer",type:"spacer",content:{height:16}},{id:"reset-note",type:"text",content:{html:`<p style="font-size:13px;color:#71717a">If you didn't request this, no action is needed — your password will remain unchanged.</p>`}}]},{name:"Payment Confirmation",subject:"Payment received — {{agency_name}}",description:"Sent after a successful payment is processed.",category:"billing",status:"active",blocks:[{id:"payment-header",type:"header",content:{text:"Payment Confirmed",level:"h2",align:"left"}},{id:"payment-text",type:"text",content:{html:"<p>Hi {{user_name}},</p><p>We've successfully received your payment. Thank you for your continued support!</p>"}},{id:"payment-divider",type:"divider",content:{color:"#e5e7eb"}},{id:"payment-footer",type:"text",content:{html:'<p style="font-size:13px;color:#71717a">If you have questions about this charge, reach out at {{support_email}}.</p>'}}]},{name:"Notification Digest",subject:"Your latest updates — {{agency_name}}",description:"Periodic summary of recent activity and notifications.",category:"notifications",blocks:[{id:"digest-header",type:"header",content:{text:"Here's what you missed",level:"h2",align:"left"}},{id:"digest-text",type:"text",content:{html:"<p>Hi {{user_name}},</p><p>Here's a summary of recent activity on {{project_name}}.</p>"}},{id:"digest-spacer",type:"spacer",content:{height:16}},{id:"digest-btn",type:"button",content:{text:"View Dashboard",url:"{{dashboard_url}}",align:"center",variant:"primary"}}]},{name:"System Maintenance",subject:"Scheduled maintenance — {{agency_name}}",description:"Sent before planned system downtime or maintenance windows.",category:"system",blocks:[{id:"maint-header",type:"header",content:{text:"Scheduled Maintenance",level:"h2",align:"left"}},{id:"maint-text",type:"text",content:{html:"<p>Hi {{user_name}},</p><p>We'll be performing scheduled maintenance on {{project_name}}. During this time, some services may be temporarily unavailable.</p>"}},{id:"maint-divider",type:"divider",content:{color:"#e5e7eb"}},{id:"maint-footer",type:"text",content:{html:'<p style="font-size:13px;color:#71717a">No action is required on your part. If you have questions, contact {{support_email}}.</p>'}}]},{name:"Notification",subject:"{{notification_title}} — {{agency_name}}",description:"Sent when a user receives a notification and has email notifications enabled.",category:"notifications",status:"active",blocks:[{id:"notif-header",type:"header",content:{text:"{{notification_title}}",level:"h2",align:"left"}},{id:"notif-text",type:"text",content:{html:"<p>Hi {{user_name}},</p><p>{{notification_body}}</p>"}},{id:"notif-btn",type:"button",content:{text:"View in Dashboard",url:"{{notification_url}}",align:"center",variant:"primary"}},{id:"notif-divider",type:"divider",content:{color:"#e5e7eb"}},{id:"notif-footer",type:"text",content:{html:`<p style="font-size:13px;color:#71717a;text-align:center">You're receiving this because you have email notifications enabled. You can update your preferences in your dashboard settings.</p>`}}]}];function Me(){return structuredClone(ce)}function he(l,E){const a=we.find(u=>E?u.system_key===E:u.name===l);return a?structuredClone(a):null}function Le(){return structuredClone(we)}function Se(l){const{name:E,subject:a,preheader:u,description:d,category:k,status:v,blocks:C,styles:L}=l;return{name:E,subject:a,preheader:u,description:d,category:k,status:v,blocks:C,styles:L}}function ee(l){return JSON.stringify(Se(l))}function ie(l,E=60){let a=[l],u=0;return{get canUndo(){return u>0},get canRedo(){return u<a.length-1},record(d){a[u]!==d&&(a=a.slice(0,u+1),a.push(d),a.length>E&&a.shift(),u=a.length-1)},undo(){return u>0?a[--u]:null},redo(){return u<a.length-1?a[++u]:null}}}function Ie(...l){const E=JSON.stringify(l).matchAll(/\{\{(\w+)\}\}/g);return[...new Set(Array.from(E,a=>a[1]))].sort()}const Ae={class:"w-full xl:w-[240px] xl:min-w-[240px] border-r bg-card flex flex-col"},Re={class:"p-4 border-b"},je={class:"flex items-center justify-between mb-3"},Fe={class:"text-sm font-semibold"},Pe={class:"ml-1 text-xs text-muted-foreground"},He={class:"relative"},Oe={class:"p-2"},qe=["onClick"],We={class:"flex items-start gap-3"},Je={class:"min-w-0 flex-1"},Ye={class:"flex items-center gap-2"},Ke={class:"font-medium text-sm truncate"},Ge={key:0,class:"size-1.5 shrink-0 rounded-full bg-amber-500",title:"Unsaved changes","aria-label":"Unsaved changes"},Qe={class:"text-xs text-muted-foreground mt-0.5 truncate"},Ze={key:0,class:"text-[11px] text-muted-foreground/60 mt-1"},Xe={key:0,class:"text-center py-12 px-4"},_e=e.defineComponent({__name:"TemplateList",props:e.mergeModels({templates:{},selectedTemplateId:{},dirtyTemplateIds:{},canCreate:{type:Boolean}},{searchQuery:{default:""},searchQueryModifiers:{}}),emits:e.mergeModels(["select","create"],["update:searchQuery"]),setup(l,{emit:E}){const a=l,u=E,d=e.useModel(l,"searchQuery"),k=V=>({onboarding:i.UserPlus,authentication:i.KeyRound,billing:i.CreditCard,notifications:i.Bell,system:i.ShieldCheck})[V]??i.Mail,v=V=>({onboarding:"text-emerald-500",authentication:"text-amber-500",billing:"text-blue-500",notifications:"text-purple-500",system:"text-stone-500"})[V]??"text-stone-400",C=V=>{const c=Math.floor((Date.now()-new Date(V).getTime())/1e3);if(c<60)return"just now";const m=Math.floor(c/60);if(m<60)return`${m}m ago`;const y=Math.floor(m/60);if(y<24)return`${y}h ago`;const T=Math.floor(y/24);return T<30?`${T}d ago`:`${Math.floor(T/30)}mo ago`},L=e.computed(()=>{let V=a.templates;if(d.value.trim()){const c=d.value.toLowerCase();V=V.filter(m=>m.name.toLowerCase().includes(c)||(m.description||"").toLowerCase().includes(c)||m.subject.toLowerCase().includes(c))}return V});return(V,c)=>{const m=e.resolveComponent("Button"),y=e.resolveComponent("Input"),T=e.resolveComponent("ScrollArea");return e.openBlock(),e.createElementBlock("div",Ae,[e.createElementVNode("div",Re,[e.createElementVNode("div",je,[e.createElementVNode("h2",Fe,[c[2]||(c[2]=e.createTextVNode("Mail templates ",-1)),e.createElementVNode("span",Pe,e.toDisplayString(l.templates.length),1)]),l.canCreate?(e.openBlock(),e.createBlock(m,{key:0,variant:"ghost",size:"icon",class:"size-7","aria-label":"Create template",title:"Create template",onClick:c[0]||(c[0]=x=>u("create"))},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Plus),{class:"size-4"})]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",He,[e.createVNode(y,{modelValue:d.value,"onUpdate:modelValue":c[1]||(c[1]=x=>d.value=x),type:"search",placeholder:"Search templates...","aria-label":"Search templates",class:"pl-9 h-9 text-sm appearance-none [&::-webkit-search-cancel-button]:appearance-none"},null,8,["modelValue"]),e.createVNode(e.unref(i.Search),{class:"absolute left-3 top-1/2 -translate-y-1/2 size-3.5 text-muted-foreground"})])]),e.createVNode(T,{class:"flex-1"},{default:e.withCtx(()=>[e.createElementVNode("div",Oe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,x=>(e.openBlock(),e.createElementBlock("button",{key:x.id,onClick:b=>u("select",x.id),class:e.normalizeClass(["w-full text-left p-3 rounded-lg mb-1 transition-all duration-150 group",l.selectedTemplateId===x.id?"bg-primary/5 border border-primary/20 shadow-sm":"hover:bg-accent/50 border border-transparent"])},[e.createElementVNode("div",We,[e.createElementVNode("div",{class:e.normalizeClass(["mt-0.5 size-8 rounded-lg flex items-center justify-center shrink-0",l.selectedTemplateId===x.id?"bg-primary/10":"bg-secondary"])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k(x.category)),{class:e.normalizeClass(["size-4",v(x.category)])},null,8,["class"]))],2),e.createElementVNode("div",Je,[e.createElementVNode("div",Ye,[e.createElementVNode("span",Ke,e.toDisplayString(x.name),1),l.dirtyTemplateIds.includes(x.id)?(e.openBlock(),e.createElementBlock("span",Ge)):e.createCommentVNode("",!0)]),e.createElementVNode("p",Qe,e.toDisplayString(x.description),1),x.updated_at?(e.openBlock(),e.createElementBlock("p",Ze,"Edited "+e.toDisplayString(C(x.updated_at)),1)):e.createCommentVNode("",!0)]),e.createVNode(e.unref(i.ChevronRight),{class:e.normalizeClass(["size-4 text-muted-foreground/40 shrink-0 mt-1 transition-transform",l.selectedTemplateId===x.id?"text-primary":"opacity-0 group-hover:opacity-100"])},null,8,["class"])])],10,qe))),128)),L.value.length===0?(e.openBlock(),e.createElementBlock("div",Xe,[e.createVNode(e.unref(i.Mail),{class:"mx-auto size-10 text-muted-foreground/30"}),c[3]||(c[3]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"},"No templates found",-1)),c[4]||(c[4]=e.createElementVNode("p",{class:"text-xs text-muted-foreground/60 mt-1"},"Try a different search or create a template",-1))])):e.createCommentVNode("",!0)])]),_:1})])}}});function Te(l){const E={},{color:a,fontSize:u,textAlign:d}=l.style;return/^(#[\da-f]{3,8}|[a-z]+|rgba?\([\d.,%\s]+\)|hsla?\([\d.,%\s]+\))$/i.test(a)&&(E.color=a),/^\d+(\.\d+)?px$/.test(u)&&parseFloat(u)>=8&&parseFloat(u)<=72&&(E.fontSize=u),["left","center","right","justify"].includes(d)&&(E.textAlign=d),E}function Be(l){return/^(https?:\/\/[^\s]+|mailto:[^\s]+|tel:[+\d\s()-]+|#[\w-]*|\{\{\w+\}\})$/i.test(l.trim())}const et=new Set(["p","br","strong","b","em","i","u","s","a","ul","ol","li","blockquote","span","h1","h2","h3"]),tt=new Set(["script","style","iframe","object","embed","svg","math","template","head"]);function lt(l){if(typeof DOMParser>"u")return[l.replace(/<[^>]*>/g,"")];const E=new DOMParser().parseFromString(l,"text/html"),a=u=>{if(u.nodeType===3)return u.textContent??"";if(u.nodeType!==1)return null;const d=u,k=d.tagName.toLowerCase();if(tt.has(k))return null;const v=Array.from(d.childNodes,a);return et.has(k)?e.h(k==="a"?"span":k,{style:Te(d),...k==="a"?{class:"email-preview-link"}:{}},k==="br"?void 0:v):v};return Array.from(E.body.childNodes,a)}const ot=["aria-label"],nt=["aria-label"],at=["aria-label"],rt=["disabled"],st=["disabled"],dt={class:"p-3 text-center"},it={class:"mt-1 text-xs text-muted-foreground"},ct=["src","alt"],ut=e.defineComponent({__name:"BlockRenderer",props:{block:{},index:{},totalBlocks:{},selectedBlockId:{},templateStyles:{}},emits:["select","move","duplicate","delete","drag-start","drag-end"],setup(l,{emit:E}){const a=l,u=E,d=e.computed(()=>({header:"Heading",text:"Text",button:"Button",image:"Image",divider:"Divider",spacer:"Spacer",columns:"Columns"})[a.block.type]),k=e.computed(()=>a.selectedBlockId===a.block.id),v=e.computed(()=>["h1","h2","h3"].includes(a.block.content.level)?a.block.content.level:"h2"),C=(x,b,t)=>x===""||x===void 0||x===null||!Number.isFinite(Number(x))?b:Math.min(t,Math.max(0,Number(x))),L=e.computed(()=>({paddingTop:`${C(a.block.content.paddingTop,["button","divider"].includes(a.block.type)?8:0,80)}px`,paddingBottom:`${C(a.block.content.paddingBottom,a.block.type==="spacer"?0:16,80)}px`})),V=e.computed(()=>({color:a.block.content.color||a.templateStyles.textColor,fontSize:`${C(a.block.content.fontSize,a.block.type==="header"?{h1:28,h2:22,h3:18}[v.value]||22:15,72)}px`,textAlign:a.block.content.align||"left",lineHeight:a.block.type==="header"?"1.3":"1.6"})),c=e.computed(()=>/^https?:\/\/[^\s]+$/i.test(a.block.content.src||"")?a.block.content.src:""),m=e.defineComponent({props:{html:{type:String,default:""}},setup:x=>()=>e.h("div",{class:"email-block-rich-text"},lt(x.html))});function y(x){const b=x.target.closest("button");if(b&&!b.hasAttribute("data-email-drag-handle")){x.preventDefault();return}if(x.dataTransfer){x.dataTransfer.effectAllowed="move",x.dataTransfer.setData("text/plain",a.block.id);const t=x.currentTarget,p=t.getBoundingClientRect();x.dataTransfer.setDragImage(t,x.clientX-p.left,x.clientY-p.top)}u("drag-start",a.block.id)}function T(x){x.target===x.currentTarget&&(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),u("select",a.block.id))}return(x,b)=>(e.openBlock(),e.createElementBlock("div",{draggable:"true",tabindex:"0",role:"group","aria-label":`${d.value} block ${l.index+1} of ${l.totalBlocks}${k.value?", selected":""}. Press Enter to edit.`,class:e.normalizeClass(["group relative min-h-6 cursor-grab select-none rounded outline-none active:cursor-grabbing focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2",k.value?"ring-2 ring-primary ring-offset-2":"hover:ring-1 hover:ring-primary/30 hover:ring-offset-1"]),style:e.normalizeStyle(L.value),onClick:b[6]||(b[6]=e.withModifiers(t=>u("select",l.block.id),["stop"])),onKeydown:T,onDragstart:e.withModifiers(y,["stop"]),onDragend:b[7]||(b[7]=e.withModifiers(t=>u("drag-end"),["stop"]))},[e.createElementVNode("div",{class:e.normalizeClass(["absolute -right-1 -top-3 z-10 flex items-center gap-0.5 rounded border bg-card p-0.5 text-card-foreground shadow-sm transition-opacity group-focus-within:opacity-100",k.value?"opacity-100":"opacity-0 group-hover:opacity-100"]),onClick:b[5]||(b[5]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("button",{type:"button",draggable:"true","data-email-drag-handle":"","aria-label":`Drag ${d.value.toLowerCase()} block to reorder`,title:"Drag to reorder; use arrow buttons for keyboard control",class:"cursor-grab rounded p-1.5 hover:bg-accent active:cursor-grabbing"},[e.createVNode(e.unref(i.GripVertical),{class:"size-3.5"})],8,nt),e.createElementVNode("button",{type:"button","aria-label":`Edit ${d.value.toLowerCase()} block`,title:"Edit block",class:"rounded p-1.5 hover:bg-accent",onClick:b[0]||(b[0]=t=>u("select",l.block.id))},[e.createVNode(e.unref(i.Pencil),{class:"size-3.5"})],8,at),e.createElementVNode("button",{type:"button","aria-label":"Move block up",title:"Move block up",disabled:l.index===0,class:"rounded p-1.5 hover:bg-accent disabled:pointer-events-none disabled:opacity-30",onClick:b[1]||(b[1]=t=>u("move",l.block.id,"up"))},[e.createVNode(e.unref(i.MoveUp),{class:"size-3.5"})],8,rt),e.createElementVNode("button",{type:"button","aria-label":"Move block down",title:"Move block down",disabled:l.index===l.totalBlocks-1,class:"rounded p-1.5 hover:bg-accent disabled:pointer-events-none disabled:opacity-30",onClick:b[2]||(b[2]=t=>u("move",l.block.id,"down"))},[e.createVNode(e.unref(i.MoveDown),{class:"size-3.5"})],8,st),e.createElementVNode("button",{type:"button","aria-label":"Duplicate block",title:"Duplicate block",class:"rounded p-1.5 hover:bg-accent",onClick:b[3]||(b[3]=t=>u("duplicate",l.block.id))},[e.createVNode(e.unref(i.Copy),{class:"size-3.5"})]),e.createElementVNode("button",{type:"button","aria-label":"Delete block",title:"Delete block",class:"rounded p-1.5 hover:bg-destructive/10 hover:text-destructive",onClick:b[4]||(b[4]=t=>u("delete",l.block.id))},[e.createVNode(e.unref(i.Trash2),{class:"size-3.5"})])],2),l.block.type==="header"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(v.value),{key:0,class:"m-0 font-bold",style:e.normalizeStyle(V.value)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.block.content.text),1)]),_:1},8,["style"])):l.block.type==="text"?(e.openBlock(),e.createBlock(e.unref(m),{key:1,html:l.block.content.html||"",style:e.normalizeStyle({...V.value,"--email-link-color":l.templateStyles.linkColor})},null,8,["html","style"])):l.block.type==="button"?(e.openBlock(),e.createElementBlock("div",{key:2,style:e.normalizeStyle({textAlign:l.block.content.align||"center"})},[e.createElementVNode("span",{class:"inline-block px-7 py-3 text-[15px] font-semibold",style:e.normalizeStyle({backgroundColor:l.block.content.variant==="secondary"?"transparent":l.templateStyles.primaryColor,color:l.block.content.variant==="secondary"?l.templateStyles.primaryColor:l.templateStyles.primaryForeground,border:l.block.content.variant==="secondary"?`2px solid ${l.templateStyles.primaryColor}`:"none",borderRadius:l.templateStyles.borderRadius+"px"})},e.toDisplayString(l.block.content.text),5)],4)):l.block.type==="image"?(e.openBlock(),e.createElementBlock("div",{key:3,style:e.normalizeStyle({textAlign:l.block.content.align||"center"})},[c.value?(e.openBlock(),e.createElementBlock("img",{key:1,src:c.value,alt:l.block.content.alt||"",style:e.normalizeStyle({width:C(l.block.content.width,600,800)+"px",maxWidth:"100%"}),class:"inline-block h-auto",draggable:"false"},null,12,ct)):(e.openBlock(),e.createElementBlock("div",{key:0,class:"inline-flex max-w-full items-center justify-center rounded-lg border-2 border-dashed bg-muted/30",style:e.normalizeStyle({width:Math.min(l.block.content.width||200,400)+"px",minHeight:"120px"})},[e.createElementVNode("div",dt,[e.createVNode(e.unref(i.Image),{class:"mx-auto size-8 text-muted-foreground/40"}),e.createElementVNode("p",it,e.toDisplayString(l.block.content.src?"Image preview available after variables are filled":"Select to add an image"),1)])],4))],4)):l.block.type==="divider"?(e.openBlock(),e.createElementBlock("hr",{key:4,class:"m-0 border-0",style:e.normalizeStyle({borderTopColor:l.block.content.color||"#e5e7eb",borderTopWidth:`${C(l.block.content.thickness,1,8)}px`,borderTopStyle:["solid","dashed","dotted"].includes(l.block.content.style)?l.block.content.style:"solid"})},null,4)):l.block.type==="spacer"?(e.openBlock(),e.createElementBlock("div",{key:5,style:e.normalizeStyle({height:`${C(l.block.content.height,24,200)}px`}),class:"min-h-2"},null,4)):l.block.type==="columns"?(e.openBlock(),e.createElementBlock("div",{key:6,class:"grid gap-2 p-2",style:e.normalizeStyle({gridTemplateColumns:`repeat(${Math.min(l.block.content.columns?.length||2,4)}, minmax(0, 1fr))`,backgroundColor:l.templateStyles.bodyBg,borderRadius:l.templateStyles.borderRadius+"px"})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.block.content.columns,(t,p)=>(e.openBlock(),e.createElementBlock("div",{key:p,class:"min-w-0 px-3 py-2"},[e.createElementVNode("p",{class:"m-0 text-xs font-semibold uppercase tracking-wide",style:e.normalizeStyle({color:l.templateStyles.secondaryTextColor})},e.toDisplayString(t.label),5),e.createElementVNode("p",{class:"mb-0 mt-1 break-words text-[15px] font-medium",style:e.normalizeStyle({color:l.templateStyles.textColor})},e.toDisplayString(t.value),5)]))),128))],4)):e.createCommentVNode("",!0)],46,ot))}}),mt=Ee._export_sfc(ut,[["__scopeId","data-v-48c20c32"]]),pt={class:"flex min-w-0 flex-1 flex-col bg-background","aria-label":"Email builder"},vt={class:"flex flex-wrap items-center justify-between gap-3 border-b bg-card px-4 py-3"},ft={class:"min-w-0 flex-1"},xt={class:"truncate text-sm font-semibold"},bt={class:"mt-0.5 text-xs text-muted-foreground",role:"status"},gt={class:"flex items-center gap-1.5"},yt={class:"flex flex-wrap items-center justify-between gap-2 border-b bg-card px-4 py-2"},kt={class:"flex gap-1 rounded-md bg-muted p-0.5","aria-label":"Editor mode"},Vt={key:0,class:"flex items-center gap-1","aria-label":"Preview viewport"},Nt={class:"ml-1 text-[11px] tabular-nums text-muted-foreground"},Ct={key:1,class:"flex items-center gap-2"},ht={key:0,class:"flex flex-wrap gap-1 border-b bg-card/50 px-3 py-2","aria-label":"Add email block"},Bt={key:1,class:"border-b bg-card px-4 py-2"},Et={class:"flex items-center justify-between gap-3"},wt={class:"truncate text-xs"},St={key:0,class:"space-y-3 py-3"},Tt={class:"flex items-center gap-2 text-xs"},Dt={class:"grid max-h-48 grid-cols-1 gap-2 overflow-y-auto sm:grid-cols-2"},$t={class:"mb-1 block font-mono text-muted-foreground"},Ut={key:2,class:"flex items-center justify-between gap-2 border-b bg-destructive/5 px-4 py-3 text-sm text-destructive",role:"alert"},zt={key:3,class:"max-h-28 overflow-auto border-b bg-amber-500/10 px-4 py-2 text-xs",role:"alert"},Mt={class:"relative min-h-0 flex-1 overflow-auto bg-muted/40"},Lt={key:0,class:"sticky top-2 z-10 mx-auto flex w-fit items-center gap-2 rounded-full border bg-card px-3 py-1.5 text-xs shadow-sm",role:"status"},It=["src"],At={key:1,class:"rounded-lg border-2 border-dashed p-8 text-center"},Rt=["data-email-block-id"],jt={key:0,"aria-hidden":"true",class:"pointer-events-none absolute -top-1 inset-x-0 z-20 border-t-2 border-primary"},Ft={key:2,class:"relative h-8 text-center text-xs leading-8 text-muted-foreground"},Pt={key:0,"aria-hidden":"true",class:"pointer-events-none absolute inset-x-0 top-0 border-t-2 border-primary"},Ht={key:1,class:"mt-3"},Ot={key:2,class:"h-full min-h-[500px] p-3 sm:p-5"},qt=["srcdoc"],Wt={key:3,class:"h-full p-4"},Jt=["value"],Yt={class:"flex flex-wrap items-center justify-between gap-2 border-t bg-card px-4 py-2 text-[11px] text-muted-foreground"},Kt={key:0,class:"relative"},Gt={class:"flex cursor-pointer list-none items-center gap-1 text-amber-600"},Qt={class:"absolute bottom-6 right-0 z-20 w-72 space-y-2 rounded-md border bg-card p-3 text-xs shadow-lg"},Zt={key:1,class:"flex items-center gap-1"},Xt={key:1,class:"flex flex-1 flex-col items-center justify-center p-8 text-center"},_t=e.defineComponent({__name:"EmailCanvas",props:{template:{},selectedBlockId:{},templateStyles:{},saving:{type:Boolean},hasUnsavedChanges:{type:Boolean},canUndo:{type:Boolean},canRedo:{type:Boolean},dirtyCount:{},canEdit:{type:Boolean},canCreate:{type:Boolean},canDelete:{type:Boolean}},emits:["select-block","add-block","move-block","reorder-block","duplicate-block","delete-block","save","undo","redo","duplicate-template","create","delete-template"],setup(l,{emit:E}){const a=l,u=E,d=te.useModuleApi(),k=N=>d.post("/render",{body:N}),v=e.ref(a.canEdit?"edit":"preview"),C=e.ref("desktop"),L=e.ref("mjml"),V=e.computed(()=>C.value==="mobile"?375:C.value==="tablet"?768:Math.max(680,a.templateStyles.contentWidth+80)),c=e.ref(null),m=e.ref(!1),y=e.ref(""),T=e.ref(!1),x=e.ref(!1),b=e.ref(!0),t=e.reactive({agency_name:"Your agency",user_name:"Alex Morgan",user_email:"alex@example.com",project_name:"Your project",year:String(new Date().getFullYear()),inviter_name:"Jamie",support_email:"support@example.com",dashboard_url:"https://example.com/dashboard",invite_url:"https://example.com/invitation",reset_url:"https://example.com/reset",unsubscribe_url:"https://example.com/unsubscribe",expires_at:new Date(Date.now()+7*864e5).toLocaleDateString()}),p=e.computed(()=>Ie(a.template?.subject,a.template?.preheader,a.template?.blocks,a.templateStyles,a.templateStyles.showUnsubscribe?"{{unsubscribe_url}}":"")),h=e.computed(()=>p.value.filter(N=>!t[N])),U=e.computed(()=>{const N=[];for(const[r,B]of(a.template?.blocks||[]).entries())B.type==="image"&&!B.content.src&&N.push(`Block ${r+1}: add an image URL.`),B.type==="image"&&B.content.src&&!B.content.alt&&N.push(`Block ${r+1}: add alternative text for accessibility.`),B.type==="button"&&(!B.content.url||B.content.url==="#")&&N.push(`Block ${r+1}: add a destination for the button.`);return a.template?.subject.trim()||N.unshift("Add an email subject in Settings."),N}),w=e.computed(()=>L.value==="mjml"?c.value?.mjml||"":c.value?.html||""),F=e.computed(()=>c.value?Math.ceil(new TextEncoder().encode(c.value.html).length/1024):0),H=e.computed(()=>c.value?.subject||a.template?.subject);let q,z=0;async function D(){const N=++z;if(a.template){m.value=!0,y.value="";try{const r=await k({blocks:a.template.blocks,subject:a.template.subject,preheader:a.template.preheader,styles:a.templateStyles,variables:v.value==="source"||!b.value?{}:{...t},preserveVariables:v.value==="source"||!b.value});N===z&&(c.value=r)}catch(r){N===z&&(y.value=r?.data?.statusMessage||(r instanceof Error?r.message:"Could not compile this email."),c.value=null)}finally{N===z&&(m.value=!1)}}}e.watch(()=>[a.template,a.templateStyles,t,b.value,v.value],()=>{if(clearTimeout(q),z++,v.value==="edit"){m.value=!1;return}m.value=!0,q=setTimeout(D,450)},{deep:!0,immediate:!0}),e.watch(()=>a.template?.id,()=>{c.value=null,y.value="",x.value=!1}),e.onBeforeUnmount(()=>{clearTimeout(q),z++});async function Z(N){if(!a.template||T.value)return;T.value=!0;const r=a.template.name;try{const B=await k({blocks:a.template.blocks,subject:a.template.subject,preheader:a.template.preheader,styles:a.templateStyles,preserveVariables:!0}),Q=new Blob([B[N]],{type:N==="html"?"text/html;charset=utf-8":"text/plain;charset=utf-8"}),J=URL.createObjectURL(Q),Y=document.createElement("a");Y.href=J,Y.download=`${r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"email"}.${N}`,document.body.appendChild(Y),Y.click(),Y.remove(),setTimeout(()=>URL.revokeObjectURL(J),1e3),O.toast.success(`${N.toUpperCase()} exported with template variables preserved`)}catch(B){O.toast.error(B?.data?.statusMessage||(B instanceof Error?B.message:"Export failed"))}finally{T.value=!1}}async function K(){try{await navigator.clipboard.writeText(w.value),O.toast.success("Source copied")}catch{O.toast.error("Could not copy. Use Download instead.")}}const R=e.ref(null),n=e.ref(null),M=e.ref(!1),I=e.ref(null);function le(){R.value=null,n.value=null,M.value=!1}function ue(N){const r=Array.from(I.value?.querySelectorAll("[data-email-block-id]")??[]);for(const B of r){const Q=B.getBoundingClientRect();if(N<Q.top+Q.height/2)return B.dataset.emailBlockId??null}return null}function W(N){!R.value||!a.canEdit||(N.preventDefault(),N.dataTransfer&&(N.dataTransfer.dropEffect="move"),n.value=ue(N.clientY),M.value=!0)}function oe(N){!R.value||!a.canEdit||(N.preventDefault(),u("reorder-block",R.value,ue(N.clientY)),le())}function G(N){(!(N.relatedTarget instanceof Node)||!N.currentTarget.contains(N.relatedTarget))&&(M.value=!1)}e.watch(()=>[a.template?.id,v.value],le);const ne=[{type:"header",label:"Heading",icon:i.Type},{type:"text",label:"Text",icon:i.AlignLeft},{type:"button",label:"Button",icon:i.MousePointer},{type:"image",label:"Image",icon:i.Image},{type:"columns",label:"Columns",icon:i.Columns},{type:"divider",label:"Divider",icon:i.Minus},{type:"spacer",label:"Spacer",icon:i.Square}];return(N,r)=>{const B=e.resolveComponent("Button"),Q=e.resolveComponent("DropdownMenuTrigger"),J=e.resolveComponent("DropdownMenuItem"),Y=e.resolveComponent("DropdownMenuSeparator"),ve=e.resolveComponent("DropdownMenuContent"),fe=e.resolveComponent("DropdownMenu"),me=e.resolveComponent("Input");return e.openBlock(),e.createElementBlock("section",pt,[l.template?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("header",vt,[e.createElementVNode("div",ft,[e.createElementVNode("h1",xt,e.toDisplayString(l.template.name),1),e.createElementVNode("p",bt,e.toDisplayString(l.hasUnsavedChanges?`Unsaved changes${l.dirtyCount>1?` in ${l.dirtyCount} templates`:""}`:"All changes saved"),1)]),e.createElementVNode("div",gt,[l.canEdit?(e.openBlock(),e.createBlock(B,{key:0,variant:"ghost",size:"icon",class:"size-8",disabled:!l.canUndo,"aria-label":"Undo",title:"Undo (⌘/Ctrl Z)",onClick:r[0]||(r[0]=f=>u("undo"))},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Undo2),{class:"size-4"})]),_:1},8,["disabled"])):e.createCommentVNode("",!0),l.canEdit?(e.openBlock(),e.createBlock(B,{key:1,variant:"ghost",size:"icon",class:"size-8",disabled:!l.canRedo,"aria-label":"Redo",title:"Redo (⌘/Ctrl Shift Z)",onClick:r[1]||(r[1]=f=>u("redo"))},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Redo2),{class:"size-4"})]),_:1},8,["disabled"])):e.createCommentVNode("",!0),e.createVNode(fe,null,{default:e.withCtx(()=>[e.createVNode(Q,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(B,{variant:"outline",size:"sm",class:"h-8","aria-label":"Template actions"},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Download),{class:"size-3.5"}),r[17]||(r[17]=e.createElementVNode("span",{class:"hidden 2xl:inline"},"Export",-1))]),_:1})]),_:1}),e.createVNode(ve,{align:"end"},{default:e.withCtx(()=>[e.createVNode(J,{disabled:T.value,onSelect:r[2]||(r[2]=f=>Z("mjml"))},{default:e.withCtx(()=>[...r[18]||(r[18]=[e.createTextVNode("Download MJML",-1)])]),_:1},8,["disabled"]),e.createVNode(J,{disabled:T.value,onSelect:r[3]||(r[3]=f=>Z("html"))},{default:e.withCtx(()=>[...r[19]||(r[19]=[e.createTextVNode("Download HTML",-1)])]),_:1},8,["disabled"]),e.createVNode(Y),l.canCreate?(e.openBlock(),e.createBlock(J,{key:0,onSelect:r[4]||(r[4]=f=>u("duplicate-template"))},{default:e.withCtx(()=>[...r[20]||(r[20]=[e.createTextVNode("Duplicate template",-1)])]),_:1})):e.createCommentVNode("",!0),l.canDelete?(e.openBlock(),e.createBlock(J,{key:1,class:"text-destructive",onSelect:r[5]||(r[5]=f=>u("delete-template"))},{default:e.withCtx(()=>[...r[21]||(r[21]=[e.createTextVNode("Delete template",-1)])]),_:1})):e.createCommentVNode("",!0)]),_:1})]),_:1}),l.canEdit?(e.openBlock(),e.createBlock(B,{key:2,size:"sm",class:"h-8",disabled:!l.hasUnsavedChanges||l.saving,onClick:r[6]||(r[6]=f=>u("save"))},{default:e.withCtx(()=>[l.saving?(e.openBlock(),e.createBlock(e.unref(i.Loader2),{key:0,class:"size-3.5 animate-spin"})):(e.openBlock(),e.createBlock(e.unref(i.Check),{key:1,class:"size-3.5"})),e.createTextVNode(e.toDisplayString(l.saving?"Saving…":"Save changes"),1)]),_:1},8,["disabled"])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",yt,[e.createElementVNode("div",kt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList([{value:"edit",label:"Build",icon:e.unref(i.Pencil)},{value:"preview",label:"Preview",icon:e.unref(i.Eye)},{value:"source",label:"Source",icon:e.unref(i.Code2)}],f=>e.withDirectives((e.openBlock(),e.createBlock(B,{key:f.value,variant:v.value===f.value?"secondary":"ghost",size:"sm",class:"h-7 px-2.5 text-xs","aria-pressed":v.value===f.value,onClick:A=>v.value=f.value},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{class:"size-3.5"})),e.createTextVNode(e.toDisplayString(f.label),1)]),_:2},1032,["variant","aria-pressed","onClick"])),[[e.vShow,f.value!=="edit"||l.canEdit]])),128))]),v.value!=="source"?(e.openBlock(),e.createElementBlock("div",Vt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList([{value:"desktop",label:"Desktop",icon:e.unref(i.Monitor)},{value:"tablet",label:"Tablet",icon:e.unref(i.Tablet)},{value:"mobile",label:"Mobile",icon:e.unref(i.Smartphone)}],f=>(e.openBlock(),e.createBlock(B,{key:f.value,variant:C.value===f.value?"secondary":"ghost",size:"icon",class:"size-7","aria-label":f.label,title:f.label,"aria-pressed":C.value===f.value,onClick:A=>C.value=f.value},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{class:"size-3.5"}))]),_:2},1032,["variant","aria-label","title","aria-pressed","onClick"]))),128)),e.createElementVNode("span",Nt,e.toDisplayString(V.value)+"px",1)])):(e.openBlock(),e.createElementBlock("div",Ct,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":r[7]||(r[7]=f=>L.value=f),"aria-label":"Source format",class:"h-7 rounded border bg-background px-2 text-xs"},[...r[22]||(r[22]=[e.createElementVNode("option",{value:"mjml"},"MJML",-1),e.createElementVNode("option",{value:"html"},"HTML",-1)])],512),[[e.vModelSelect,L.value]]),e.createVNode(B,{variant:"ghost",size:"sm",class:"h-7 text-xs",disabled:!w.value||m.value,onClick:K},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Copy),{class:"size-3.5"}),r[23]||(r[23]=e.createTextVNode(" Copy",-1))]),_:1},8,["disabled"])]))]),v.value==="edit"?(e.openBlock(),e.createElementBlock("div",ht,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(ne,f=>e.createVNode(B,{key:f.type,variant:"ghost",size:"sm",class:"h-8 gap-1.5 px-2 text-xs",title:`Add ${f.label.toLowerCase()}${l.selectedBlockId?" after selection":""}`,onClick:A=>u("add-block",f.type)},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{class:"size-3.5"})),e.createTextVNode(e.toDisplayString(f.label),1)]),_:2},1032,["title","onClick"])),64))])):v.value==="preview"?(e.openBlock(),e.createElementBlock("div",Bt,[e.createElementVNode("div",Et,[e.createElementVNode("p",wt,[r[24]||(r[24]=e.createElementVNode("span",{class:"text-muted-foreground"},"Subject: ",-1)),e.createTextVNode(e.toDisplayString(H.value),1)]),e.createVNode(B,{variant:"ghost",size:"sm",class:"h-7 shrink-0 text-xs",onClick:r[8]||(r[8]=f=>x.value=!x.value)},{default:e.withCtx(()=>[e.createTextVNode("Sample data"+e.toDisplayString(h.value.length?` (${h.value.length} missing)`:""),1)]),_:1})]),x.value?(e.openBlock(),e.createElementBlock("div",St,[e.createElementVNode("label",Tt,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":r[9]||(r[9]=f=>b.value=f),type:"checkbox"},null,512),[[e.vModelCheckbox,b.value]]),r[25]||(r[25]=e.createTextVNode(" Preview with sample values",-1))]),r[26]||(r[26]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"},"Preview only. Saved HTML and downloads preserve your template variables.",-1)),e.createElementVNode("div",Dt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,f=>(e.openBlock(),e.createElementBlock("label",{key:f,class:"text-xs"},[e.createElementVNode("span",$t,e.toDisplayString(f),1),e.createVNode(me,{modelValue:t[f],"onUpdate:modelValue":A=>t[f]=A,disabled:!b.value,placeholder:`Sample ${f.replaceAll("_"," ")}`,class:"h-8 text-xs"},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])]))),128))])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),y.value&&v.value!=="edit"?(e.openBlock(),e.createElementBlock("div",Ut,[e.createElementVNode("span",null,e.toDisplayString(y.value),1),e.createVNode(B,{variant:"outline",size:"sm",onClick:D},{default:e.withCtx(()=>[...r[27]||(r[27]=[e.createTextVNode("Retry",-1)])]),_:1})])):e.createCommentVNode("",!0),v.value!=="edit"&&c.value?.errors?.length?(e.openBlock(),e.createElementBlock("div",zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value.errors,(f,A)=>(e.openBlock(),e.createElementBlock("p",{key:A},e.toDisplayString(f.line?`Line ${f.line}: `:"")+e.toDisplayString(f.message),1))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Mt,[m.value&&v.value!=="edit"?(e.openBlock(),e.createElementBlock("div",Lt,[e.createVNode(e.unref(i.Loader2),{class:"size-3 animate-spin"}),r[28]||(r[28]=e.createTextVNode(" Compiling email…",-1))])):e.createCommentVNode("",!0),v.value==="edit"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"min-h-full p-4 sm:p-6",style:e.normalizeStyle({backgroundColor:l.templateStyles.bodyBg}),onDragenter:W,onDragover:W,onDrop:oe,onDragleave:G},[e.createElementVNode("div",{class:"mx-auto w-full overflow-visible rounded-lg shadow-sm",style:e.normalizeStyle({maxWidth:Math.min(V.value,l.templateStyles.contentWidth)+"px",backgroundColor:l.templateStyles.contentBg,fontFamily:l.templateStyles.fontFamily,borderRadius:l.templateStyles.borderRadius+"px"})},[e.createElementVNode("div",{ref_key:"blockList",ref:I,style:e.normalizeStyle({padding:Math.min(l.templateStyles.contentPadding,C.value==="mobile"?20:64)+"px"})},[l.templateStyles.logoUrl?(e.openBlock(),e.createElementBlock("img",{key:0,src:l.templateStyles.logoUrl,alt:"Agency logo",class:"mx-auto mb-6 max-h-12 max-w-full"},null,8,It)):e.createCommentVNode("",!0),l.template.blocks.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",At,[e.createVNode(e.unref(i.Plus),{class:"mx-auto mb-3 size-5 text-muted-foreground"}),r[30]||(r[30]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"Add your first block using the toolbar.",-1)),e.createVNode(B,{variant:"outline",size:"sm",class:"mt-3",onClick:r[10]||(r[10]=f=>u("add-block","text"))},{default:e.withCtx(()=>[...r[29]||(r[29]=[e.createTextVNode("Add text",-1)])]),_:1})])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.template.blocks,(f,A)=>(e.openBlock(),e.createElementBlock("div",{key:f.id,"data-email-block-id":f.id,class:e.normalizeClass(["relative",{"opacity-40":R.value===f.id}])},[R.value&&M.value&&n.value===f.id?(e.openBlock(),e.createElementBlock("div",jt)):e.createCommentVNode("",!0),e.createVNode(mt,{block:f,index:A,"total-blocks":l.template.blocks.length,"selected-block-id":l.selectedBlockId,"template-styles":l.templateStyles,onSelect:r[11]||(r[11]=j=>u("select-block",j)),onMove:r[12]||(r[12]=(j,X)=>u("move-block",j,X)),onDuplicate:r[13]||(r[13]=j=>u("duplicate-block",j)),onDelete:r[14]||(r[14]=j=>u("delete-block",j)),onDragStart:r[15]||(r[15]=j=>R.value=j),onDragEnd:le},null,8,["block","index","total-blocks","selected-block-id","template-styles"])],10,Rt))),128)),R.value?(e.openBlock(),e.createElementBlock("div",Ft,[M.value&&n.value===null?(e.openBlock(),e.createElementBlock("div",Pt)):e.createCommentVNode("",!0),r[31]||(r[31]=e.createTextVNode("Drop here to move to end",-1))])):e.createCommentVNode("",!0)],4),l.templateStyles.footerText||l.templateStyles.showUnsubscribe||l.templateStyles.showSocialLinks?(e.openBlock(),e.createElementBlock("div",{key:0,class:"rounded-b-lg px-6 py-6 text-center text-xs",style:e.normalizeStyle({backgroundColor:l.templateStyles.footerBg,color:l.templateStyles.footerTextColor})},[e.createElementVNode("p",null,e.toDisplayString(l.templateStyles.footerText),1),l.templateStyles.showUnsubscribe?(e.openBlock(),e.createElementBlock("p",{key:0,class:"mt-3 underline",style:e.normalizeStyle({color:l.templateStyles.linkColor})},"Unsubscribe",4)):e.createCommentVNode("",!0),l.templateStyles.showSocialLinks?(e.openBlock(),e.createElementBlock("p",Ht,"Social links appear when their URL variables are supplied.")):e.createCommentVNode("",!0)],4)):e.createCommentVNode("",!0)],4)],36)):v.value==="preview"&&c.value?(e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("iframe",{srcdoc:c.value.html,title:"Compiled email preview",sandbox:"",referrerpolicy:"no-referrer",class:"mx-auto block h-full min-h-[480px] max-w-none border bg-white shadow-sm",style:e.normalizeStyle({width:V.value+"px"})},null,12,qt)])):v.value==="source"?(e.openBlock(),e.createElementBlock("div",Wt,[r[32]||(r[32]=e.createElementVNode("p",{class:"mb-3 text-xs text-muted-foreground"},"Generated from your blocks. Downloads preserve template variables.",-1)),e.createElementVNode("textarea",{value:w.value,readonly:"","aria-label":"Generated email source",spellcheck:"false",class:"h-[calc(100%-2rem)] min-h-[350px] w-full resize-none rounded-md border bg-card p-4 font-mono text-xs leading-5 outline-none focus:ring-2 focus:ring-ring"},null,8,Jt)])):e.createCommentVNode("",!0)]),e.createElementVNode("footer",Yt,[e.createElementVNode("span",null,e.toDisplayString(l.template.blocks.length)+" blocks · "+e.toDisplayString(v.value==="edit"?"Select a block to edit · Drag to reorder":`MJML preview${F.value?` · ${F.value} KB HTML`:""}`),1),U.value.length?(e.openBlock(),e.createElementBlock("details",Kt,[e.createElementVNode("summary",Gt,[e.createVNode(e.unref(i.AlertCircle),{class:"size-3"}),e.createTextVNode(e.toDisplayString(U.value.length)+" "+e.toDisplayString(U.value.length===1?"check":"checks")+" to review",1)]),e.createElementVNode("ul",Qt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(U.value,f=>(e.openBlock(),e.createElementBlock("li",{key:f},e.toDisplayString(f),1))),128))])])):v.value!=="edit"&&c.value&&!m.value&&!c.value.errors?.length?(e.openBlock(),e.createElementBlock("span",Zt,[e.createVNode(e.unref(i.Check),{class:"size-3"}),r[33]||(r[33]=e.createTextVNode("Compiled successfully",-1))])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock("div",Xt,[e.createVNode(e.unref(i.Mail),{class:"mb-4 size-10 text-muted-foreground/40"}),r[35]||(r[35]=e.createElementVNode("h1",{class:"text-lg font-semibold"},"Build your next email",-1)),r[36]||(r[36]=e.createElementVNode("p",{class:"mt-2 max-w-xs text-sm text-muted-foreground"},"Choose a template or create one with responsive blocks and a live email preview.",-1)),l.canCreate?(e.openBlock(),e.createBlock(B,{key:0,class:"mt-5",onClick:r[16]||(r[16]=f=>u("create"))},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Plus),{class:"size-4"}),r[34]||(r[34]=e.createTextVNode("Create template",-1))]),_:1})):e.createCommentVNode("",!0)]))])}}}),el={class:"overflow-hidden rounded-md border bg-background focus-within:ring-2 focus-within:ring-ring/30"},tl={class:"flex flex-wrap items-center gap-0.5 border-b bg-muted/30 p-1",role:"toolbar","aria-label":"Text formatting"},ll=["title","aria-label","aria-pressed","onClick"],ol=["aria-expanded"],nl=["aria-pressed","title"],al={key:0,class:"space-y-2 border-b p-2"},rl={class:"block text-xs font-medium"},sl={key:0,role:"alert",class:"text-xs text-destructive"},dl={class:"flex justify-end gap-1"},il=["value","aria-label"],cl=e.defineComponent({__name:"RichTextEditor",props:{modelValue:{},label:{}},emits:["update:modelValue"],setup(l,{emit:E}){const a=l,u=E,d=e.ref(!1),k=e.ref(!1),v=e.ref(""),C=e.ref(""),V={default:null,parseHTML:t=>Object.entries(Te(t)).map(([p,h])=>`${p.replace(/[A-Z]/g,U=>`-${U.toLowerCase()}`)}: ${h}`).join("; ")||null,renderHTML:t=>t.emailStyle?{style:t.emailStyle}:{}},c=de.Extension.create({name:"emailTextStyles",addGlobalAttributes(){return[{types:["paragraph","heading","blockquote","listItem"],attributes:{emailStyle:V}}]}}),m=de.Mark.create({name:"emailInlineStyle",addAttributes:()=>({emailStyle:V}),parseHTML:()=>[{tag:"span[style]"}],renderHTML:({HTMLAttributes:t})=>["span",t,0]}),y=de.useEditor({content:a.modelValue||"",extensions:[de.index_default$1.configure({heading:{levels:[1,2,3]},code:!1,codeBlock:!1,horizontalRule:!1,link:{openOnClick:!1,defaultProtocol:"https",isAllowedUri:Be}}),c,m],editorProps:{attributes:{class:"email-text-editor min-h-36 px-3 py-2 text-sm focus:outline-none","aria-label":a.label||"Email text content",role:"textbox","aria-multiline":"true"}},onUpdate:({editor:t})=>u("update:modelValue",t.getHTML())});e.watch(()=>a.modelValue,t=>{y.value&&y.value.getHTML()!==t&&y.value.commands.setContent(t||"",{emitUpdate:!1})});const T=e.computed(()=>[{label:"Bold",icon:i.Bold,active:y.value?.isActive("bold"),action:()=>y.value?.chain().focus().toggleBold().run()},{label:"Italic",icon:i.Italic,active:y.value?.isActive("italic"),action:()=>y.value?.chain().focus().toggleItalic().run()},{label:"Underline",icon:i.Underline,active:y.value?.isActive("underline"),action:()=>y.value?.chain().focus().toggleUnderline().run()},{label:"Strikethrough",icon:i.Strikethrough,active:y.value?.isActive("strike"),action:()=>y.value?.chain().focus().toggleStrike().run()},{label:"Bullet list",icon:i.List,active:y.value?.isActive("bulletList"),action:()=>y.value?.chain().focus().toggleBulletList().run()},{label:"Numbered list",icon:i.ListOrdered,active:y.value?.isActive("orderedList"),action:()=>y.value?.chain().focus().toggleOrderedList().run()}]);function x(){v.value=y.value?.getAttributes("link").href||"",C.value="",k.value=!k.value}function b(){const t=v.value.trim();if(t&&!Be(t)){C.value="Use https://, mailto:, tel:, or a template variable.";return}t?y.value?.chain().focus().extendMarkRange("link").setLink({href:t}).run():y.value?.chain().focus().extendMarkRange("link").unsetLink().run(),k.value=!1}return(t,p)=>{const h=e.resolveComponent("Input"),U=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",el,[e.createElementVNode("div",tl,[d.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,w=>(e.openBlock(),e.createElementBlock("button",{key:w.label,type:"button",title:w.label,"aria-label":w.label,"aria-pressed":!!w.active,class:e.normalizeClass(["rounded p-1.5 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring",w.active?"bg-accent text-foreground":"text-muted-foreground"]),onClick:w.action},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"size-3.5"}))],10,ll))),128)),e.createElementVNode("button",{type:"button",title:"Add or edit link","aria-label":"Add or edit link","aria-expanded":k.value,class:"rounded p-1.5 hover:bg-accent",onClick:x},[e.createVNode(e.unref(i.Link),{class:"size-3.5"})],8,ol),e.unref(y)?.isActive("link")?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",title:"Remove link","aria-label":"Remove link",class:"rounded p-1.5 hover:bg-accent",onClick:p[0]||(p[0]=w=>e.unref(y)?.chain().focus().extendMarkRange("link").unsetLink().run())},[e.createVNode(e.unref(i.Unlink),{class:"size-3.5"})])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",title:"Clear formatting","aria-label":"Clear formatting",class:"rounded p-1.5 hover:bg-accent",onClick:p[1]||(p[1]=w=>e.unref(y)?.chain().focus().unsetAllMarks().clearNodes().run())},[e.createVNode(e.unref(i.RemoveFormatting),{class:"size-3.5"})])],64)),e.createElementVNode("button",{type:"button","aria-pressed":d.value,class:"ml-auto inline-flex items-center gap-1 rounded px-1.5 py-1 text-[11px] hover:bg-accent",title:d.value?"Switch to visual editor":"Edit HTML source",onClick:p[2]||(p[2]=w=>{d.value=!d.value,k.value=!1})},[e.createVNode(e.unref(i.Code2),{class:"size-3.5"}),e.createTextVNode(e.toDisplayString(d.value?"Visual":"HTML"),1)],8,nl)]),k.value&&!d.value?(e.openBlock(),e.createElementBlock("div",al,[e.createElementVNode("label",rl,[p[7]||(p[7]=e.createTextVNode("Link URL ",-1)),e.createVNode(h,{modelValue:v.value,"onUpdate:modelValue":p[3]||(p[3]=w=>v.value=w),class:"mt-1 h-8 text-xs",placeholder:"https://example.com",onKeydown:[e.withKeys(e.withModifiers(b,["prevent"]),["enter"]),p[4]||(p[4]=e.withKeys(e.withModifiers(w=>k.value=!1,["prevent"]),["esc"]))]},null,8,["modelValue","onKeydown"])]),C.value?(e.openBlock(),e.createElementBlock("p",sl,e.toDisplayString(C.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",dl,[e.createVNode(U,{type:"button",size:"sm",variant:"ghost",class:"h-7 text-xs",onClick:p[5]||(p[5]=w=>k.value=!1)},{default:e.withCtx(()=>[...p[8]||(p[8]=[e.createTextVNode("Cancel",-1)])]),_:1}),e.createVNode(U,{type:"button",size:"sm",class:"h-7 text-xs",onClick:b},{default:e.withCtx(()=>[...p[9]||(p[9]=[e.createTextVNode("Apply link",-1)])]),_:1})])])):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("textarea",{key:1,value:l.modelValue,"aria-label":`${l.label||"Email text"} HTML source`,rows:"8",class:"block min-h-36 w-full resize-y bg-transparent p-3 font-mono text-xs outline-none",spellcheck:"false",onInput:p[6]||(p[6]=w=>u("update:modelValue",w.target.value))},null,40,il)):(e.openBlock(),e.createBlock(e.unref(de.EditorContent),{key:2,editor:e.unref(y)},null,8,["editor"]))])}}}),ul=Ee._export_sfc(cl,[["__scopeId","data-v-accbd7a8"]]),ml={class:"p-4 space-y-6"},pl={class:"flex items-center justify-between"},vl={class:"flex items-center gap-2"},fl={class:"text-sm font-semibold"},xl={class:"block text-xs font-medium text-muted-foreground"},bl={key:1,class:"space-y-1.5"},gl={class:"block text-xs font-medium text-muted-foreground"},yl={class:"block text-xs font-medium text-muted-foreground"},kl={class:"block text-xs font-medium text-muted-foreground"},Vl={class:"block text-xs font-medium text-muted-foreground"},Nl={class:"block text-xs font-medium text-muted-foreground"},Cl={class:"block text-xs font-medium text-muted-foreground"},hl={class:"flex items-center gap-2"},Bl=["value"],El={class:"block text-xs font-medium text-muted-foreground"},wl={key:5,class:"block text-xs font-medium text-muted-foreground"},Sl={class:"flex items-center justify-between"},Tl={class:"text-xs font-medium"},Dl=["aria-label","title","disabled","onClick"],$l={class:"block text-xs text-muted-foreground"},Ul={class:"block text-xs text-muted-foreground"},zl={class:"mb-1.5 flex items-center justify-between"},Ml={class:"flex items-center gap-2"},Ll=["value"],Il={class:"block text-xs font-medium text-muted-foreground"},Al={key:8},Rl={class:"border-t pt-4"},jl={class:"grid grid-cols-2 gap-3"},Fl={class:"text-xs text-muted-foreground"},Pl={class:"text-xs text-muted-foreground"},Hl={class:"block text-xs font-medium text-muted-foreground"},Ol={class:"space-y-3"},ql={class:"flex items-center gap-2"},Wl={class:"flex items-center gap-2"},Jl={class:"flex items-center gap-2"},Yl={class:"flex items-center gap-2"},Kl={class:"flex items-center gap-2"},Gl={class:"flex items-center gap-2"},Ql={class:"flex items-center gap-2"},Zl={class:"flex items-center gap-2"},Xl={class:"flex items-center gap-2"},_l={class:"space-y-3"},eo={class:"space-y-3"},to={class:"flex items-center gap-3"},lo={class:"text-xs text-muted-foreground font-mono w-12 text-right"},oo={class:"flex items-center gap-3"},no={class:"text-xs text-muted-foreground font-mono w-12 text-right"},ao={class:"flex items-center gap-3"},ro={class:"text-xs text-muted-foreground font-mono w-12 text-right"},so={class:"space-y-3"},io={class:"flex items-center justify-between"},co=e.defineComponent({__name:"DesignPanel",props:{selectedBlock:{},templateStyles:{}},emits:["deselect-block","update:hasUnsavedChanges"],setup(l,{emit:E}){const a=l,u=E,d=()=>u("update:hasUnsavedChanges",!0),k=[{value:"left",label:"Align left",icon:i.AlignLeft},{value:"center",label:"Align center",icon:i.AlignCenter},{value:"right",label:"Align right",icon:i.AlignRight}],v=e.computed(()=>a.selectedBlock?.content.columns||[]),C=e.computed(()=>a.selectedBlock?.type==="header"?{h1:28,h2:22,h3:18}[a.selectedBlock.content.level]||22:15),L=e.computed(()=>["button","divider"].includes(a.selectedBlock?.type||"")?8:0);function V(b,t){a.selectedBlock&&(a.selectedBlock.content[b]=t,d())}function c(b,t,p,h,U=!1){if(t===""){a.selectedBlock&&delete a.selectedBlock.content[b],d();return}const w=Number(t);Number.isFinite(w)&&V(b,U?Math.min(h,Math.max(p,w)):w)}function m(){v.value.length>=4||V("columns",[...v.value,{label:"Label",value:"Value"}])}function y(b){v.value.length<=1||V("columns",v.value.filter((t,p)=>p!==b))}const T=b=>({header:"Heading",text:"Text Block",button:"Button",image:"Image",divider:"Divider",spacer:"Spacer",columns:"Columns"})[b]??b,x=b=>({header:i.Type,text:i.AlignLeft,button:i.MousePointer,image:i.Image,divider:i.Minus,spacer:i.Square,columns:i.Columns})[b]??i.Square;return(b,t)=>{const p=e.resolveComponent("Input"),h=e.resolveComponent("SegmentedControlButton"),U=e.resolveComponent("SegmentedControl"),w=e.resolveComponent("Button"),F=e.resolveComponent("Separator"),H=e.resolveComponent("SelectValue"),q=e.resolveComponent("SelectTrigger"),z=e.resolveComponent("SelectItem"),D=e.resolveComponent("SelectContent"),Z=e.resolveComponent("Select"),K=e.resolveComponent("Textarea"),R=e.resolveComponent("Switch");return e.openBlock(),e.createElementBlock("div",ml,[l.selectedBlock?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(),e.createElementBlock("section",{key:l.selectedBlock.id,"aria-label":"Selected block design",class:"space-y-4"},[e.createElementVNode("div",pl,[e.createElementVNode("div",vl,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x(l.selectedBlock.type)),{class:"size-4 text-muted-foreground"})),e.createElementVNode("h4",fl,e.toDisplayString(T(l.selectedBlock.type)),1)]),e.createElementVNode("button",{type:"button","aria-label":"Deselect block",title:"Deselect block",class:"rounded p-1 hover:bg-accent",onClick:t[0]||(t[0]=n=>u("deselect-block"))},[e.createVNode(e.unref(i.X),{class:"size-3.5 text-muted-foreground"})])]),l.selectedBlock.type==="header"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("label",xl,[t[54]||(t[54]=e.createTextVNode("Heading text ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.text,"onUpdate:modelValue":[t[1]||(t[1]=n=>l.selectedBlock.content.text=n),d],class:"mt-1.5 h-9 text-sm"},null,8,["modelValue"])]),e.createElementVNode("div",null,[t[58]||(t[58]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Heading level",-1)),e.createVNode(U,{"model-value":l.selectedBlock.content.level||"h2",class:"w-full","aria-label":"Heading level","onUpdate:modelValue":t[2]||(t[2]=n=>V("level",n))},{default:e.withCtx(()=>[e.createVNode(h,{value:"h1",class:"text-xs"},{default:e.withCtx(()=>[...t[55]||(t[55]=[e.createTextVNode("H1",-1)])]),_:1}),e.createVNode(h,{value:"h2",class:"text-xs"},{default:e.withCtx(()=>[...t[56]||(t[56]=[e.createTextVNode("H2",-1)])]),_:1}),e.createVNode(h,{value:"h3",class:"text-xs"},{default:e.withCtx(()=>[...t[57]||(t[57]=[e.createTextVNode("H3",-1)])]),_:1})]),_:1},8,["model-value"])])],64)):l.selectedBlock.type==="text"?(e.openBlock(),e.createElementBlock("div",bl,[t[59]||(t[59]=e.createElementVNode("p",{class:"text-xs font-medium text-muted-foreground"},"Content",-1)),(e.openBlock(),e.createBlock(ul,{key:l.selectedBlock.id,"model-value":l.selectedBlock.content.html||"","onUpdate:modelValue":t[3]||(t[3]=n=>V("html",n))},null,8,["model-value"])),t[60]||(t[60]=e.createElementVNode("p",{class:"text-[11px] leading-relaxed text-muted-foreground"},[e.createTextVNode("Variables work in text and links, e.g. "),e.createElementVNode("code",null,"{{user_name}}"),e.createTextVNode(".")],-1))])):l.selectedBlock.type==="button"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("label",gl,[t[61]||(t[61]=e.createTextVNode("Button text ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.text,"onUpdate:modelValue":[t[4]||(t[4]=n=>l.selectedBlock.content.text=n),d],class:"mt-1.5 h-9 text-sm"},null,8,["modelValue"])]),e.createElementVNode("label",yl,[t[62]||(t[62]=e.createTextVNode("Link URL ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.url,"onUpdate:modelValue":[t[5]||(t[5]=n=>l.selectedBlock.content.url=n),d],class:"mt-1.5 h-9 text-sm",placeholder:"https://… or {{invite_url}}"},null,8,["modelValue"])]),e.createElementVNode("div",null,[t[65]||(t[65]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Style",-1)),e.createVNode(U,{"model-value":l.selectedBlock.content.variant||"primary",class:"w-full","aria-label":"Button style","onUpdate:modelValue":t[6]||(t[6]=n=>V("variant",n))},{default:e.withCtx(()=>[e.createVNode(h,{value:"primary",class:"text-xs"},{default:e.withCtx(()=>[...t[63]||(t[63]=[e.createTextVNode("Filled",-1)])]),_:1}),e.createVNode(h,{value:"secondary",class:"text-xs"},{default:e.withCtx(()=>[...t[64]||(t[64]=[e.createTextVNode("Outline",-1)])]),_:1})]),_:1},8,["model-value"])])],64)):l.selectedBlock.type==="image"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("label",kl,[t[66]||(t[66]=e.createTextVNode("Image URL ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.src,"onUpdate:modelValue":[t[7]||(t[7]=n=>l.selectedBlock.content.src=n),d],class:"mt-1.5 h-9 text-sm",placeholder:"https://…"},null,8,["modelValue"])]),e.createElementVNode("label",Vl,[t[67]||(t[67]=e.createTextVNode("Alt text ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.alt,"onUpdate:modelValue":[t[8]||(t[8]=n=>l.selectedBlock.content.alt=n),d],class:"mt-1.5 h-9 text-sm",placeholder:"Describe the image"},null,8,["modelValue"])]),e.createElementVNode("label",Nl,[t[68]||(t[68]=e.createTextVNode("Link URL (optional) ",-1)),e.createVNode(p,{modelValue:l.selectedBlock.content.href,"onUpdate:modelValue":[t[9]||(t[9]=n=>l.selectedBlock.content.href=n),d],class:"mt-1.5 h-9 text-sm",placeholder:"https://…"},null,8,["modelValue"])]),e.createElementVNode("label",Cl,[t[69]||(t[69]=e.createTextVNode("Width (px) ",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.width??600,type:"number",min:"24",max:"800",class:"mt-1.5 h-9 text-sm","onUpdate:modelValue":t[10]||(t[10]=n=>c("width",n,24,800)),onChange:t[11]||(t[11]=n=>c("width",n.target.value,24,800,!0))},null,8,["model-value"])]),t[70]||(t[70]=e.createElementVNode("p",{class:"text-[11px] text-muted-foreground"},"Images scale down to fit the email on smaller screens.",-1))],64)):l.selectedBlock.type==="divider"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.createElementVNode("div",null,[t[71]||(t[71]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Line color",-1)),e.createElementVNode("div",hl,[e.createElementVNode("input",{type:"color",value:l.selectedBlock.content.color||"#e5e7eb","aria-label":"Divider color picker",class:"size-9 shrink-0 cursor-pointer rounded border",onInput:t[12]||(t[12]=n=>V("color",n.target.value))},null,40,Bl),e.createVNode(p,{"model-value":l.selectedBlock.content.color||"#e5e7eb","aria-label":"Divider color",class:"h-9 flex-1 font-mono text-sm","onUpdate:modelValue":t[13]||(t[13]=n=>V("color",n))},null,8,["model-value"])])]),e.createElementVNode("label",El,[t[72]||(t[72]=e.createTextVNode("Thickness (px) ",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.thickness??1,type:"number",min:"1",max:"8",class:"mt-1.5 h-9 text-sm","onUpdate:modelValue":t[14]||(t[14]=n=>c("thickness",n,1,8)),onChange:t[15]||(t[15]=n=>c("thickness",n.target.value,1,8,!0))},null,8,["model-value"])]),e.createElementVNode("div",null,[t[76]||(t[76]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Line style",-1)),e.createVNode(U,{"model-value":l.selectedBlock.content.style||"solid",class:"w-full","aria-label":"Divider line style","onUpdate:modelValue":t[16]||(t[16]=n=>V("style",n))},{default:e.withCtx(()=>[e.createVNode(h,{value:"solid",class:"px-2 text-xs"},{default:e.withCtx(()=>[...t[73]||(t[73]=[e.createTextVNode("Solid",-1)])]),_:1}),e.createVNode(h,{value:"dashed",class:"px-2 text-xs"},{default:e.withCtx(()=>[...t[74]||(t[74]=[e.createTextVNode("Dashed",-1)])]),_:1}),e.createVNode(h,{value:"dotted",class:"px-2 text-xs"},{default:e.withCtx(()=>[...t[75]||(t[75]=[e.createTextVNode("Dotted",-1)])]),_:1})]),_:1},8,["model-value"])])],64)):l.selectedBlock.type==="spacer"?(e.openBlock(),e.createElementBlock("label",wl,[t[77]||(t[77]=e.createTextVNode("Height (px) ",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.height??24,type:"number",min:"0",max:"200",class:"mt-1.5 h-9 text-sm","onUpdate:modelValue":t[17]||(t[17]=n=>c("height",n,0,200)),onChange:t[18]||(t[18]=n=>c("height",n.target.value,0,200,!0))},null,8,["model-value"])])):l.selectedBlock.type==="columns"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:6},[t[81]||(t[81]=e.createElementVNode("p",{class:"text-xs leading-relaxed text-muted-foreground"},"Present details side by side. Columns stack on mobile.",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,(n,M)=>(e.openBlock(),e.createElementBlock("div",{key:M,class:"space-y-2 rounded-md border p-3"},[e.createElementVNode("div",Sl,[e.createElementVNode("p",Tl,"Column "+e.toDisplayString(M+1),1),e.createElementVNode("button",{type:"button","aria-label":`Remove column ${M+1}`,title:`Remove column ${M+1}`,disabled:v.value.length<=1,class:"rounded p-1 text-muted-foreground hover:bg-accent hover:text-destructive disabled:opacity-30",onClick:I=>y(M)},[e.createVNode(e.unref(i.Trash2),{class:"size-3.5"})],8,Dl)]),e.createElementVNode("label",$l,[t[78]||(t[78]=e.createTextVNode("Label",-1)),e.createVNode(p,{modelValue:n.label,"onUpdate:modelValue":[I=>n.label=I,d],class:"mt-1 h-8 text-xs"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("label",Ul,[t[79]||(t[79]=e.createTextVNode("Value",-1)),e.createVNode(p,{modelValue:n.value,"onUpdate:modelValue":[I=>n.value=I,d],class:"mt-1 h-8 text-xs"},null,8,["modelValue","onUpdate:modelValue"])])]))),128)),e.createVNode(w,{type:"button",variant:"outline",size:"sm",class:"w-full gap-1.5",disabled:v.value.length>=4,onClick:m},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Plus),{class:"size-3.5"}),t[80]||(t[80]=e.createTextVNode("Add column",-1))]),_:1},8,["disabled"])],64)):e.createCommentVNode("",!0),["header","text"].includes(l.selectedBlock.type)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",null,[e.createElementVNode("div",zl,[t[82]||(t[82]=e.createElementVNode("p",{class:"text-xs font-medium text-muted-foreground"},"Text color",-1)),l.selectedBlock.content.color?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"text-[11px] text-muted-foreground hover:text-foreground",onClick:t[19]||(t[19]=n=>{delete l.selectedBlock.content.color,d()})},"Use template color")):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ml,[e.createElementVNode("input",{type:"color",value:l.selectedBlock.content.color||l.templateStyles.textColor,"aria-label":"Block text color picker",class:"size-9 shrink-0 cursor-pointer rounded border",onInput:t[20]||(t[20]=n=>V("color",n.target.value))},null,40,Ll),e.createVNode(p,{"model-value":l.selectedBlock.content.color||l.templateStyles.textColor,"aria-label":"Block text color",class:"h-9 flex-1 font-mono text-sm","onUpdate:modelValue":t[21]||(t[21]=n=>V("color",n))},null,8,["model-value"])])]),e.createElementVNode("label",Il,[t[83]||(t[83]=e.createTextVNode("Font size (px) ",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.fontSize??C.value,type:"number",min:"8",max:"72",class:"mt-1.5 h-9 text-sm","onUpdate:modelValue":t[22]||(t[22]=n=>c("fontSize",n,8,72)),onChange:t[23]||(t[23]=n=>c("fontSize",n.target.value,8,72,!0))},null,8,["model-value"])])],64)):e.createCommentVNode("",!0),["header","text","button","image"].includes(l.selectedBlock.type)?(e.openBlock(),e.createElementBlock("div",Al,[t[84]||(t[84]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Alignment",-1)),e.createVNode(U,{"model-value":l.selectedBlock.content.align||(["button","image"].includes(l.selectedBlock.type)?"center":"left"),class:"w-full","aria-label":"Block alignment","onUpdate:modelValue":t[24]||(t[24]=n=>V("align",n))},{default:e.withCtx(()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(k,n=>e.createVNode(h,{key:n.value,value:n.value,"aria-label":n.label,title:n.label},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.icon),{class:"mx-auto size-3.5"}))]),_:2},1032,["value","aria-label","title"])),64))]),_:1},8,["model-value"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Rl,[t[87]||(t[87]=e.createElementVNode("p",{class:"mb-2 text-xs font-medium text-muted-foreground"},"Spacing (px)",-1)),e.createElementVNode("div",jl,[e.createElementVNode("label",Fl,[t[85]||(t[85]=e.createTextVNode("Above",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.paddingTop??L.value,type:"number",min:"0",max:"80",class:"mt-1 h-8 text-xs","onUpdate:modelValue":t[25]||(t[25]=n=>c("paddingTop",n,0,80)),onChange:t[26]||(t[26]=n=>c("paddingTop",n.target.value,0,80,!0))},null,8,["model-value"])]),e.createElementVNode("label",Pl,[t[86]||(t[86]=e.createTextVNode("Below",-1)),e.createVNode(p,{"model-value":l.selectedBlock.content.paddingBottom??(l.selectedBlock.type==="spacer"?0:16),type:"number",min:"0",max:"80",class:"mt-1 h-8 text-xs","onUpdate:modelValue":t[27]||(t[27]=n=>c("paddingBottom",n,0,80)),onChange:t[28]||(t[28]=n=>c("paddingBottom",n.target.value,0,80,!0))},null,8,["model-value"])])])])])),e.createVNode(F)],64)):e.createCommentVNode("",!0),t[118]||(t[118]=e.createElementVNode("div",{class:"rounded-lg bg-muted/50 border border-border/50 p-3 mb-2"},[e.createElementVNode("h4",{class:"mb-1 text-xs font-semibold"},"Template design"),e.createElementVNode("p",{class:"text-[11px] text-muted-foreground leading-snug"},[e.createTextVNode("These design settings apply to "),e.createElementVNode("strong",null,"this template"),e.createTextVNode(".")])],-1)),e.createElementVNode("div",null,[t[89]||(t[89]=e.createElementVNode("h4",{class:"mb-3 text-sm font-semibold"},"Branding",-1)),e.createElementVNode("label",Hl,[t[88]||(t[88]=e.createTextVNode("Logo URL ",-1)),e.createVNode(p,{modelValue:l.templateStyles.logoUrl,"onUpdate:modelValue":[t[29]||(t[29]=n=>l.templateStyles.logoUrl=n),d],class:"mt-1.5 h-9 text-sm",placeholder:"https://example.com/logo.png"},null,8,["modelValue"])]),t[90]||(t[90]=e.createElementVNode("p",{class:"mt-1.5 text-[11px] text-muted-foreground"},"Appears above the email content. Leave empty to hide it.",-1))]),e.createElementVNode("div",null,[t[101]||(t[101]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Colors",-1)),e.createElementVNode("div",Ol,[e.createElementVNode("div",null,[t[91]||(t[91]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Body Background",-1)),e.createElementVNode("div",ql,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[30]||(t[30]=n=>l.templateStyles.bodyBg=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.bodyBg]]),e.createVNode(p,{modelValue:l.templateStyles.bodyBg,"onUpdate:modelValue":t[31]||(t[31]=n=>l.templateStyles.bodyBg=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[92]||(t[92]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Content Background",-1)),e.createElementVNode("div",Wl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[32]||(t[32]=n=>l.templateStyles.contentBg=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.contentBg]]),e.createVNode(p,{modelValue:l.templateStyles.contentBg,"onUpdate:modelValue":t[33]||(t[33]=n=>l.templateStyles.contentBg=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[93]||(t[93]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Footer Background",-1)),e.createElementVNode("div",Jl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[34]||(t[34]=n=>l.templateStyles.footerBg=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.footerBg]]),e.createVNode(p,{modelValue:l.templateStyles.footerBg,"onUpdate:modelValue":t[35]||(t[35]=n=>l.templateStyles.footerBg=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[94]||(t[94]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Footer Text Color",-1)),e.createElementVNode("div",Yl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[36]||(t[36]=n=>l.templateStyles.footerTextColor=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.footerTextColor]]),e.createVNode(p,{modelValue:l.templateStyles.footerTextColor,"onUpdate:modelValue":t[37]||(t[37]=n=>l.templateStyles.footerTextColor=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[95]||(t[95]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Primary / Button Color",-1)),e.createElementVNode("div",Kl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[38]||(t[38]=n=>l.templateStyles.primaryColor=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.primaryColor]]),e.createVNode(p,{modelValue:l.templateStyles.primaryColor,"onUpdate:modelValue":t[39]||(t[39]=n=>l.templateStyles.primaryColor=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[96]||(t[96]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Button Text Color",-1)),e.createElementVNode("div",Gl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[40]||(t[40]=n=>l.templateStyles.primaryForeground=n),"aria-label":"Button text color picker",class:"size-9 shrink-0 cursor-pointer rounded border",onInput:d},null,544),[[e.vModelText,l.templateStyles.primaryForeground]]),e.createVNode(p,{modelValue:l.templateStyles.primaryForeground,"onUpdate:modelValue":[t[41]||(t[41]=n=>l.templateStyles.primaryForeground=n),d],"aria-label":"Button text color",class:"h-9 flex-1 font-mono text-sm"},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[97]||(t[97]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Text Color",-1)),e.createElementVNode("div",Ql,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[42]||(t[42]=n=>l.templateStyles.textColor=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.textColor]]),e.createVNode(p,{modelValue:l.templateStyles.textColor,"onUpdate:modelValue":t[43]||(t[43]=n=>l.templateStyles.textColor=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])]),e.createElementVNode("div",null,[t[98]||(t[98]=e.createElementVNode("p",{class:"mb-1.5 text-xs font-medium text-muted-foreground"},"Secondary Text Color",-1)),e.createElementVNode("div",Zl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[44]||(t[44]=n=>l.templateStyles.secondaryTextColor=n),"aria-label":"Secondary text color picker",class:"size-9 shrink-0 cursor-pointer rounded border",onInput:d},null,544),[[e.vModelText,l.templateStyles.secondaryTextColor]]),e.createVNode(p,{modelValue:l.templateStyles.secondaryTextColor,"onUpdate:modelValue":[t[45]||(t[45]=n=>l.templateStyles.secondaryTextColor=n),d],"aria-label":"Secondary text color",class:"h-9 flex-1 font-mono text-sm"},null,8,["modelValue"])]),t[99]||(t[99]=e.createElementVNode("p",{class:"mt-1.5 text-[11px] text-muted-foreground"},"Used for column labels and supporting text.",-1))]),e.createElementVNode("div",null,[t[100]||(t[100]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Link Color",-1)),e.createElementVNode("div",Xl,[e.withDirectives(e.createElementVNode("input",{type:"color","onUpdate:modelValue":t[46]||(t[46]=n=>l.templateStyles.linkColor=n),class:"size-9 rounded border cursor-pointer",onInput:d},null,544),[[e.vModelText,l.templateStyles.linkColor]]),e.createVNode(p,{modelValue:l.templateStyles.linkColor,"onUpdate:modelValue":t[47]||(t[47]=n=>l.templateStyles.linkColor=n),class:"h-9 text-sm flex-1 font-mono",onInput:d},null,8,["modelValue"])])])])]),e.createVNode(F),e.createElementVNode("div",null,[t[110]||(t[110]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Typography",-1)),e.createElementVNode("div",_l,[e.createElementVNode("div",null,[t[109]||(t[109]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Font Family",-1)),e.createVNode(Z,{modelValue:l.templateStyles.fontFamily,"onUpdate:modelValue":[t[48]||(t[48]=n=>l.templateStyles.fontFamily=n),d]},{default:e.withCtx(()=>[e.createVNode(q,{class:"h-9 text-sm"},{default:e.withCtx(()=>[e.createVNode(H)]),_:1}),e.createVNode(D,null,{default:e.withCtx(()=>[e.createVNode(z,{value:"Arial, Helvetica, sans-serif"},{default:e.withCtx(()=>[...t[102]||(t[102]=[e.createTextVNode("Arial",-1)])]),_:1}),e.createVNode(z,{value:"'Helvetica Neue', Helvetica, Arial, sans-serif"},{default:e.withCtx(()=>[...t[103]||(t[103]=[e.createTextVNode("Helvetica",-1)])]),_:1}),e.createVNode(z,{value:"Georgia, 'Times New Roman', serif"},{default:e.withCtx(()=>[...t[104]||(t[104]=[e.createTextVNode("Georgia",-1)])]),_:1}),e.createVNode(z,{value:"Verdana, Geneva, sans-serif"},{default:e.withCtx(()=>[...t[105]||(t[105]=[e.createTextVNode("Verdana",-1)])]),_:1}),e.createVNode(z,{value:"Tahoma, Geneva, sans-serif"},{default:e.withCtx(()=>[...t[106]||(t[106]=[e.createTextVNode("Tahoma",-1)])]),_:1}),e.createVNode(z,{value:"'Trebuchet MS', Helvetica, sans-serif"},{default:e.withCtx(()=>[...t[107]||(t[107]=[e.createTextVNode("Trebuchet MS",-1)])]),_:1}),e.createVNode(z,{value:"'Courier New', Courier, monospace"},{default:e.withCtx(()=>[...t[108]||(t[108]=[e.createTextVNode("Courier New",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue"])])])]),e.createVNode(F),e.createElementVNode("div",null,[t[114]||(t[114]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Layout",-1)),e.createElementVNode("div",eo,[e.createElementVNode("div",null,[t[111]||(t[111]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Content Width",-1)),e.createElementVNode("div",to,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":t[49]||(t[49]=n=>l.templateStyles.contentWidth=n),min:"400",max:"800",step:"10",class:"flex-1 accent-primary",onInput:d},null,544),[[e.vModelText,l.templateStyles.contentWidth,void 0,{number:!0}]]),e.createElementVNode("span",lo,e.toDisplayString(l.templateStyles.contentWidth)+"px",1)])]),e.createElementVNode("div",null,[t[112]||(t[112]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Content Padding",-1)),e.createElementVNode("div",oo,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":t[50]||(t[50]=n=>l.templateStyles.contentPadding=n),min:"16",max:"64",step:"4",class:"flex-1 accent-primary",onInput:d},null,544),[[e.vModelText,l.templateStyles.contentPadding,void 0,{number:!0}]]),e.createElementVNode("span",no,e.toDisplayString(l.templateStyles.contentPadding)+"px",1)])]),e.createElementVNode("div",null,[t[113]||(t[113]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Border Radius",-1)),e.createElementVNode("div",ao,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":t[51]||(t[51]=n=>l.templateStyles.borderRadius=n),min:"0",max:"24",step:"2",class:"flex-1 accent-primary",onInput:d},null,544),[[e.vModelText,l.templateStyles.borderRadius,void 0,{number:!0}]]),e.createElementVNode("span",ro,e.toDisplayString(l.templateStyles.borderRadius)+"px",1)])])])]),e.createVNode(F),e.createElementVNode("div",null,[t[117]||(t[117]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Footer",-1)),e.createElementVNode("div",so,[e.createElementVNode("div",null,[t[115]||(t[115]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Footer Text",-1)),e.createVNode(K,{modelValue:l.templateStyles.footerText,"onUpdate:modelValue":t[52]||(t[52]=n=>l.templateStyles.footerText=n),rows:"2",class:"text-sm resize-none",onInput:d},null,8,["modelValue"])]),e.createElementVNode("div",io,[t[116]||(t[116]=e.createElementVNode("label",{class:"text-sm"},"Show Unsubscribe Link",-1)),e.createVNode(R,{modelValue:l.templateStyles.showUnsubscribe,"onUpdate:modelValue":[t[53]||(t[53]=n=>l.templateStyles.showUnsubscribe=n),d]},null,8,["modelValue"])])])])])}}}),uo={class:"p-4 space-y-6"},mo={class:"space-y-3"},po={class:"space-y-1.5"},vo=["onClick"],fo={class:"text-xs font-mono flex-1"},xo={class:"space-y-2"},bo={class:"text-[11px] text-muted-foreground/60"},go=e.defineComponent({__name:"SettingsPanel",props:{template:{},templateStyles:{}},emits:["update:hasUnsavedChanges","reset-styles","reset-template"],setup(l,{emit:E}){const a=l,u=E,d=()=>u("update:hasUnsavedChanges",!0),k=e.computed(()=>!!he(a.template.name,a.template.system_key)),v=()=>{u("reset-styles",Me());const c=he(a.template.name,a.template.system_key);c&&u("reset-template",c.blocks),u("update:hasUnsavedChanges",!0)},C=e.ref(null),L=async c=>{try{await navigator.clipboard.writeText(c)}catch{return}C.value=c,setTimeout(()=>{C.value===c&&(C.value=null)},1500)},V=["{{agency_name}}","{{user_name}}","{{user_email}}","{{dashboard_url}}","{{project_name}}","{{year}}","{{reset_url}}","{{invite_url}}","{{support_email}}","{{inviter_name}}","{{expires_at}}"];return(c,m)=>{const y=e.resolveComponent("Input"),T=e.resolveComponent("Textarea"),x=e.resolveComponent("Separator"),b=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",uo,[e.createElementVNode("div",null,[m[14]||(m[14]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Template Info",-1)),e.createElementVNode("div",mo,[e.createElementVNode("div",null,[m[6]||(m[6]=e.createElementVNode("label",{for:"email-template-name",class:"mb-1.5 block text-xs font-medium text-muted-foreground"},"Name",-1)),e.createVNode(y,{id:"email-template-name",modelValue:l.template.name,"onUpdate:modelValue":[m[0]||(m[0]=t=>l.template.name=t),d],class:"h-9 text-sm"},null,8,["modelValue"])]),e.createElementVNode("div",null,[m[7]||(m[7]=e.createElementVNode("label",{for:"email-template-description",class:"mb-1.5 block text-xs font-medium text-muted-foreground"},"Description",-1)),e.createVNode(T,{id:"email-template-description",modelValue:l.template.description,"onUpdate:modelValue":[m[1]||(m[1]=t=>l.template.description=t),d],rows:"2",class:"text-sm"},null,8,["modelValue"])]),e.createElementVNode("div",null,[m[9]||(m[9]=e.createElementVNode("label",{for:"email-template-category",class:"mb-1.5 block text-xs font-medium text-muted-foreground"},"Category",-1)),e.withDirectives(e.createElementVNode("select",{id:"email-template-category","onUpdate:modelValue":m[2]||(m[2]=t=>l.template.category=t),class:"h-9 w-full rounded-md border bg-background px-2 text-sm",onChange:d},[...m[8]||(m[8]=[e.createStaticVNode('<option value="authentication">Authentication</option><option value="billing">Billing</option><option value="notifications">Notifications</option><option value="onboarding">Onboarding</option><option value="system">System</option>',5)])],544),[[e.vModelSelect,l.template.category]])]),e.createElementVNode("div",null,[m[11]||(m[11]=e.createElementVNode("label",{for:"email-template-status",class:"mb-1.5 block text-xs font-medium text-muted-foreground"},"Status",-1)),e.withDirectives(e.createElementVNode("select",{id:"email-template-status","onUpdate:modelValue":m[3]||(m[3]=t=>l.template.status=t),class:"h-9 w-full rounded-md border bg-background px-2 text-sm",onChange:d},[...m[10]||(m[10]=[e.createElementVNode("option",{value:"draft"},"Draft",-1),e.createElementVNode("option",{value:"active"},"Active",-1),e.createElementVNode("option",{value:"inactive"},"Inactive",-1)])],544),[[e.vModelSelect,l.template.status]])]),e.createElementVNode("div",null,[m[12]||(m[12]=e.createElementVNode("label",{class:"text-xs font-medium text-muted-foreground mb-1.5 block"},"Subject",-1)),e.createVNode(y,{modelValue:l.template.subject,"onUpdate:modelValue":[m[4]||(m[4]=t=>l.template.subject=t),d],class:"h-9 text-sm"},null,8,["modelValue"]),m[13]||(m[13]=e.createElementVNode("p",{class:"text-[11px] text-muted-foreground/60 mt-1"},[e.createTextVNode("Use "),e.createElementVNode("code",{class:"text-[10px] bg-muted px-1 py-0.5 rounded"},"{{variables}}"),e.createTextVNode(" for dynamic content")],-1))])])]),e.createElementVNode("div",null,[m[15]||(m[15]=e.createElementVNode("label",{for:"email-preheader",class:"mb-1.5 block text-xs font-medium text-muted-foreground"},"Inbox preview text",-1)),e.createVNode(T,{id:"email-preheader",modelValue:l.template.preheader,"onUpdate:modelValue":[m[5]||(m[5]=t=>l.template.preheader=t),d],rows:"2",maxlength:"300",class:"text-sm",placeholder:"A short preview shown beside the subject…"},null,8,["modelValue"]),m[16]||(m[16]=e.createElementVNode("p",{class:"mt-1 text-[11px] text-muted-foreground"},"Keep it short. Variables are supported.",-1))]),e.createVNode(x),e.createElementVNode("div",null,[m[17]||(m[17]=e.createElementVNode("h4",{class:"text-sm font-semibold mb-3"},"Available Variables",-1)),e.createElementVNode("div",po,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(V,t=>e.createElementVNode("button",{type:"button",key:t,class:e.normalizeClass(["w-full flex items-center gap-2 px-2.5 py-1.5 rounded-md hover:bg-muted transition-all cursor-pointer group",C.value===t?"bg-primary/10":"bg-muted/50"]),onClick:p=>L(t)},[e.createVNode(e.unref(i.Code),{class:"size-3 text-muted-foreground"}),e.createElementVNode("code",fo,e.toDisplayString(t),1),e.createVNode(e.Transition,{name:"fade",mode:"out-in"},{default:e.withCtx(()=>[C.value===t?(e.openBlock(),e.createBlock(e.unref(i.Check),{key:0,class:"size-3 text-primary"})):(e.openBlock(),e.createBlock(e.unref(i.Copy),{key:1,class:"size-3 text-muted-foreground/0 group-hover:text-muted-foreground transition-colors"}))]),_:2},1024)],10,vo)),64))])]),e.createVNode(x),e.createElementVNode("div",null,[m[19]||(m[19]=e.createElementVNode("h4",{class:"text-sm font-semibold text-destructive mb-3"},"Danger Zone",-1)),e.createElementVNode("div",xo,[e.createVNode(b,{variant:"outline",size:"sm",class:"w-full justify-start gap-2 h-9 text-sm",onClick:v},{default:e.withCtx(()=>[e.createVNode(e.unref(i.RotateCcw),{class:"size-3.5"}),m[18]||(m[18]=e.createTextVNode(" Reset to Default ",-1))]),_:1}),e.createElementVNode("p",bo," Resets this template’s design"+e.toDisplayString(k.value?" and restores the template content.":"."),1)])])])}}}),yo={class:"w-full min-w-0 xl:w-[300px] xl:shrink-0 border-t xl:border-t-0 xl:border-l bg-card flex flex-col","aria-label":"Email design and settings"},ko={class:"p-3 border-b"},Vo=e.defineComponent({__name:"RightSidebar",props:{template:{},selectedBlock:{},templateStyles:{}},emits:["deselect-block","update:hasUnsavedChanges","reset-styles","reset-template"],setup(l,{emit:E}){const a=l,u=E,d=e.ref("style");return e.watch(()=>a.selectedBlock?.id,k=>{k&&(d.value="style")}),(k,v)=>{const C=e.resolveComponent("SegmentedControlButton"),L=e.resolveComponent("SegmentedControl"),V=e.resolveComponent("ScrollArea");return e.openBlock(),e.createElementBlock("aside",yo,[e.createElementVNode("div",ko,[e.createVNode(L,{modelValue:d.value,"onUpdate:modelValue":v[0]||(v[0]=c=>d.value=c),class:"w-full","aria-label":"Email settings panels"},{default:e.withCtx(()=>[e.createVNode(C,{value:"style",class:"flex justify-center items-center gap-1.5"},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Palette),{class:"size-3.5"}),v[6]||(v[6]=e.createTextVNode(" Design ",-1))]),_:1}),e.createVNode(C,{value:"settings",class:"flex justify-center items-center gap-1.5"},{default:e.withCtx(()=>[e.createVNode(e.unref(i.Settings2),{class:"size-3.5"}),v[7]||(v[7]=e.createTextVNode(" Settings ",-1))]),_:1})]),_:1},8,["modelValue"])]),e.createVNode(V,{class:"flex-1 min-h-0"},{default:e.withCtx(()=>[d.value==="style"?(e.openBlock(),e.createBlock(co,{key:0,"selected-block":l.selectedBlock,"template-styles":l.templateStyles,onDeselectBlock:v[1]||(v[1]=c=>u("deselect-block")),"onUpdate:hasUnsavedChanges":v[2]||(v[2]=c=>u("update:hasUnsavedChanges",c))},null,8,["selected-block","template-styles"])):d.value==="settings"?(e.openBlock(),e.createBlock(go,{key:1,template:l.template,"template-styles":l.templateStyles,"onUpdate:hasUnsavedChanges":v[3]||(v[3]=c=>u("update:hasUnsavedChanges",c)),onResetStyles:v[4]||(v[4]=c=>u("reset-styles",c)),onResetTemplate:v[5]||(v[5]=c=>u("reset-template",c))},null,8,["template","template-styles"])):e.createCommentVNode("",!0)]),_:1})])}}}),No={class:"mail-builder -m-4 flex h-[calc(100dvh-8rem)] min-h-[500px] flex-col overflow-hidden"},Co={key:0,class:"flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground"},ho={key:1,class:"flex flex-1 flex-col items-center justify-center gap-4"},Bo={key:0,class:"flex items-center justify-between gap-3 border-b bg-amber-500/10 px-4 py-2 text-xs",role:"alert"},Eo={class:"flex items-center justify-between border-b bg-card px-3 py-2 xl:hidden"},wo={class:"relative flex min-h-0 flex-1"},So={key:0,value:"duplicate"},To=["value"],Do=e.defineComponent({__name:"TemplateBuilder",setup(l){const E=te.useModuleApi(),{hasPermission:a}=te.useModulePermissions(),u=te.useModuleRoute(),d=te.useRouter();te.useModuleBreadcrumbs(()=>[]);const k=e.computed(()=>a("edit-template")),v=e.computed(()=>a("create-template")),C=e.computed(()=>a("delete-template")),L=()=>E.get("/templates"),V=s=>E.post("/templates",{body:s}),c=(s,o)=>E.patch(`/templates/${encodeURIComponent(s)}`,{body:o}),m=(s,o)=>s?.data?.statusMessage||s?.message||o,y=e.ref(!0),T=e.ref(""),x=e.ref(""),b=e.ref(null),t=e.ref(null),p=e.ref(!1),h=e.ref([]),U=e.computed(()=>D.value?.styles??{...ce}),w=e.ref({}),F=e.ref({}),H=e.ref(null),q=e.ref(!1),z=e.ref(!1),D=e.computed(()=>h.value.find(s=>s.id===b.value)??null),Z=e.computed(()=>D.value?.blocks.find(s=>s.id===t.value)??null),K=e.computed(()=>h.value.filter(s=>ee(s)!==w.value[s.id]).map(s=>s.id)),R=e.computed(()=>!y.value&&!T.value&&K.value.length>0),n=()=>JSON.stringify({templates:h.value});let M=ie(n());const I=e.ref(0),le=e.computed(()=>(I.value,M.canUndo)),ue=e.computed(()=>(I.value,M.canRedo));let W,oe=!1;function G(){clearTimeout(W),M.record(n()),I.value++}e.watch(h,()=>{y.value||oe||(clearTimeout(W),W=setTimeout(G,400))},{deep:!0,flush:"sync"});function ne(s){if(!k.value)return;G();const o=M[s]();if(!o)return;oe=!0;const g=JSON.parse(o);h.value=g.templates,h.value.some($=>$.id===b.value)||(b.value=h.value[0]?.id??null),t.value=null,oe=!1,I.value++}function N(s){G(),b.value=s,t.value=null,q.value=!1}function r(s){t.value=s,z.value=!0}function B(s){!D.value||!k.value||(G(),s(D.value.blocks),G())}function Q(s){const o={id:crypto.randomUUID(),type:s,content:xe(s)};B(g=>{const $=g.findIndex(P=>P.id===t.value);g.splice($<0?g.length:$+1,0,o)}),r(o.id)}function J(s){B(o=>{const g=o.findIndex($=>$.id===s);g>=0&&o.splice(g,1)}),t.value===s&&(t.value=null)}function Y(s,o){B(g=>{const $=g.findIndex(_=>_.id===s),P=$+(o==="up"?-1:1);$>=0&&P>=0&&P<g.length&&([g[$],g[P]]=[g[P],g[$]])})}function ve(s,o){s!==o&&B(g=>{const $=g.findIndex(se=>se.id===s);if($<0)return;const[P]=g.splice($,1),_=o?g.findIndex(se=>se.id===o):g.length;g.splice(_<0?g.length:_,0,P)})}function fe(s){B(o=>{const g=o.findIndex(P=>P.id===s);if(g<0)return;const $={...JSON.parse(JSON.stringify(o[g])),id:crypto.randomUUID()};o.splice(g+1,0,$),t.value=$.id})}async function me(){if(p.value||!R.value||!k.value)return;G();const s=JSON.parse(JSON.stringify(h.value.filter(o=>K.value.includes(o.id))));for(const o of s){const g=!o.name.trim()||!o.subject.trim()?"Every template needs a name and subject.":null;if(g){O.toast.error(g),N(o.id);return}}p.value=!0;try{for(const o of s){const g=await c(o.id,{...Se(o),updatedAt:F.value[o.id]});F.value[o.id]=g.updatedAt,H.value===o.id&&(H.value=null),w.value[o.id]=ee(o)}O.toast.success("All changes saved")}catch(o){(o?.statusCode===409||o?.status===409)&&(H.value=s.find(g=>ee(g)!==w.value[g.id])?.id??null),O.toast.error(m(o,"Could not save changes. Your drafts are still here."))}finally{p.value=!1}}const f=e.ref(!1),A=e.ref(""),j=e.ref("blank"),X=e.ref(!1),be=Le().filter(s=>!s.system_key);function pe(s=!1){A.value=s&&D.value?`${D.value.name} copy`:"",j.value=s?"duplicate":"blank",f.value=!0}async function De(){if(!A.value.trim()||X.value||!v.value)return;X.value=!0;const s=j.value==="duplicate"?D.value:be.find(o=>o.name===j.value);try{const o=await V({name:A.value.trim(),subject:s?.subject||A.value.trim(),preheader:s?.preheader||"",description:s?.description||"",category:s?.category||"notifications",status:"draft",styles:JSON.parse(JSON.stringify(s?.styles||ce)),blocks:(s?.blocks||[{type:"header",content:xe("header")},{type:"text",content:xe("text")}]).map(g=>({...JSON.parse(JSON.stringify(g)),id:crypto.randomUUID()}))});h.value.push(o),w.value[o.id]=ee(o),F.value[o.id]=o.updatedAt,clearTimeout(W),M=ie(n()),I.value++,N(o.id),f.value=!1,O.toast.success("Template created")}catch(o){O.toast.error(m(o,"Could not create template"))}finally{X.value=!1}}const ae=e.ref(!1),re=e.ref(!1);async function $e(){if(!D.value||!C.value||re.value)return;const s=D.value.id;re.value=!0;try{await E.del(`/templates/${encodeURIComponent(s)}`),h.value=h.value.filter(o=>o.id!==s),delete w.value[s],delete F.value[s],H.value===s&&(H.value=null),b.value=h.value[0]?.id??null,t.value=null,clearTimeout(W),M=ie(n()),I.value++,ae.value=!1,O.toast.success("Template deleted")}catch(o){O.toast.error(m(o,"Could not delete template"))}finally{re.value=!1}}async function Ue(){const s=H.value;if(!(!s||!window.confirm("Reload the saved version? This discards your local changes to this template. You can duplicate or export your draft first.")))try{const o=await E.get(`/templates/${encodeURIComponent(s)}`),g=h.value.findIndex($=>$.id===s);if(g<0)return;h.value[g]={...o,styles:{...ce,...o.styles}},w.value[s]=ee(h.value[g]),F.value[s]=o.updatedAt,H.value=null,clearTimeout(W),M=ie(n()),I.value++}catch(o){O.toast.error(m(o,"Could not reload the template"))}}function ge(s){R.value&&(s.preventDefault(),s.returnValue="")}function ye(s){if(!(s.metaKey||s.ctrlKey)||s.altKey)return;const o=s.key.toLowerCase();if(o==="s"){s.preventDefault(),me();return}s.target.closest('input, textarea, [contenteditable="true"]')||(o==="z"||o==="y")&&(s.preventDefault(),ne(o==="y"||s.shiftKey?"redo":"undo"))}const ze=d.beforeEach((s,o)=>s.fullPath===o.fullPath||!R.value||window.confirm("You have unsaved email changes. Leave without saving?"));async function ke(){y.value=!0,T.value="";try{const s=(await L()).map(o=>({...o,styles:{...ce,...o.styles},updated_at:o.updatedAt||o.updated_at}));h.value=s,w.value=Object.fromEntries(s.map(o=>[o.id,ee(o)])),F.value=Object.fromEntries(s.map(o=>[o.id,o.updatedAt])),b.value=s.find(o=>o.id===u.params.value.optionId)?.id??s[0]?.id??null,u.currentPath.value==="new"&&v.value&&pe(),M=ie(n()),I.value++}catch(s){T.value=m(s,"Could not load templates. Check the module’s Firebase integration and collection settings.")}finally{y.value=!1}}return e.onMounted(()=>{ke(),window.addEventListener("beforeunload",ge),window.addEventListener("keydown",ye)}),e.onBeforeUnmount(()=>{ze(),clearTimeout(W),window.removeEventListener("beforeunload",ge),window.removeEventListener("keydown",ye)}),(s,o)=>{const g=e.resolveComponent("Button"),$=e.resolveComponent("DialogTitle"),P=e.resolveComponent("DialogDescription"),_=e.resolveComponent("DialogHeader"),se=e.resolveComponent("Input"),Ve=e.resolveComponent("DialogFooter"),Ne=e.resolveComponent("DialogContent"),Ce=e.resolveComponent("Dialog");return e.openBlock(),e.createElementBlock("div",No,[y.value?(e.openBlock(),e.createElementBlock("div",Co,[e.createVNode(e.unref(i.Loader2),{class:"size-4 animate-spin"}),o[18]||(o[18]=e.createTextVNode(" Loading email workspace…",-1))])):T.value?(e.openBlock(),e.createElementBlock("div",ho,[e.createElementVNode("p",null,e.toDisplayString(T.value),1),e.createVNode(g,{onClick:ke},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode("Try again",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[H.value?(e.openBlock(),e.createElementBlock("div",Bo,[o[21]||(o[21]=e.createElementVNode("span",null,"A template changed elsewhere. Your local draft is intact; duplicate or export it to keep a copy.",-1)),e.createVNode(g,{variant:"outline",size:"sm",onClick:Ue},{default:e.withCtx(()=>[...o[20]||(o[20]=[e.createTextVNode("Reload latest",-1)])]),_:1})])):e.createCommentVNode("",!0),e.createElementVNode("div",Eo,[e.createVNode(g,{variant:"outline",size:"sm",onClick:o[0]||(o[0]=S=>{q.value=!q.value,z.value=!1})},{default:e.withCtx(()=>[e.createVNode(e.unref(i.PanelLeft),{class:"size-4"}),o[22]||(o[22]=e.createTextVNode(" Templates",-1))]),_:1}),D.value&&k.value?(e.openBlock(),e.createBlock(g,{key:0,variant:"outline",size:"sm",onClick:o[1]||(o[1]=S=>{z.value=!z.value,q.value=!1})},{default:e.withCtx(()=>[e.createVNode(e.unref(i.SlidersHorizontal),{class:"size-4"}),e.createTextVNode(" "+e.toDisplayString(Z.value?"Edit block":"Design"),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",wo,[e.createElementVNode("div",{class:e.normalizeClass(q.value?"absolute inset-0 z-30 bg-card xl:static":"hidden xl:flex")},[e.createVNode(_e,{templates:h.value,"selected-template-id":b.value,"dirty-template-ids":K.value,"can-create":v.value,"search-query":x.value,"onUpdate:searchQuery":o[2]||(o[2]=S=>x.value=S),onSelect:N,onCreate:o[3]||(o[3]=S=>pe())},null,8,["templates","selected-template-id","dirty-template-ids","can-create","search-query"])],2),e.createVNode(_t,{template:D.value,"selected-block-id":t.value,"template-styles":U.value,saving:p.value,"has-unsaved-changes":R.value,"can-undo":le.value,"can-redo":ue.value,"dirty-count":K.value.length,"can-edit":k.value,"can-create":v.value,"can-delete":C.value,onSelectBlock:r,onAddBlock:Q,onMoveBlock:Y,onReorderBlock:ve,onDuplicateBlock:fe,onDeleteBlock:J,onSave:me,onUndo:o[4]||(o[4]=S=>ne("undo")),onRedo:o[5]||(o[5]=S=>ne("redo")),onDuplicateTemplate:o[6]||(o[6]=S=>pe(!0)),onCreate:o[7]||(o[7]=S=>pe()),onDeleteTemplate:o[8]||(o[8]=S=>ae.value=!0)},null,8,["template","selected-block-id","template-styles","saving","has-unsaved-changes","can-undo","can-redo","dirty-count","can-edit","can-create","can-delete"]),D.value&&k.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(z.value?"absolute inset-0 z-20 overflow-auto bg-card xl:static xl:flex":"hidden xl:flex")},[e.createVNode(Vo,{template:D.value,"selected-block":Z.value,"template-styles":U.value,onDeselectBlock:o[9]||(o[9]=S=>t.value=null),onResetStyles:o[10]||(o[10]=S=>Object.assign(U.value,S)),onResetTemplate:o[11]||(o[11]=S=>{D.value&&(D.value.blocks=S)})},null,8,["template","selected-block","template-styles"])],2)):e.createCommentVNode("",!0)])],64)),e.createVNode(Ce,{open:f.value,"onUpdate:open":o[15]||(o[15]=S=>f.value=S)},{default:e.withCtx(()=>[e.createVNode(Ne,{class:"sm:max-w-md"},{default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode($,null,{default:e.withCtx(()=>[...o[23]||(o[23]=[e.createTextVNode("New email template",-1)])]),_:1}),e.createVNode(P,null,{default:e.withCtx(()=>[...o[24]||(o[24]=[e.createTextVNode("Start fresh, use a starter, or make a copy of your current design.",-1)])]),_:1})]),_:1}),e.createElementVNode("form",{class:"space-y-4",onSubmit:e.withModifiers(De,["prevent"])},[e.createElementVNode("div",null,[o[25]||(o[25]=e.createElementVNode("label",{for:"template-name",class:"mb-1.5 block text-sm font-medium"},"Template name",-1)),e.createVNode(se,{id:"template-name",modelValue:A.value,"onUpdate:modelValue":o[12]||(o[12]=S=>A.value=S),placeholder:"e.g. Product announcement",maxlength:"120",required:""},null,8,["modelValue"])]),e.createElementVNode("div",null,[o[27]||(o[27]=e.createElementVNode("label",{for:"template-starter",class:"mb-1.5 block text-sm font-medium"},"Start from",-1)),e.withDirectives(e.createElementVNode("select",{id:"template-starter","onUpdate:modelValue":o[13]||(o[13]=S=>j.value=S),class:"h-10 w-full rounded-md border bg-background px-3 text-sm"},[o[26]||(o[26]=e.createElementVNode("option",{value:"blank"},"Blank email",-1)),D.value?(e.openBlock(),e.createElementBlock("option",So,"Copy of "+e.toDisplayString(D.value.name),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(be),S=>(e.openBlock(),e.createElementBlock("option",{key:S.name,value:S.name},e.toDisplayString(S.name),9,To))),128))],512),[[e.vModelSelect,j.value]])]),e.createVNode(Ve,null,{default:e.withCtx(()=>[e.createVNode(g,{type:"button",variant:"outline",onClick:o[14]||(o[14]=S=>f.value=!1)},{default:e.withCtx(()=>[...o[28]||(o[28]=[e.createTextVNode("Cancel",-1)])]),_:1}),e.createVNode(g,{type:"submit",disabled:X.value||!A.value.trim()},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(X.value?"Creating…":"Create template"),1)]),_:1},8,["disabled"])]),_:1})],32)]),_:1})]),_:1},8,["open"]),e.createVNode(Ce,{open:ae.value,"onUpdate:open":o[17]||(o[17]=S=>ae.value=S)},{default:e.withCtx(()=>[e.createVNode(Ne,{class:"sm:max-w-md"},{default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode($,null,{default:e.withCtx(()=>[e.createTextVNode("Delete "+e.toDisplayString(D.value?.name)+"?",1)]),_:1}),e.createVNode(P,null,{default:e.withCtx(()=>[...o[29]||(o[29]=[e.createTextVNode("This permanently removes the saved template from the configured collection.",-1)])]),_:1})]),_:1}),e.createVNode(Ve,null,{default:e.withCtx(()=>[e.createVNode(g,{variant:"outline",onClick:o[16]||(o[16]=S=>ae.value=!1)},{default:e.withCtx(()=>[...o[30]||(o[30]=[e.createTextVNode("Cancel",-1)])]),_:1}),e.createVNode(g,{variant:"destructive",disabled:re.value,onClick:$e},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(re.value?"Deleting…":"Delete template"),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])])}}});exports._sfc_main=Do;
|