@aswin.dev/editor 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AccessibilityPanel-CvQGLdu6.js +108 -0
- package/dist/AiChatSidebar-B3SJIKG_.js +229 -0
- package/dist/AiFeatureMenu-BLLKoOos.js +63 -0
- package/dist/BlockA11yBadge-CXDLqkcJ.js +34 -0
- package/dist/CloudEditor-BCz1ZTYC.js +1172 -0
- package/dist/CollaboratorBar-DuPYW5iF.js +95 -0
- package/dist/CommentsSidebar-B1pvJdqF.js +441 -0
- package/dist/CountdownBlock-BNSj1jvJ.js +92 -0
- package/dist/CountdownToolbar-ClJr2GzL.js +210 -0
- package/dist/DesignReferenceSidebar-B8V_F2yF.js +276 -0
- package/dist/LoadingTrack-B0CWFHXQ.js +10 -0
- package/dist/ModuleBrowserModal-DrUFMTDx.js +206 -0
- package/dist/ModulePreviewCanvas-CHdOwV_4.js +106 -0
- package/dist/NumberWithSuffix-DkXUez9t.js +422 -0
- package/dist/ParagraphEditor-D75wl3BX.js +695 -0
- package/dist/RichTextEditorContent-DYkIauIk.js +137 -0
- package/dist/SaveModuleDialog-FZ9lxY7_.js +123 -0
- package/dist/SnapshotHistory-BR3eV120.js +127 -0
- package/dist/TemplateScoringPanel-4GTNHej5.js +256 -0
- package/dist/TestEmailModal--ue5w9fT.js +94 -0
- package/dist/TitleEditor-fStSADI-.js +172 -0
- package/dist/TplModal-BwSfxIHf.js +44 -0
- package/dist/_plugin-vue_export-helper-B0hnzhyu.js +8 -0
- package/dist/accessibility-e8JYu_zd.js +27 -0
- package/dist/blockTypeIcons-BcTrDjmH.js +126 -0
- package/dist/bundle-stats.json +10 -0
- package/dist/cdn/chunks/AccessibilityPanel-B6DOjojm.js +97 -0
- package/dist/cdn/chunks/AccessibilityPanel-B6DOjojm.js.map +1 -0
- package/dist/cdn/chunks/AiFeatureMenu-qEdB2fZJ.js +59 -0
- package/dist/cdn/chunks/AiFeatureMenu-qEdB2fZJ.js.map +1 -0
- package/dist/cdn/chunks/BlockA11yBadge-DcEZftf6.js +33 -0
- package/dist/cdn/chunks/BlockA11yBadge-DcEZftf6.js.map +1 -0
- package/dist/cdn/chunks/CloudEditor-D2GsEC_n.js +1143 -0
- package/dist/cdn/chunks/CloudEditor-D2GsEC_n.js.map +1 -0
- package/dist/cdn/chunks/CollaboratorBar--nO7TX6b.js +51 -0
- package/dist/cdn/chunks/CollaboratorBar--nO7TX6b.js.map +1 -0
- package/dist/cdn/chunks/CountdownBlock-5YdT1uUu.js +93 -0
- package/dist/cdn/chunks/CountdownBlock-5YdT1uUu.js.map +1 -0
- package/dist/cdn/chunks/CountdownToolbar-DXPXrbAA.js +212 -0
- package/dist/cdn/chunks/CountdownToolbar-DXPXrbAA.js.map +1 -0
- package/dist/cdn/chunks/ModuleBrowserModal-DxoPp81s.js +195 -0
- package/dist/cdn/chunks/ModuleBrowserModal-DxoPp81s.js.map +1 -0
- package/dist/cdn/chunks/ModulePreviewCanvas-CoLdb4ar.js +107 -0
- package/dist/cdn/chunks/ModulePreviewCanvas-CoLdb4ar.js.map +1 -0
- package/dist/cdn/chunks/NumberWithSuffix-CE3NrZhH.js +423 -0
- package/dist/cdn/chunks/NumberWithSuffix-CE3NrZhH.js.map +1 -0
- package/dist/cdn/chunks/ParagraphEditor-B6Ygu-Mq.js +544 -0
- package/dist/cdn/chunks/ParagraphEditor-B6Ygu-Mq.js.map +1 -0
- package/dist/cdn/chunks/RichTextEditorContent-DL_y2SrR.js +106 -0
- package/dist/cdn/chunks/RichTextEditorContent-DL_y2SrR.js.map +1 -0
- package/dist/cdn/chunks/SaveModuleDialog-B0TnO_o9.js +119 -0
- package/dist/cdn/chunks/SaveModuleDialog-B0TnO_o9.js.map +1 -0
- package/dist/cdn/chunks/TitleEditor-BHpfxvwy.js +171 -0
- package/dist/cdn/chunks/TitleEditor-BHpfxvwy.js.map +1 -0
- package/dist/cdn/chunks/blockTypeIcons-BzzY9_kA.js +22 -0
- package/dist/cdn/chunks/blockTypeIcons-BzzY9_kA.js.map +1 -0
- package/dist/cdn/chunks/de-Ce-LbJ2J.js +89 -0
- package/dist/cdn/chunks/de-Ce-LbJ2J.js.map +1 -0
- package/dist/cdn/chunks/de-D8CnZxV9.js +523 -0
- package/dist/cdn/chunks/de-D8CnZxV9.js.map +1 -0
- package/dist/cdn/chunks/de-RQrZR56a.js +209 -0
- package/dist/cdn/chunks/de-RQrZR56a.js.map +1 -0
- package/dist/cdn/chunks/draggable-Bcb86AsV.js +11572 -0
- package/dist/cdn/chunks/draggable-Bcb86AsV.js.map +1 -0
- package/dist/cdn/chunks/emojiData-EMFlj6FJ.js +19 -0
- package/dist/cdn/chunks/emojiData-EMFlj6FJ.js.map +1 -0
- package/dist/cdn/chunks/en-8FHaQv4V.js +523 -0
- package/dist/cdn/chunks/en-8FHaQv4V.js.map +1 -0
- package/dist/cdn/chunks/en-Bl1ecfRF.js +209 -0
- package/dist/cdn/chunks/en-Bl1ecfRF.js.map +1 -0
- package/dist/cdn/chunks/en-DiCWK5fG.js +89 -0
- package/dist/cdn/chunks/en-DiCWK5fG.js.map +1 -0
- package/dist/cdn/chunks/extensions-DIxF31tA.js +598 -0
- package/dist/cdn/chunks/extensions-DIxF31tA.js.map +1 -0
- package/dist/cdn/chunks/features-DEMb13KS.js +6814 -0
- package/dist/cdn/chunks/features-DEMb13KS.js.map +1 -0
- package/dist/cdn/chunks/icons-CsLTcirh.js +700 -0
- package/dist/cdn/chunks/icons-CsLTcirh.js.map +1 -0
- package/dist/cdn/chunks/liquid.browser-lQbkge2E.js +3279 -0
- package/dist/cdn/chunks/liquid.browser-lQbkge2E.js.map +1 -0
- package/dist/cdn/chunks/media-library-CVaNvhpM.js +6014 -0
- package/dist/cdn/chunks/media-library-CVaNvhpM.js.map +1 -0
- package/dist/cdn/chunks/pusher-CDbNlZBE.js +2508 -0
- package/dist/cdn/chunks/pusher-CDbNlZBE.js.map +1 -0
- package/dist/cdn/chunks/quality-BaBfc54_.js +1456 -0
- package/dist/cdn/chunks/quality-BaBfc54_.js.map +1 -0
- package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js +32 -0
- package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js.map +1 -0
- package/dist/cdn/chunks/renderer-CUxvx7ro.js +548 -0
- package/dist/cdn/chunks/renderer-CUxvx7ro.js.map +1 -0
- package/dist/cdn/chunks/rolldown-runtime-BNuo_Jkg.js +20 -0
- package/dist/cdn/chunks/src-CRaqN-p8.js +497 -0
- package/dist/cdn/chunks/src-CRaqN-p8.js.map +1 -0
- package/dist/cdn/chunks/styleConstants-DP1VOca8.js +57 -0
- package/dist/cdn/chunks/styleConstants-DP1VOca8.js.map +1 -0
- package/dist/cdn/chunks/styles-BHJULjNR.js +2947 -0
- package/dist/cdn/chunks/styles-BHJULjNR.js.map +1 -0
- package/dist/cdn/chunks/tiptap-ZhwKyFp7.js +14654 -0
- package/dist/cdn/chunks/tiptap-ZhwKyFp7.js.map +1 -0
- package/dist/cdn/editor.css +2 -0
- package/dist/cdn/editor.js +250 -0
- package/dist/cdn/editor.js.map +1 -0
- package/dist/check-Da05j8yl.js +7 -0
- package/dist/chevron-down-R2uY34iD.js +7 -0
- package/dist/circle-alert-DZuGWPX-.js +25 -0
- package/dist/clock-CRp2sIub.js +12 -0
- package/dist/cloud-DEk_b4CR.js +1733 -0
- package/dist/createLucideIcon-C3pa2siy.js +43 -0
- package/dist/de-Brqvgr43.js +521 -0
- package/dist/de-DCaaCE5s.js +207 -0
- package/dist/dist-B1IR0bpH.js +326 -0
- package/dist/dist-BFawx6IS.js +519 -0
- package/dist/dist-BaQIYPsn.js +35 -0
- package/dist/dist-Cp0zXPAD.js +189 -0
- package/dist/dist-D6uC2xhi.js +5 -0
- package/dist/dist-D90y8dvT.js +2082 -0
- package/dist/dist-DDJIWTRY.js +776 -0
- package/dist/dist-DJmnUmW9.js +362 -0
- package/dist/dist-DjviJBCi.js +74 -0
- package/dist/dist-KoBJjK1G.js +61 -0
- package/dist/dist-aRzjfSRN.js +35 -0
- package/dist/dist-iLBdeBDR.js +10658 -0
- package/dist/dist-us-RpCWN.js +47 -0
- package/dist/dist-wzMIGj-D.js +5 -0
- package/dist/emojiData-PQyVa4bU.js +17 -0
- package/dist/en-DXCyK4-X.js +207 -0
- package/dist/en-WDVp87TE.js +521 -0
- package/dist/extensions-CUcl9Ok4.js +799 -0
- package/dist/formatRelativeTime-BOEf47hq.js +12 -0
- package/dist/image-up-MBZKKg9p.js +23 -0
- package/dist/index.d.ts +275 -0
- package/dist/info-CJEC7piy.js +19 -0
- package/dist/keys-ciNfSSGj.js +10 -0
- package/dist/liquid.browser-CdMv1BTn.js +3277 -0
- package/dist/loader-circle-DsY5Yg33.js +7 -0
- package/dist/message-circle-yElBbR2C.js +7 -0
- package/dist/readableTextColor-CY3SiRnt.js +30 -0
- package/dist/refresh-cw-CE_AGtn8.js +29 -0
- package/dist/rolldown-runtime-BZGGJVDF.js +20 -0
- package/dist/scan-line-D0vcUekt.js +25 -0
- package/dist/send-DH4oDQqC.js +10 -0
- package/dist/shield-check-CfJgs2Hd.js +10 -0
- package/dist/sparkles-CvRXGqFs.js +23 -0
- package/dist/style.css +2 -0
- package/dist/styleConstants-fWzlIIwN.js +55 -0
- package/dist/styles-DEXEkBvg.js +3176 -0
- package/dist/templatical-editor.js +249 -0
- package/dist/text-align-start-BT9VUDxK.js +43 -0
- package/dist/timeouts-BSGxjuUF.js +4 -0
- package/dist/trash-2-DbP2Y6t2.js +25 -0
- package/dist/triangle-alert-aOXceTSe.js +17 -0
- package/dist/useCloudI18n-BuIwR6OE.js +23 -0
- package/dist/useEditorCore-C6ost42Q.js +9342 -0
- package/dist/useI18n-lb2DHDiu.js +17 -0
- package/dist/useMergeTag-CBwKnnNB.js +34 -0
- package/dist/vue.runtime.esm-bundler-DpvJL-nX.js +5775 -0
- package/dist/x-u2oVmjN_.js +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@import"https://fonts.bunny.net/css?family=geist:400,500,600";.tpl-loading-track[data-v-1ed538ec]{height:3px;width:100%;border-radius:9999px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 15%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 30%,var(--tpl-primary) 50%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 70%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 85%,transparent 100%);background-size:200% 100%;animation:tpl-loading-flow-1ed538ec 3s ease-in-out infinite}@keyframes tpl-loading-flow-1ed538ec{0%{background-position:100% 0}to{background-position:-100% 0}}.tpl-block--idle[data-v-850614e7]{outline:1.5px dashed color-mix(in srgb,var(--tpl-primary) 30%,transparent);outline-offset:-1px;transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block--idle[data-v-850614e7]:hover{outline:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent);outline-offset:-1px;box-shadow:0 0 8px color-mix(in srgb,var(--tpl-primary) 8%,transparent)}.tpl-block--selected[data-v-850614e7]{outline:2px solid color-mix(in srgb,var(--tpl-primary) 60%,transparent);outline-offset:-1px;box-shadow:0 0 12px color-mix(in srgb,var(--tpl-primary) 15%,transparent);transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block-action-btn[data-v-850614e7]{color:var(--tpl-text-muted);background-color:transparent}.tpl-block-action-btn[data-v-850614e7]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-block-action-btn[data-v-850614e7]:active{transform:scale(.9)}.tpl-block-delete-btn[data-v-850614e7]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-condition-toggle[data-v-850614e7]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-condition-toggle[data-v-850614e7]:active{transform:scale(.9)}.tpl-block-hidden-overlay[data-v-850614e7]{background-color:color-mix(in srgb,var(--tpl-bg) 60%,transparent)}.tpl-table-editable[data-v-4f49860b] th[contenteditable],.tpl-table-editable[data-v-4f49860b] td[contenteditable]{outline:none;cursor:text;min-width:2rem}.tpl-table-editable[data-v-4f49860b] th[contenteditable]:empty:before,.tpl-table-editable[data-v-4f49860b] td[contenteditable]:empty:before{content:attr(data-placeholder);color:var(--tpl-text-dim);pointer-events:none}.tpl-table-editable[data-v-4f49860b] th[contenteditable]:focus,.tpl-table-editable[data-v-4f49860b] td[contenteditable]:focus{outline:2px solid var(--tpl-primary);outline-offset:-2px;border-radius:1px}.tpl-ai-slide-enter-active[data-v-a55e4bff]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-ai-slide-leave-active[data-v-a55e4bff]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-ai-input-wrapper[data-v-a55e4bff]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-ai-send-btn[data-v-a55e4bff]:not(:disabled):hover{transform:scale(1.05)}.tpl-suggestion-btn[data-v-a55e4bff]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-comments-slide-enter-active[data-v-d204f573]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-comments-slide-leave-active[data-v-d204f573]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-comments-input-wrapper[data-v-d204f573]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-comments-send-btn[data-v-d204f573]:not(:disabled):hover{transform:scale(1.05)}.tpl-comment-filter[data-v-d204f573]{color:var(--tpl-text-muted);background-color:transparent}.tpl-comment-filter[data-v-d204f573]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-filter--active[data-v-d204f573]{background-color:var(--tpl-primary-light);color:var(--tpl-primary)}.tpl-comment-action[data-v-d204f573]{color:var(--tpl-text-dim);background-color:transparent}.tpl-comment-action[data-v-d204f573]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-delete[data-v-d204f573]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-comment-card[data-v-d204f573],.tpl-comment-reply-card[data-v-d204f573]{border-color:var(--tpl-border);background-color:var(--tpl-bg)}.tpl-resolve-enter-active[data-v-d204f573],.tpl-resolve-leave-active[data-v-d204f573]{transition:opacity .3s ease,transform .3s ease}.tpl-resolve-enter-from[data-v-d204f573],.tpl-resolve-leave-to[data-v-d204f573]{opacity:0;transform:translateY(-4px)}.tpl-resolve-icon[data-v-d204f573]{transition:color .3s ease,transform .2s ease}.tpl-resolve-icon[data-v-d204f573]:active{transform:scale(1.3)}.tpl-replies-enter-active[data-v-d204f573],.tpl-replies-leave-active[data-v-d204f573]{transition:opacity .25s ease,transform .25s ease}.tpl-replies-enter-from[data-v-d204f573],.tpl-replies-leave-to[data-v-d204f573]{opacity:0;transform:translateY(-4px)}.tpl-design-slide-enter-active[data-v-bdbf8d0d]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-design-slide-leave-active[data-v-bdbf8d0d]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-design-prompt-input[data-v-bdbf8d0d]:focus{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-design-dropzone[data-v-bdbf8d0d]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-scoring-slide-enter-active[data-v-3a059e8d]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-scoring-slide-leave-active[data-v-3a059e8d]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-scoring-fix-btn[data-v-3a059e8d]:not(:disabled):hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}hex-color-picker{--hcp-width: 200px}hex-color-picker::part(hue){border-radius:var(--tpl-radius-sm, 7px)}hex-color-picker::part(saturation){border-radius:var(--tpl-radius-sm, 7px) var(--tpl-radius-sm, 7px) 0 0}.tpl-canvas--dark-mode[data-v-5a826917] img,.tpl-canvas--dark-mode[data-v-5a826917] .tpl-block-actions,.tpl-canvas--dark-mode[data-v-5a826917] .tpl-condition-toggle,.tpl-canvas--dark-mode[data-v-5a826917] .tpl-block-hidden-overlay{filter:invert(1) hue-rotate(180deg)}.tpl-pulse-fill[data-v-358207dd]{animation:tpl-field-pulse-358207dd 1s ease-out}@keyframes tpl-field-pulse-358207dd{0%{box-shadow:0 0 color-mix(in srgb,var(--tpl-warning) 30%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 6%,transparent)}40%{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-warning) 15%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 5%,transparent)}to{box-shadow:0 0 0 0 transparent;background-color:transparent}}@media(prefers-reduced-motion:reduce){.tpl-pulse-fill[data-v-358207dd]{animation:none}}input[type=number][data-v-9a9c8a07]::-webkit-outer-spin-button,input[type=number][data-v-9a9c8a07]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-9a9c8a07]{-moz-appearance:textfield}.tpl-collapsible[data-v-2ac88283]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s cubic-bezier(.16,1,.3,1)}.tpl-collapsible--open[data-v-2ac88283]{grid-template-rows:1fr}.tpl-collapsible>div[data-v-2ac88283]{overflow:hidden}.tpl-icon-enter-active[data-v-af87d02a],.tpl-icon-leave-active[data-v-af87d02a]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-af87d02a],.tpl-icon-leave-to[data-v-af87d02a]{opacity:0;transform:scale(.8)}.tpl-preview-toggle[data-v-af87d02a]:hover{background-color:var(--tpl-bg-hover)}.tpl-preview-toggle[data-v-af87d02a]:active{transform:scale(.92)}.tpl-icon-enter-active[data-v-f8694f76],.tpl-icon-leave-active[data-v-f8694f76]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-f8694f76],.tpl-icon-leave-to[data-v-f8694f76]{opacity:0;transform:scale(.8)}.tpl-dark-mode-toggle[data-v-f8694f76]:hover{background-color:var(--tpl-bg-hover)}.tpl-dark-mode-toggle[data-v-f8694f76]:active{transform:scale(.92)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tpl-comet-angle:0deg;--tpl-comet-start:100%}}}@layer theme{:root,:host{--tpl-radius-sm:.25rem;--tpl-radius-md:.375rem;--tpl-radius-lg:.5rem;--tpl-shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--tpl-shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tpl-shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a}}@layer base,components;.tpl{--tpl-bg:oklch(99.5% .002 60);--tpl-bg-elevated:oklch(98% .004 60);--tpl-bg-hover:oklch(96% .006 60);--tpl-bg-active:oklch(93.5% .008 60);--tpl-border:oklch(92% .006 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary:oklch(70% .16 55);--tpl-primary-hover:oklch(63% .17 55);--tpl-primary-light:oklch(95% .04 55);--tpl-secondary:oklch(60% .118 184.71);--tpl-secondary-hover:oklch(53.2% .105 186.39);--tpl-secondary-light:oklch(93.8% .03 186.82);--tpl-success:oklch(62.8% .194 155.1);--tpl-success-light:oklch(93.6% .043 163.51);--tpl-warning:oklch(76.9% .168 70.08);--tpl-warning-light:oklch(95% .038 73.59);--tpl-danger:oklch(63.7% .237 25.33);--tpl-danger-light:oklch(93.6% .032 17.72);--tpl-canvas-bg:oklch(97.5% .003 60);--tpl-radius:10px;--tpl-radius-sm:7px;--tpl-radius-lg:14px;--tpl-font-family:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--tpl-shadow-sm:0 1px 2px #00000008;--tpl-shadow:0 1px 2px #0000000a, 0 1px 3px #00000008;--tpl-shadow-md:0 2px 8px #0000000f, 0 1px 3px #0000000a;--tpl-shadow-lg:0 4px 16px #00000014, 0 2px 6px #0000000a;--tpl-shadow-xl:0 8px 32px #0000001a, 0 4px 12px #0000000f;--tpl-overlay:#00000080;--tpl-ring:0 0 0 3px var(--tpl-primary-light);--tpl-transition:.12s cubic-bezier(.16, 1, .3, 1)}.tpl[data-tpl-theme=dark]{--tpl-bg:oklch(16% .005 60);--tpl-bg-elevated:oklch(21% .006 60);--tpl-bg-hover:oklch(26% .007 60);--tpl-bg-active:oklch(30% .008 60);--tpl-border:oklch(30% .006 60);--tpl-border-light:oklch(38% .008 60);--tpl-text:oklch(93% .005 60);--tpl-text-muted:oklch(65% .01 60);--tpl-text-dim:oklch(50% .008 60);--tpl-primary:oklch(73% .15 55);--tpl-primary-hover:oklch(78% .14 55);--tpl-primary-light:oklch(28% .05 55);--tpl-secondary:oklch(63% .11 184.71);--tpl-secondary-hover:oklch(68% .1 186.39);--tpl-secondary-light:oklch(25% .03 186.82);--tpl-success:oklch(65% .18 155.1);--tpl-success-light:oklch(25% .04 163.51);--tpl-warning:oklch(78% .16 70.08);--tpl-warning-light:oklch(28% .04 73.59);--tpl-danger:oklch(65% .22 25.33);--tpl-danger-light:oklch(25% .04 17.72);--tpl-canvas-bg:oklch(10% .003 60);--tpl-shadow-sm:0 1px 2px #0003;--tpl-shadow:0 1px 2px #0000004d, 0 1px 3px #0003;--tpl-shadow-md:0 2px 8px #00000059, 0 1px 3px #00000040;--tpl-shadow-lg:0 4px 16px #0006, 0 2px 6px #0000004d;--tpl-shadow-xl:0 8px 32px #00000080, 0 4px 12px #00000059;--tpl-overlay:#000000b3;--tpl-ring:0 0 0 3px var(--tpl-primary-light)}.tpl[data-tpl-theme=dark] .tpl-canvas-wrapper{--tpl-bg-elevated:oklch(98% .004 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary-light:oklch(95% .04 55);--tpl-primary-hover:oklch(60% .16 55);color:var(--tpl-text)}.tpl{height:100%;font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);min-height:600px;color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family);flex-direction:column;display:flex}.tpl button{cursor:pointer;background:0 0;border:none}.tpl button:focus-visible,.tpl input:focus-visible,.tpl select:focus-visible,.tpl textarea:focus-visible{box-shadow:var(--tpl-ring);outline:none}@keyframes tpl-dot-bounce{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.tpl-dot{animation:1.2s ease-in-out infinite tpl-dot-bounce}@keyframes tpl-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes tpl-slide-in-right{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes tpl-slide-in-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes tpl-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.tpl-fade-in{animation:.2s cubic-bezier(.16,1,.3,1) tpl-fade-in}.tpl-slide-in-right{animation:.25s cubic-bezier(.16,1,.3,1) tpl-slide-in-right}.tpl-slide-in-up{animation:.2s cubic-bezier(.16,1,.3,1) tpl-slide-in-up}.tpl-shimmer{background:linear-gradient(90deg,var(--tpl-bg-hover) 25%,var(--tpl-bg-active) 50%,var(--tpl-bg-hover) 75%);background-size:200% 100%;animation:1.5s linear infinite tpl-shimmer}.tpl-preview-mode .tpl-block--idle,.tpl-preview-mode .tpl-block--idle:hover,.tpl-preview-mode .tpl-block--selected{box-shadow:none!important;outline:none!important}.tpl-preview-mode .tpl-block{cursor:default;pointer-events:none}.tpl-preview-mode .tpl-block-actions,.tpl-preview-mode .tpl-block-hidden-overlay,.tpl-preview-mode .tpl-condition-toggle,.tpl-preview-mode .tpl-comment-indicator,.tpl-preview-mode .tpl-collab-lock{display:none}.tpl-ghost{border:none!important;border-top:2px dotted var(--tpl-primary)!important;background-color:#0000!important;justify-content:center!important;align-items:center!important;width:100%!important;height:0!important;min-height:0!important;max-height:0!important;margin:12px 0!important;padding:0!important;display:flex!important;position:relative!important;overflow:visible!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost{border-top:2px dotted color-mix(in srgb,var(--tpl-primary) 50%,transparent)!important}}.tpl-ghost{box-shadow:none!important;border-radius:0!important}.tpl-ghost>*{display:none!important}.tpl-ghost:before{content:var(--tpl-drop-text,"Drop here");white-space:nowrap!important;color:var(--tpl-primary)!important;background-color:var(--tpl-primary)!important;padding:2px 8px!important;font-size:12px!important;font-weight:500!important;position:absolute!important;top:50%!important;left:50%!important;transform:translate(-50%,-50%)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost:before{background-color:color-mix(in srgb,var(--tpl-primary) 15%,var(--tpl-bg))!important}}.tpl-ghost:before{border-radius:var(--tpl-radius-sm)!important;box-shadow:none!important}.tpl-dragging{opacity:.8;box-shadow:var(--tpl-shadow-xl)}.tpl-block--lifted{outline:2px dashed var(--tpl-primary)!important;outline-offset:2px!important;box-shadow:var(--tpl-shadow-xl),0 0 0 4px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-block--lifted{box-shadow:var(--tpl-shadow-xl),0 0 0 4px color-mix(in srgb,var(--tpl-primary) 20%,transparent)!important}}.tpl-block--lifted{transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1);transform:scale(1.01)}.tpl-sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl-text-toolbar-btn{cursor:pointer;--tw-border-style:none;width:2rem;height:2rem;transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s);--tw-duration:.15s;color:var(--tpl-text);background-color:#0000;border-style:none;border-radius:.25rem;justify-content:center;align-items:center;padding:0;transition-duration:.15s;display:flex}.tpl-text-toolbar-btn:hover{background-color:var(--tpl-bg-active)}.tpl-text-toolbar-btn--active{box-shadow:inset 0 0 0 1.5px var(--tpl-primary-hover);background-color:var(--tpl-primary)!important;color:var(--tpl-bg)!important}.tpl-text-toolbar-btn--active svg{stroke-width:2.75px}.tpl-text-content,.tpl-text-editable .tiptap{--tw-outline-style:none;outline-style:none}.tpl-text-editable{border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--tpl-primary);border-radius:.25rem;min-height:1.5em;padding:.5rem}.tpl-text-content p,.tpl-text-editable .tiptap p{margin:0 0 .5rem}:is(.tpl-text-content p,.tpl-text-editable .tiptap p):last-child{margin-bottom:0}.tpl-text-content ul,.tpl-text-content ol,.tpl-text-editable .tiptap ul,.tpl-text-editable .tiptap ol{margin-block:.5rem;padding-left:1.5rem}.tpl-text-content li,.tpl-text-editable .tiptap li{margin-block:.25rem}.tpl-text-content s,.tpl-text-editable .tiptap s{text-decoration-line:line-through}.tpl-text-content sub,.tpl-text-editable .tiptap sub{vertical-align:sub;font-size:.75em}.tpl-text-content sup,.tpl-text-editable .tiptap sup{vertical-align:super;font-size:.75em}.tpl-text-content a,.tpl-text-editable a{color:var(--tpl-primary);text-decoration-line:underline}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{--tw-font-weight:500;background-color:var(--tpl-primary);border-radius:.25rem;align-items:center;margin-inline:.125rem;padding-block:.125rem;padding-inline:.375rem;font-size:.9em;font-weight:500;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{background-color:color-mix(in srgb,var(--tpl-primary) 20%,transparent)}}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{color:var(--tpl-primary)}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{--tw-font-weight:700;--tw-tracking:.025em;letter-spacing:.025em;text-transform:uppercase;border:1.5px solid var(--tpl-primary);background-color:#0000;border-radius:.25rem;align-items:center;margin-inline:.125rem;padding-block:.125rem;padding-inline:.375rem;font-size:.8em;font-weight:700;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{border:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent)}}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{color:var(--tpl-primary)}.tpl-tooltip{position:relative}.tpl-tooltip:after{content:attr(data-tooltip);border-radius:var(--tpl-radius-sm);background-color:var(--tpl-text);color:var(--tpl-bg);white-space:normal;text-align:center;pointer-events:none;opacity:0;text-transform:none;z-index:50;max-width:220px;padding:4px 10px;font-size:12px;font-weight:500;line-height:1.4;transition:opacity .15s;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.tpl-tooltip:before{content:"";border:4px solid #0000;border-bottom-color:var(--tpl-text);pointer-events:none;opacity:0;z-index:50;transition:opacity .15s;position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%)}.tpl-tooltip:hover:after,.tpl-tooltip:hover:before{opacity:1}.tpl.tpl-media-overlay{background-color:var(--tpl-overlay);-webkit-backdrop-filter:blur(8px);height:100%;min-height:0;color:var(--tpl-text);flex-direction:row;justify-content:center;align-items:center;display:flex}.tpl.tpl-text-toolbar{flex-direction:row;height:auto;min-height:0;display:flex}.tpl.tpl-link-dialog{background-color:var(--tpl-overlay);flex-direction:row;justify-content:center;align-items:center;height:100%;min-height:0;display:flex}.tpl-upload-zone-active{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}@property --tpl-comet-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@property --tpl-comet-start{syntax:"<percentage>";inherits:false;initial-value:100%}@keyframes tpl-ai-comet{0%{--tpl-comet-angle:0deg;--tpl-comet-start:100%}1%{--tpl-comet-angle:24deg;--tpl-comet-start:88%}5%{--tpl-comet-angle:120deg;--tpl-comet-start:60%}25%{--tpl-comet-angle:600deg;--tpl-comet-start:60%}33%{--tpl-comet-angle:720deg;--tpl-comet-start:100%}to{--tpl-comet-angle:720deg;--tpl-comet-start:100%}}.tpl-ai-btn--idle{background-color:var(--tpl-primary-light);color:var(--tpl-primary-hover);box-shadow:none;z-index:0;position:relative}.tpl-ai-btn--idle:before{content:"";border-radius:inherit;background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),var(--tpl-primary) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%);padding:2px;position:absolute;inset:-2px}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:before{background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),color-mix(in srgb,var(--tpl-primary) 40%,transparent) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%)}}.tpl-ai-btn--idle:before{z-index:-1;pointer-events:none;animation:20s linear 3s infinite tpl-ai-comet;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.tpl-ai-btn--idle:hover{background-color:var(--tpl-primary);color:var(--tpl-bg);transform:translateY(-1px);box-shadow:0 0 0 3px var(--tpl-primary),0 4px 16px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-primary) 20%,transparent),0 4px 16px color-mix(in srgb,var(--tpl-primary) 30%,transparent)!important}}.tpl-ai-btn--idle:hover:before{animation:none}.tpl-ai-btn--active{background-color:var(--tpl-primary-light);color:var(--tpl-primary-hover);border:1px solid var(--tpl-primary)}.tpl-ai-btn--active .tpl-ai-btn-icon{fill:var(--tpl-primary)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active .tpl-ai-btn-icon{fill:color-mix(in srgb,var(--tpl-primary) 25%,transparent)}}.tpl-ai-btn--active:hover{background-color:var(--tpl-primary-light)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active:hover{background-color:color-mix(in srgb,var(--tpl-primary-light) 80%,var(--tpl-primary))}}.tpl-merge-tag-delete:hover{color:var(--tpl-danger)!important}@media(prefers-reduced-motion:reduce){.tpl-pulse,.tpl-dot,.tpl-shimmer,.tpl-fade-in,.tpl-scale-in,.tpl-slide-in-right,.tpl-slide-in-up,.tpl-ai-btn--idle:before{animation:none}.tpl-shimmer{background:var(--tpl-bg-hover)}.tpl *,.tpl :before,.tpl :after{transition-duration:.01ms!important}.tpl-spinner{animation:1s linear infinite tpl-spin}}.tpl-restore-btn-enter-active[data-v-9ffdcb5e]{transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .2s cubic-bezier(.16,1,.3,1)}.tpl-restore-btn-leave-active[data-v-9ffdcb5e]{transition:opacity .15s ease-in,transform .15s ease-in}.tpl-restore-btn-enter-from[data-v-9ffdcb5e],.tpl-restore-btn-leave-to[data-v-9ffdcb5e]{opacity:0;transform:translateY(-8px) scale(.9)}.tpl-restore-btn-enter-to[data-v-9ffdcb5e],.tpl-restore-btn-leave-from[data-v-9ffdcb5e]{opacity:1;transform:translateY(0) scale(1)}.tpl-restore-btn-enter-active[data-v-b332971f]{transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .2s cubic-bezier(.16,1,.3,1)}.tpl-restore-btn-leave-active[data-v-b332971f]{transition:opacity .15s ease-in,transform .15s ease-in}.tpl-restore-btn-enter-from[data-v-b332971f],.tpl-restore-btn-leave-to[data-v-b332971f]{opacity:0;transform:translateY(-8px) scale(.9)}.tpl-restore-btn-enter-to[data-v-b332971f],.tpl-restore-btn-leave-from[data-v-b332971f]{opacity:1;transform:translateY(0) scale(1)}.tpl-ai-feature-menu-item[data-v-07839fa3]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-module-delete-btn:hover{color:var(--tpl-danger)!important}.vue-advanced-cropper{text-align:center;position:relative;user-select:none;max-height:100%;max-width:100%;direction:ltr}.vue-advanced-cropper__stretcher{pointer-events:none;position:relative;max-width:100%;max-height:100%}.vue-advanced-cropper__image{user-select:none;position:absolute;transform-origin:center;max-width:none!important}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{opacity:1;background:#000;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{opacity:1;transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.vue-advanced-cropper__cropper-wrapper{width:100%;height:100%}.vue-advanced-cropper__image-wrapper{overflow:hidden;position:absolute;width:100%;height:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{display:block;background:#fff;height:10px;width:10px}.vue-handler-wrapper{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px}.vue-handler-wrapper__draggable{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{background:none;position:absolute;display:flex;align-items:center;justify-content:center}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;width:100%;left:0;transform:translateY(-50%)}.vue-line-wrapper--north{top:0;cursor:n-resize}.vue-line-wrapper--south{top:100%;cursor:s-resize}.vue-line-wrapper--east,.vue-line-wrapper--west{width:12px;height:100%;transform:translate(-50%);top:0}.vue-line-wrapper--east{left:100%;cursor:e-resize}.vue-line-wrapper--west{left:0;cursor:w-resize}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{position:relative;height:100%;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{overflow:hidden;box-sizing:border-box;position:absolute;height:100%;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{pointer-events:none;position:relative;user-select:none;transform-origin:center;max-width:none!important}.vue-rectangle-stencil{position:absolute;height:100%;width:100%;box-sizing:border-box}.vue-rectangle-stencil__preview{position:absolute;width:100%;height:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{position:absolute;height:100%;width:100%;box-sizing:content-box;cursor:move}.vue-circle-stencil__preview{border-radius:50%;position:absolute;width:100%;height:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{overflow:hidden;box-sizing:border-box;position:relative}.vue-preview--fill{width:100%;height:100%;position:absolute}.vue-preview__wrapper{position:absolute;height:100%;width:100%}.vue-preview__image{pointer-events:none;position:absolute;user-select:none;transform-origin:center;max-width:none!important}.vue-simple-line{background:none;transition:border .5s;border-color:#ffffff4d;border-width:0;border-style:solid}.vue-simple-line--south,.vue-simple-line--north{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{opacity:1;border-color:#fff}[data-v-7c7d7d1f] .tpl-cropper-background{background-color:var(--tpl-bg)!important}[data-v-7c7d7d1f] .vue-advanced-cropper{background-color:transparent!important}[data-v-7c7d7d1f] .vue-advanced-cropper__background{background-color:var(--tpl-bg)!important}[data-v-7c7d7d1f] .vue-advanced-cropper__foreground{background-color:var(--tpl-overlay)!important}.tpl-media-item[data-v-78d7ed75]:not(.tpl-media-item--selected):hover{border-color:var(--tpl-border)!important}.tpl-media-list-item[data-v-78d7ed75]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-list-icon[data-v-78d7ed75]{transform:scale(.35);transform-origin:center}.tpl-preview-icon[data-v-56be5670]{transform:scale(.45);transform-origin:center}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--tpl-radius-sm:.25rem;--tpl-radius-md:.375rem;--tpl-radius-lg:.5rem;--tpl-shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--tpl-shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tpl-shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a}}.tpl\:pointer-events-auto{pointer-events:auto}.tpl\:pointer-events-none{pointer-events:none}.tpl\:invisible{visibility:hidden}.tpl\:absolute{position:absolute}.tpl\:fixed{position:fixed}.tpl\:relative{position:relative}.tpl\:sticky{position:sticky}.tpl\:inset-0{inset:0}.tpl\:inset-y-1{inset-block:.25rem}.tpl\:-top-0\.5{top:-.125rem}.tpl\:-top-1{top:-.25rem}.tpl\:top-0{top:0}.tpl\:top-1{top:.25rem}.tpl\:top-1\.5{top:.375rem}.tpl\:top-1\/2{top:50%}.tpl\:top-2{top:.5rem}.tpl\:top-14{top:3.5rem}.tpl\:top-16{top:4rem}.tpl\:top-\[104px\]{top:104px}.tpl\:top-full{top:100%}.tpl\:-right-1{right:-.25rem}.tpl\:-right-2{right:-.5rem}.tpl\:right-0{right:0}.tpl\:right-1{right:.25rem}.tpl\:right-1\.5{right:.375rem}.tpl\:right-2{right:.5rem}.tpl\:right-2\.5{right:.625rem}.tpl\:right-\[320px\]{right:320px}.tpl\:right-\[360px\]{right:360px}.tpl\:right-\[680px\]{right:680px}.tpl\:bottom-0{bottom:0}.tpl\:bottom-full{bottom:100%}.tpl\:-left-1{left:-.25rem}.tpl\:left-0{left:0}.tpl\:left-1\.5{left:.375rem}.tpl\:left-1\/2{left:50%}.tpl\:left-2\.5{left:.625rem}.tpl\:left-3{left:.75rem}.tpl\:left-12{left:3rem}.tpl\:z-10{z-index:10}.tpl\:z-40{z-index:40}.tpl\:z-50{z-index:50}.tpl\:z-\[4\]{z-index:4}.tpl\:z-\[5\]{z-index:5}.tpl\:z-\[9999\]{z-index:9999}.tpl\:z-\[10000\]{z-index:10000}.tpl\:m-0{margin:0}.tpl\:m-6{margin:1.5rem}.tpl\:mx-0\.5{margin-inline:.125rem}.tpl\:mx-1{margin-inline:.25rem}.tpl\:mx-1\.5{margin-inline:.375rem}.tpl\:mx-3{margin-inline:.75rem}.tpl\:mx-4{margin-inline:1rem}.tpl\:mx-auto{margin-inline:auto}.tpl\:mt-0\.5{margin-top:.125rem}.tpl\:mt-1{margin-top:.25rem}.tpl\:mt-1\.5{margin-top:.375rem}.tpl\:mt-2{margin-top:.5rem}.tpl\:mt-3{margin-top:.75rem}.tpl\:mt-4{margin-top:1rem}.tpl\:\!mb-0{margin-bottom:0!important}.tpl\:mb-1{margin-bottom:.25rem}.tpl\:mb-1\.5{margin-bottom:.375rem}.tpl\:mb-2{margin-bottom:.5rem}.tpl\:mb-2\.5{margin-bottom:.625rem}.tpl\:mb-3{margin-bottom:.75rem}.tpl\:mb-3\.5{margin-bottom:.875rem}.tpl\:mb-4{margin-bottom:1rem}.tpl\:mb-px{margin-bottom:1px}.tpl\:-ml-48{margin-left:-12rem}.tpl\:ml-0{margin-left:0}.tpl\:ml-1{margin-left:.25rem}.tpl\:ml-5{margin-left:1.25rem}.tpl\:ml-auto{margin-left:auto}.tpl\:\!flex{display:flex!important}.tpl\:block{display:block}.tpl\:flex{display:flex}.tpl\:grid{display:grid}.tpl\:hidden{display:none}.tpl\:inline{display:inline}.tpl\:inline-block{display:inline-block}.tpl\:inline-flex{display:inline-flex}.tpl\:aspect-square{aspect-ratio:1}.tpl\:size-1\.5{width:.375rem;height:.375rem}.tpl\:size-2{width:.5rem;height:.5rem}.tpl\:size-3{width:.75rem;height:.75rem}.tpl\:size-3\.5{width:.875rem;height:.875rem}.tpl\:size-4{width:1rem;height:1rem}.tpl\:size-4\.5{width:1.125rem;height:1.125rem}.tpl\:size-5{width:1.25rem;height:1.25rem}.tpl\:size-6{width:1.5rem;height:1.5rem}.tpl\:size-7{width:1.75rem;height:1.75rem}.tpl\:size-8{width:2rem;height:2rem}.tpl\:size-10{width:2.5rem;height:2.5rem}.tpl\:size-12{width:3rem;height:3rem}.tpl\:size-16{width:4rem;height:4rem}.tpl\:size-full{width:100%;height:100%}.tpl\:h-0{height:0}.tpl\:h-2\.5{height:.625rem}.tpl\:h-3{height:.75rem}.tpl\:h-4{height:1rem}.tpl\:h-5{height:1.25rem}.tpl\:h-6{height:1.5rem}.tpl\:h-7{height:1.75rem}.tpl\:h-8{height:2rem}.tpl\:h-9{height:2.25rem}.tpl\:h-10{height:2.5rem}.tpl\:h-12{height:3rem}.tpl\:h-14{height:3.5rem}.tpl\:h-32{height:8rem}.tpl\:h-44{height:11rem}.tpl\:h-\[32px\]{height:32px}.tpl\:h-auto{height:auto}.tpl\:h-full{height:100%}.tpl\:max-h-24{max-height:6rem}.tpl\:max-h-32{max-height:8rem}.tpl\:max-h-40{max-height:10rem}.tpl\:max-h-48{max-height:12rem}.tpl\:max-h-56{max-height:14rem}.tpl\:max-h-64{max-height:16rem}.tpl\:max-h-\[50vh\]{max-height:50vh}.tpl\:max-h-\[80vh\]{max-height:80vh}.tpl\:max-h-\[90vh\]{max-height:90vh}.tpl\:min-h-0{min-height:0}.tpl\:min-h-6{min-height:1.5rem}.tpl\:min-h-10{min-height:2.5rem}.tpl\:min-h-\[1\.5em\]{min-height:1.5em}.tpl\:min-h-\[1em\]{min-height:1em}.tpl\:min-h-\[5rem\]{min-height:5rem}.tpl\:min-h-\[48px\]{min-height:48px}.tpl\:min-h-\[60px\]{min-height:60px}.tpl\:min-h-\[64px\]{min-height:64px}.tpl\:min-h-\[68px\]{min-height:68px}.tpl\:min-h-\[72px\]{min-height:72px}.tpl\:min-h-\[80px\]{min-height:80px}.tpl\:min-h-\[100px\]{min-height:100px}.tpl\:min-h-\[120px\]{min-height:120px}.tpl\:min-h-\[150px\]{min-height:150px}.tpl\:min-h-\[400px\]{min-height:400px}.tpl\:w-1\/2{width:50%}.tpl\:w-1\/3{width:33.3333%}.tpl\:w-2\/3{width:66.6667%}.tpl\:w-3\/4{width:75%}.tpl\:w-5\/6{width:83.3333%}.tpl\:w-8{width:2rem}.tpl\:w-9{width:2.25rem}.tpl\:w-10{width:2.5rem}.tpl\:w-12{width:3rem}.tpl\:w-16{width:4rem}.tpl\:w-20{width:5rem}.tpl\:w-28{width:7rem}.tpl\:w-32{width:8rem}.tpl\:w-36{width:9rem}.tpl\:w-40{width:10rem}.tpl\:w-48{width:12rem}.tpl\:w-52{width:13rem}.tpl\:w-56{width:14rem}.tpl\:w-72{width:18rem}.tpl\:w-\[280px\]{width:280px}.tpl\:w-\[300px\]{width:300px}.tpl\:w-\[320px\]{width:320px}.tpl\:w-\[360px\]{width:360px}.tpl\:w-\[400px\]{width:400px}.tpl\:w-\[600px\]{width:600px}.tpl\:w-full{width:100%}.tpl\:w-px{width:1px}.tpl\:max-w-2xl{max-width:42rem}.tpl\:max-w-\[220px\]{max-width:220px}.tpl\:max-w-\[240px\]{max-width:240px}.tpl\:max-w-\[320px\]{max-width:320px}.tpl\:max-w-\[600px\]{max-width:600px}.tpl\:max-w-\[1000px\]{max-width:1000px}.tpl\:max-w-full{max-width:100%}.tpl\:max-w-md{max-width:28rem}.tpl\:max-w-sm{max-width:24rem}.tpl\:min-w-0{min-width:0}.tpl\:min-w-6{min-width:1.5rem}.tpl\:min-w-\[20px\]{min-width:20px}.tpl\:min-w-\[200px\]{min-width:200px}.tpl\:flex-1{flex:1}.tpl\:shrink-0{flex-shrink:0}.tpl\:origin-top-right{transform-origin:100% 0}.tpl\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-x-0{--tw-translate-x: 0rem ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-x-4{--tw-translate-x: 1rem ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-y-2{--tw-translate-y: -.5rem ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-0{--tw-translate-y: 0rem ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-1{--tw-translate-y: .25rem ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-\[-8px\]{--tw-translate-y:-8px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\:-rotate-90{rotate:-90deg}.tpl\:rotate-0{rotate:0deg}.tpl\:rotate-45{rotate:45deg}.tpl\:rotate-90{rotate:90deg}.tpl\:rotate-180{rotate:180deg}.tpl\:animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}.tpl\:animate-spin{animation:1s linear infinite spin}.tpl\:cursor-default{cursor:default}.tpl\:cursor-grab{cursor:grab}.tpl\:cursor-help{cursor:help}.tpl\:cursor-not-allowed{cursor:not-allowed}.tpl\:cursor-pointer{cursor:pointer}.tpl\:resize-none{resize:none}.tpl\:resize-y{resize:vertical}.tpl\:list-none{list-style-type:none}.tpl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.tpl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.tpl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.tpl\:grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.tpl\:flex-col{flex-direction:column}.tpl\:flex-wrap{flex-wrap:wrap}.tpl\:items-center{align-items:center}.tpl\:items-end{align-items:flex-end}.tpl\:items-start{align-items:flex-start}.tpl\:items-stretch{align-items:stretch}.tpl\:justify-between{justify-content:space-between}.tpl\:justify-center{justify-content:center}.tpl\:justify-end{justify-content:flex-end}.tpl\:gap-0{gap:0}.tpl\:gap-0\.5{gap:.125rem}.tpl\:gap-1{gap:.25rem}.tpl\:gap-1\.5{gap:.375rem}.tpl\:gap-2{gap:.5rem}.tpl\:gap-2\.5{gap:.625rem}.tpl\:gap-3{gap:.75rem}.tpl\:gap-4{gap:1rem}.tpl\:gap-5{gap:1.25rem}.tpl\:gap-6{gap:1.5rem}.tpl\:gap-10{gap:2.5rem}:where(.tpl\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(.25rem * var(--tw-space-y-reverse));margin-block-end:calc(.25rem * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(.5rem * var(--tw-space-y-reverse));margin-block-end:calc(.5rem * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(.75rem * var(--tw-space-y-reverse));margin-block-end:calc(.75rem * calc(1 - var(--tw-space-y-reverse)))}.tpl\:gap-x-1{column-gap:.25rem}:where(.tpl\:-space-x-1\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-.375rem * var(--tw-space-x-reverse));margin-inline-end:calc(-.375rem * calc(1 - var(--tw-space-x-reverse)))}.tpl\:gap-y-0\.5{row-gap:.125rem}.tpl\:self-end{align-self:flex-end}.tpl\:self-start{align-self:flex-start}.tpl\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tpl\:overflow-auto{overflow:auto}.tpl\:overflow-hidden{overflow:hidden}.tpl\:overflow-x-auto{overflow-x:auto}.tpl\:overflow-y-auto{overflow-y:auto}.tpl\:rounded{border-radius:.25rem}.tpl\:rounded-\[calc\(var\(--tpl-radius-sm\)-2px\)\]{border-radius:calc(var(--tpl-radius-sm) - 2px)}.tpl\:rounded-\[var\(--tpl-radius\)\]{border-radius:var(--tpl-radius)}.tpl\:rounded-\[var\(--tpl-radius-lg\)\]{border-radius:var(--tpl-radius-lg)}.tpl\:rounded-\[var\(--tpl-radius-md\)\]{border-radius:var(--tpl-radius-md)}.tpl\:rounded-\[var\(--tpl-radius-sm\)\]{border-radius:var(--tpl-radius-sm)}.tpl\:rounded-full{border-radius:3.40282e38px}.tpl\:rounded-lg{border-radius:.5rem}.tpl\:rounded-md{border-radius:.375rem}.tpl\:rounded-sm{border-radius:.25rem}.tpl\:rounded-xl{border-radius:.75rem}.tpl\:rounded-l-\[var\(--tpl-radius-sm\)\]{border-top-left-radius:var(--tpl-radius-sm);border-bottom-left-radius:var(--tpl-radius-sm)}.tpl\:rounded-tl-lg{border-top-left-radius:.5rem}.tpl\:rounded-r-\[var\(--tpl-radius-sm\)\]{border-top-right-radius:var(--tpl-radius-sm);border-bottom-right-radius:var(--tpl-radius-sm)}.tpl\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.tpl\:border{border-style:var(--tw-border-style);border-width:1px}.tpl\:border-0{border-style:var(--tw-border-style);border-width:0}.tpl\:border-2{border-style:var(--tw-border-style);border-width:2px}.tpl\:border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.tpl\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.tpl\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.tpl\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.tpl\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.tpl\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.tpl\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.tpl\:border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.tpl\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.tpl\:border-dashed{--tw-border-style:dashed;border-style:dashed}.tpl\:border-none{--tw-border-style:none;border-style:none}.tpl\:border-\[var\(--tpl-bg\)\]{border-color:var(--tpl-bg)}.tpl\:border-\[var\(--tpl-border\)\]{border-color:var(--tpl-border)}.tpl\:border-\[var\(--tpl-border-light\)\]{border-color:var(--tpl-border-light)}.tpl\:border-\[var\(--tpl-danger\)\]{border-color:var(--tpl-danger)}.tpl\:border-\[var\(--tpl-primary\)\]{border-color:var(--tpl-primary)}.tpl\:border-\[var\(--tpl-warning\)\]{border-color:var(--tpl-warning)}.tpl\:border-transparent{border-color:#0000}.tpl\:border-b-\[var\(--tpl-border-light\)\]{border-bottom-color:var(--tpl-border-light)}.tpl\:border-l-transparent{border-left-color:#0000}.tpl\:bg-\[var\(--tpl-bg\)\]{background-color:var(--tpl-bg)}.tpl\:bg-\[var\(--tpl-bg-active\)\]{background-color:var(--tpl-bg-active)}.tpl\:bg-\[var\(--tpl-bg-elevated\)\]{background-color:var(--tpl-bg-elevated)}.tpl\:bg-\[var\(--tpl-bg-hover\)\]{background-color:var(--tpl-bg-hover)}.tpl\:bg-\[var\(--tpl-border\)\]{background-color:var(--tpl-border)}.tpl\:bg-\[var\(--tpl-canvas-bg\)\]{background-color:var(--tpl-canvas-bg)}.tpl\:bg-\[var\(--tpl-danger\)\]{background-color:var(--tpl-danger)}.tpl\:bg-\[var\(--tpl-danger-light\)\]{background-color:var(--tpl-danger-light)}.tpl\:bg-\[var\(--tpl-primary\)\]{background-color:var(--tpl-primary)}.tpl\:bg-\[var\(--tpl-primary-light\)\]{background-color:var(--tpl-primary-light)}.tpl\:bg-\[var\(--tpl-warning-light\)\]{background-color:var(--tpl-warning-light)}.tpl\:bg-black\/30{background-color:oklab(0% none none/.3)}.tpl\:bg-black\/40{background-color:oklab(0% none none/.4)}.tpl\:bg-transparent{background-color:#0000}.tpl\:bg-white\/90{background-color:#ffffffe6}.tpl\:object-contain{object-fit:contain}.tpl\:object-cover{object-fit:cover}.tpl\:p-0{padding:0}.tpl\:p-0\.5{padding:.125rem}.tpl\:p-1{padding:.25rem}.tpl\:p-1\.5{padding:.375rem}.tpl\:p-2{padding:.5rem}.tpl\:p-3{padding:.75rem}.tpl\:p-4{padding:1rem}.tpl\:p-5{padding:1.25rem}.tpl\:p-6{padding:1.5rem}.tpl\:p-8{padding:2rem}.tpl\:px-0\.5{padding-inline:.125rem}.tpl\:px-1{padding-inline:.25rem}.tpl\:px-1\.5{padding-inline:.375rem}.tpl\:px-2{padding-inline:.5rem}.tpl\:px-2\.5{padding-inline:.625rem}.tpl\:px-3{padding-inline:.75rem}.tpl\:px-3\.5{padding-inline:.875rem}.tpl\:px-4{padding-inline:1rem}.tpl\:px-5{padding-inline:1.25rem}.tpl\:px-6{padding-inline:1.5rem}.tpl\:px-8{padding-inline:2rem}.tpl\:px-10{padding-inline:2.5rem}.tpl\:py-0{padding-block:0}.tpl\:py-0\.5{padding-block:.125rem}.tpl\:py-1{padding-block:.25rem}.tpl\:py-1\.5{padding-block:.375rem}.tpl\:py-2{padding-block:.5rem}.tpl\:py-2\.5{padding-block:.625rem}.tpl\:py-3{padding-block:.75rem}.tpl\:py-3\.5{padding-block:.875rem}.tpl\:py-4{padding-block:1rem}.tpl\:py-5{padding-block:1.25rem}.tpl\:py-6{padding-block:1.5rem}.tpl\:py-8{padding-block:2rem}.tpl\:py-10{padding-block:2.5rem}.tpl\:py-12{padding-block:3rem}.tpl\:py-16{padding-block:4rem}.tpl\:py-\[5px\]{padding-block:5px}.tpl\:py-\[7px\]{padding-block:7px}.tpl\:py-px{padding-block:1px}.tpl\:pt-1{padding-top:.25rem}.tpl\:pt-2{padding-top:.5rem}.tpl\:pt-3{padding-top:.75rem}.tpl\:pt-4{padding-top:1rem}.tpl\:pr-2{padding-right:.5rem}.tpl\:pr-3{padding-right:.75rem}.tpl\:pr-4{padding-right:1rem}.tpl\:pr-6{padding-right:1.5rem}.tpl\:pr-7{padding-right:1.75rem}.tpl\:pr-8{padding-right:2rem}.tpl\:pb-1{padding-bottom:.25rem}.tpl\:pb-2{padding-bottom:.5rem}.tpl\:pb-3{padding-bottom:.75rem}.tpl\:pb-4{padding-bottom:1rem}.tpl\:pl-2{padding-left:.5rem}.tpl\:pl-2\.5{padding-left:.625rem}.tpl\:pl-3{padding-left:.75rem}.tpl\:pl-8{padding-left:2rem}.tpl\:pl-9{padding-left:2.25rem}.tpl\:pl-\[18px\]{padding-left:18px}.tpl\:text-center{text-align:center}.tpl\:text-left{text-align:left}.tpl\:font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.tpl\:font-sans{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tpl\:text-4xl{font-size:2.25rem;line-height:var(--tw-leading,calc(2.5 / 2.25))}.tpl\:text-base{font-size:1rem;line-height:var(--tw-leading, 1.5 )}.tpl\:text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75 / 1.125))}.tpl\:text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.tpl\:text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1 / .75))}.tpl\:text-\[0\.8em\]{font-size:.8em}.tpl\:text-\[0\.9em\]{font-size:.9em}.tpl\:text-\[1em\]{font-size:1em}.tpl\:text-\[8px\]{font-size:8px}.tpl\:text-\[9px\]{font-size:9px}.tpl\:text-\[10px\]{font-size:10px}.tpl\:text-\[11px\]{font-size:11px}.tpl\:text-\[12px\]{font-size:12px}.tpl\:text-\[13px\]{font-size:13px}.tpl\:leading-normal{--tw-leading:1.5;line-height:1.5}.tpl\:leading-relaxed{--tw-leading:1.625;line-height:1.625}.tpl\:leading-snug{--tw-leading:1.375;line-height:1.375}.tpl\:leading-tight{--tw-leading:1.25;line-height:1.25}.tpl\:font-\[var\(--tpl-font-family\)\]{--tw-font-weight:var(--tpl-font-family);font-weight:var(--tpl-font-family)}.tpl\:font-bold{--tw-font-weight:700;font-weight:700}.tpl\:font-medium{--tw-font-weight:500;font-weight:500}.tpl\:font-normal{--tw-font-weight:400;font-weight:400}.tpl\:font-semibold{--tw-font-weight:600;font-weight:600}.tpl\:tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.tpl\:tracking-wider{--tw-tracking:.05em;letter-spacing:.05em}.tpl\:whitespace-nowrap{white-space:nowrap}.tpl\:whitespace-pre-wrap{white-space:pre-wrap}.tpl\:text-\[var\(--tpl-bg\)\]{color:var(--tpl-bg)}.tpl\:text-\[var\(--tpl-border\)\]{color:var(--tpl-border)}.tpl\:text-\[var\(--tpl-border-light\)\]{color:var(--tpl-border-light)}.tpl\:text-\[var\(--tpl-danger\)\]{color:var(--tpl-danger)}.tpl\:text-\[var\(--tpl-primary\)\]{color:var(--tpl-primary)}.tpl\:text-\[var\(--tpl-primary-hover\)\]{color:var(--tpl-primary-hover)}.tpl\:text-\[var\(--tpl-success\)\]{color:var(--tpl-success)}.tpl\:text-\[var\(--tpl-text\)\]{color:var(--tpl-text)}.tpl\:text-\[var\(--tpl-text-dim\)\]{color:var(--tpl-text-dim)}.tpl\:text-\[var\(--tpl-text-muted\)\]{color:var(--tpl-text-muted)}.tpl\:text-\[var\(--tpl-warning\)\]{color:var(--tpl-warning)}.tpl\:text-white{color:#fff}.tpl\:normal-case{text-transform:none}.tpl\:uppercase{text-transform:uppercase}.tpl\:italic{font-style:italic}.tpl\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tpl\:no-underline{text-decoration-line:none}.tpl\:underline{text-decoration-line:underline}.tpl\:accent-\[var\(--tpl-primary\)\]{accent-color:var(--tpl-primary)}.tpl\:opacity-0{opacity:0}.tpl\:opacity-50{opacity:.5}.tpl\:opacity-60{opacity:.6}.tpl\:opacity-70{opacity:.7}.tpl\:opacity-90{opacity:.9}.tpl\:opacity-100{opacity:1}.tpl\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-\[var\(--tpl-ring\)\]{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-\[var\(--tpl-shadow\)\]{--tw-shadow:var(--tpl-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-\[var\(--tpl-shadow-lg\)\]{--tw-shadow:var(--tpl-shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-\[var\(--tpl-shadow-md\)\]{--tw-shadow:var(--tpl-shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-\[var\(--tpl-shadow-sm\)\]{--tw-shadow:var(--tpl-shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:ring-\[var\(--tpl-border\)\]{--tw-ring-color:var(--tpl-border)}.tpl\:backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.tpl\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:duration-100{--tw-duration:.1s;transition-duration:.1s}.tpl\:duration-150{--tw-duration:.15s;transition-duration:.15s}.tpl\:duration-200{--tw-duration:.2s;transition-duration:.2s}.tpl\:duration-300{--tw-duration:.3s;transition-duration:.3s}.tpl\:duration-\[80ms\]{--tw-duration:80ms;transition-duration:80ms}.tpl\:duration-\[120ms\]{--tw-duration:.12s;transition-duration:.12s}.tpl\:ease-\[cubic-bezier\(0\.16\,1\,0\.3\,1\)\]{--tw-ease:cubic-bezier(.16,1,.3,1);transition-timing-function:cubic-bezier(.16,1,.3,1)}.tpl\:ease-in{--tw-ease:cubic-bezier(.4, 0, 1, 1);transition-timing-function:cubic-bezier(.4,0,1,1)}.tpl\:ease-out{--tw-ease:cubic-bezier(0, 0, .2, 1);transition-timing-function:cubic-bezier(0,0,.2,1)}.tpl\:outline-none{--tw-outline-style:none;outline-style:none}.tpl\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.tpl\:group-hover\:bg-black\/40:is(:where(.tpl\:group):hover *){background-color:oklab(0% none none/.4)}.tpl\:group-hover\:opacity-100:is(:where(.tpl\:group):hover *){opacity:1}}.tpl\:placeholder\:text-\[var\(--tpl-text-dim\)\]::placeholder{color:var(--tpl-text-dim)}.tpl\:last\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.tpl\:hover\:z-10:hover{z-index:10}.tpl\:hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\:hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\:hover\:border-\[var\(--tpl-danger\)\]:hover{border-color:var(--tpl-danger)}.tpl\:hover\:border-\[var\(--tpl-primary\)\]:hover{border-color:var(--tpl-primary)}.tpl\:hover\:bg-\[var\(--tpl-bg-active\)\]:hover{background-color:var(--tpl-bg-active)}.tpl\:hover\:bg-\[var\(--tpl-bg-hover\)\]:hover{background-color:var(--tpl-bg-hover)}.tpl\:hover\:bg-\[var\(--tpl-danger-light\)\]:hover{background-color:var(--tpl-danger-light)}.tpl\:hover\:bg-\[var\(--tpl-primary-hover\)\]:hover{background-color:var(--tpl-primary-hover)}.tpl\:hover\:text-\[var\(--tpl-danger\)\]:hover{color:var(--tpl-danger)}.tpl\:hover\:text-\[var\(--tpl-primary\)\]:hover{color:var(--tpl-primary)}.tpl\:hover\:text-\[var\(--tpl-text\)\]:hover{color:var(--tpl-text)}.tpl\:hover\:underline:hover{text-decoration-line:underline}.tpl\:hover\:opacity-80:hover{opacity:.8}.tpl\:hover\:opacity-90:hover{opacity:.9}}.tpl\:focus\:border-\[var\(--tpl-primary\)\]:focus{border-color:var(--tpl-primary)}.tpl\:focus\:shadow-\[0_0_0_3px_var\(--tpl-primary-light\)\]:focus{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--tpl-primary-light));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:focus\:shadow-\[var\(--tpl-ring\)\]:focus{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:active\:cursor-grabbing:active{cursor:grabbing}.tpl\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.tpl\:disabled\:opacity-30:disabled{opacity:.3}.tpl\:disabled\:opacity-40:disabled{opacity:.4}.tpl\:disabled\:opacity-50:disabled{opacity:.5}@layer base,components;.tpl{--tpl-bg:oklch(99.5% .002 60);--tpl-bg-elevated:oklch(98% .004 60);--tpl-bg-hover:oklch(96% .006 60);--tpl-bg-active:oklch(93.5% .008 60);--tpl-border:oklch(92% .006 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary:oklch(70% .16 55);--tpl-primary-hover:oklch(63% .17 55);--tpl-primary-light:oklch(95% .04 55);--tpl-secondary:oklch(60% .118 184.71);--tpl-secondary-hover:oklch(53.2% .105 186.39);--tpl-secondary-light:oklch(93.8% .03 186.82);--tpl-success:oklch(62.8% .194 155.1);--tpl-success-light:oklch(93.6% .043 163.51);--tpl-warning:oklch(76.9% .168 70.08);--tpl-warning-light:oklch(95% .038 73.59);--tpl-danger:oklch(63.7% .237 25.33);--tpl-danger-light:oklch(93.6% .032 17.72);--tpl-radius:10px;--tpl-radius-sm:7px;--tpl-radius-lg:14px;--tpl-font-family:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--tpl-shadow:0 1px 2px #0000000a, 0 1px 3px #00000008;--tpl-shadow-md:0 2px 8px #0000000f, 0 1px 3px #0000000a;--tpl-shadow-lg:0 4px 16px #00000014, 0 2px 6px #0000000a;--tpl-shadow-xl:0 8px 32px #0000001a, 0 4px 12px #0000000f;--tpl-ring:0 0 0 3px var(--tpl-primary-light);--tpl-transition:.12s cubic-bezier(.16, 1, .3, 1)}.tpl[data-tpl-theme=dark]{--tpl-bg:oklch(16% .005 60);--tpl-bg-elevated:oklch(21% .006 60);--tpl-bg-hover:oklch(26% .007 60);--tpl-bg-active:oklch(30% .008 60);--tpl-border:oklch(30% .006 60);--tpl-border-light:oklch(38% .008 60);--tpl-text:oklch(93% .005 60);--tpl-text-muted:oklch(65% .01 60);--tpl-text-dim:oklch(50% .008 60);--tpl-primary:oklch(73% .15 55);--tpl-primary-hover:oklch(78% .14 55);--tpl-primary-light:oklch(28% .05 55);--tpl-secondary:oklch(63% .11 184.71);--tpl-secondary-hover:oklch(68% .1 186.39);--tpl-secondary-light:oklch(25% .03 186.82);--tpl-success:oklch(65% .18 155.1);--tpl-success-light:oklch(25% .04 163.51);--tpl-warning:oklch(78% .16 70.08);--tpl-warning-light:oklch(28% .04 73.59);--tpl-danger:oklch(65% .22 25.33);--tpl-danger-light:oklch(25% .04 17.72);--tpl-shadow:0 1px 2px #0000004d, 0 1px 3px #0003;--tpl-shadow-md:0 2px 8px #00000059, 0 1px 3px #00000040;--tpl-shadow-lg:0 4px 16px #0006, 0 2px 6px #0000004d;--tpl-shadow-xl:0 8px 32px #00000080, 0 4px 12px #00000059;--tpl-ring:0 0 0 3px var(--tpl-primary-light)}.tpl{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family)}.tpl button,.tpl input,.tpl select,.tpl textarea{font-family:inherit}.tpl button{cursor:pointer;background:0 0;border:none;outline:none}.tpl ::-webkit-scrollbar{width:6px;height:6px}.tpl ::-webkit-scrollbar-track{background:0 0}.tpl ::-webkit-scrollbar-thumb{background-color:var(--tpl-border-light)}@supports (color:color-mix(in lab,red,red)){.tpl ::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--tpl-border-light) 60%,transparent)}}.tpl ::-webkit-scrollbar-thumb{border-radius:.25rem}.tpl ::-webkit-scrollbar-thumb:hover{background-color:var(--tpl-border-light)}@keyframes tpl-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes tpl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes tpl-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tpl-pulse{animation:2s infinite tpl-pulse}.tpl-spinner{animation:1s linear infinite tpl-spin}.tpl-scale-in{animation:.15s cubic-bezier(.16,1,.3,1) tpl-scale-in}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { $ as e, H as t, M as n, N as r, S as i, U as a, _ as o, at as s, b as c, c as l, ct as ee, g as u, h as d, j as f, lt as p, m, n as te, r as h, st as g, w as _, y as v } from "./chunks/draggable-Bcb86AsV.js";
|
|
2
|
+
import { J as y, Ln as b, dn as x, k as S, tt as C } from "./chunks/features-DEMb13KS.js";
|
|
3
|
+
import { C as w } from "./chunks/icons-CsLTcirh.js";
|
|
4
|
+
import { a as ne, c as re, i as ie, n as T, o as E, r as D, s as O, t as k } from "./chunks/styles-BHJULjNR.js";
|
|
5
|
+
//#region src/Editor.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var A = ["data-tpl-theme"], j = {
|
|
7
|
+
class: "tpl-header tpl:absolute tpl:top-0 tpl:right-0 tpl:left-0 tpl:z-50 tpl:grid tpl:h-14 tpl:grid-cols-[1fr_auto_1fr] tpl:items-center tpl:px-4 tpl:shadow-[var(--tpl-shadow-md)] tpl:border-b tpl:border-[var(--tpl-border)]",
|
|
8
|
+
style: {
|
|
9
|
+
"background-color": "color-mix(in srgb, var(--tpl-bg) 80%, transparent)",
|
|
10
|
+
"backdrop-filter": "blur(12px)",
|
|
11
|
+
"-webkit-backdrop-filter": "blur(12px)"
|
|
12
|
+
}
|
|
13
|
+
}, M = { class: "tpl:flex tpl:items-center tpl:justify-center tpl:gap-10" }, N = { class: "tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0" }, P = { class: "tpl:flex tpl:justify-center tpl:p-8" }, F = ["aria-label"], I = /* @__PURE__ */ C(/* @__PURE__ */ i({
|
|
14
|
+
__name: "Editor",
|
|
15
|
+
props: {
|
|
16
|
+
config: {},
|
|
17
|
+
translations: {},
|
|
18
|
+
fontsManager: {}
|
|
19
|
+
},
|
|
20
|
+
setup(e, { expose: i }) {
|
|
21
|
+
let h = e, _ = x({
|
|
22
|
+
content: h.config.content,
|
|
23
|
+
templateDefaults: h.config.templateDefaults
|
|
24
|
+
}), y = S({
|
|
25
|
+
editor: _,
|
|
26
|
+
config: {
|
|
27
|
+
uiTheme: h.config.uiTheme,
|
|
28
|
+
theme: h.config.theme,
|
|
29
|
+
blockDefaults: h.config.blockDefaults,
|
|
30
|
+
customBlocks: h.config.customBlocks,
|
|
31
|
+
mergeTags: h.config.mergeTags,
|
|
32
|
+
displayConditions: h.config.displayConditions,
|
|
33
|
+
onRequestMedia: h.config.onRequestMedia,
|
|
34
|
+
accessibility: re(h.config),
|
|
35
|
+
onSave: h.config.onSave ? () => h.config.onSave(JSON.parse(JSON.stringify(_.state.content))) : void 0
|
|
36
|
+
},
|
|
37
|
+
translations: h.translations,
|
|
38
|
+
fontsManager: h.fontsManager,
|
|
39
|
+
autoSaveOptions: h.config.onChange ? { onChange: () => h.config.onChange(JSON.parse(JSON.stringify(_.state.content))) } : null
|
|
40
|
+
});
|
|
41
|
+
return f(async () => {
|
|
42
|
+
await h.fontsManager.loadCustomFonts();
|
|
43
|
+
}), n(() => {
|
|
44
|
+
h.fontsManager.cleanupFontLinks(), y.destroy();
|
|
45
|
+
}), i({
|
|
46
|
+
getContent: () => _.content.value,
|
|
47
|
+
setContent: (e) => _.setContent(e),
|
|
48
|
+
setTheme: (e) => _.setUiTheme(e),
|
|
49
|
+
renderCustomBlock: y.registry.renderCustomBlock
|
|
50
|
+
}), (n, i) => (r(), o("div", {
|
|
51
|
+
class: g(["tpl tpl:relative tpl:h-full tpl:overflow-hidden", { "tpl:dark": s(_).state.darkMode }]),
|
|
52
|
+
"data-tpl-theme": s(y).resolvedTheme.value,
|
|
53
|
+
style: ee(s(y).themeStyles.value)
|
|
54
|
+
}, [
|
|
55
|
+
m("header", j, [
|
|
56
|
+
i[5] ||= m("div", { class: "tpl:flex tpl:items-center tpl:gap-2.5" }, null, -1),
|
|
57
|
+
m("div", M, [
|
|
58
|
+
c(ie, {
|
|
59
|
+
viewport: s(_).state.viewport,
|
|
60
|
+
onChange: s(_).setViewport
|
|
61
|
+
}, null, 8, ["viewport", "onChange"]),
|
|
62
|
+
c(T, {
|
|
63
|
+
"dark-mode": s(_).state.darkMode,
|
|
64
|
+
onChange: s(_).setDarkMode
|
|
65
|
+
}, null, 8, ["dark-mode", "onChange"]),
|
|
66
|
+
c(D, {
|
|
67
|
+
"preview-mode": s(_).state.previewMode,
|
|
68
|
+
onChange: s(_).setPreviewMode
|
|
69
|
+
}, null, 8, ["preview-mode", "onChange"])
|
|
70
|
+
]),
|
|
71
|
+
i[6] ||= m("div", { class: "tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3" }, null, -1)
|
|
72
|
+
]),
|
|
73
|
+
a(c(E, null, null, 512), [[l, !s(_).state.previewMode]]),
|
|
74
|
+
m("div", {
|
|
75
|
+
class: g(["tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto tpl:bg-[var(--tpl-canvas-bg)]", [s(_).state.previewMode ? "tpl:left-0 tpl:right-0" : "tpl:left-12 tpl:right-[320px]", "tpl:top-14"]]),
|
|
76
|
+
style: { transition: "all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)" }
|
|
77
|
+
}, [m("div", N, [c(te, { name: "tpl-restore-btn" }, {
|
|
78
|
+
default: t(() => [s(y).conditionPreview.hasHiddenBlocks.value ? (r(), o("button", {
|
|
79
|
+
key: 0,
|
|
80
|
+
class: "tpl:absolute tpl:left-1/2 tpl:top-2 tpl:-translate-x-1/2 tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-full tpl:border tpl:px-3.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:whitespace-nowrap tpl:shadow-md tpl:hover:opacity-80 tpl:bg-[var(--tpl-warning-light)] tpl:text-[var(--tpl-warning)] tpl:border-[var(--tpl-warning)]",
|
|
81
|
+
style: { "backdrop-filter": "blur(8px)" },
|
|
82
|
+
onClick: i[0] ||= (e) => s(y).conditionPreview.reset()
|
|
83
|
+
}, [c(s(w), {
|
|
84
|
+
size: 13,
|
|
85
|
+
"stroke-width": 2
|
|
86
|
+
}), v(" " + p(s(y).t.blockSettings.restoreHiddenBlocks), 1)])) : u("", !0)]),
|
|
87
|
+
_: 1
|
|
88
|
+
})]), m("div", P, [c(O, {
|
|
89
|
+
viewport: s(_).state.viewport,
|
|
90
|
+
content: s(_).content.value,
|
|
91
|
+
"selected-block-id": s(_).state.selectedBlockId,
|
|
92
|
+
"dark-mode": s(_).state.darkMode,
|
|
93
|
+
"preview-mode": s(_).state.previewMode,
|
|
94
|
+
onSelectBlock: s(_).selectBlock
|
|
95
|
+
}, null, 8, [
|
|
96
|
+
"viewport",
|
|
97
|
+
"content",
|
|
98
|
+
"selected-block-id",
|
|
99
|
+
"dark-mode",
|
|
100
|
+
"preview-mode",
|
|
101
|
+
"onSelectBlock"
|
|
102
|
+
])])], 2),
|
|
103
|
+
e.config.branding === !1 ? u("", !0) : (r(), d(k, {
|
|
104
|
+
key: 0,
|
|
105
|
+
"position-class": [s(_).state.previewMode ? "tpl:left-0 tpl:right-0" : "tpl:left-12 tpl:right-[320px]"]
|
|
106
|
+
}, null, 8, ["position-class"])),
|
|
107
|
+
m("div", {
|
|
108
|
+
class: "tpl-sr-only",
|
|
109
|
+
role: "status",
|
|
110
|
+
"aria-live": "polite",
|
|
111
|
+
"aria-atomic": "true",
|
|
112
|
+
"aria-label": s(y).t.landmarks.reorderAnnouncements
|
|
113
|
+
}, p(s(y).keyboardReorder.announcement.value), 9, F),
|
|
114
|
+
a(c(ne, {
|
|
115
|
+
"selected-block": s(_).selectedBlock.value,
|
|
116
|
+
settings: s(_).content.value.settings,
|
|
117
|
+
onUpdateBlock: i[1] ||= (e) => s(_).updateBlock(s(_).state.selectedBlockId, e),
|
|
118
|
+
onDeleteBlock: i[2] ||= () => {
|
|
119
|
+
s(_).state.selectedBlockId && s(y).blockActions.deleteBlock(s(_).state.selectedBlockId);
|
|
120
|
+
},
|
|
121
|
+
onDuplicateBlock: i[3] ||= () => {
|
|
122
|
+
s(_).selectedBlock.value && s(y).blockActions.duplicateBlock(s(_).selectedBlock.value);
|
|
123
|
+
},
|
|
124
|
+
onUpdateSettings: i[4] ||= (e) => s(_).updateSettings(e)
|
|
125
|
+
}, null, 8, ["selected-block", "settings"]), [[l, !s(_).state.previewMode]])
|
|
126
|
+
], 14, A));
|
|
127
|
+
}
|
|
128
|
+
}), [["__scopeId", "data-v-9ffdcb5e"]]), L = /* @__PURE__ */ Object.assign({
|
|
129
|
+
"./locales/de.ts": () => import("./chunks/de-D8CnZxV9.js"),
|
|
130
|
+
"./locales/en.ts": () => import("./chunks/en-8FHaQv4V.js")
|
|
131
|
+
}), R = /* @__PURE__ */ Object.assign({
|
|
132
|
+
"./locales/cloud/de.ts": () => import("./chunks/de-RQrZR56a.js"),
|
|
133
|
+
"./locales/cloud/en.ts": () => import("./chunks/en-Bl1ecfRF.js")
|
|
134
|
+
});
|
|
135
|
+
function z(e) {
|
|
136
|
+
return Object.keys(e).map((e) => e.match(/\/([^/]+)\.ts$/)?.[1]).filter((e) => !!e);
|
|
137
|
+
}
|
|
138
|
+
var B = z(L), V = z(R);
|
|
139
|
+
function H(e) {
|
|
140
|
+
return e.split("-")[0].toLowerCase();
|
|
141
|
+
}
|
|
142
|
+
function U(e, t) {
|
|
143
|
+
let n = H(e);
|
|
144
|
+
return t.includes(n) ? n : "en";
|
|
145
|
+
}
|
|
146
|
+
async function W(e) {
|
|
147
|
+
let t = L[`./locales/${U(e, B)}.ts`];
|
|
148
|
+
return (await t()).default;
|
|
149
|
+
}
|
|
150
|
+
async function G(e) {
|
|
151
|
+
let t = R[`./locales/cloud/${U(e, V)}.ts`];
|
|
152
|
+
return (await t()).default;
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
//#region src/utils/toMjml.ts
|
|
156
|
+
async function K(e) {
|
|
157
|
+
let t;
|
|
158
|
+
try {
|
|
159
|
+
t = await import("./chunks/renderer-CUxvx7ro.js").then((e) => e.t);
|
|
160
|
+
} catch {
|
|
161
|
+
throw Error("[Templatical] toMjml() requires the @templatical/renderer package. Please install it.");
|
|
162
|
+
}
|
|
163
|
+
return t.renderToMjml(e.getContent(), { renderCustomBlock: e.renderCustomBlock });
|
|
164
|
+
}
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/index.ts
|
|
167
|
+
var q = null, J = e(null);
|
|
168
|
+
async function Y(e) {
|
|
169
|
+
let t = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
170
|
+
if (!t) throw Error(`[Templatical] Container element not found: ${e.container}`);
|
|
171
|
+
let n = await W(e.locale ?? "en"), r = y(e.fonts);
|
|
172
|
+
q && Q(), q = h({ setup() {
|
|
173
|
+
return () => _(I, {
|
|
174
|
+
config: e,
|
|
175
|
+
translations: n,
|
|
176
|
+
fontsManager: r,
|
|
177
|
+
ref: J
|
|
178
|
+
});
|
|
179
|
+
} }), q.mount(t);
|
|
180
|
+
let i = {
|
|
181
|
+
getContent() {
|
|
182
|
+
return JSON.parse(JSON.stringify(J.value ? J.value.getContent() : e.content));
|
|
183
|
+
},
|
|
184
|
+
setContent(t) {
|
|
185
|
+
J.value && J.value.setContent(t), e.content = t;
|
|
186
|
+
},
|
|
187
|
+
setTheme(e) {
|
|
188
|
+
J.value && J.value.setTheme(e);
|
|
189
|
+
},
|
|
190
|
+
unmount: Q,
|
|
191
|
+
renderCustomBlock(e) {
|
|
192
|
+
return J.value ? J.value.renderCustomBlock(e) : Promise.reject(/* @__PURE__ */ Error("[Templatical] Editor not ready"));
|
|
193
|
+
},
|
|
194
|
+
toMjml: () => K(i)
|
|
195
|
+
};
|
|
196
|
+
return i;
|
|
197
|
+
}
|
|
198
|
+
var X = null, Z = e(null);
|
|
199
|
+
async function ae(e) {
|
|
200
|
+
let t = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
201
|
+
if (!t) throw Error(`[Templatical] Container element not found: ${e.container}`);
|
|
202
|
+
let { default: n } = await import("./chunks/CloudEditor-D2GsEC_n.js"), [r, i] = await Promise.all([W(e.locale ?? "en"), G(e.locale ?? "en")]), a = y(e.fonts);
|
|
203
|
+
return X && $(), await new Promise((o, s) => {
|
|
204
|
+
let c = setTimeout(() => {
|
|
205
|
+
s(/* @__PURE__ */ Error("[Templatical] Cloud editor initialization timed out"));
|
|
206
|
+
}, b);
|
|
207
|
+
X = h({ setup() {
|
|
208
|
+
return () => _(n, {
|
|
209
|
+
config: e,
|
|
210
|
+
translations: r,
|
|
211
|
+
cloudTranslations: i,
|
|
212
|
+
fontsManager: a,
|
|
213
|
+
ref: Z,
|
|
214
|
+
onReady: () => {
|
|
215
|
+
clearTimeout(c), o();
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
} }), X.mount(t);
|
|
219
|
+
}), {
|
|
220
|
+
getContent() {
|
|
221
|
+
return JSON.parse(JSON.stringify(Z.value ? Z.value.getContent() : e.content));
|
|
222
|
+
},
|
|
223
|
+
setContent(e) {
|
|
224
|
+
Z.value && Z.value.setContent(e);
|
|
225
|
+
},
|
|
226
|
+
setTheme(e) {
|
|
227
|
+
Z.value && Z.value.setTheme(e);
|
|
228
|
+
},
|
|
229
|
+
unmount: $,
|
|
230
|
+
create(e) {
|
|
231
|
+
return Z.value ? Z.value.create(e) : Promise.reject(/* @__PURE__ */ Error("[Templatical] Cloud editor not ready"));
|
|
232
|
+
},
|
|
233
|
+
load(e) {
|
|
234
|
+
return Z.value ? Z.value.load(e) : Promise.reject(/* @__PURE__ */ Error("[Templatical] Cloud editor not ready"));
|
|
235
|
+
},
|
|
236
|
+
save() {
|
|
237
|
+
return Z.value ? Z.value.save() : Promise.reject(/* @__PURE__ */ Error("[Templatical] Cloud editor not ready"));
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function Q() {
|
|
242
|
+
q && (q.unmount(), q = null, J.value = null);
|
|
243
|
+
}
|
|
244
|
+
function $() {
|
|
245
|
+
X && (X.unmount(), X = null, Z.value = null);
|
|
246
|
+
}
|
|
247
|
+
//#endregion
|
|
248
|
+
export { Y as init, ae as initCloud, Q as unmount, y as useFonts };
|
|
249
|
+
|
|
250
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","names":[],"sources":["../../src/Editor.vue","../../src/Editor.vue","../../src/i18n/index.ts","../../src/utils/toMjml.ts","../../src/index.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from \"vue\";\nimport type { TemplaticalEditorConfig } from \"./index\";\nimport { useEditor } from \"@templatical/core\";\nimport type { TemplateContent, UiTheme } from \"@templatical/types\";\nimport { useEditorCore } from \"./composables/useEditorCore\";\nimport { resolveAccessibilityOptions } from \"./utils/resolveAccessibilityOptions\";\nimport type { Translations } from \"./i18n\";\nimport type { UseFontsReturn } from \"./composables/useFonts\";\n\nimport { RotateCcw } from \"@lucide/vue\";\nimport Canvas from \"./components/Canvas.vue\";\nimport Sidebar from \"./components/Sidebar.vue\";\nimport RightSidebar from \"./components/RightSidebar.vue\";\nimport ViewportToggle from \"./components/ViewportToggle.vue\";\nimport PreviewToggle from \"./components/PreviewToggle.vue\";\nimport DarkModeToggle from \"./components/DarkModeToggle.vue\";\nimport EditorFooter from \"./components/EditorFooter.vue\";\nimport \"./styles/index.css\";\n\nconst props = defineProps<{\n config: TemplaticalEditorConfig;\n translations: Translations;\n fontsManager: UseFontsReturn;\n}>();\n\n// --- Core editor state ---\nconst editor = useEditor({\n content: props.config.content!,\n templateDefaults: props.config.templateDefaults,\n});\n\n// --- Shared editor core (composables, provides, plugins, keyboard) ---\nconst core = useEditorCore({\n editor,\n config: {\n uiTheme: props.config.uiTheme,\n theme: props.config.theme,\n blockDefaults: props.config.blockDefaults,\n customBlocks: props.config.customBlocks,\n mergeTags: props.config.mergeTags,\n displayConditions: props.config.displayConditions,\n onRequestMedia: props.config.onRequestMedia,\n accessibility: resolveAccessibilityOptions(props.config),\n onSave: props.config.onSave\n ? () =>\n props.config.onSave!(JSON.parse(JSON.stringify(editor.state.content)))\n : undefined,\n },\n translations: props.translations,\n fontsManager: props.fontsManager,\n autoSaveOptions: props.config.onChange\n ? {\n onChange: () =>\n props.config.onChange!(\n JSON.parse(JSON.stringify(editor.state.content)),\n ),\n }\n : null,\n});\n\n// --- Lifecycle ---\nonMounted(async () => {\n await props.fontsManager.loadCustomFonts();\n});\n\nonUnmounted(() => {\n props.fontsManager.cleanupFontLinks();\n core.destroy();\n});\n\n// --- Public API (accessed via template ref from init()) ---\ndefineExpose({\n getContent: () => editor.content.value,\n setContent: (content: TemplateContent) => editor.setContent(content),\n setTheme: (theme: UiTheme) => editor.setUiTheme(theme),\n renderCustomBlock: core.registry.renderCustomBlock,\n});\n</script>\n\n<template>\n <div\n class=\"tpl tpl:relative tpl:h-full tpl:overflow-hidden\"\n :class=\"{ 'tpl:dark': editor.state.darkMode }\"\n :data-tpl-theme=\"core.resolvedTheme.value\"\n :style=\"core.themeStyles.value\"\n >\n <!-- Header — absolute, full width, above everything -->\n <header\n class=\"tpl-header tpl:absolute tpl:top-0 tpl:right-0 tpl:left-0 tpl:z-50 tpl:grid tpl:h-14 tpl:grid-cols-[1fr_auto_1fr] tpl:items-center tpl:px-4 tpl:shadow-[var(--tpl-shadow-md)] tpl:border-b tpl:border-[var(--tpl-border)]\"\n style=\"\n background-color: color-mix(in srgb, var(--tpl-bg) 80%, transparent);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n \"\n >\n <!-- Left: empty (reserved for embedder customization) -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2.5\"></div>\n\n <!-- Center: viewport + preview + dark mode -->\n <div class=\"tpl:flex tpl:items-center tpl:justify-center tpl:gap-10\">\n <ViewportToggle\n :viewport=\"editor.state.viewport\"\n @change=\"editor.setViewport\"\n />\n <DarkModeToggle\n :dark-mode=\"editor.state.darkMode\"\n @change=\"editor.setDarkMode\"\n />\n <PreviewToggle\n :preview-mode=\"editor.state.previewMode\"\n @change=\"editor.setPreviewMode\"\n />\n </div>\n\n <!-- Right: empty in OSS mode -->\n <div\n class=\"tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3\"\n ></div>\n </header>\n\n <!-- Left sidebar — absolute, below header -->\n <Sidebar v-show=\"!editor.state.previewMode\" />\n\n <!-- Canvas area — absolute, fills remaining space -->\n <div\n class=\"tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto tpl:bg-[var(--tpl-canvas-bg)]\"\n style=\"transition: all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)\"\n :class=\"[\n editor.state.previewMode\n ? 'tpl:left-0 tpl:right-0'\n : 'tpl:left-12 tpl:right-[320px]',\n 'tpl:top-14',\n ]\"\n >\n <!-- Restore hidden blocks button -->\n <div class=\"tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0\">\n <Transition name=\"tpl-restore-btn\">\n <button\n v-if=\"core.conditionPreview.hasHiddenBlocks.value\"\n class=\"tpl:absolute tpl:left-1/2 tpl:top-2 tpl:-translate-x-1/2 tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-full tpl:border tpl:px-3.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:whitespace-nowrap tpl:shadow-md tpl:hover:opacity-80 tpl:bg-[var(--tpl-warning-light)] tpl:text-[var(--tpl-warning)] tpl:border-[var(--tpl-warning)]\"\n style=\"backdrop-filter: blur(8px)\"\n @click=\"core.conditionPreview.reset()\"\n >\n <RotateCcw :size=\"13\" :stroke-width=\"2\" />\n {{ core.t.blockSettings.restoreHiddenBlocks }}\n </button>\n </Transition>\n </div>\n <div class=\"tpl:flex tpl:justify-center tpl:p-8\">\n <Canvas\n :viewport=\"editor.state.viewport\"\n :content=\"editor.content.value\"\n :selected-block-id=\"editor.state.selectedBlockId\"\n :dark-mode=\"editor.state.darkMode\"\n :preview-mode=\"editor.state.previewMode\"\n @select-block=\"editor.selectBlock\"\n />\n </div>\n </div>\n\n <EditorFooter\n v-if=\"config.branding !== false\"\n :position-class=\"[\n editor.state.previewMode\n ? 'tpl:left-0 tpl:right-0'\n : 'tpl:left-12 tpl:right-[320px]',\n ]\"\n />\n\n <!-- Keyboard reorder announcement region (visually hidden, screen-reader live) -->\n <div\n class=\"tpl-sr-only\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :aria-label=\"core.t.landmarks.reorderAnnouncements\"\n >\n {{ core.keyboardReorder.announcement.value }}\n </div>\n\n <!-- Right sidebar — persisted with v-show -->\n <RightSidebar\n v-show=\"!editor.state.previewMode\"\n :selected-block=\"editor.selectedBlock.value\"\n :settings=\"editor.content.value.settings\"\n @update-block=\"\n (updates) => editor.updateBlock(editor.state.selectedBlockId!, updates)\n \"\n @delete-block=\"\n () => {\n if (editor.state.selectedBlockId) {\n core.blockActions.deleteBlock(editor.state.selectedBlockId);\n }\n }\n \"\n @duplicate-block=\"\n () => {\n if (editor.selectedBlock.value) {\n core.blockActions.duplicateBlock(editor.selectedBlock.value);\n }\n }\n \"\n @update-settings=\"(updates) => editor.updateSettings(updates)\"\n />\n </div>\n</template>\n\n<style scoped>\n.tpl-restore-btn-enter-active {\n transition:\n opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),\n transform 200ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.tpl-restore-btn-leave-active {\n transition:\n opacity 150ms ease-in,\n transform 150ms ease-in;\n}\n\n.tpl-restore-btn-enter-from,\n.tpl-restore-btn-leave-to {\n opacity: 0;\n transform: translateY(-8px) scale(0.9);\n}\n\n.tpl-restore-btn-enter-to,\n.tpl-restore-btn-leave-from {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from \"vue\";\nimport type { TemplaticalEditorConfig } from \"./index\";\nimport { useEditor } from \"@templatical/core\";\nimport type { TemplateContent, UiTheme } from \"@templatical/types\";\nimport { useEditorCore } from \"./composables/useEditorCore\";\nimport { resolveAccessibilityOptions } from \"./utils/resolveAccessibilityOptions\";\nimport type { Translations } from \"./i18n\";\nimport type { UseFontsReturn } from \"./composables/useFonts\";\n\nimport { RotateCcw } from \"@lucide/vue\";\nimport Canvas from \"./components/Canvas.vue\";\nimport Sidebar from \"./components/Sidebar.vue\";\nimport RightSidebar from \"./components/RightSidebar.vue\";\nimport ViewportToggle from \"./components/ViewportToggle.vue\";\nimport PreviewToggle from \"./components/PreviewToggle.vue\";\nimport DarkModeToggle from \"./components/DarkModeToggle.vue\";\nimport EditorFooter from \"./components/EditorFooter.vue\";\nimport \"./styles/index.css\";\n\nconst props = defineProps<{\n config: TemplaticalEditorConfig;\n translations: Translations;\n fontsManager: UseFontsReturn;\n}>();\n\n// --- Core editor state ---\nconst editor = useEditor({\n content: props.config.content!,\n templateDefaults: props.config.templateDefaults,\n});\n\n// --- Shared editor core (composables, provides, plugins, keyboard) ---\nconst core = useEditorCore({\n editor,\n config: {\n uiTheme: props.config.uiTheme,\n theme: props.config.theme,\n blockDefaults: props.config.blockDefaults,\n customBlocks: props.config.customBlocks,\n mergeTags: props.config.mergeTags,\n displayConditions: props.config.displayConditions,\n onRequestMedia: props.config.onRequestMedia,\n accessibility: resolveAccessibilityOptions(props.config),\n onSave: props.config.onSave\n ? () =>\n props.config.onSave!(JSON.parse(JSON.stringify(editor.state.content)))\n : undefined,\n },\n translations: props.translations,\n fontsManager: props.fontsManager,\n autoSaveOptions: props.config.onChange\n ? {\n onChange: () =>\n props.config.onChange!(\n JSON.parse(JSON.stringify(editor.state.content)),\n ),\n }\n : null,\n});\n\n// --- Lifecycle ---\nonMounted(async () => {\n await props.fontsManager.loadCustomFonts();\n});\n\nonUnmounted(() => {\n props.fontsManager.cleanupFontLinks();\n core.destroy();\n});\n\n// --- Public API (accessed via template ref from init()) ---\ndefineExpose({\n getContent: () => editor.content.value,\n setContent: (content: TemplateContent) => editor.setContent(content),\n setTheme: (theme: UiTheme) => editor.setUiTheme(theme),\n renderCustomBlock: core.registry.renderCustomBlock,\n});\n</script>\n\n<template>\n <div\n class=\"tpl tpl:relative tpl:h-full tpl:overflow-hidden\"\n :class=\"{ 'tpl:dark': editor.state.darkMode }\"\n :data-tpl-theme=\"core.resolvedTheme.value\"\n :style=\"core.themeStyles.value\"\n >\n <!-- Header — absolute, full width, above everything -->\n <header\n class=\"tpl-header tpl:absolute tpl:top-0 tpl:right-0 tpl:left-0 tpl:z-50 tpl:grid tpl:h-14 tpl:grid-cols-[1fr_auto_1fr] tpl:items-center tpl:px-4 tpl:shadow-[var(--tpl-shadow-md)] tpl:border-b tpl:border-[var(--tpl-border)]\"\n style=\"\n background-color: color-mix(in srgb, var(--tpl-bg) 80%, transparent);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n \"\n >\n <!-- Left: empty (reserved for embedder customization) -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2.5\"></div>\n\n <!-- Center: viewport + preview + dark mode -->\n <div class=\"tpl:flex tpl:items-center tpl:justify-center tpl:gap-10\">\n <ViewportToggle\n :viewport=\"editor.state.viewport\"\n @change=\"editor.setViewport\"\n />\n <DarkModeToggle\n :dark-mode=\"editor.state.darkMode\"\n @change=\"editor.setDarkMode\"\n />\n <PreviewToggle\n :preview-mode=\"editor.state.previewMode\"\n @change=\"editor.setPreviewMode\"\n />\n </div>\n\n <!-- Right: empty in OSS mode -->\n <div\n class=\"tpl:flex tpl:min-w-[200px] tpl:items-center tpl:justify-end tpl:gap-3\"\n ></div>\n </header>\n\n <!-- Left sidebar — absolute, below header -->\n <Sidebar v-show=\"!editor.state.previewMode\" />\n\n <!-- Canvas area — absolute, fills remaining space -->\n <div\n class=\"tpl-body tpl:absolute tpl:bottom-0 tpl:overflow-auto tpl:bg-[var(--tpl-canvas-bg)]\"\n style=\"transition: all 300ms cubic-bezier(0.34, 1.56, 0.64, 1)\"\n :class=\"[\n editor.state.previewMode\n ? 'tpl:left-0 tpl:right-0'\n : 'tpl:left-12 tpl:right-[320px]',\n 'tpl:top-14',\n ]\"\n >\n <!-- Restore hidden blocks button -->\n <div class=\"tpl:sticky tpl:top-0 tpl:z-40 tpl:h-0\">\n <Transition name=\"tpl-restore-btn\">\n <button\n v-if=\"core.conditionPreview.hasHiddenBlocks.value\"\n class=\"tpl:absolute tpl:left-1/2 tpl:top-2 tpl:-translate-x-1/2 tpl:inline-flex tpl:items-center tpl:gap-1.5 tpl:rounded-full tpl:border tpl:px-3.5 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:whitespace-nowrap tpl:shadow-md tpl:hover:opacity-80 tpl:bg-[var(--tpl-warning-light)] tpl:text-[var(--tpl-warning)] tpl:border-[var(--tpl-warning)]\"\n style=\"backdrop-filter: blur(8px)\"\n @click=\"core.conditionPreview.reset()\"\n >\n <RotateCcw :size=\"13\" :stroke-width=\"2\" />\n {{ core.t.blockSettings.restoreHiddenBlocks }}\n </button>\n </Transition>\n </div>\n <div class=\"tpl:flex tpl:justify-center tpl:p-8\">\n <Canvas\n :viewport=\"editor.state.viewport\"\n :content=\"editor.content.value\"\n :selected-block-id=\"editor.state.selectedBlockId\"\n :dark-mode=\"editor.state.darkMode\"\n :preview-mode=\"editor.state.previewMode\"\n @select-block=\"editor.selectBlock\"\n />\n </div>\n </div>\n\n <EditorFooter\n v-if=\"config.branding !== false\"\n :position-class=\"[\n editor.state.previewMode\n ? 'tpl:left-0 tpl:right-0'\n : 'tpl:left-12 tpl:right-[320px]',\n ]\"\n />\n\n <!-- Keyboard reorder announcement region (visually hidden, screen-reader live) -->\n <div\n class=\"tpl-sr-only\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :aria-label=\"core.t.landmarks.reorderAnnouncements\"\n >\n {{ core.keyboardReorder.announcement.value }}\n </div>\n\n <!-- Right sidebar — persisted with v-show -->\n <RightSidebar\n v-show=\"!editor.state.previewMode\"\n :selected-block=\"editor.selectedBlock.value\"\n :settings=\"editor.content.value.settings\"\n @update-block=\"\n (updates) => editor.updateBlock(editor.state.selectedBlockId!, updates)\n \"\n @delete-block=\"\n () => {\n if (editor.state.selectedBlockId) {\n core.blockActions.deleteBlock(editor.state.selectedBlockId);\n }\n }\n \"\n @duplicate-block=\"\n () => {\n if (editor.selectedBlock.value) {\n core.blockActions.duplicateBlock(editor.selectedBlock.value);\n }\n }\n \"\n @update-settings=\"(updates) => editor.updateSettings(updates)\"\n />\n </div>\n</template>\n\n<style scoped>\n.tpl-restore-btn-enter-active {\n transition:\n opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),\n transform 200ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.tpl-restore-btn-leave-active {\n transition:\n opacity 150ms ease-in,\n transform 150ms ease-in;\n}\n\n.tpl-restore-btn-enter-from,\n.tpl-restore-btn-leave-to {\n opacity: 0;\n transform: translateY(-8px) scale(0.9);\n}\n\n.tpl-restore-btn-enter-to,\n.tpl-restore-btn-leave-from {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n</style>\n","/// <reference types=\"vite/client\" />\n\nimport type en from \"./locales/en\";\nimport type cloudEn from \"./locales/cloud/en\";\n\nexport type Translations = typeof en;\nexport type CloudTranslations = typeof cloudEn;\nexport type TranslationKey = keyof Translations;\n\n// Vite resolves these globs at build time. Adding a new locale file\n// automatically registers it — no array to keep in sync.\nconst ossModules = import.meta.glob<{ default: Translations }>(\n \"./locales/*.ts\",\n);\nconst cloudModules = import.meta.glob<{ default: CloudTranslations }>(\n \"./locales/cloud/*.ts\",\n);\n\nfunction localesFromGlob(modules: Record<string, unknown>): string[] {\n return Object.keys(modules)\n .map((path) => path.match(/\\/([^/]+)\\.ts$/)?.[1])\n .filter((locale): locale is string => Boolean(locale));\n}\n\nconst supportedLocales = localesFromGlob(ossModules);\nconst supportedCloudLocales = localesFromGlob(cloudModules);\n\n/**\n * Get the base language code from a locale string.\n * e.g., 'en-GB' -> 'en', 'de-DE' -> 'de'\n */\nexport function getBaseLocale(locale: string): string {\n return locale.split(\"-\")[0].toLowerCase();\n}\n\nfunction resolveLocale(locale: string, supported: string[]): string {\n const base = getBaseLocale(locale);\n return supported.includes(base) ? base : \"en\";\n}\n\n/**\n * Load OSS translations for a given locale.\n * Falls back to English if the locale is not supported.\n */\nexport async function loadTranslations(locale: string): Promise<Translations> {\n const target = resolveLocale(locale, supportedLocales);\n const loader = ossModules[`./locales/${target}.ts`];\n const mod = await loader();\n return mod.default;\n}\n\n/**\n * Load cloud translations for a given locale.\n * Cloud translations cover features available only via initCloud() —\n * AI, comments, collaboration, scoring, snapshots, plan limits, etc.\n * OSS contributors don't need to translate these; cloud locales fall back\n * to English independently of the OSS locale.\n */\nexport async function loadCloudTranslations(\n locale: string,\n): Promise<CloudTranslations> {\n const target = resolveLocale(locale, supportedCloudLocales);\n const loader = cloudModules[`./locales/cloud/${target}.ts`];\n const mod = await loader();\n return mod.default;\n}\n\n/** Check if a locale has OSS translations (matched by base, e.g. en-GB → en). */\nexport function isLocaleSupported(locale: string): boolean {\n return (\n supportedLocales.includes(locale) ||\n supportedLocales.includes(getBaseLocale(locale))\n );\n}\n\n/** Check if a locale has cloud translations (matched by base). */\nexport function isCloudLocaleSupported(locale: string): boolean {\n return (\n supportedCloudLocales.includes(locale) ||\n supportedCloudLocales.includes(getBaseLocale(locale))\n );\n}\n\n/** List of OSS-supported locales. */\nexport function getSupportedLocales(): string[] {\n return [...supportedLocales];\n}\n\n/** List of cloud-supported locales. May be a subset of OSS locales. */\nexport function getSupportedCloudLocales(): string[] {\n return [...supportedCloudLocales];\n}\n","import type { CustomBlock, TemplateContent } from \"@templatical/types\";\n\n/**\n * Minimal slice of the editor surface needed by `toMjmlForInstance`.\n * Decoupled from the full `TemplaticalEditor` type so this helper can be\n * tested in isolation with a stub object.\n */\nexport interface ToMjmlSource {\n getContent(): TemplateContent;\n renderCustomBlock(block: CustomBlock): Promise<string>;\n}\n\n/**\n * Lazy-load `@templatical/renderer` and render the editor's current content\n * to MJML, wiring the editor's own custom block resolver into the renderer's\n * `renderCustomBlock` callback.\n *\n * The renderer is an optional peer dependency (small, MIT-licensed). It is\n * only loaded when an export is actually requested. Consumers that don't\n * need MJML export at all (e.g., embedding the editor in an app where the\n * backend handles export) can omit the install entirely; calling `toMjml()`\n * in that case throws a clear error naming the missing package.\n *\n * The dynamic import is cached by the module system, so subsequent calls\n * skip the import overhead.\n */\nexport async function toMjmlForInstance(\n instance: ToMjmlSource,\n): Promise<string> {\n let renderer: typeof import(\"@templatical/renderer\");\n try {\n renderer = await import(\"@templatical/renderer\");\n } catch {\n throw new Error(\n \"[Templatical] toMjml() requires the @templatical/renderer package. Please install it.\",\n );\n }\n return renderer.renderToMjml(instance.getContent(), {\n renderCustomBlock: instance.renderCustomBlock,\n });\n}\n","import { createApp, h, ref, type App, type Ref } from \"vue\";\nimport { INIT_TIMEOUT_MS } from \"./constants/timeouts\";\nimport type {\n BlockDefaults,\n CustomBlock,\n CustomBlockDefinition,\n DisplayConditionsConfig,\n FontsConfig,\n MediaResult,\n MergeTagsConfig,\n SaveResult,\n Template,\n TemplateContent,\n TemplateDefaults,\n ThemeOverrides,\n UiTheme,\n} from \"@templatical/types\";\nimport type { MediaRequestContext } from \"@templatical/media-library\";\n\nimport Editor from \"./Editor.vue\";\nimport { loadTranslations, loadCloudTranslations } from \"./i18n\";\nimport { useFonts } from \"./composables\";\nimport { toMjmlForInstance } from \"./utils/toMjml\";\n\n// ---------------------------------------------------------------------------\n// OSS config + return types\n// ---------------------------------------------------------------------------\n\nexport interface TemplaticalEditorConfig {\n container: string | HTMLElement;\n content?: TemplateContent;\n\n onChange?: (content: TemplateContent) => void;\n onSave?: (content: TemplateContent) => void;\n onError?: (error: Error) => void;\n\n onRequestMedia?: OnRequestMedia;\n\n mergeTags?: MergeTagsConfig;\n displayConditions?: DisplayConditionsConfig;\n customBlocks?: CustomBlockDefinition[];\n fonts?: FontsConfig;\n\n blockDefaults?: BlockDefaults;\n templateDefaults?: TemplateDefaults;\n\n theme?: ThemeOverrides;\n uiTheme?: UiTheme;\n locale?: string;\n\n /**\n * Show the \"Powered by Templatical\" footer. Defaults to `true`.\n * Set to `false` to hide the footer (no attribution required by the license).\n */\n branding?: boolean;\n\n /**\n * Accessibility linter (`@templatical/quality`) configuration.\n *\n * - When unset, the linter loads on demand once the user opens the panel.\n * - When `disabled: true`, the optional peer is never imported (saves the\n * chunk download) and the sidebar tab + inline badges are suppressed.\n * - `rules`/`thresholds` follow the shape exported by `@templatical/quality`.\n */\n accessibility?: import(\"@templatical/quality\").A11yOptions;\n}\n\n/** Function type for media browser requests, used by both OSS and Cloud editors. */\nexport type OnRequestMedia = (\n context?: MediaRequestContext,\n) => Promise<MediaResult | null>;\n\ninterface TemplaticalEditorBase {\n getContent(): TemplateContent;\n setContent(content: TemplateContent): void;\n setTheme(theme: UiTheme): void;\n unmount(): void;\n}\n\nexport interface TemplaticalEditor extends TemplaticalEditorBase {\n /**\n * Render the current template to an MJML string. Resolves custom blocks\n * via the editor's internal block registry. Throws if the optional\n * `@templatical/renderer` package is not installed.\n */\n toMjml(): Promise<string>;\n /**\n * Render a single custom block to its HTML representation, using the\n * registered custom block definition's template and the block's current\n * field values. Exposed for headless callers that want to reuse the\n * editor's renderer (e.g., to drive `@templatical/renderer`'s\n * `renderCustomBlock` option from outside the editor instance).\n */\n renderCustomBlock(block: CustomBlock): Promise<string>;\n}\n\n/**\n * Cloud editor does not expose `toMjml` or `renderCustomBlock`: the cloud\n * backend performs MJML conversion server-side with additional processing\n * (e.g., signed image URLs, attachment handling) that isn't available client\n * side. Use the cloud `save()` flow to persist content; the backend handles\n * MJML/HTML export from there.\n */\nexport interface TemplaticalCloudEditor extends TemplaticalEditorBase {\n create(content?: TemplateContent): Promise<Template>;\n load(templateId: string): Promise<Template>;\n save(): Promise<SaveResult>;\n}\n\n// ---------------------------------------------------------------------------\n// OSS init — sync\n// ---------------------------------------------------------------------------\n\nlet appInstance: App | null = null;\nconst editorRef: Ref<InstanceType<typeof Editor> | null> = ref(null);\n\nexport async function init(\n config: TemplaticalEditorConfig,\n): Promise<TemplaticalEditor> {\n const container =\n typeof config.container === \"string\"\n ? document.querySelector(config.container)\n : config.container;\n\n if (!container) {\n throw new Error(\n `[Templatical] Container element not found: ${config.container}`,\n );\n }\n\n // Load translations before mounting so child components can use useI18n synchronously\n const translations = await loadTranslations(config.locale ?? \"en\");\n\n // Create fonts manager to pass to Editor\n const fontsManager = useFonts(config.fonts);\n\n // Unmount any prior app *after* awaits — checking before the await would\n // let two concurrent init() calls both pass the guard while appInstance is\n // still null and orphan the first-mounted app.\n if (appInstance) {\n unmount();\n }\n\n appInstance = createApp({\n setup() {\n return () =>\n h(Editor, {\n config,\n translations,\n fontsManager,\n ref: editorRef,\n });\n },\n });\n\n appInstance.mount(container);\n\n const instance: TemplaticalEditor = {\n getContent() {\n if (editorRef.value) {\n return JSON.parse(JSON.stringify(editorRef.value.getContent()));\n }\n return JSON.parse(JSON.stringify(config.content));\n },\n setContent(content: TemplateContent) {\n if (editorRef.value) {\n editorRef.value.setContent(content);\n }\n config.content = content;\n },\n setTheme(theme: UiTheme) {\n if (editorRef.value) {\n editorRef.value.setTheme(theme);\n }\n },\n unmount,\n renderCustomBlock(block: CustomBlock) {\n if (!editorRef.value) {\n return Promise.reject(new Error(\"[Templatical] Editor not ready\"));\n }\n return editorRef.value.renderCustomBlock(block);\n },\n toMjml: () => toMjmlForInstance(instance),\n };\n\n return instance;\n}\n\n// ---------------------------------------------------------------------------\n// Cloud init — async, flat config, tree-shaken when not called\n// ---------------------------------------------------------------------------\n\nlet cloudAppInstance: App | null = null;\n\nconst cloudEditorRef: Ref<InstanceType<\n typeof import(\"./cloud/CloudEditor.vue\").default\n> | null> = ref(null);\n\nexport async function initCloud(\n config: import(\"./cloud/CloudEditor.vue\").TemplaticalCloudEditorConfig,\n): Promise<TemplaticalCloudEditor> {\n const container =\n typeof config.container === \"string\"\n ? document.querySelector(config.container)\n : config.container;\n\n if (!container) {\n throw new Error(\n `[Templatical] Container element not found: ${config.container}`,\n );\n }\n\n // Dynamic import — CloudEditor.vue is tree-shaken from the OSS bundle\n const { default: CloudEditor } = await import(\"./cloud/CloudEditor.vue\");\n\n // Load OSS + cloud translations in parallel so child components can use\n // useI18n / useCloudI18n synchronously\n const [translations, cloudTranslations] = await Promise.all([\n loadTranslations(config.locale ?? \"en\"),\n loadCloudTranslations(config.locale ?? \"en\"),\n ]);\n\n // Create fonts manager to pass to CloudEditor\n const fontsManager = useFonts(config.fonts);\n\n // Unmount any prior app *after* awaits — checking before the await would\n // let two concurrent initCloud() calls both pass the guard while\n // cloudAppInstance is still null and orphan the first-mounted app.\n if (cloudAppInstance) {\n unmountCloud();\n }\n\n // Promise that resolves when CloudEditor emits 'ready'\n const readyPromise = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(\"[Templatical] Cloud editor initialization timed out\"));\n }, INIT_TIMEOUT_MS);\n\n cloudAppInstance = createApp({\n setup() {\n return () =>\n h(CloudEditor, {\n config,\n translations,\n cloudTranslations,\n fontsManager,\n ref: cloudEditorRef,\n onReady: () => {\n clearTimeout(timeout);\n resolve();\n },\n });\n },\n });\n\n cloudAppInstance.mount(container);\n });\n\n await readyPromise;\n\n const instance: TemplaticalCloudEditor = {\n getContent() {\n if (cloudEditorRef.value) {\n return JSON.parse(JSON.stringify(cloudEditorRef.value.getContent()));\n }\n return JSON.parse(JSON.stringify(config.content));\n },\n setContent(content: TemplateContent) {\n if (cloudEditorRef.value) {\n cloudEditorRef.value.setContent(content);\n }\n },\n setTheme(theme: UiTheme) {\n if (cloudEditorRef.value) {\n cloudEditorRef.value.setTheme(theme);\n }\n },\n unmount: unmountCloud,\n create(content?: TemplateContent) {\n if (!cloudEditorRef.value) {\n return Promise.reject(\n new Error(\"[Templatical] Cloud editor not ready\"),\n );\n }\n return cloudEditorRef.value.create(content);\n },\n load(templateId: string) {\n if (!cloudEditorRef.value) {\n return Promise.reject(\n new Error(\"[Templatical] Cloud editor not ready\"),\n );\n }\n return cloudEditorRef.value.load(templateId);\n },\n save() {\n if (!cloudEditorRef.value) {\n return Promise.reject(\n new Error(\"[Templatical] Cloud editor not ready\"),\n );\n }\n return cloudEditorRef.value.save();\n },\n };\n\n return instance;\n}\n\n// ---------------------------------------------------------------------------\n// Unmount helpers\n// ---------------------------------------------------------------------------\n\nexport function unmount(): void {\n if (appInstance) {\n appInstance.unmount();\n appInstance = null;\n editorRef.value = null;\n }\n}\n\nfunction unmountCloud(): void {\n if (cloudAppInstance) {\n cloudAppInstance.unmount();\n cloudAppInstance = null;\n cloudEditorRef.value = null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Re-exports\n// ---------------------------------------------------------------------------\n\nexport type { TemplaticalCloudEditorConfig } from \"./cloud/CloudEditor.vue\";\nexport type {\n BlockDefaults,\n TemplateContent,\n TemplateDefaults,\n ThemeOverrides,\n UiTheme,\n MergeTagsConfig,\n DisplayConditionsConfig,\n CustomBlockDefinition,\n ViewportSize,\n CustomFont,\n FontsConfig,\n SaveResult,\n Template,\n} from \"@templatical/types\";\n\nexport type { UseFontsReturn, FontOption } from \"./composables/useFonts\";\nexport { useFonts } from \"./composables/useFonts\";\nexport type { EditorCapabilities } from \"./types/editor-capabilities\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { t as e } from "./createLucideIcon-C3pa2siy.js";
|
|
2
|
+
var t = e("circle-alert", [
|
|
3
|
+
["circle", {
|
|
4
|
+
cx: "12",
|
|
5
|
+
cy: "12",
|
|
6
|
+
r: "10",
|
|
7
|
+
key: "1mglay"
|
|
8
|
+
}],
|
|
9
|
+
["line", {
|
|
10
|
+
x1: "12",
|
|
11
|
+
x2: "12",
|
|
12
|
+
y1: "8",
|
|
13
|
+
y2: "12",
|
|
14
|
+
key: "1pkeuh"
|
|
15
|
+
}],
|
|
16
|
+
["line", {
|
|
17
|
+
x1: "12",
|
|
18
|
+
x2: "12.01",
|
|
19
|
+
y1: "16",
|
|
20
|
+
y2: "16",
|
|
21
|
+
key: "4dfq90"
|
|
22
|
+
}]
|
|
23
|
+
]);
|
|
24
|
+
//#endregion
|
|
25
|
+
export { t };
|