@maildeno/editor 0.4.2 → 0.4.4
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/CHANGELOG.md +75 -0
- package/dist/RowPreviewChildren-C_6CFAct.js +4 -0
- package/dist/RowPreviewChildren-y7meU9Pj.js +4 -0
- package/dist/RowPreviewLegacyComponent-B1rwsYW_.js +454 -0
- package/dist/RowPreviewLegacyComponent-Dv7OCys4.js +454 -0
- package/dist/RowPreviewRow-BjO2HdFR.js +86 -0
- package/dist/RowPreviewRow-D8yJ4LSs.js +86 -0
- package/dist/babel-Bmz1GpKj.js +7218 -0
- package/dist/editor.css +1 -2809
- package/dist/element-DyFj9kgl.js +62972 -0
- package/dist/element.js +3 -3
- package/dist/estree-C5xyFN_T.js +4831 -0
- package/dist/{html-3PMDtB0V.js → html-Dc_r73Xn.js} +1517 -1578
- package/dist/index-Cud9IN-O.js +56306 -0
- package/dist/index.js +13 -14
- package/dist/init.js +103 -129
- package/dist/standalone-Yv8gSIWN.js +2336 -0
- package/package.json +1 -1
- package/dist/RowPreviewChildren-DT0y0lKC.js +0 -4
- package/dist/RowPreviewChildren-OsbF7_vu.js +0 -4
- package/dist/RowPreviewLegacyComponent-BV4b5bHQ.js +0 -487
- package/dist/RowPreviewLegacyComponent-C08MGJVT.js +0 -487
- package/dist/RowPreviewRow-ByxeBYV8.js +0 -112
- package/dist/RowPreviewRow-N-hh5l_H.js +0 -112
- package/dist/element-C2ZH0Z_i.js +0 -86561
- package/dist/element-scoped-styles.css +0 -2809
- package/dist/estree-DBJlF9un.js +0 -4876
- package/dist/index-DhFg3uKs.js +0 -75864
- package/dist/standalone-DKWMQftY.js +0 -2391
- package/dist/typescript-l6-4tT8s.js +0 -13240
package/dist/index.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
(function(){try{if(typeof document<"u"&&!document.querySelector("style[data-maildeno-editor-css]")){var s=document.createElement("style");s.setAttribute("data-maildeno-editor-css","");s.textContent="\n\n.md-input[data-v-026fafe6] {\r\n width: 100%;\r\n padding: 0.325rem 0.625rem;\r\n font-size: 13px;\r\n line-height: 1.25rem;\r\n color: var(--md-text);\r\n background: var(--md-surface);\r\n border: 1px solid var(--md-border);\r\n border-radius: 0.375rem;\r\n outline: none;\r\n transition:\r\n border-color 0.15s,\r\n box-shadow 0.15s;\n}\n.md-input[data-v-026fafe6]::placeholder {\r\n color: var(--md-text-subtle);\n}\n.md-input[data-v-026fafe6]:focus {\r\n border-color: var(--md-primary);\n}\n.md-input[data-v-026fafe6]:disabled {\r\n background: var(--md-surface-hover);\r\n color: var(--md-text-subtle);\r\n cursor: not-allowed;\n}\n.md-input--invalid[data-v-026fafe6] {\r\n border-color: var(--md-danger);\n}\n.md-input--invalid[data-v-026fafe6]:focus {\r\n border-color: var(--md-danger);\r\n box-shadow: 0 0 0 1px var(--md-danger);\n}\r\n\r\n/* =========================================================\r\n SELECT ROOT\r\n ========================================================= */\n.md-sel__anchor {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n width: 100%;\r\n min-height: 32px;\r\n box-sizing: border-box;\r\n padding: 0 0.375rem 0 0.5rem;\r\n background: var(--md-surface);\r\n border: 1px solid var(--md-border);\r\n border-radius: 0.375rem;\r\n font-size: 13px;\r\n color: var(--md-text);\n}\n.md-sel__anchor:focus-within {\r\n border-color: var(--md-primary);\n}\n.md-sel__anchor--open {\r\n border-color: var(--md-primary);\n}\n.md-sel__anchor--disabled {\r\n background: var(--md-surface-hover);\r\n color: var(--md-text-subtle);\n}\r\n\r\n/* =========================================================\r\n SEARCH INPUT\r\n ========================================================= */\n.md-sel__input {\r\n flex: 1;\r\n min-width: 0;\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: 0.375rem 0;\r\n border: 0;\r\n outline: none;\r\n background: transparent;\r\n font-family: inherit;\r\n font-size: 13px;\r\n line-height: 1.25rem;\r\n color: var(--md-text);\n}\n.md-sel__input::placeholder {\r\n color: var(--md-text-subtle);\n}\r\n\r\n/* =========================================================\r\n NON-FILTERED TRIGGER\r\n ========================================================= */\n.md-sel__triggerText {\r\n flex: 1;\r\n min-width: 0;\r\n box-sizing: border-box;\r\n padding: 0.375rem 0;\r\n border: 0;\r\n outline: none;\r\n background: transparent;\r\n cursor: pointer;\r\n font-family: inherit;\r\n font-size: 13px;\r\n color: var(--md-text);\r\n text-align: left;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\n}\n.md-sel__ph {\r\n color: var(--md-text-subtle);\n}\r\n\r\n/* =========================================================\r\n CHEVRON\r\n ========================================================= */\n.md-sel__chev {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n width: 20px;\r\n height: 20px;\r\n padding: 0;\r\n border: 0;\r\n outline: none;\r\n background: transparent;\r\n cursor: pointer;\r\n color: var(--md-text-muted);\r\n transition:\r\n transform 150ms ease,\r\n color 150ms ease;\n}\n.md-sel__chev--open {\r\n transform: rotate(180deg);\r\n color: var(--md-text);\n}\r\n\r\n/* =========================================================\r\n DROPDOWN\r\n ========================================================= */\n.md-sel__content {\r\n position: relative;\r\n z-index: 999999;\r\n width: var(--reka-combobox-trigger-width);\r\n min-width: 180px;\r\n max-width: 320px;\r\n box-sizing: border-box;\r\n background: var(--md-surface);\r\n border: 1px solid var(--md-border);\r\n border-radius: 0.5rem;\r\n box-shadow:\r\n 0 10px 15px -3px rgb(0 0 0 / 0.12),\r\n 0 4px 6px -4px rgb(0 0 0 / 0.12);\r\n overflow: hidden;\n}\r\n\r\n/* =========================================================\r\n DROPDOWN VIEWPORT\r\n ========================================================= */\n.md-sel__viewport {\r\n width: 100%;\r\n max-height: 240px;\r\n box-sizing: border-box;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n padding: 4px;\r\n background: var(--md-surface);\n}\r\n\r\n/* =========================================================\r\n EMPTY\r\n ========================================================= */\n.md-sel__empty {\r\n display: block;\r\n width: 100%;\r\n box-sizing: border-box;\r\n padding: 8px;\r\n background: var(--md-surface);\r\n font-family: inherit;\r\n font-size: 12px;\r\n color: var(--md-text-subtle);\r\n text-align: center;\n}\r\n\r\n/* =========================================================\r\n OPTION\r\n ========================================================= */\n.md-sel__item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n min-height: 32px;\r\n box-sizing: border-box;\r\n gap: 8px;\r\n padding: 6px 8px;\r\n background: var(--md-surface);\r\n border: 0;\r\n border-radius: 6px;\r\n font-family: inherit;\r\n font-size: 13px;\r\n line-height: 18px;\r\n color: var(--md-text);\r\n cursor: pointer;\r\n outline: none;\r\n user-select: none;\n}\n.md-sel__item:hover {\r\n background: var(--md-surface-muted);\n}\n.md-sel__item[data-highlighted] {\r\n background: var(--md-surface-muted);\n}\n.md-sel__item[data-state=\"checked\"] {\r\n background: var(--md-success-bg);\r\n color: var(--md-success-fg);\r\n font-weight: 500;\n}\n.md-sel__item[data-state=\"checked\"][data-highlighted] {\r\n background: color-mix(in srgb, var(--md-success) 20%, var(--md-success-bg));\n}\r\n\r\n/* =========================================================\r\n OPTION TEXT\r\n ========================================================= */\n.md-sel__itemLabel {\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\n}\r\n\r\n/* =========================================================\r\n CHECK\r\n ========================================================= */\n.md-sel__check {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n width: 16px;\r\n height: 16px;\r\n font-size: 12px;\r\n color: currentColor;\n}\r\n\n.section-fade-enter-active[data-v-4363482d],\r\n.section-fade-leave-active[data-v-4363482d] {\r\n transition:\r\n opacity 0.15s ease,\r\n transform 0.15s ease;\n}\n.section-fade-enter-from[data-v-4363482d],\r\n.section-fade-leave-to[data-v-4363482d] {\r\n opacity: 0;\r\n transform: translateY(-3px);\n}\r\n\n.transparent-swatch[data-v-c92355b6] {\r\n background-image:\r\n linear-gradient(45deg, #ccc 25%, transparent 25%),\r\n linear-gradient(-45deg, #ccc 25%, transparent 25%),\r\n linear-gradient(45deg, transparent 75%, #ccc 75%),\r\n linear-gradient(-45deg, transparent 75%, #ccc 75%);\r\n background-size: 6px 6px;\r\n background-position:\r\n 0 0,\r\n 0 3px,\r\n 3px -3px,\r\n -3px 0;\r\n background-color: white;\n}\r\n\n.transparent-swatch[data-v-b61b14c2] {\r\n background-image:\r\n linear-gradient(45deg, #ccc 25%, transparent 25%),\r\n linear-gradient(-45deg, #ccc 25%, transparent 25%),\r\n linear-gradient(45deg, transparent 75%, #ccc 75%),\r\n linear-gradient(-45deg, transparent 75%, #ccc 75%);\r\n background-size: 6px 6px;\r\n background-position:\r\n 0 0,\r\n 0 3px,\r\n 3px -3px,\r\n -3px 0;\r\n background-color: white;\n}\r\n\n/* =========================================================\n FIELD\n ========================================================= */\n.md-dp__field {\n display: flex;\n align-items: center;\n gap: 0.0625rem;\n width: 100%;\n min-height: 32px;\n box-sizing: border-box;\n padding: 0.375rem 0.375rem 0.375rem 0.5rem;\n background: var(--md-surface);\n border: 1px solid var(--md-border);\n border-radius: 0.375rem;\n font-family: inherit;\n font-size: 13px;\n color: var(--md-text);\n}\n.md-dp__field:focus-within {\n border-color: var(--md-primary);\n box-shadow: 0 0 0 1px var(--md-primary);\n}\n\n/* =========================================================\n DATE SEGMENTS\n ========================================================= */\n.md-dp__seg {\n padding: 0 0.0625rem;\n border-radius: 0.125rem;\n outline: none;\n font-family: inherit;\n font-size: 13px;\n}\n.md-dp__seg:focus {\n background: var(--md-primary);\n color: var(--md-surface);\n}\n.md-dp__seg[data-placeholder] {\n color: var(--md-text-subtle);\n}\n.md-dp__lit {\n color: var(--md-text-subtle);\n}\n\n/* =========================================================\n CALENDAR TRIGGER\n ========================================================= */\n.md-dp__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-left: auto;\n width: 20px;\n height: 20px;\n padding: 0.125rem;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-size: 11px;\n color: var(--md-text-subtle);\n}\n.md-dp__trigger:hover {\n color: var(--md-text-muted);\n}\n\n/* =========================================================\n CALENDAR POPOVER\n ========================================================= */\n.md-dp__content {\n z-index: 999999;\n padding: 0.625rem;\n box-sizing: border-box;\n background: var(--md-surface);\n border: 1px solid var(--md-border);\n border-radius: 0.625rem;\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.12),\n 0 4px 6px -4px rgb(0 0 0 / 0.12);\n}\n\n/* =========================================================\n CALENDAR\n ========================================================= */\n.md-dp__cal {\n width: max-content;\n}\n\n/* =========================================================\n HEADER\n ========================================================= */\n.md-dp__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0.5rem;\n}\n.md-dp__heading {\n font-family: inherit;\n font-size: 13px;\n font-weight: 600;\n color: var(--md-text);\n}\n\n/* =========================================================\n PREVIOUS / NEXT\n ========================================================= */\n.md-dp__nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0.25rem;\n border: 0;\n background: transparent;\n border-radius: 0.25rem;\n cursor: pointer;\n font-size: 12px;\n color: var(--md-text-muted);\n}\n.md-dp__nav:hover {\n background: var(--md-surface-muted);\n color: var(--md-text);\n}\n.md-dp__nav:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* =========================================================\n GRID\n ========================================================= */\n.md-dp__grid {\n width: 100%;\n border-collapse: collapse;\n}\n.md-dp__row {\n display: flex;\n}\n\n/* =========================================================\n WEEKDAY HEADER\n ========================================================= */\n.md-dp__headCell {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 28px;\n font-family: inherit;\n font-size: 11px;\n font-weight: 500;\n color: var(--md-text-subtle);\n}\n\n/* =========================================================\n DAY BUTTON\n ========================================================= */\n.md-dp__day {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 30px;\n padding: 0;\n border: 0;\n background: transparent;\n font-family: inherit;\n font-size: 12px;\n color: var(--md-text);\n border-radius: 0.3125rem;\n cursor: pointer;\n outline: none;\n transition:\n background 100ms ease,\n color 100ms ease;\n}\n.md-dp__day:hover {\n background: var(--md-surface-muted);\n}\n.md-dp__day:focus-visible {\n outline: 2px solid var(--md-primary);\n outline-offset: -2px;\n}\n\n/* =========================================================\n SELECTED DAY\n ========================================================= */\n.md-dp__day[data-selected] {\n background: var(--md-primary);\n color: var(--md-surface);\n font-weight: 600;\n}\n.md-dp__day[data-selected]:hover {\n background: var(--md-primary);\n}\n\n/* =========================================================\n TODAY\n ========================================================= */\n.md-dp__day[data-today]:not([data-selected]) {\n font-weight: 700;\n color: var(--md-primary);\n}\n\n/* =========================================================\n OUTSIDE / DISABLED\n ========================================================= */\n.md-dp__day[data-outside-view] {\n color: var(--md-border-strong);\n}\n.md-dp__day[data-disabled] {\n color: var(--md-border-strong);\n\n cursor: default;\n}\n.md-dp__day[data-disabled]:hover {\n background: transparent;\n}\n\n.rules-scroll[data-v-6821226a] {\r\n overflow-x: auto;\r\n max-width: 100%;\r\n -webkit-overflow-scrolling: touch;\n}\n.rules-scroll[data-v-6821226a]::-webkit-scrollbar {\r\n height: 6px;\n}\n.rules-scroll[data-v-6821226a]::-webkit-scrollbar-track {\r\n background: var(--md-surface-muted);\r\n border-radius: 4px;\n}\n.rules-scroll[data-v-6821226a]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 4px;\n}\n.rules-scroll[data-v-6821226a]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.toggle-btn[data-v-befa8dec] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: 0.5px solid transparent;\r\n cursor: pointer;\r\n transition:\r\n background 0.1s,\r\n border-color 0.1s,\r\n color 0.1s;\r\n background: transparent;\r\n padding: 0;\r\n outline: none;\n}\n.toggle-btn[data-v-befa8dec]:focus-visible {\r\n box-shadow: 0 0 0 2px var(--md-selection);\n}\n.toggle-btn--idle[data-v-befa8dec] {\r\n border-color: var(--md-border);\r\n color: var(--md-text-subtle);\n}\n.toggle-btn--idle[data-v-befa8dec]:hover {\r\n background: var(--md-surface-hover);\r\n border-color: var(--md-border-strong);\n}\n.toggle-btn--active[data-v-befa8dec] {\r\n background: var(--md-selection-bg);\r\n border-color: var(--md-selection);\r\n color: var(--md-selection-fg);\n}\n.toggle-btn--active[data-v-befa8dec]:hover {\r\n background: color-mix(\r\n in srgb,\r\n var(--md-selection) 20%,\r\n var(--md-selection-bg)\r\n );\n}\r\n\n.md-btn[data-v-5bc166d4] {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 0.375rem;\r\n padding: 0.5rem 0.875rem;\r\n font-size: 13px;\r\n font-weight: 500;\r\n border-radius: 0.375rem;\r\n border: 1px solid transparent;\r\n cursor: pointer;\r\n transition:\r\n background-color 0.15s,\r\n border-color 0.15s,\r\n opacity 0.15s;\n}\n.md-btn[data-v-5bc166d4]:disabled {\r\n opacity: 0.55;\r\n cursor: not-allowed;\n}\n.md-btn--primary[data-v-5bc166d4] {\r\n background: var(--md-button-primary-bg);\r\n color: var(--md-button-primary-text);\n}\n.md-btn--primary[data-v-5bc166d4]:not(:disabled):hover {\r\n background: var(--md-button-primary-hover-bg);\n}\n.md-btn--secondary[data-v-5bc166d4] {\r\n background: var(--md-button-secondary-bg);\r\n color: var(--md-button-secondary-text);\r\n border-color: var(--md-border);\n}\n.md-btn--secondary[data-v-5bc166d4]:not(:disabled):hover {\r\n background: var(--md-button-secondary-hover-bg);\n}\n.md-btn--danger[data-v-5bc166d4] {\r\n background: var(--md-danger);\r\n color: var(--md-on-danger);\n}\n.md-btn--danger[data-v-5bc166d4]:not(:disabled):hover {\r\n filter: brightness(0.94);\n}\n.md-btn--success[data-v-5bc166d4] {\r\n background: var(--md-success);\r\n color: var(--md-surface);\n}\r\n\n.md-dialog__overlay[data-v-18cc7517] {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 9998;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1rem;\r\n background: rgb(0 0 0 / 0.4);\n}\n.md-dialog[data-v-18cc7517] {\r\n width: 420px;\r\n max-width: 100%;\r\n max-height: calc(100vh - 2rem);\r\n display: flex;\r\n flex-direction: column;\r\n background: var(--md-surface);\r\n border-radius: 0.75rem;\r\n box-shadow: 0 20px 60px rgb(0 0 0 / 0.25);\r\n outline: none;\n}\n.md-dialog__header[data-v-18cc7517] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 1rem;\r\n padding: 1.125rem 1.25rem 0.5rem;\n}\n.md-dialog__header--noTitle[data-v-18cc7517] {\r\n justify-content: flex-end;\n}\n.md-dialog__title[data-v-18cc7517] {\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: var(--md-text);\r\n margin: 0;\n}\n.md-dialog__close[data-v-18cc7517] {\r\n display: inline-flex;\r\n padding: 0.25rem;\r\n color: var(--md-text-subtle);\r\n background: none;\r\n border: 0;\r\n border-radius: 0.25rem;\r\n cursor: pointer;\n}\n.md-dialog__close[data-v-18cc7517]:hover {\r\n color: var(--md-text);\r\n background: var(--md-surface-muted);\n}\n.md-dialog__body[data-v-18cc7517] {\r\n padding: 0.5rem 1.25rem 1.25rem;\r\n overflow-y: auto;\r\n font-size: 14px;\r\n color: var(--md-text);\n}\n.md-dialog__footer[data-v-18cc7517] {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 0.5rem;\r\n padding: 0 1.25rem 1.25rem;\n}\n.md-dialog__srOnly[data-v-18cc7517] {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\n}\r\n\n[data-v-bab0f181] a {\r\n color: #2563eb;\r\n cursor: pointer;\n}\n[data-v-bab0f181] a:not([style*=\"text-decoration\"]) {\r\n text-decoration: underline;\n}\n[data-v-bab0f181] a:hover {\r\n opacity: 0.8;\n}\r\n\r\n/* Merge tag node — inline chip styling.\r\n display:inline ensures the span is exactly as wide as its text content.\r\n No width reservation from hidden raw-tag text since the NodeView\r\n writes only one text node at a time. */\n[data-v-bab0f181] .merge-tag-node {\r\n display: inline;\r\n white-space: nowrap;\r\n vertical-align: baseline;\r\n cursor: default;\r\n border-radius: 3px;\r\n padding: 0 2px;\n}\r\n\r\n/* List styles — scoped to the editor content area */\n[data-v-bab0f181] li:not(:last-child) {\r\n margin-bottom: var(--list-item-spacing, 0.25rem);\n}\r\n\r\n/* ─── Toolbar font Select sizing ─────────────────────────────────────────────\r\n Constrain the Select to sit flush inside the toolbar row.\r\n The trigger is kept compact (28px tall) and the overlay is widened so\r\n long font names are readable without being clipped. */\n.toolbar-font-select[data-v-bab0f181] .p-select {\r\n height: 28px;\r\n min-width: 110px;\r\n max-width: 130px;\r\n border-radius: 6px;\r\n border-color: var(\r\n --md-toolbar-border\r\n ); /* matches other toolbar button borders */\r\n padding: 0 6px;\r\n font-size: 0.75rem;\r\n display: flex;\r\n align-items: center;\n}\n.toolbar-font-select[data-v-bab0f181] .p-select-label {\r\n padding: 0;\r\n font-size: 0.85rem;\r\n line-height: 1;\n}\n.toolbar-font-select[data-v-bab0f181] .p-select-dropdown {\r\n width: 20px;\n}\r\n\r\n/* Widen the overlay panel so long font names are not clipped */\n[data-v-bab0f181] .p-select-overlay {\r\n min-width: 180px !important;\n}\r\n\n.toggle-btn[data-v-7d66fd79] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 28px;\r\n border-radius: 6px;\r\n border: 0.5px solid transparent;\r\n cursor: pointer;\r\n transition:\r\n background 0.1s,\r\n border-color 0.1s,\r\n color 0.1s;\r\n background: transparent;\r\n padding: 0;\r\n outline: none;\n}\n.toggle-btn--idle[data-v-7d66fd79] {\r\n border-color: color-mix(in srgb, var(--md-border) 80%, transparent);\r\n color: var(--md-text-subtle);\n}\n.toggle-btn--idle[data-v-7d66fd79]:hover {\r\n background: var(--md-surface-hover);\r\n border-color: var(--md-border-strong);\r\n color: var(--md-text-muted);\n}\n.toggle-btn--active[data-v-7d66fd79] {\r\n background: var(--md-selection-bg);\r\n border-color: var(--md-selection);\r\n color: var(--md-selection-fg);\n}\n.toggle-btn--active[data-v-7d66fd79]:hover {\r\n background: color-mix(\r\n in srgb,\r\n var(--md-selection) 20%,\r\n var(--md-selection-bg)\r\n );\n}\r\n\n.panel[data-v-8337ea1e] {\r\n padding: 10px 12px;\r\n background: var(--md-surface);\r\n border: 0.5px solid color-mix(in srgb, var(--md-border) 80%, transparent);\r\n border-radius: 10px;\n}\n.separator[data-v-8337ea1e] {\r\n height: 0.5px;\r\n background: color-mix(in srgb, var(--md-border) 80%, transparent);\r\n margin-left: -12px;\r\n margin-right: -12px;\n}\r\n\n.spinner[data-v-3a289171] {\r\n width: 50px;\r\n height: 50px;\r\n border: 5px solid rgba(0, 0, 0, 0.2);\r\n border-top-color: var(--md-selection);\r\n border-radius: 50%;\r\n margin: 0 auto;\r\n animation: spin-3a289171 1s linear infinite;\n}\n@keyframes spin-3a289171 {\nto {\r\n transform: rotate(360deg);\n}\n}\r\n\r\n/* ===== DESIGN SYSTEM TOKENS =====\r\n * Each token reads from the shared --md-* custom properties (see theme.ts)\r\n * and falls back to this component's original hardcoded value when the\r\n * host hasn't set that property. That means an untouched app looks exactly\r\n * as before, and a host calling setEditorTheme() re-themes this notice too,\r\n * without editing this file again. */\n.desktop-gate[data-v-61a8c3d0] {\r\n --brand-primary: var(--md-primary, var(--md-primary));\r\n --brand-primary-dark: var(--md-primary-hover, var(--md-primary-hover));\r\n --brand-primary-light: var(--md-primary-hover, var(--md-primary-hover));\r\n --brand-gradient-start: var(--md-primary, var(--md-primary));\r\n --brand-gradient-end: var(--md-primary-hover, var(--md-primary-hover));\r\n --gate-surface: var(--md-surface, var(--md-surface));\r\n --gate-backdrop: var(--md-background, var(--md-surface-hover));\r\n --gate-on-primary: var(--md-on-primary, var(--md-surface));\r\n --gate-warning: var(--md-warning, var(--md-warning));\r\n --gray-50: var(--md-background, var(--md-surface-hover));\r\n --gray-100: var(--md-surface-muted, var(--md-surface-muted));\r\n --gray-200: var(--md-border, var(--md-border));\r\n --gray-300: var(--md-border-strong, var(--md-border-strong));\r\n --gray-400: var(--md-text-subtle, var(--md-text-subtle));\r\n --gray-500: var(--md-text-subtle, var(--md-text-muted));\r\n --gray-600: var(--md-text-muted, var(--md-text-muted));\r\n --gray-700: var(--md-text-muted, var(--md-text-muted));\r\n --gray-800: var(--md-text, var(--md-text));\r\n --gray-900: var(--md-text, var(--md-text));\r\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\r\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\r\n --shadow-lg:\r\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\r\n --shadow-xl:\r\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\r\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n}\r\n\r\n/* ===== MAIN LAYOUT ===== */\n.desktop-gate[data-v-61a8c3d0] {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 9999;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: color-mix(in srgb, var(--gate-backdrop) 98%, transparent);\r\n backdrop-filter: blur(2px);\r\n padding: 1.5rem;\n}\n.gate-container[data-v-61a8c3d0] {\r\n max-width: 520px;\r\n width: 100%;\r\n background: var(--gate-surface);\r\n border-radius: 2rem;\r\n padding: 2.5rem;\r\n text-align: center;\r\n box-shadow: var(--shadow-2xl);\r\n animation: fadeInUp-61a8c3d0 0.5s cubic-bezier(0.16, 1, 0.3, 1);\r\n border: 1px solid var(--gray-200);\n}\r\n\r\n/* ===== BRAND BADGE ===== */\n.brand-badge[data-v-61a8c3d0] {\r\n position: relative;\r\n width: 80px;\r\n height: 80px;\r\n margin: 0 auto 1.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\n}\n.badge-ring[data-v-61a8c3d0] {\r\n position: absolute;\r\n inset: 0;\r\n border-radius: 50%;\r\n background: linear-gradient(\r\n 135deg,\r\n var(--brand-gradient-start),\r\n var(--brand-gradient-end)\r\n );\r\n animation: pulseRing-61a8c3d0 2s ease-out infinite;\n}\n.badge-icon[data-v-61a8c3d0] {\r\n position: relative;\r\n width: 56px;\r\n height: 56px;\r\n background: var(--gate-surface);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: var(--brand-primary);\r\n box-shadow: var(--shadow-md);\r\n transition: transform 0.2s ease;\n}\n.gate-container:hover .badge-icon[data-v-61a8c3d0] {\r\n transform: scale(1.02);\n}\r\n\r\n/* ===== TYPOGRAPHY ===== */\n.gate-title[data-v-61a8c3d0] {\r\n font-size: 1.875rem;\r\n font-weight: 700;\r\n letter-spacing: -0.02em;\r\n margin: 0 0 1rem 0;\r\n color: var(--gray-900);\n}\n.brand-gradient[data-v-61a8c3d0] {\r\n background: linear-gradient(\r\n 135deg,\r\n var(--brand-gradient-start),\r\n var(--brand-gradient-end)\r\n );\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n color: transparent;\n}\n.gate-description[data-v-61a8c3d0] {\r\n font-size: 1rem;\r\n line-height: 1.5;\r\n color: var(--gray-600);\r\n margin: 0 0 1.75rem 0;\n}\r\n\r\n/* ===== FEATURE GRID ===== */\n.feature-grid[data-v-61a8c3d0] {\r\n display: flex;\r\n justify-content: center;\r\n gap: 2rem;\r\n margin-bottom: 2rem;\r\n padding: 1rem 0;\r\n border-top: 1px solid var(--gray-200);\r\n border-bottom: 1px solid var(--gray-200);\n}\n.feature-item[data-v-61a8c3d0] {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 0.5rem;\r\n font-size: 0.75rem;\r\n font-weight: 500;\r\n color: var(--gray-700);\n}\n.feature-icon[data-v-61a8c3d0] {\r\n width: 36px;\r\n height: 36px;\r\n background: var(--gray-100);\r\n border-radius: 12px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: var(--brand-primary);\r\n transition: all 0.2s ease;\n}\n.feature-item:hover .feature-icon[data-v-61a8c3d0] {\r\n background: var(--brand-primary);\r\n color: var(--gate-on-primary);\r\n transform: translateY(-2px);\n}\r\n\r\n/* ===== STATUS ===== */\n.detection-status[data-v-61a8c3d0] {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.5rem 1rem;\r\n background: var(--gray-100);\r\n border-radius: 100px;\r\n font-size: 0.75rem;\r\n font-weight: 500;\r\n color: var(--gray-600);\n}\n.status-dot[data-v-61a8c3d0] {\r\n width: 8px;\r\n height: 8px;\r\n background: var(--gate-warning);\r\n border-radius: 50%;\r\n animation: pulse-61a8c3d0 1.5s ease-out infinite;\n}\r\n\r\n/* ===== FOOTER ===== */\n.gate-footer[data-v-61a8c3d0] {\r\n margin-top: 2rem;\r\n padding-top: 1.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 0.5rem;\r\n font-size: 0.75rem;\r\n color: var(--gray-400);\n}\n.brand-text[data-v-61a8c3d0] {\r\n font-weight: 600;\r\n background: linear-gradient(\r\n 135deg,\r\n var(--brand-gradient-start),\r\n var(--brand-gradient-end)\r\n );\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n color: transparent;\n}\r\n\r\n/* ===== ANIMATIONS ===== */\n@keyframes fadeInUp-61a8c3d0 {\nfrom {\r\n opacity: 0;\r\n transform: translateY(20px);\n}\nto {\r\n opacity: 1;\r\n transform: translateY(0);\n}\n}\n@keyframes pulseRing-61a8c3d0 {\n0% {\r\n opacity: 1;\r\n transform: scale(0.95);\n}\n70% {\r\n opacity: 0.4;\r\n transform: scale(1.15);\n}\n100% {\r\n opacity: 0;\r\n transform: scale(1.25);\n}\n}\n@keyframes pulse-61a8c3d0 {\n0%,\r\n 100% {\r\n opacity: 1;\n}\n50% {\r\n opacity: 0.4;\n}\n}\r\n\r\n/* ===== RESPONSIVE TOUCH-UPS ===== */\n@media (max-width: 480px) {\n.gate-container[data-v-61a8c3d0] {\r\n padding: 2rem 1.5rem;\n}\n.gate-title[data-v-61a8c3d0] {\r\n font-size: 1.5rem;\n}\n.feature-grid[data-v-61a8c3d0] {\r\n gap: 1.25rem;\n}\n}\r\n\n.row-drop-bar[data-v-af80b875] {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n height: 28px;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 0 16px;\r\n background: color-mix(in srgb, var(--drop-color) 5%, transparent);\r\n border-radius: 6px;\r\n z-index: 20;\r\n pointer-events: none;\n}\n.row-drop-bar--before[data-v-af80b875] {\r\n top: -14px;\n}\n.row-drop-bar--after[data-v-af80b875] {\r\n bottom: -14px;\n}\n.row-drop-bar-line[data-v-af80b875] {\r\n flex: 1;\r\n height: 2px;\r\n background: color-mix(in srgb, var(--drop-color) 50%, transparent);\r\n border-radius: 2px;\r\n /* animation: bar-expand 0.18s ease forwards; */\n}\r\n\r\n/* @keyframes bar-expand {\r\n from {\r\n transform: scaleX(0);\r\n opacity: 0;\r\n }\r\n to {\r\n transform: scaleX(1);\r\n opacity: 1;\r\n }\r\n} */\n.row-drop-bar-label[data-v-af80b875] {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n font-size: 11px;\r\n font-weight: 500;\r\n color: var(--drop-color);\r\n white-space: nowrap;\r\n padding: 4px 12px;\r\n background: color-mix(in srgb, var(--drop-color) 10%, transparent);\r\n border: 1px solid color-mix(in srgb, var(--drop-color) 30%, transparent);\r\n border-radius: 24px;\r\n /* animation: label-pop 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; */\n}\r\n\r\n/* @keyframes label-pop {\r\n from {\r\n transform: scale(0.8);\r\n opacity: 0;\r\n }\r\n to {\r\n transform: scale(1);\r\n opacity: 1;\r\n }\r\n} */\n.row-drop-bar-icon[data-v-af80b875] {\r\n width: 12px;\r\n height: 12px;\r\n flex-shrink: 0;\n}\r\n\r\n/* Transition */\r\n/* .drop-bar-enter-active {\r\n animation: bar-in 0.15s ease forwards;\r\n}\r\n.drop-bar-leave-active {\r\n transition: opacity 0.12s ease;\r\n}\r\n.drop-bar-leave-to {\r\n opacity: 0;\r\n} */\r\n\r\n/* @keyframes bar-in {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n} */\r\n\n.fade-enter-active[data-v-34a528c9],\r\n.fade-leave-active[data-v-34a528c9] {\r\n transition: opacity 0.1s ease;\n}\n.fade-enter-from[data-v-34a528c9],\r\n.fade-leave-to[data-v-34a528c9] {\r\n opacity: 0;\n}\r\n\r\n/*\r\n * Stacking fix: CanvasRowDropZone has z-index: 9 and extends its hit-area\r\n * strip into adjacent rows when a layout drag is active. Without an explicit\r\n * stacking context on the column, that strip would catch pointer events for\r\n * the edges of the column — the row drop zone would win and the drop would\r\n * become a top-level row instead of a nested row.\r\n *\r\n * z-index: 1 creates a stacking context ABOVE the drop zone's hit strip.\r\n *\r\n * CRITICAL: When a child component is selected, we must set z-index: auto on\r\n * this column AND on its ancestor CanvasRow (via hasSelectedDescendant).\r\n * z-index: auto removes the column from the stacking context chain entirely,\r\n * letting the selected component's z-50 bubble up to compete at the canvas\r\n * root level — which is what allows the action bar and RichText toolbar to\r\n * paint above sibling rows. If z-index: 1 stays active, ANY z-index on a\r\n * child is capped within this column's own stacking context and can never\r\n * exceed a sibling row painted at z-index: 0 in normal flow.\r\n */\n.canvas-column[data-v-34a528c9] {\r\n position: relative;\r\n z-index: 1;\n}\n.canvas-column.has-selected-child[data-v-34a528c9] {\r\n z-index: auto;\n}\r\n\r\n/* ── Base zone ─────────────────────────────────────────────── */\n.canvas-drop-zone[data-v-4336edcf] {\r\n position: relative;\r\n height: 0;\r\n margin: 0;\r\n z-index: 9;\r\n overflow: visible;\r\n transition: height 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\r\n\r\n/* Full expansion on hover */\n.canvas-drop-zone--active[data-v-4336edcf] {\r\n height: 52px;\n}\r\n\r\n/* Empty-canvas variant — fills the whole empty area */\n.canvas-drop-zone--empty[data-v-4336edcf] {\r\n height: 100%;\r\n min-height: 200px;\n}\r\n\r\n/* Full height variant - takes up entire parent container */\n.canvas-drop-zone--full[data-v-4336edcf] {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n height: auto;\r\n min-height: 100%;\n}\n.canvas-drop-zone--empty .cdz-bar[data-v-4336edcf] {\r\n inset: 12px;\r\n justify-content: center;\r\n border-radius: 12px;\n}\r\n\r\n/* ── Empty state styles (when fullHeight is true) ── */\n.cdz-empty-state[data-v-4336edcf] {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n background: linear-gradient(\r\n 135deg,\r\n color-mix(in srgb, var(--md-row-selection) 4%, var(--md-surface)) 0%,\r\n color-mix(in srgb, var(--md-row-selection) 8%, var(--md-surface)) 100%\r\n );\r\n border: 2px dashed\r\n color-mix(in srgb, var(--md-row-selection) 22%, var(--md-surface));\r\n border-radius: 6px;\r\n transition: all 0.2s ease;\n}\n.canvas-drop-zone--full .cdz-empty-state[data-v-4336edcf] {\r\n animation: fade-in-4336edcf 0.3s ease;\n}\n@keyframes fade-in-4336edcf {\nfrom {\r\n opacity: 0;\r\n transform: scale(0.98);\n}\nto {\r\n opacity: 1;\r\n transform: scale(1);\n}\n}\n.cdz-empty-content[data-v-4336edcf] {\r\n text-align: center;\r\n padding: 2rem;\n}\n.cdz-empty-icon[data-v-4336edcf] {\r\n width: 48px;\r\n height: 48px;\r\n margin: 0 auto 12px;\r\n color: var(--md-text-subtle);\r\n stroke-width: 1.5;\n}\n.cdz-empty-title[data-v-4336edcf] {\r\n font-size: 1.125rem;\r\n font-weight: 500;\r\n color: var(--md-selection-fg);\r\n margin-bottom: 8px;\r\n letter-spacing: -0.01em;\n}\n.cdz-empty-subtitle[data-v-4336edcf] {\r\n font-size: 0.875rem;\r\n color: var(--md-text-subtle);\r\n line-height: 1.4;\n}\r\n\r\n/* ── Invisible hit-area ─────────────────────────────────────\r\n * Previously this bled 12px into the rows above and below with pointer-events\r\n * all during a layout drag. That meant dragging a LayoutTab row would hit this\r\n * strip when the cursor was merely near a column's top/bottom edge, and\r\n * insert a top-level row instead of a nested row.\r\n *\r\n * FIX: Shrink the bleed to a small value (−4px) so the strip only covers the\r\n * natural visible gap between rows. Columns retain ownership of their rendered\r\n * area. Combined with CanvasColumn's new z-index: 1 stacking context, the\r\n * column reliably wins for pointer hits inside its body, while the thin gap\r\n * between rows still belongs to this drop zone.\r\n *\r\n * When fully expanded (canvas-drop-zone--active: 52px tall) the zone's own\r\n * height covers the hit area naturally, so bleed here is not needed for the\r\n * \"snap into a big target\" UX — that comes from the zone's own expanded size.\r\n */\n.cdz-hit-area[data-v-4336edcf] {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: -4px;\r\n bottom: -4px;\r\n z-index: 1;\r\n /* Only catchable during a layout drag; invisible + inert otherwise */\r\n pointer-events: none;\n}\n.canvas-drop-zone--receptive .cdz-hit-area[data-v-4336edcf] {\r\n pointer-events: all;\n}\r\n\r\n/* Hide empty state when dragging */\n.canvas-drop-zone--full.canvas-drop-zone--receptive .cdz-empty-state[data-v-4336edcf],\r\n.canvas-drop-zone--full.canvas-drop-zone--active .cdz-empty-state[data-v-4336edcf] {\r\n opacity: 0.5;\r\n background: color-mix(in srgb, var(--md-row-selection) 4%, transparent);\n}\r\n\r\n/* ── Ghost line (receptive but not hovered) ─────────────────── */\n.cdz-ghost-line[data-v-4336edcf] {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 50%;\r\n height: 2px;\r\n transform: translateY(-50%);\r\n background: repeating-linear-gradient(\r\n 90deg,\r\n color-mix(in srgb, var(--md-row-selection) 25%, transparent) 0px,\r\n color-mix(in srgb, var(--md-row-selection) 25%, transparent) 6px,\r\n transparent 6px,\r\n transparent 12px\r\n );\r\n border-radius: 2px;\r\n pointer-events: none;\r\n animation: ghost-pulse-4336edcf 2s ease-in-out infinite;\n}\n@keyframes ghost-pulse-4336edcf {\n0%,\r\n 100% {\r\n opacity: 0.5;\n}\n50% {\r\n opacity: 1;\n}\n}\r\n\r\n/* ── Active bar ─────────────────────────────────────────────── */\n.cdz-bar[data-v-4336edcf] {\r\n position: absolute;\r\n inset: 4px 0;\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n padding: 0 20px;\r\n background: color-mix(in srgb, var(--md-row-selection) 6%, transparent);\r\n border-radius: 8px;\r\n border: 1.5px dashed\r\n color-mix(in srgb, var(--md-row-selection) 35%, transparent);\r\n pointer-events: none; /* let drag events fall through to the parent drop zone */\n}\n.cdz-line[data-v-4336edcf] {\r\n flex: 1;\r\n height: 2px;\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n color-mix(in srgb, var(--md-row-selection) 60%, transparent),\r\n color-mix(in srgb, var(--md-row-selection) 80%, transparent),\r\n color-mix(in srgb, var(--md-row-selection) 60%, transparent),\r\n transparent\r\n );\r\n border-radius: 2px;\r\n animation: line-expand-4336edcf 0.2s ease forwards;\r\n transform-origin: center;\n}\n@keyframes line-expand-4336edcf {\nfrom {\r\n transform: scaleX(0);\r\n opacity: 0;\n}\nto {\r\n transform: scaleX(1);\r\n opacity: 1;\n}\n}\n.cdz-pill[data-v-4336edcf] {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: var(--md-row-selection-fg);\r\n letter-spacing: 0.01em;\r\n white-space: nowrap;\r\n padding: 5px 14px;\r\n background: color-mix(in srgb, var(--md-row-selection) 8%, transparent);\r\n border: 1.5px solid\r\n color-mix(in srgb, var(--md-row-selection) 35%, transparent);\r\n border-radius: 100px;\r\n box-shadow: 0 2px 8px\r\n color-mix(in srgb, var(--md-row-selection) 15%, transparent);\r\n animation: pill-pop-4336edcf 0.22s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n}\n@keyframes pill-pop-4336edcf {\nfrom {\r\n transform: scale(0.75);\r\n opacity: 0;\n}\nto {\r\n transform: scale(1);\r\n opacity: 1;\n}\n}\n.cdz-icon[data-v-4336edcf] {\r\n width: 13px;\r\n height: 13px;\r\n flex-shrink: 0;\n}\r\n\r\n/* ── Transition ─────────────────────────────────────────────── */\n.cdz-bar-enter-active[data-v-4336edcf] {\r\n animation: cdz-in-4336edcf 0.15s ease forwards;\n}\n.cdz-bar-leave-active[data-v-4336edcf] {\r\n transition: opacity 0.1s ease;\n}\n.cdz-bar-leave-to[data-v-4336edcf] {\r\n opacity: 0;\n}\n@keyframes cdz-in-4336edcf {\nfrom {\r\n opacity: 0;\r\n transform: scaleY(0.6);\n}\nto {\r\n opacity: 1;\r\n transform: scaleY(1);\n}\n}\r\n\n.drop-line-enter-active[data-v-64196026] {\r\n transition:\r\n opacity 80ms ease,\r\n transform 80ms ease;\n}\n.drop-line-leave-active[data-v-64196026] {\r\n transition:\r\n opacity 60ms ease,\r\n transform 60ms ease;\n}\n.drop-line-enter-from[data-v-64196026],\r\n.drop-line-leave-to[data-v-64196026] {\r\n opacity: 0;\r\n transform: scaleX(0.6);\r\n transform-origin: left center;\n}\r\n\n.slide-enter-active[data-v-f59051f0],\r\n.slide-leave-active[data-v-f59051f0] {\r\n transition: all 0.2s ease;\r\n max-height: 500px;\r\n overflow: hidden;\n}\n.slide-enter-from[data-v-f59051f0],\r\n.slide-leave-to[data-v-f59051f0] {\r\n opacity: 0;\r\n max-height: 0;\r\n transform: translateY(-10px);\n}\r\n\r\n/* ============================================================\r\n md-dropdown – suggestion list\r\n ============================================================ */\n.md-dropdown[data-v-594adf85] {\r\n position: absolute;\r\n top: 100%;\r\n left: 0;\r\n right: 0;\r\n margin-top: 4px;\r\n background: var(--md-surface);\r\n border: 1px solid var(--md-border);\r\n border-radius: 0.375rem;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\r\n z-index: 10;\r\n max-height: 12rem;\r\n overflow-y: auto;\n}\n.md-dropdown-item[data-v-594adf85] {\r\n padding: 0.5rem 0.75rem;\r\n cursor: pointer;\r\n color: var(--md-text);\r\n transition: background 0.1s;\n}\n.md-dropdown-item[data-v-594adf85]:hover {\r\n background: var(--md-surface-hover);\n}\n.md-dropdown-item--active[data-v-594adf85] {\r\n background: var(--md-primary);\r\n color: var(--md-on-primary);\n}\r\n\r\n/* ============================================================\r\n md-tag – selected tag pills\r\n ============================================================ */\n.md-tag[data-v-594adf85] {\r\n display: inline-flex;\r\n align-items: center;\r\n padding: 0.125rem 0.75rem;\r\n border-radius: 9999px;\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n background: var(--md-primary);\r\n color: var(--md-on-primary);\r\n line-height: 1.5;\n}\n.md-tag-remove[data-v-594adf85] {\r\n margin-left: 0.5rem;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1rem;\r\n height: 1rem;\r\n border: none;\r\n background: transparent;\r\n color: color-mix(in srgb, var(--md-on-primary) 80%, transparent);\r\n cursor: pointer;\r\n border-radius: 9999px;\r\n transition:\r\n background 0.15s,\r\n color 0.15s;\r\n padding: 0;\n}\n.md-tag-remove[data-v-594adf85]:hover {\r\n background: color-mix(in srgb, var(--md-on-primary) 20%, transparent);\r\n color: var(--md-on-primary);\n}\n.md-tag-remove svg[data-v-594adf85] {\r\n width: 100%;\r\n height: 100%;\n}\r\n\r\n/* ============================================================\r\n Scrollbar styling for dropdown (optional, keeps it clean)\r\n ============================================================ */\n.md-dropdown[data-v-594adf85]::-webkit-scrollbar {\r\n width: 4px;\n}\n.md-dropdown[data-v-594adf85]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.md-dropdown[data-v-594adf85]::-webkit-scrollbar-thumb {\r\n background: var(--md-border);\r\n border-radius: 8px;\n}\n.md-dropdown[data-v-594adf85]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.overflow-x-auto[data-v-c0831ad7] {\r\n max-width: 100%;\r\n -webkit-overflow-scrolling: touch;\n}\n.overflow-x-auto[data-v-c0831ad7]::-webkit-scrollbar {\r\n height: 6px;\n}\n.overflow-x-auto[data-v-c0831ad7]::-webkit-scrollbar-track {\r\n background: var(--md-surface-muted);\r\n border-radius: 4px;\n}\n.overflow-x-auto[data-v-c0831ad7]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 4px;\n}\n.overflow-x-auto[data-v-c0831ad7]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.overflow-x-auto[data-v-9a9be6d5] {\r\n max-width: 100%;\r\n -webkit-overflow-scrolling: touch;\n}\n.overflow-x-auto[data-v-9a9be6d5]::-webkit-scrollbar {\r\n height: 6px;\n}\n.overflow-x-auto[data-v-9a9be6d5]::-webkit-scrollbar-track {\r\n background: var(--md-surface-muted);\r\n border-radius: 4px;\n}\n.overflow-x-auto[data-v-9a9be6d5]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 4px;\n}\n.overflow-x-auto[data-v-9a9be6d5]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.panel-slide-enter-active[data-v-2d4ec1d1],\r\n.panel-slide-leave-active[data-v-2d4ec1d1] {\r\n transition:\r\n opacity 0.18s ease,\r\n transform 0.18s ease;\n}\n.panel-slide-enter-from[data-v-2d4ec1d1],\r\n.panel-slide-leave-to[data-v-2d4ec1d1] {\r\n opacity: 0;\r\n transform: translateX(-10px);\n}\r\n\r\n/* Filter pill fade */\n.fade-enter-active[data-v-2d4ec1d1],\r\n.fade-leave-active[data-v-2d4ec1d1] {\r\n transition:\r\n opacity 0.15s ease,\r\n transform 0.15s ease;\n}\n.fade-enter-from[data-v-2d4ec1d1],\r\n.fade-leave-to[data-v-2d4ec1d1] {\r\n opacity: 0;\r\n transform: translateY(-4px);\n}\r\n\r\n/* Smooth row list reorder/filter transitions */\n.row-list-enter-active[data-v-2d4ec1d1],\r\n.row-list-leave-active[data-v-2d4ec1d1] {\r\n transition:\r\n opacity 0.2s ease,\r\n transform 0.2s ease;\n}\n.row-list-enter-from[data-v-2d4ec1d1],\r\n.row-list-leave-to[data-v-2d4ec1d1] {\r\n opacity: 0;\r\n transform: translateY(6px);\n}\n.row-list-move[data-v-2d4ec1d1] {\r\n transition: transform 0.2s ease;\n}\r\n\r\n/* Scrollbar — thin, unobtrusive */\n.overflow-y-auto[data-v-2d4ec1d1]::-webkit-scrollbar {\r\n width: 6px;\n}\n.overflow-y-auto[data-v-2d4ec1d1]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.overflow-y-auto[data-v-2d4ec1d1]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 9999px;\n}\n.overflow-y-auto[data-v-2d4ec1d1]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.panel-slide-enter-active[data-v-14ec1c1c],\r\n.panel-slide-leave-active[data-v-14ec1c1c] {\r\n transition:\r\n opacity 0.18s ease,\r\n transform 0.18s ease;\n}\n.panel-slide-enter-from[data-v-14ec1c1c],\r\n.panel-slide-leave-to[data-v-14ec1c1c] {\r\n opacity: 0;\r\n transform: translateX(-10px);\n}\n.row-list-enter-active[data-v-14ec1c1c],\r\n.row-list-leave-active[data-v-14ec1c1c] {\r\n transition:\r\n opacity 0.2s ease,\r\n transform 0.2s ease;\n}\n.row-list-enter-from[data-v-14ec1c1c],\r\n.row-list-leave-to[data-v-14ec1c1c] {\r\n opacity: 0;\r\n transform: translateY(6px);\n}\n.row-list-move[data-v-14ec1c1c] {\r\n transition: transform 0.2s ease;\n}\r\n\r\n/* Scrollbar — thin, unobtrusive. Matches SavedRowsPanel. */\n.overflow-y-auto[data-v-14ec1c1c]::-webkit-scrollbar {\r\n width: 6px;\n}\n.overflow-y-auto[data-v-14ec1c1c]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.overflow-y-auto[data-v-14ec1c1c]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 9999px;\n}\n.overflow-y-auto[data-v-14ec1c1c]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.panel-slide-enter-active[data-v-8e303508],\r\n.panel-slide-leave-active[data-v-8e303508] {\r\n transition:\r\n opacity 0.18s ease,\r\n transform 0.18s ease;\n}\n.panel-slide-enter-from[data-v-8e303508],\r\n.panel-slide-leave-to[data-v-8e303508] {\r\n opacity: 0;\r\n transform: translateX(-10px);\n}\n.row-list-enter-active[data-v-8e303508],\r\n.row-list-leave-active[data-v-8e303508] {\r\n transition:\r\n opacity 0.2s ease,\r\n transform 0.2s ease;\n}\n.row-list-enter-from[data-v-8e303508],\r\n.row-list-leave-to[data-v-8e303508] {\r\n opacity: 0;\r\n transform: translateY(6px);\n}\n.row-list-move[data-v-8e303508] {\r\n transition: transform 0.2s ease;\n}\r\n\r\n/* Scrollbar — thin, unobtrusive. Matches SavedTemplatesPanel. */\n.overflow-y-auto[data-v-8e303508]::-webkit-scrollbar {\r\n width: 6px;\n}\n.overflow-y-auto[data-v-8e303508]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.overflow-y-auto[data-v-8e303508]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 9999px;\n}\n.overflow-y-auto[data-v-8e303508]::-webkit-scrollbar-thumb:hover {\r\n background: var(--md-text-subtle);\n}\r\n\n.md-toast__region[data-v-554d8b1c] {\r\n position: fixed;\r\n top: 1rem;\r\n right: 1rem;\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n pointer-events: none;\n}\n.md-toast[data-v-554d8b1c] {\r\n pointer-events: auto;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 0.625rem;\r\n min-width: 280px;\r\n max-width: 380px;\r\n padding: 0.75rem 0.875rem;\r\n font-size: 13px;\r\n border: 1px solid;\r\n border-radius: 0.75rem;\r\n box-shadow: 0 8px 30px rgb(0 0 0 / 0.12);\n}\n.md-toast__icon[data-v-554d8b1c] {\r\n font-size: 15px;\r\n flex-shrink: 0;\r\n margin-top: 0.0625rem;\n}\n.md-toast__body[data-v-554d8b1c] {\r\n flex: 1;\r\n min-width: 0;\n}\n.md-toast__summary[data-v-554d8b1c] {\r\n font-weight: 500;\n}\n.md-toast__detail[data-v-554d8b1c] {\r\n font-size: 12px;\r\n opacity: 0.8;\r\n margin-top: 0.125rem;\n}\n.md-toast__close[data-v-554d8b1c] {\r\n flex-shrink: 0;\r\n opacity: 0.5;\r\n background: none;\r\n border: 0;\r\n cursor: pointer;\r\n color: inherit;\n}\n.md-toast__close[data-v-554d8b1c]:hover {\r\n opacity: 1;\n}\n.md-toast--success[data-v-554d8b1c] {\r\n background: var(--md-success-bg);\r\n border-color: var(--md-success-border);\r\n color: var(--md-success-fg);\n}\n.md-toast--info[data-v-554d8b1c] {\r\n background: var(--md-info-bg);\r\n border-color: var(--md-info-border);\r\n color: var(--md-info-fg);\n}\n.md-toast--warn[data-v-554d8b1c] {\r\n background: var(--md-surface);\r\n border-color: var(--md-warning-border);\r\n color: var(--md-warning-fg);\n}\n.md-toast--error[data-v-554d8b1c] {\r\n background: var(--md-danger-bg);\r\n border-color: var(--md-danger-border);\r\n color: var(--md-danger-fg);\n}\n.md-toast-enter-active[data-v-554d8b1c],\r\n.md-toast-leave-active[data-v-554d8b1c] {\r\n transition: all 0.2s ease;\n}\n.md-toast-enter-from[data-v-554d8b1c],\r\n.md-toast-leave-to[data-v-554d8b1c] {\r\n opacity: 0;\r\n transform: translateX(20px);\n}\r\n\n.md-confirm__body[data-v-50e7ddf7] {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 0.75rem;\n}\n.md-confirm__icon[data-v-50e7ddf7] {\r\n font-size: 22px;\r\n color: var(--md-warning);\r\n flex-shrink: 0;\r\n margin-top: 0.125rem;\n}\n.md-confirm__message[data-v-50e7ddf7] {\r\n margin: 0;\r\n font-size: 14px;\r\n line-height: 1.5;\r\n color: var(--md-text);\n}\r\n\r\n/* ── Orb ──────────────────────────────────────────────────────────────────── */\n.health-orb[data-v-c8efa0e7] {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n border: none;\r\n background: transparent;\r\n cursor: pointer;\r\n padding: 0;\r\n outline: none;\r\n flex-shrink: 0;\n}\n.health-orb:focus-visible .orb-core[data-v-c8efa0e7] {\r\n box-shadow: 0 0 0 3px rgba(66, 56, 158, 0.4);\n}\r\n\r\n/* Pulse rings */\n.orb-ring[data-v-c8efa0e7] {\r\n position: absolute;\r\n border-radius: 50%;\r\n animation: orb-pulse-c8efa0e7 2.4s ease-out infinite;\n}\n.orb-ring--outer[data-v-c8efa0e7] {\r\n width: 22px;\r\n height: 22px;\r\n animation-delay: 0s;\n}\n.orb-ring--inner[data-v-c8efa0e7] {\r\n width: 16px;\r\n height: 16px;\r\n animation-delay: 0.6s;\n}\r\n\r\n/* Core */\n.orb-core[data-v-c8efa0e7] {\r\n position: relative;\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n transition:\r\n transform 0.15s ease,\r\n box-shadow 0.15s ease;\r\n z-index: 1;\n}\n.health-orb:hover .orb-core[data-v-c8efa0e7],\r\n.health-orb--active .orb-core[data-v-c8efa0e7] {\r\n transform: scale(1.15);\n}\r\n\r\n/* ── Status colours with brand accent ───────────────────────────────────────── */\n.health-orb--good .orb-ring[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.25);\n}\n.health-orb--good .orb-core[data-v-c8efa0e7] {\r\n background: #22c55e;\r\n box-shadow:\r\n 0 0 0 2px rgba(34, 197, 94, 0.2),\r\n 0 0 8px rgba(34, 197, 94, 0.4);\n}\n.health-orb--warn .orb-ring[data-v-c8efa0e7] {\r\n background: rgba(245, 158, 11, 0.28);\n}\n.health-orb--warn .orb-core[data-v-c8efa0e7] {\r\n background: #f59e0b;\r\n box-shadow:\r\n 0 0 0 2px rgba(245, 158, 11, 0.2),\r\n 0 0 8px rgba(245, 158, 11, 0.4);\n}\n.health-orb--bad .orb-ring[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.28);\n}\n.health-orb--bad .orb-core[data-v-c8efa0e7] {\r\n background: #ef4444;\r\n box-shadow:\r\n 0 0 0 2px rgba(239, 68, 68, 0.2),\r\n 0 0 8px rgba(239, 68, 68, 0.4);\n}\n@keyframes orb-pulse-c8efa0e7 {\n0% {\r\n transform: scale(0.6);\r\n opacity: 0.7;\n}\n60% {\r\n transform: scale(1.6);\r\n opacity: 0;\n}\n100% {\r\n transform: scale(1.6);\r\n opacity: 0;\n}\n}\r\n\r\n/* ── Panel ────────────────────────────────────────────────────────────────── */\n.health-panel[data-v-c8efa0e7] {\r\n position: absolute;\r\n top: calc(100% + 10px);\r\n left: 50%;\r\n transform: translateX(-50%);\r\n width: 300px;\r\n background: #18181b;\r\n border: 1px solid rgba(255, 255, 255, 0.08);\r\n border-radius: 14px;\r\n padding: 12px;\r\n box-shadow:\r\n 0 20px 60px rgba(0, 0, 0, 0.5),\r\n 0 4px 12px rgba(0, 0, 0, 0.3);\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n /* Smooth horizontal expansion */\r\n transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.health-panel--expanded[data-v-c8efa0e7] {\r\n width: 400px;\n}\r\n\r\n/* When expanded, stat grid uses 3 cols instead of 2 */\n.health-panel--expanded .detail-stats[data-v-c8efa0e7] {\r\n grid-template-columns: repeat(3, 1fr);\n}\r\n\r\n/* When expanded, accessibility list gets more vertical room */\n.health-panel--expanded .a11y-list[data-v-c8efa0e7] {\r\n max-height: 320px;\n}\r\n\r\n/* When expanded, format rows go side-by-side */\n.health-panel--expanded .format-note[data-v-c8efa0e7] {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: 6px;\n}\n.health-panel--expanded .format-row[data-v-c8efa0e7] {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n gap: 4px;\n}\r\n\r\n/* ── Panel header with brand color ─────────────────────────────────────────── */\n.panel-header[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0 2px 4px;\r\n border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n}\n.panel-header-right[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\n}\r\n\r\n/* Expand toggle button */\n.panel-expand-btn[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 22px;\r\n height: 22px;\r\n border-radius: 6px;\r\n border: 1px solid rgba(255, 255, 255, 0.08);\r\n background: rgba(255, 255, 255, 0.04);\r\n color: rgba(255, 255, 255, 0.35);\r\n cursor: pointer;\r\n transition:\r\n background 0.15s ease,\r\n color 0.15s ease,\r\n border-color 0.15s ease;\r\n flex-shrink: 0;\r\n padding: 0;\n}\n.panel-expand-btn[data-v-c8efa0e7]:hover {\r\n background: rgba(66, 56, 158, 0.18);\r\n border-color: rgba(66, 56, 158, 0.4);\r\n color: #a5b4fc;\n}\n.panel-expand-btn[data-v-c8efa0e7]:focus-visible {\r\n outline: 2px solid rgba(66, 56, 158, 0.5);\r\n outline-offset: 1px;\n}\n.panel-expand-btn--active[data-v-c8efa0e7] {\r\n background: rgba(66, 56, 158, 0.2);\r\n border-color: rgba(66, 56, 158, 0.45);\r\n color: #a5b4fc;\n}\n.panel-title[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n font-weight: 600;\r\n letter-spacing: 0.06em;\r\n text-transform: uppercase;\r\n color: #a5b4fc;\n}\n.panel-status-badge[data-v-c8efa0e7] {\r\n font-size: 10px;\r\n font-weight: 600;\r\n padding: 2px 8px;\r\n border-radius: 99px;\n}\n.status-badge--good[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.15);\r\n color: #4ade80;\n}\n.status-badge--warn[data-v-c8efa0e7] {\r\n background: rgba(245, 158, 11, 0.15);\r\n color: #fbbf24;\n}\n.status-badge--bad[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.15);\r\n color: #f87171;\n}\r\n\r\n/* ── Metric cards ─────────────────────────────────────────────────────────── */\n.metric-card[data-v-c8efa0e7] {\r\n border-radius: 10px;\r\n border: 1px solid rgba(255, 255, 255, 0.06);\r\n background: rgba(255, 255, 255, 0.04);\r\n cursor: pointer;\r\n transition:\r\n background 0.15s ease,\r\n border-color 0.15s ease;\r\n overflow: hidden;\r\n user-select: none;\n}\n.metric-card[data-v-c8efa0e7]:hover {\r\n background: rgba(66, 56, 158, 0.1);\r\n border-color: rgba(66, 56, 158, 0.3);\n}\n.metric-card[data-v-c8efa0e7]:focus-visible {\r\n outline: 2px solid rgba(66, 56, 158, 0.5);\r\n outline-offset: 2px;\n}\n.metric-card--good[data-v-c8efa0e7] {\r\n border-color: rgba(34, 197, 94, 0.15);\n}\n.metric-card--warn[data-v-c8efa0e7] {\r\n border-color: rgba(245, 158, 11, 0.15);\n}\n.metric-card--bad[data-v-c8efa0e7] {\r\n border-color: rgba(239, 68, 68, 0.2);\n}\n.metric-card--good.metric-card--expanded[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.05);\n}\n.metric-card--warn.metric-card--expanded[data-v-c8efa0e7] {\r\n background: rgba(245, 158, 11, 0.05);\n}\n.metric-card--bad.metric-card--expanded[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.06);\n}\r\n\r\n/* ── Summary row ──────────────────────────────────────────────────────────── */\n.metric-summary[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 9px 10px;\r\n gap: 8px;\n}\n.metric-left[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n gap: 7px;\r\n min-width: 0;\n}\n.metric-icon[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n opacity: 0.8;\r\n flex-shrink: 0;\n}\n.metric-label[data-v-c8efa0e7] {\r\n font-size: 11.5px;\r\n font-weight: 500;\r\n color: rgba(255, 255, 255, 0.7);\r\n white-space: nowrap;\n}\n.metric-right[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n flex-shrink: 0;\n}\r\n\r\n/* Mini bar */\n.mini-bar[data-v-c8efa0e7] {\r\n width: 36px;\r\n height: 4px;\r\n border-radius: 99px;\r\n background: rgba(255, 255, 255, 0.1);\r\n overflow: hidden;\n}\n.mini-bar-fill[data-v-c8efa0e7] {\r\n height: 100%;\r\n border-radius: 99px;\r\n transition: width 0.5s ease;\n}\n.mini-bar-fill--good[data-v-c8efa0e7] {\r\n background: #22c55e;\n}\n.mini-bar-fill--warn[data-v-c8efa0e7] {\r\n background: #f59e0b;\n}\n.mini-bar-fill--bad[data-v-c8efa0e7] {\r\n background: #ef4444;\n}\r\n\r\n/* Status dot */\n.status-dot[data-v-c8efa0e7] {\r\n width: 6px;\r\n height: 6px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\n}\n.status-dot--good[data-v-c8efa0e7] {\r\n background: #22c55e;\n}\n.status-dot--warn[data-v-c8efa0e7] {\r\n background: #f59e0b;\n}\n.status-dot--bad[data-v-c8efa0e7] {\r\n background: #ef4444;\n}\r\n\r\n/* Pulsing dot for bad status */\n.pulse-dot[data-v-c8efa0e7] {\r\n position: relative;\r\n width: 6px;\r\n height: 6px;\r\n flex-shrink: 0;\n}\n.pulse-dot[data-v-c8efa0e7]::before,\r\n.pulse-dot[data-v-c8efa0e7]::after {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n border-radius: 50%;\n}\n.pulse-dot--bad[data-v-c8efa0e7]::before {\r\n background: #ef4444;\r\n z-index: 1;\n}\n.pulse-dot--bad[data-v-c8efa0e7]::after {\r\n background: #ef4444;\r\n animation: dot-ping-c8efa0e7 1.5s ease-out infinite;\n}\n@keyframes dot-ping-c8efa0e7 {\n0% {\r\n transform: scale(1);\r\n opacity: 0.75;\n}\n100% {\r\n transform: scale(2.5);\r\n opacity: 0;\n}\n}\n.metric-value[data-v-c8efa0e7] {\r\n font-size: 11.5px;\r\n font-weight: 600;\r\n font-variant-numeric: tabular-nums;\n}\n.metric-value--good[data-v-c8efa0e7] {\r\n color: #4ade80;\n}\n.metric-value--warn[data-v-c8efa0e7] {\r\n color: #fbbf24;\n}\n.metric-value--bad[data-v-c8efa0e7] {\r\n color: #f87171;\n}\r\n\r\n/* Chevron */\n.chevron[data-v-c8efa0e7] {\r\n color: rgba(255, 255, 255, 0.3);\r\n transition:\r\n transform 0.2s ease,\r\n color 0.15s ease;\r\n flex-shrink: 0;\n}\n.chevron--open[data-v-c8efa0e7] {\r\n transform: rotate(180deg);\r\n color: rgba(255, 255, 255, 0.6);\n}\n.metric-card:hover .chevron[data-v-c8efa0e7] {\r\n color: rgba(255, 255, 255, 0.5);\n}\r\n\r\n/* ── Expanded detail ──────────────────────────────────────────────────────── */\n.metric-detail[data-v-c8efa0e7] {\r\n padding: 0 10px 10px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n}\n.detail-tip[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n line-height: 1.55;\r\n color: rgba(255, 255, 255, 0.55);\r\n margin: 6px 0 0;\n}\r\n\r\n/* Stats grid */\n.detail-stats[data-v-c8efa0e7] {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 4px 12px;\n}\n.stat-item[data-v-c8efa0e7] {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: baseline;\r\n gap: 6px;\n}\n.stat-label[data-v-c8efa0e7] {\r\n font-size: 10.5px;\r\n color: rgba(255, 255, 255, 0.35);\r\n white-space: nowrap;\n}\n.stat-value[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: rgba(255, 255, 255, 0.75);\r\n font-variant-numeric: tabular-nums;\n}\r\n\r\n/* Thresholds */\n.detail-thresholds[data-v-c8efa0e7] {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 4px;\r\n padding-top: 4px;\r\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n}\n.threshold[data-v-c8efa0e7] {\r\n font-size: 10px;\r\n font-weight: 500;\r\n padding: 2px 7px;\r\n border-radius: 99px;\n}\n.threshold--good[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.12);\r\n color: #4ade80;\n}\n.threshold--warn[data-v-c8efa0e7] {\r\n background: rgba(245, 158, 11, 0.12);\r\n color: #fbbf24;\n}\n.threshold--bad[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.12);\r\n color: #f87171;\n}\r\n\r\n/* ── Format note (KB card) ────────────────────────────────────────────────── */\n.format-note[data-v-c8efa0e7] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n background: rgba(0, 0, 0, 0.2);\r\n border-radius: 8px;\r\n padding: 8px;\n}\n.format-row[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\n}\n.format-badge[data-v-c8efa0e7] {\r\n font-size: 9.5px;\r\n font-weight: 700;\r\n letter-spacing: 0.05em;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n flex-shrink: 0;\r\n margin-top: 1px;\r\n background: rgba(66, 56, 158, 0.3);\r\n color: #a5b4fc;\n}\n.format-badge--muted[data-v-c8efa0e7] {\r\n background: rgba(255, 255, 255, 0.07);\r\n color: rgba(255, 255, 255, 0.35);\n}\n.format-info[data-v-c8efa0e7] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2px;\r\n min-width: 0;\n}\n.format-range[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: rgba(255, 255, 255, 0.8);\n}\n.format-range--muted[data-v-c8efa0e7] {\r\n color: rgba(255, 255, 255, 0.35);\r\n font-weight: 500;\n}\n.format-caveat[data-v-c8efa0e7] {\r\n font-size: 10px;\r\n line-height: 1.4;\r\n color: rgba(255, 255, 255, 0.35);\n}\r\n\r\n/* ── Accessibility card ───────────────────────────────────────────────────── */\n.a11y-detail[data-v-c8efa0e7] {\r\n cursor: default;\r\n padding: 8px 10px 10px;\r\n gap: 10px;\n}\r\n\r\n/* Tabs */\n.a11y-tabs[data-v-c8efa0e7] {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n gap: 4px;\r\n background: rgba(0, 0, 0, 0.25);\r\n padding: 3px;\r\n border-radius: 8px;\n}\n.a11y-tab[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 6px;\r\n padding: 6px 4px;\r\n background: transparent;\r\n border: none;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n font-family: inherit;\r\n font-size: 10.5px;\r\n font-weight: 600;\r\n letter-spacing: 0.02em;\r\n color: rgba(255, 255, 255, 0.45);\r\n transition:\r\n background 0.15s ease,\r\n color 0.15s ease;\n}\n.a11y-tab[data-v-c8efa0e7]:hover {\r\n color: rgba(255, 255, 255, 0.75);\r\n background: rgba(255, 255, 255, 0.04);\n}\n.a11y-tab[data-v-c8efa0e7]:focus-visible {\r\n outline: 2px solid rgba(66, 56, 158, 0.5);\r\n outline-offset: 1px;\n}\n.a11y-tab--active[data-v-c8efa0e7] {\r\n background: rgba(255, 255, 255, 0.07);\r\n color: rgba(255, 255, 255, 0.92);\n}\n.a11y-tab-label[data-v-c8efa0e7] {\r\n text-transform: uppercase;\n}\n.a11y-tab-count[data-v-c8efa0e7] {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 18px;\r\n height: 16px;\r\n padding: 0 5px;\r\n border-radius: 99px;\r\n font-size: 10px;\r\n font-weight: 700;\r\n font-variant-numeric: tabular-nums;\r\n line-height: 1;\n}\n.a11y-tab-count--failed[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.18);\r\n color: #f87171;\n}\n.a11y-tab-count--passed[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.18);\r\n color: #4ade80;\n}\n.a11y-tab-count--ignored[data-v-c8efa0e7] {\r\n background: rgba(255, 255, 255, 0.08);\r\n color: rgba(255, 255, 255, 0.5);\n}\r\n\r\n/* List */\n.a11y-list[data-v-c8efa0e7] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n max-height: 240px;\r\n overflow-y: auto;\r\n /* Custom thin scrollbar */\r\n scrollbar-width: thin;\r\n scrollbar-color: rgba(255, 255, 255, 0.12) transparent;\n}\n.a11y-list[data-v-c8efa0e7]::-webkit-scrollbar {\r\n width: 6px;\n}\n.a11y-list[data-v-c8efa0e7]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.a11y-list[data-v-c8efa0e7]::-webkit-scrollbar-thumb {\r\n background: rgba(255, 255, 255, 0.12);\r\n border-radius: 99px;\n}\n.a11y-empty[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n color: rgba(255, 255, 255, 0.4);\r\n text-align: center;\r\n padding: 12px 4px;\r\n margin: 0;\n}\n.a11y-item[data-v-c8efa0e7] {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n padding: 8px;\r\n border-radius: 8px;\r\n background: rgba(255, 255, 255, 0.03);\r\n border-left: 2px solid transparent;\n}\n.a11y-item--critical[data-v-c8efa0e7] {\r\n border-left-color: #ef4444;\n}\n.a11y-item--serious[data-v-c8efa0e7] {\r\n border-left-color: #f59e0b;\n}\n.a11y-item--passed[data-v-c8efa0e7] {\r\n border-left-color: rgba(34, 197, 94, 0.5);\n}\n.a11y-item--ignored[data-v-c8efa0e7] {\r\n border-left-color: rgba(255, 255, 255, 0.18);\r\n opacity: 0.75;\n}\n.a11y-item-header[data-v-c8efa0e7] {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\n}\n.a11y-severity[data-v-c8efa0e7] {\r\n display: inline-flex;\r\n align-items: center;\r\n font-size: 9px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n flex-shrink: 0;\n}\n.a11y-severity--critical[data-v-c8efa0e7] {\r\n background: rgba(239, 68, 68, 0.18);\r\n color: #f87171;\n}\n.a11y-severity--serious[data-v-c8efa0e7] {\r\n background: rgba(245, 158, 11, 0.18);\r\n color: #fbbf24;\n}\n.a11y-severity--passed[data-v-c8efa0e7] {\r\n background: rgba(34, 197, 94, 0.18);\r\n color: #4ade80;\n}\n.a11y-severity--ignored[data-v-c8efa0e7] {\r\n background: rgba(255, 255, 255, 0.07);\r\n color: rgba(255, 255, 255, 0.5);\n}\n.a11y-rule[data-v-c8efa0e7] {\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: rgba(255, 255, 255, 0.85);\r\n flex: 1;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\n}\n.a11y-action[data-v-c8efa0e7] {\r\n background: transparent;\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n border-radius: 4px;\r\n padding: 2px 7px;\r\n font-family: inherit;\r\n font-size: 9.5px;\r\n font-weight: 600;\r\n color: rgba(255, 255, 255, 0.5);\r\n cursor: pointer;\r\n transition:\r\n background 0.15s ease,\r\n color 0.15s ease,\r\n border-color 0.15s ease;\r\n flex-shrink: 0;\n}\n.a11y-action[data-v-c8efa0e7]:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n color: rgba(255, 255, 255, 0.85);\r\n border-color: rgba(255, 255, 255, 0.2);\n}\n.a11y-action[data-v-c8efa0e7]:focus-visible {\r\n outline: 2px solid rgba(66, 56, 158, 0.5);\r\n outline-offset: 1px;\n}\n.a11y-action--restore[data-v-c8efa0e7] {\r\n border-color: rgba(165, 180, 252, 0.25);\r\n color: #a5b4fc;\n}\n.a11y-action--restore[data-v-c8efa0e7]:hover {\r\n background: rgba(66, 56, 158, 0.15);\r\n border-color: rgba(165, 180, 252, 0.4);\r\n color: #c7d2fe;\n}\n.a11y-message[data-v-c8efa0e7] {\r\n font-size: 10.5px;\r\n line-height: 1.5;\r\n color: rgba(255, 255, 255, 0.65);\r\n margin: 0;\n}\n.a11y-info[data-v-c8efa0e7] {\r\n font-size: 10px;\r\n line-height: 1.5;\r\n color: rgba(255, 255, 255, 0.38);\r\n margin: 0;\r\n padding-top: 2px;\r\n border-top: 1px dashed rgba(255, 255, 255, 0.06);\n}\r\n\r\n/* ── Panel footer ─────────────────────────────────────────────────────────── */\n.panel-footer[data-v-c8efa0e7] {\r\n font-size: 10px;\r\n color: rgba(255, 255, 255, 0.22);\r\n text-align: center;\r\n padding-top: 4px;\r\n margin: 0;\n}\r\n\r\n/* ── Click-outside overlay ────────────────────────────────────────────────── */\n.click-outside[data-v-c8efa0e7] {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 9998;\n}\r\n\r\n/* ── Transitions ──────────────────────────────────────────────────────────── */\n.popover-enter-active[data-v-c8efa0e7] {\r\n transition:\r\n opacity 0.18s ease,\r\n transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n.popover-leave-active[data-v-c8efa0e7] {\r\n transition:\r\n opacity 0.12s ease,\r\n transform 0.12s ease;\n}\n.popover-enter-from[data-v-c8efa0e7] {\r\n opacity: 0;\r\n transform: translateX(-50%) translateY(-6px) scale(0.97);\n}\n.popover-leave-to[data-v-c8efa0e7] {\r\n opacity: 0;\r\n transform: translateX(-50%) translateY(-4px) scale(0.98);\n}\n.expand-enter-active[data-v-c8efa0e7] {\r\n transition:\r\n opacity 0.18s ease,\r\n max-height 0.22s ease;\r\n max-height: 300px;\r\n overflow: hidden;\n}\n.expand-leave-active[data-v-c8efa0e7] {\r\n transition:\r\n opacity 0.12s ease,\r\n max-height 0.18s ease;\r\n overflow: hidden;\n}\n.expand-enter-from[data-v-c8efa0e7] {\r\n opacity: 0;\r\n max-height: 0;\n}\n.expand-leave-to[data-v-c8efa0e7] {\r\n opacity: 0;\r\n max-height: 0;\n}\r\n\n.picker-overlay-enter-active[data-v-240ef53a],\r\n.picker-overlay-leave-active[data-v-240ef53a] {\r\n transition: opacity 0.2s ease;\n}\n.picker-overlay-enter-from[data-v-240ef53a],\r\n.picker-overlay-leave-to[data-v-240ef53a] {\r\n opacity: 0;\n}\n.picker-drawer-enter-active[data-v-240ef53a],\r\n.picker-drawer-leave-active[data-v-240ef53a] {\r\n transition: transform 0.28s cubic-bezier(0.32, 0.72, 0, 1);\n}\n.picker-drawer-enter-from[data-v-240ef53a],\r\n.picker-drawer-leave-to[data-v-240ef53a] {\r\n transform: translateX(100%);\n}\r\n\n.note-enter-active[data-v-0e66e679],\r\n.note-leave-active[data-v-0e66e679] {\r\n transition:\r\n opacity 0.2s ease,\r\n max-height 0.25s ease;\r\n max-height: 60px;\r\n overflow: hidden;\n}\n.note-enter-from[data-v-0e66e679],\r\n.note-leave-to[data-v-0e66e679] {\r\n opacity: 0;\r\n max-height: 0;\n}\r\n\n.md-msg[data-v-04df62fe] {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 0.5rem;\r\n padding: 0.625rem 0.75rem;\r\n font-size: 13px;\r\n border: 1px solid;\r\n border-radius: 0.5rem;\n}\n.md-msg__icon[data-v-04df62fe] {\r\n margin-top: 0.125rem;\r\n flex-shrink: 0;\r\n font-size: 14px;\n}\n.md-msg__body[data-v-04df62fe] {\r\n flex: 1;\r\n min-width: 0;\n}\n.md-msg__close[data-v-04df62fe] {\r\n opacity: 0.6;\r\n cursor: pointer;\r\n background: none;\r\n border: 0;\n}\n.md-msg__close[data-v-04df62fe]:hover {\r\n opacity: 1;\n}\n.md-msg--info[data-v-04df62fe] {\r\n background: var(--md-info-bg);\r\n border-color: var(--md-info-border);\r\n color: var(--md-info-fg);\n}\n.md-msg--success[data-v-04df62fe] {\r\n background: var(--md-success-bg);\r\n border-color: var(--md-success-border);\r\n color: var(--md-success-fg);\n}\n.md-msg--warn[data-v-04df62fe] {\r\n background: var(--md-surface) beb;\r\n border-color: var(--md-warning-border);\r\n color: var(--md-warning-fg);\n}\n.md-msg--error[data-v-04df62fe] {\r\n background: var(--md-danger-bg);\r\n border-color: var(--md-danger-border);\r\n color: var(--md-danger-fg);\n}\r\n\r\n/* Auto-save pill: fade + 4px vertical drift on enter/leave */\n.autosave-fade-enter-active[data-v-b67fcdb4],\r\n.autosave-fade-leave-active[data-v-b67fcdb4] {\r\n transition:\r\n opacity 0.2s ease,\r\n transform 0.2s ease;\n}\n.autosave-fade-enter-from[data-v-b67fcdb4] {\r\n opacity: 0;\r\n transform: translateY(4px);\n}\n.autosave-fade-leave-to[data-v-b67fcdb4] {\r\n opacity: 0;\r\n transform: translateY(-4px);\n}\r\n\n.md-assistant-fab[data-v-69b25928] {\r\n position: fixed;\r\n right: 1.25rem;\r\n bottom: 1.25rem;\r\n /* Above the panels (z-80) and the header (z-100), below dialogs (9998) —\r\n a modal dialog must still cover this. */\r\n z-index: 120;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 2.75rem;\r\n height: 2.75rem;\r\n border-radius: 9999px;\r\n border: 1px solid var(--md-border);\r\n background: var(--md-button-primary-bg, var(--md-primary));\r\n color: var(--md-button-primary-text, var(--md-surface));\r\n box-shadow: 0 2px 10px rgb(0 0 0 / 18%);\r\n cursor: pointer;\r\n transition:\r\n transform 0.15s ease,\r\n box-shadow 0.15s ease;\n}\n.md-assistant-fab[data-v-69b25928]:hover {\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 14px rgb(0 0 0 / 22%);\n}\n.md-assistant-fab[data-v-69b25928]:focus-visible {\r\n outline: 2px solid var(--md-primary);\r\n outline-offset: 2px;\n}\n.md-assistant-drawer[data-v-69b25928] {\r\n position: fixed;\r\n top: 4rem; /* clears the header */\r\n right: 0;\r\n bottom: 0;\r\n z-index: 120;\r\n width: 22rem;\r\n max-width: 100vw;\r\n display: flex;\r\n flex-direction: column;\r\n background: var(--md-surface);\r\n border-left: 1px solid var(--md-border);\r\n box-shadow: -8px 0 24px rgb(0 0 0 / 10%);\n}\n.md-assistant-head[data-v-69b25928] {\r\n flex-shrink: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0.75rem 0.875rem;\r\n border-bottom: 1px solid color-mix(in srgb, var(--md-border) 80%, transparent);\n}\n.md-assistant-title[data-v-69b25928] {\r\n font-size: 11px;\r\n font-weight: 600;\r\n letter-spacing: 0.08em;\r\n text-transform: uppercase;\r\n color: var(--md-text-subtle);\n}\n.md-assistant-close[data-v-69b25928] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.5rem;\r\n height: 1.5rem;\r\n border-radius: 0.375rem;\r\n color: var(--md-text-subtle);\r\n background: transparent;\r\n border: 0;\r\n cursor: pointer;\n}\n.md-assistant-close[data-v-69b25928]:hover {\r\n color: var(--md-text-muted);\r\n background: var(--md-surface-muted);\n}\r\n\r\n/* The only scroll container, matching the side panels' single-overflow rule. */\n.md-assistant-body[data-v-69b25928] {\r\n flex: 1 1 auto;\r\n overflow-y: auto;\r\n padding: 0.75rem;\n}\n.md-assistant-body[data-v-69b25928]::-webkit-scrollbar {\r\n width: 6px;\n}\n.md-assistant-body[data-v-69b25928]::-webkit-scrollbar-track {\r\n background: transparent;\n}\n.md-assistant-body[data-v-69b25928]::-webkit-scrollbar-thumb {\r\n background: var(--md-border-strong);\r\n border-radius: 9999px;\n}\n.assistant-slide-enter-active[data-v-69b25928],\r\n.assistant-slide-leave-active[data-v-69b25928] {\r\n transition:\r\n opacity 0.18s ease,\r\n transform 0.18s ease;\n}\n.assistant-slide-enter-from[data-v-69b25928],\r\n.assistant-slide-leave-to[data-v-69b25928] {\r\n opacity: 0;\r\n transform: translateX(12px);\n}\r\n";document.head.appendChild(s);}}catch(e){console.error("[maildeno-editor] style injection failed",e);}})();
|
|
2
|
-
import { a, c, g, b, d, e, i, m, p, r, f, h, s } from "./index-DhFg3uKs.js";
|
|
1
|
+
import { a as s, c as t, g as r, b as g, d, e as i, i as l, m as o, p as c, r as m, f as E, h as k, s as p } from "./index-Cud9IN-O.js";
|
|
3
2
|
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
s as EmailEditor,
|
|
4
|
+
t as createLocalStorageAdapter,
|
|
5
|
+
r as getAllBlocks,
|
|
6
|
+
g as getBlock,
|
|
8
7
|
d as getRegisteredCustomESPs,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
i as getRegisteredMergeTagIds,
|
|
9
|
+
l as isHandled,
|
|
10
|
+
o as markHandled,
|
|
11
|
+
c as palette,
|
|
12
|
+
m as registerBlock,
|
|
13
|
+
E as registerESPSyntax,
|
|
14
|
+
k as registerMergeTags,
|
|
15
|
+
p as setEditorTheme
|
|
17
16
|
};
|
package/dist/init.js
CHANGED
|
@@ -1,174 +1,148 @@
|
|
|
1
|
-
import { r as
|
|
2
|
-
import { e, g, f, i, j, p, k, l, m, s } from "./element-
|
|
3
|
-
let
|
|
4
|
-
function
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
document.head.appendChild(style);
|
|
1
|
+
import { r as g, c as u, b as f, h as v, _ as S, a as h, d as E } from "./element-DyFj9kgl.js";
|
|
2
|
+
import { e as A, g as C, f as J, i as M, j, p as I, k as R, l as x, m as N, s as P } from "./element-DyFj9kgl.js";
|
|
3
|
+
let c = !1;
|
|
4
|
+
function p() {
|
|
5
|
+
if (!(c || typeof document > "u")) {
|
|
6
|
+
c = !0;
|
|
7
|
+
for (const e of f()) {
|
|
8
|
+
if (!e) continue;
|
|
9
|
+
const l = document.createElement("style");
|
|
10
|
+
l.setAttribute("data-maildeno-light-dom", ""), l.textContent = e, document.head.appendChild(l);
|
|
11
|
+
}
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const mountEl = document.createElement("div");
|
|
21
|
-
mountEl.style.height = "100%";
|
|
22
|
-
container.appendChild(mountEl);
|
|
23
|
-
const app = createApp({
|
|
14
|
+
function y(e, l) {
|
|
15
|
+
p();
|
|
16
|
+
const a = g({ ...l }), i = /* @__PURE__ */ new Set(), d = h(null), n = document.createElement("div");
|
|
17
|
+
n.style.height = "100%", e.appendChild(n);
|
|
18
|
+
const r = u({
|
|
24
19
|
setup() {
|
|
25
|
-
return () =>
|
|
26
|
-
...
|
|
27
|
-
ref:
|
|
28
|
-
onSave: (
|
|
20
|
+
return () => v(S, {
|
|
21
|
+
...a,
|
|
22
|
+
ref: d,
|
|
23
|
+
onSave: (t) => i.forEach((s) => s(t))
|
|
29
24
|
});
|
|
30
25
|
}
|
|
31
26
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
props[key] = value;
|
|
27
|
+
return r.mount(n), {
|
|
28
|
+
element: n,
|
|
29
|
+
exposed: () => d.value ?? null,
|
|
30
|
+
setProp: (t, s) => {
|
|
31
|
+
a[t] = s;
|
|
38
32
|
},
|
|
39
|
-
addSaveHandler: (
|
|
40
|
-
removeSaveHandler: (
|
|
33
|
+
addSaveHandler: (t) => i.add(t),
|
|
34
|
+
removeSaveHandler: (t) => i.delete(t),
|
|
41
35
|
destroy: () => {
|
|
42
|
-
|
|
43
|
-
mountEl.remove();
|
|
36
|
+
r.unmount(), n.remove();
|
|
44
37
|
}
|
|
45
38
|
};
|
|
46
39
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
async function init(options) {
|
|
51
|
-
const container = typeof options.container === "string" ? document.querySelector(options.container) : options.container;
|
|
52
|
-
if (!container) {
|
|
40
|
+
async function H(e) {
|
|
41
|
+
const l = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
42
|
+
if (!l)
|
|
53
43
|
throw new Error(
|
|
54
|
-
`[maildeno-editor] init() couldn't find a container${typeof
|
|
44
|
+
`[maildeno-editor] init() couldn't find a container${typeof e.container == "string" ? ` matching "${e.container}"` : ""}.`
|
|
55
45
|
);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
assistant: options.assistant
|
|
46
|
+
if (e.shadowDom === !1) {
|
|
47
|
+
const n = y(l, {
|
|
48
|
+
templateId: e.templateId,
|
|
49
|
+
storageAdapter: e.storageAdapter,
|
|
50
|
+
theme: e.theme,
|
|
51
|
+
capabilities: e.capabilities,
|
|
52
|
+
onSendTestEmail: e.onSendTestEmail,
|
|
53
|
+
brandName: e.brandName,
|
|
54
|
+
versions: e.versions,
|
|
55
|
+
saveHandler: e.onSave,
|
|
56
|
+
assistant: e.assistant
|
|
68
57
|
});
|
|
69
|
-
await new Promise((
|
|
70
|
-
const
|
|
71
|
-
var
|
|
72
|
-
const
|
|
73
|
-
return typeof
|
|
58
|
+
await new Promise((t) => setTimeout(t, 0));
|
|
59
|
+
const r = (t, ...s) => {
|
|
60
|
+
var m;
|
|
61
|
+
const o = (m = n.exposed()) == null ? void 0 : m[t];
|
|
62
|
+
return typeof o == "function" ? o(...s) : null;
|
|
74
63
|
};
|
|
75
64
|
return {
|
|
76
|
-
element:
|
|
77
|
-
on: (
|
|
78
|
-
off: (
|
|
79
|
-
setTheme: (
|
|
80
|
-
getHtml: (
|
|
81
|
-
getMjml: (
|
|
82
|
-
getReactEmail: (
|
|
83
|
-
getJson: () =>
|
|
84
|
-
setJson: (
|
|
85
|
-
|
|
65
|
+
element: n.element,
|
|
66
|
+
on: (t, s) => n.addSaveHandler(s),
|
|
67
|
+
off: (t, s) => n.removeSaveHandler(s),
|
|
68
|
+
setTheme: (t) => n.setProp("theme", t),
|
|
69
|
+
getHtml: (t = "prune") => r("getHtml", t),
|
|
70
|
+
getMjml: (t = "prune") => r("getMjml", t),
|
|
71
|
+
getReactEmail: (t = "prune") => r("getReactEmail", t),
|
|
72
|
+
getJson: () => r("getJson"),
|
|
73
|
+
setJson: (t, s) => {
|
|
74
|
+
r("setJson", t, s);
|
|
86
75
|
},
|
|
87
|
-
getSelection: () =>
|
|
88
|
-
setSelection: (
|
|
76
|
+
getSelection: () => r("getSelection"),
|
|
77
|
+
setSelection: (t) => r("setSelection", t) ?? !1,
|
|
89
78
|
// Falls back to a no-op unsubscribe rather than null so callers can
|
|
90
79
|
// always call the result — a host storing it and invoking it during
|
|
91
80
|
// teardown shouldn't have to null-check a cleanup function.
|
|
92
|
-
onChange: (
|
|
81
|
+
onChange: (t) => r("onChange", t) ?? (() => {
|
|
93
82
|
}),
|
|
94
|
-
destroy: () =>
|
|
83
|
+
destroy: () => n.destroy()
|
|
95
84
|
};
|
|
96
85
|
}
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (options.assistant) el.assistant = options.assistant;
|
|
107
|
-
if (options.onSave) el.saveHandler = options.onSave;
|
|
108
|
-
container.appendChild(el);
|
|
109
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
110
|
-
const listenerWrappers = /* @__PURE__ */ new WeakMap();
|
|
111
|
-
const handle = {
|
|
112
|
-
element: el,
|
|
113
|
-
on(event, handler) {
|
|
114
|
-
const wrapped = ((e2) => handler(
|
|
115
|
-
Array.isArray(e2.detail) ? e2.detail[0] : e2.detail
|
|
86
|
+
E();
|
|
87
|
+
const a = document.createElement("maildeno-editor");
|
|
88
|
+
e.templateId !== void 0 && (a.templateId = e.templateId), e.storageAdapter && (a.storageAdapter = e.storageAdapter), e.theme && (a.theme = e.theme), e.capabilities && (a.capabilities = e.capabilities), e.onSendTestEmail && (a.onSendTestEmail = e.onSendTestEmail), e.brandName !== void 0 && (a.brandName = e.brandName), e.versions !== void 0 && (a.versions = e.versions), e.assistant && (a.assistant = e.assistant), e.onSave && (a.saveHandler = e.onSave), l.appendChild(a), await new Promise((n) => setTimeout(n, 0));
|
|
89
|
+
const i = /* @__PURE__ */ new WeakMap();
|
|
90
|
+
return {
|
|
91
|
+
element: a,
|
|
92
|
+
on(n, r) {
|
|
93
|
+
const t = ((s) => r(
|
|
94
|
+
Array.isArray(s.detail) ? s.detail[0] : s.detail
|
|
116
95
|
));
|
|
117
|
-
|
|
118
|
-
el.addEventListener(toDomEventName(event), wrapped);
|
|
96
|
+
i.set(r, t), a.addEventListener(n, t);
|
|
119
97
|
},
|
|
120
|
-
off(
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
el.removeEventListener(toDomEventName(event), wrapped);
|
|
124
|
-
listenerWrappers.delete(handler);
|
|
125
|
-
}
|
|
98
|
+
off(n, r) {
|
|
99
|
+
const t = i.get(r);
|
|
100
|
+
t && (a.removeEventListener(n, t), i.delete(r));
|
|
126
101
|
},
|
|
127
|
-
setTheme(
|
|
128
|
-
|
|
102
|
+
setTheme(n) {
|
|
103
|
+
a.theme = n;
|
|
129
104
|
},
|
|
130
|
-
getHtml(
|
|
131
|
-
return
|
|
105
|
+
getHtml(n = "prune") {
|
|
106
|
+
return a.getHtml ? a.getHtml(n) : null;
|
|
132
107
|
},
|
|
133
|
-
getMjml(
|
|
134
|
-
return
|
|
108
|
+
getMjml(n = "prune") {
|
|
109
|
+
return a.getMjml ? a.getMjml(n) : null;
|
|
135
110
|
},
|
|
136
|
-
getReactEmail(
|
|
137
|
-
return
|
|
111
|
+
getReactEmail(n = "prune") {
|
|
112
|
+
return a.getReactEmail ? a.getReactEmail(n) : null;
|
|
138
113
|
},
|
|
139
114
|
getJson() {
|
|
140
|
-
return
|
|
115
|
+
return a.getJson ? a.getJson() : null;
|
|
141
116
|
},
|
|
142
|
-
setJson(
|
|
143
|
-
var
|
|
144
|
-
(
|
|
117
|
+
setJson(n, r) {
|
|
118
|
+
var t;
|
|
119
|
+
(t = a.setJson) == null || t.call(a, n, r);
|
|
145
120
|
},
|
|
146
121
|
getSelection() {
|
|
147
|
-
return
|
|
122
|
+
return a.getSelection ? a.getSelection() : null;
|
|
148
123
|
},
|
|
149
|
-
setSelection(
|
|
150
|
-
return
|
|
124
|
+
setSelection(n) {
|
|
125
|
+
return a.setSelection ? a.setSelection(n) : !1;
|
|
151
126
|
},
|
|
152
|
-
onChange(
|
|
153
|
-
return
|
|
127
|
+
onChange(n) {
|
|
128
|
+
return a.onChange ? a.onChange(n) : () => {
|
|
154
129
|
};
|
|
155
130
|
},
|
|
156
131
|
destroy() {
|
|
157
|
-
|
|
132
|
+
a.remove();
|
|
158
133
|
}
|
|
159
134
|
};
|
|
160
|
-
return handle;
|
|
161
135
|
}
|
|
162
136
|
export {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
137
|
+
A as createLocalStorageAdapter,
|
|
138
|
+
C as getAllBlocks,
|
|
139
|
+
J as getBlock,
|
|
140
|
+
M as getRegisteredCustomESPs,
|
|
167
141
|
j as getRegisteredMergeTagIds,
|
|
168
|
-
init,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
142
|
+
H as init,
|
|
143
|
+
I as palette,
|
|
144
|
+
R as registerBlock,
|
|
145
|
+
x as registerESPSyntax,
|
|
146
|
+
N as registerMergeTags,
|
|
147
|
+
P as setEditorTheme
|
|
174
148
|
};
|