@parathantl/react-email-editor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +267 -0
- package/dist/index.cjs +7354 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +1616 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +515 -0
- package/dist/index.d.ts +515 -0
- package/dist/index.js +7290 -0
- package/dist/index.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/styles/toolbar.module.css","../src/styles/editor.module.css","../src/styles/sidebar.module.css","../src/styles/blocks.module.css","../src/styles/tiptap.module.css","../src/styles/canvas.module.css","../src/styles/properties.module.css","../src/styles/variables.css"],"sourcesContent":[".toolbar {\n display: flex;\n align-items: center;\n height: var(--ee-toolbar-height);\n padding: 0 var(--ee-space-lg);\n background: var(--ee-bg-toolbar);\n border-bottom: 1px solid var(--ee-border-color);\n gap: var(--ee-space-sm);\n flex-shrink: 0;\n}\n\n.toolbarGroup {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.toolbarSeparator {\n width: 1px;\n height: 24px;\n background: var(--ee-border-color);\n margin: 0 var(--ee-space-sm);\n}\n\n.toolbarSpacer {\n flex: 1;\n}\n\n.toolbarBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ee-space-xs);\n padding: 6px 10px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n font-weight: var(--ee-font-weight-medium);\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n white-space: nowrap;\n}\n\n.toolbarBtn:hover {\n background: var(--ee-bg-hover);\n color: var(--ee-text-primary);\n border-color: var(--ee-border-color);\n}\n\n.toolbarBtn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.toolbarBtnActive {\n background: var(--ee-bg-selected);\n color: var(--ee-color-primary);\n border-color: var(--ee-color-primary);\n}\n\n.toolbarBtnPrimary {\n background: var(--ee-color-primary);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary);\n}\n\n.toolbarBtnPrimary:hover {\n background: var(--ee-color-primary-hover);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary-hover);\n}\n\n/* Tab bar within toolbar */\n.tabBar {\n display: flex;\n gap: 2px;\n background: var(--ee-bg-app);\n border-radius: var(--ee-border-radius);\n padding: 2px;\n}\n\n.tabBtn {\n padding: 4px 12px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n font-weight: var(--ee-font-weight-medium);\n background: transparent;\n border: none;\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n}\n\n.tabBtn:hover {\n color: var(--ee-text-primary);\n}\n\n.tabBtnActive {\n background: var(--ee-bg-panel);\n color: var(--ee-text-primary);\n box-shadow: var(--ee-shadow-sm);\n}\n\n/* Panel toggle buttons (visible only on narrow screens via editor.module.css) */\n.panelToggleBtn {\n composes: toolbarBtn;\n font-size: var(--ee-font-size-lg);\n padding: 4px 8px;\n line-height: 1;\n}\n\n.panelToggleBtnActive {\n background: var(--ee-bg-selected);\n color: var(--ee-color-primary);\n border-color: var(--ee-color-primary);\n}\n\n/* Rich text toolbar */\n.richTextToolbar {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: var(--ee-space-xs) var(--ee-space-sm);\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n box-shadow: var(--ee-shadow-sm);\n flex-wrap: wrap;\n}\n\n.richTextBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n font-size: var(--ee-font-size-sm);\n background: transparent;\n border: none;\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n}\n\n.richTextBtn:hover {\n background: var(--ee-bg-hover);\n color: var(--ee-text-primary);\n}\n\n.richTextBtnActive {\n background: var(--ee-bg-selected);\n color: var(--ee-color-primary);\n}\n\n.richTextSeparator {\n width: 1px;\n height: 20px;\n background: var(--ee-border-color);\n margin: 0 2px;\n}\n\n/* Rich text select controls */\n.richTextSelect {\n height: 28px;\n padding: 0 4px;\n font-size: var(--ee-font-size-xs);\n font-family: var(--ee-font-family);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-input);\n color: var(--ee-text-primary);\n outline: none;\n cursor: pointer;\n max-width: 110px;\n}\n\n.richTextSelect:focus {\n border-color: var(--ee-border-focus);\n}\n\n.richTextSelectSmall {\n composes: richTextSelect;\n max-width: 64px;\n}\n\n/* Rich text inline color picker */\n.richTextColorWrapper {\n position: relative;\n}\n\n.richTextColorLabel {\n font-weight: var(--ee-font-weight-semibold);\n font-size: var(--ee-font-size-sm);\n}\n\n.richTextColorIndicator {\n display: block;\n width: 16px;\n height: 3px;\n border-radius: 1px;\n margin-top: 1px;\n}\n\n.richTextColorDropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n padding: var(--ee-space-sm);\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n box-shadow: var(--ee-shadow-md);\n z-index: var(--ee-z-dropdown);\n min-width: 176px;\n}\n\n.richTextColorGrid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 4px;\n margin-bottom: var(--ee-space-sm);\n}\n\n.richTextColorSwatch {\n width: 24px;\n height: 24px;\n border-radius: 3px;\n border: 2px solid transparent;\n cursor: pointer;\n padding: 0;\n transition: all var(--ee-transition-fast);\n}\n\n.richTextColorSwatch:hover {\n transform: scale(1.2);\n border-color: var(--ee-border-color-strong);\n}\n\n.richTextColorActions {\n display: flex;\n align-items: center;\n gap: var(--ee-space-sm);\n border-top: 1px solid var(--ee-border-color);\n padding-top: var(--ee-space-sm);\n}\n\n.richTextColorInput {\n width: 28px;\n height: 28px;\n padding: 0;\n border: 1px solid var(--ee-border-color);\n border-radius: 3px;\n cursor: pointer;\n background: none;\n}\n\n.richTextColorClearBtn {\n font-size: var(--ee-font-size-xs);\n font-family: var(--ee-font-family);\n color: var(--ee-text-secondary);\n background: transparent;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n padding: 3px 8px;\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.richTextColorClearBtn:hover {\n background: var(--ee-bg-hover);\n color: var(--ee-text-primary);\n}\n\n/* Link editor popover */\n.richTextLinkDropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n padding: var(--ee-space-sm);\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n box-shadow: var(--ee-shadow-md);\n z-index: var(--ee-z-dropdown);\n min-width: 260px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.richTextLinkLabel {\n font-size: var(--ee-font-size-xs);\n font-weight: var(--ee-font-weight-semibold);\n color: var(--ee-text-secondary);\n}\n\n.richTextLinkInput {\n width: 100%;\n padding: 6px 8px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-input);\n color: var(--ee-text-primary);\n outline: none;\n box-sizing: border-box;\n}\n\n.richTextLinkInput:focus {\n border-color: var(--ee-border-focus);\n}\n\n.richTextLinkActions {\n display: flex;\n gap: 6px;\n}\n\n.richTextLinkApply {\n flex: 1;\n padding: 4px 10px;\n font-size: var(--ee-font-size-xs);\n font-family: var(--ee-font-family);\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-text-inverse);\n background: var(--ee-color-primary);\n border: none;\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n transition: background var(--ee-transition-fast);\n}\n\n.richTextLinkApply:hover {\n background: var(--ee-color-primary-hover);\n}\n\n.richTextLinkRemove {\n padding: 4px 10px;\n font-size: var(--ee-font-size-xs);\n font-family: var(--ee-font-family);\n color: var(--ee-color-danger, #ef4444);\n background: transparent;\n border: 1px solid var(--ee-color-danger, #ef4444);\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.richTextLinkRemove:hover {\n background: var(--ee-color-danger, #ef4444);\n color: #fff;\n}\n\n",".editorContainer {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 500px;\n font-family: var(--ee-font-family);\n font-size: var(--ee-font-size-base);\n color: var(--ee-text-primary);\n background: var(--ee-bg-app);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-lg);\n overflow: hidden;\n}\n\n.editorContainer:focus {\n outline: none;\n}\n\n.editorBody {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.editorPanel {\n min-height: 0;\n max-height: 100%;\n}\n\n.sidebarPanel {\n width: var(--ee-sidebar-width);\n border-right: 1px solid var(--ee-border-color);\n background: var(--ee-bg-panel);\n overflow-y: auto;\n flex-shrink: 0;\n}\n\n.canvasPanel {\n flex: 1;\n min-width: 0;\n background: var(--ee-bg-canvas);\n overflow-y: auto;\n}\n\n.propertiesPanel {\n width: var(--ee-properties-width);\n border-left: 1px solid var(--ee-border-color);\n background: var(--ee-bg-panel);\n overflow-y: auto;\n flex-shrink: 0;\n}\n\n/* Panel toggle buttons — hidden on desktop, shown on narrow screens */\n.panelToggle {\n display: none;\n}\n\n/* Overlay backdrop */\n.panelOverlay {\n display: none;\n}\n\n/* ---- Responsive: tablet / narrow screens ---- */\n@media (max-width: 1023px) {\n .editorBody {\n position: relative;\n }\n\n .sidebarPanel {\n display: none;\n }\n\n .propertiesPanel {\n display: none;\n }\n\n .panelToggle {\n display: flex;\n }\n\n /* Sidebar overlay (open state) */\n .sidebarPanel.sidebarOpen {\n display: block;\n position: absolute;\n z-index: var(--ee-z-overlay);\n left: 0;\n top: 0;\n bottom: 0;\n box-shadow: var(--ee-shadow-lg);\n }\n\n /* Properties overlay (open state) */\n .propertiesPanel.propertiesOpen {\n display: block;\n position: absolute;\n z-index: var(--ee-z-overlay);\n right: 0;\n top: 0;\n bottom: 0;\n box-shadow: var(--ee-shadow-lg);\n }\n\n /* Backdrop when a panel is open */\n .panelOverlay.panelOverlayVisible {\n display: block;\n position: absolute;\n inset: 0;\n background: var(--ee-overlay-backdrop);\n z-index: calc(var(--ee-z-overlay) - 1);\n }\n}\n\n/* ---- Responsive: mobile ---- */\n@media (max-width: 767px) {\n .editorContainer {\n min-height: 400px;\n }\n}\n",".sidebar {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n\n.sectionTitle {\n font-size: var(--ee-font-size-sm);\n font-weight: var(--ee-font-weight-semibold);\n color: var(--ee-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: var(--ee-space-md) var(--ee-space-lg);\n margin: 0;\n border-bottom: 1px solid var(--ee-border-color);\n}\n\n/* Block Palette */\n.blockPalette {\n padding: var(--ee-space-sm);\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--ee-space-sm);\n}\n\n.blockCard {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ee-space-xs);\n padding: var(--ee-space-md) var(--ee-space-sm);\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n cursor: grab;\n transition: all var(--ee-transition-fast);\n user-select: none;\n}\n\n.blockCard:hover {\n border-color: var(--ee-border-focus);\n background: var(--ee-bg-selected);\n box-shadow: var(--ee-shadow-sm);\n}\n\n.blockCard:active {\n cursor: grabbing;\n opacity: 0.7;\n}\n\n.blockCardIcon {\n font-size: 20px;\n line-height: 1;\n}\n\n.blockCardLabel {\n font-size: var(--ee-font-size-sm);\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-text-primary);\n}\n\n/* Variable List */\n.variableList {\n padding: var(--ee-space-sm) var(--ee-space-lg);\n}\n\n.variableHint {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-text-muted);\n margin: 0 0 var(--ee-space-sm) 0;\n line-height: 1.4;\n font-style: italic;\n}\n\n.variableGroup {\n margin-bottom: var(--ee-space-md);\n}\n\n.variableGroupTitle {\n font-size: var(--ee-font-size-xs);\n font-weight: var(--ee-font-weight-semibold);\n color: var(--ee-text-muted);\n margin: 0 0 var(--ee-space-xs) 0;\n text-transform: uppercase;\n}\n\n.variableChips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--ee-space-xs);\n}\n\n.variableChip {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 2px 8px;\n font-size: var(--ee-font-size-xs);\n font-weight: var(--ee-font-weight-medium);\n background: var(--ee-variable-bg);\n color: var(--ee-variable-color);\n border: 1px solid var(--ee-variable-border);\n border-radius: 12px;\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n white-space: nowrap;\n}\n\n.variableChip:hover {\n background: var(--ee-color-primary-light);\n border-color: var(--ee-color-primary);\n transform: translateY(-1px);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.variableChip:active {\n transform: translateY(0);\n box-shadow: none;\n}\n\n.variableChipInserted {\n background: var(--ee-color-primary);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary);\n transition: all 0.15s ease;\n}\n\n.variableChipCustom {\n background: #f0fdf4;\n color: #166534;\n border-color: #86efac;\n}\n\n.variableChipCustom:hover {\n background: #dcfce7;\n border-color: #22c55e;\n}\n\n.variableChipDelete {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n margin-left: 2px;\n padding: 0;\n font-size: 9px;\n line-height: 1;\n background: transparent;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: inherit;\n opacity: 0.5;\n transition: all var(--ee-transition-fast);\n}\n\n.variableChipDelete:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.1);\n}\n\n.variableChipIcon {\n font-size: 11px;\n}\n\n/* Add Variable */\n.addVariableSection {\n padding: var(--ee-space-xs) var(--ee-space-lg) var(--ee-space-lg);\n}\n\n.addVariableBtn {\n width: 100%;\n padding: 6px 12px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-color-primary);\n background: transparent;\n border: 1px dashed var(--ee-color-primary);\n border-radius: var(--ee-border-radius);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.addVariableBtn:hover {\n background: var(--ee-color-primary-light);\n}\n\n.addVariableForm {\n display: flex;\n flex-direction: column;\n gap: var(--ee-space-sm);\n padding: var(--ee-space-md);\n background: var(--ee-bg-hover);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n}\n\n.addVariableField {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.addVariableLabel {\n font-size: 10px;\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.addVariableInput {\n width: 100%;\n padding: 5px 8px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-input);\n color: var(--ee-text-primary);\n outline: none;\n box-sizing: border-box;\n transition: border-color var(--ee-transition-fast);\n}\n\n.addVariableInput:focus {\n border-color: var(--ee-border-focus);\n box-shadow: var(--ee-shadow-focus);\n}\n\n.addVariableError {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-color-danger);\n padding: 2px 0;\n}\n\n.addVariableActions {\n display: flex;\n gap: var(--ee-space-sm);\n justify-content: flex-end;\n padding-top: var(--ee-space-xs);\n}\n\n.addVariableCancelBtn {\n padding: 4px 12px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n color: var(--ee-text-secondary);\n background: transparent;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.addVariableCancelBtn:hover {\n background: var(--ee-bg-hover);\n}\n\n.addVariableSubmitBtn {\n padding: 4px 16px;\n font-size: var(--ee-font-size-sm);\n font-family: var(--ee-font-family);\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-text-inverse);\n background: var(--ee-color-primary);\n border: 1px solid var(--ee-color-primary);\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.addVariableSubmitBtn:hover {\n background: var(--ee-color-primary-hover);\n}\n\n/* Layout section */\n.layoutSection {\n padding: var(--ee-space-sm) var(--ee-space-lg);\n}\n\n.layoutOption {\n display: flex;\n align-items: center;\n gap: var(--ee-space-sm);\n padding: var(--ee-space-sm) var(--ee-space-md);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n cursor: pointer;\n margin-bottom: var(--ee-space-xs);\n transition: all var(--ee-transition-fast);\n}\n\n.layoutOption:hover {\n border-color: var(--ee-border-focus);\n background: var(--ee-bg-selected);\n}\n\n.layoutPreview {\n display: flex;\n gap: 2px;\n flex: 1;\n height: 20px;\n}\n\n.layoutColumn {\n background: var(--ee-color-primary-light);\n border: 1px solid var(--ee-color-primary);\n border-radius: 2px;\n height: 100%;\n}\n\n.layoutLabel {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-text-secondary);\n white-space: nowrap;\n}\n","/* Text Block */\n.textBlock {\n min-height: 24px;\n cursor: text;\n position: relative;\n}\n\n.textBlockToolbar {\n position: sticky;\n top: 0;\n z-index: 20;\n margin-bottom: 4px;\n}\n\n/* Button Block */\n.buttonBlock {\n display: flex;\n padding: 10px 25px;\n}\n\n.buttonBlockLeft {\n justify-content: flex-start;\n}\n\n.buttonBlockCenter {\n justify-content: center;\n}\n\n.buttonBlockRight {\n justify-content: flex-end;\n}\n\n.buttonPreview {\n display: inline-block;\n padding: 12px 24px;\n font-weight: var(--ee-font-weight-medium);\n text-decoration: none;\n cursor: pointer;\n text-align: center;\n line-height: 1.4;\n border: none;\n}\n\n/* Image Block */\n.imageBlock {\n display: flex;\n padding: 10px 25px;\n}\n\n.imageBlockLeft {\n justify-content: flex-start;\n}\n\n.imageBlockCenter {\n justify-content: center;\n}\n\n.imageBlockRight {\n justify-content: flex-end;\n}\n\n.imagePreview {\n max-width: 100%;\n height: auto;\n display: block;\n}\n\n.imagePlaceholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ee-space-sm);\n width: 100%;\n min-height: 120px;\n background: var(--ee-bg-app);\n border: 2px dashed var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n color: var(--ee-text-muted);\n font-size: var(--ee-font-size-sm);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.imagePlaceholder:hover {\n border-color: var(--ee-color-primary);\n color: var(--ee-color-primary);\n background: var(--ee-color-primary-light);\n}\n\n.imagePlaceholderIcon {\n font-size: 32px;\n}\n\n.imageUploading {\n position: relative;\n}\n\n.imageProgress {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 4px;\n background: var(--ee-color-primary);\n border-radius: 2px;\n transition: width 200ms ease;\n}\n\n.imageError {\n color: var(--ee-color-danger);\n font-size: var(--ee-font-size-xs);\n padding: var(--ee-space-xs);\n text-align: center;\n}\n\n/* Divider Block */\n.dividerBlock {\n display: flex;\n align-items: center;\n}\n\n.dividerLine {\n height: 0;\n border: none;\n margin: 0;\n}\n\n/* Spacer Block */\n.spacerBlock {\n position: relative;\n background: repeating-linear-gradient(\n 45deg,\n transparent,\n transparent 5px,\n var(--ee-bg-app) 5px,\n var(--ee-bg-app) 10px\n );\n opacity: 0.5;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.spacerLabel {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-text-muted);\n background: var(--ee-bg-panel);\n padding: 2px 6px;\n border-radius: 3px;\n}\n\n/* Social Block */\n.socialBlock {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n min-height: 30px;\n}\n\n.socialElement {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.socialIcon {\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n line-height: 1;\n flex-shrink: 0;\n}\n\n.socialLabel {\n white-space: nowrap;\n}\n\n.socialElementsContainer {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.socialElementItem {\n padding: 8px;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-app);\n}\n\n/* HTML Block */\n.htmlBlock {\n min-height: 24px;\n position: relative;\n}\n\n.htmlPlaceholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ee-space-sm);\n width: 100%;\n min-height: 80px;\n background: var(--ee-bg-app);\n border: 2px dashed var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n color: var(--ee-text-muted);\n font-size: var(--ee-font-size-sm);\n font-family: monospace;\n}\n\n/* Video Block */\n.videoBlock {\n display: flex;\n padding: 10px 25px;\n}\n\n.videoBlockLeft {\n justify-content: flex-start;\n}\n\n.videoBlockCenter {\n justify-content: center;\n}\n\n.videoBlockRight {\n justify-content: flex-end;\n}\n\n.videoPreview {\n position: relative;\n display: inline-block;\n max-width: 100%;\n}\n\n.playOverlay {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 60px;\n height: 60px;\n background: rgba(0, 0, 0, 0.6);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n font-size: 24px;\n pointer-events: none;\n}\n\n.videoPlaceholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ee-space-sm);\n width: 100%;\n min-height: 120px;\n background: var(--ee-bg-app);\n border: 2px dashed var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n color: var(--ee-text-muted);\n font-size: var(--ee-font-size-sm);\n}\n\n/* Heading Block */\n.headingBlock {\n min-height: 24px;\n cursor: text;\n position: relative;\n}\n\n/* Countdown Block */\n.countdownBlock {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.countdownLabel {\n font-size: 14px;\n font-weight: 500;\n}\n\n.countdownDigits {\n display: flex;\n gap: 12px;\n}\n\n.countdownUnit {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.countdownDigitBox {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 56px;\n padding: 8px 12px;\n border-radius: 6px;\n font-weight: bold;\n font-variant-numeric: tabular-nums;\n}\n\n.countdownUnitLabel {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Menu Block */\n.menuBlock {\n display: flex;\n}\n\n.menuItems {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.menuItem {\n padding: 6px 12px;\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.menuItemsContainer {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.menuItemEntry {\n padding: 8px;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-app);\n}\n\n/* Hero Block */\n.heroBlock {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.heroHeading {\n margin: 0;\n font-weight: bold;\n line-height: 1.2;\n}\n\n.heroSubtext {\n margin: 0;\n line-height: 1.5;\n}\n\n.heroButton {\n display: inline-block;\n padding: 12px 28px;\n font-weight: 600;\n font-size: 16px;\n text-decoration: none;\n cursor: pointer;\n}\n",".tiptapWrapper {\n position: relative;\n}\n\n.tiptapWrapper :global(.ProseMirror) {\n outline: none;\n min-height: 24px;\n padding: 4px;\n word-break: break-word;\n}\n\n.tiptapWrapper :global(.ProseMirror) p {\n margin: 0 0 0.5em 0;\n}\n\n.tiptapWrapper :global(.ProseMirror) p:last-child {\n margin-bottom: 0;\n}\n\n.tiptapWrapper :global(.ProseMirror) h1,\n.tiptapWrapper :global(.ProseMirror) h2,\n.tiptapWrapper :global(.ProseMirror) h3,\n.tiptapWrapper :global(.ProseMirror) h4 {\n margin: 0 0 0.5em 0;\n line-height: 1.3;\n}\n\n.tiptapWrapper :global(.ProseMirror) ul,\n.tiptapWrapper :global(.ProseMirror) ol {\n margin: 0 0 0.5em 0;\n padding-left: 1.5em;\n}\n\n.tiptapWrapper :global(.ProseMirror) blockquote {\n border-left: 3px solid var(--ee-border-color-strong);\n margin: 0 0 0.5em 0;\n padding-left: 1em;\n color: var(--ee-text-secondary);\n}\n\n.tiptapWrapper :global(.ProseMirror) a {\n color: var(--ee-text-link);\n text-decoration: underline;\n}\n\n/* Variable chips in TipTap */\n.tiptapWrapper :global(.ee-variable-chip) {\n display: inline-flex;\n align-items: center;\n padding: 1px 6px;\n margin: 0 1px;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n font-style: inherit;\n background: #dbeafe;\n color: #1e40af;\n border: 1px solid #93c5fd;\n border-radius: 4px;\n vertical-align: baseline;\n user-select: none;\n white-space: nowrap;\n}\n\n/* Focus styling */\n.tiptapWrapper :global(.ProseMirror-focused) {\n outline: none;\n}\n\n/* Placeholder — uses TipTap Placeholder extension's data-placeholder attribute */\n.tiptapWrapper :global(.ProseMirror) :global(.is-editor-empty):first-child::before {\n content: attr(data-placeholder);\n float: left;\n color: var(--ee-text-muted);\n pointer-events: none;\n height: 0;\n font-style: italic;\n opacity: 0.6;\n}\n",".canvasWrapper {\n display: flex;\n justify-content: center;\n padding: var(--ee-space-xl);\n}\n\n.canvasBody {\n width: 600px;\n min-height: 400px;\n background: #ffffff;\n box-shadow: var(--ee-shadow-lg);\n border-radius: var(--ee-border-radius);\n position: relative;\n transition: box-shadow var(--ee-transition-fast);\n}\n\n.canvasBodyDragOver {\n box-shadow: var(--ee-shadow-lg), 0 0 0 3px var(--ee-dropzone-color);\n}\n\n/* Section */\n.section {\n position: relative;\n border: 2px solid transparent;\n transition: border-color var(--ee-transition-fast);\n cursor: pointer;\n}\n\n.section:hover {\n border-color: var(--ee-border-color-strong);\n}\n\n.sectionSelected {\n border-color: var(--ee-border-selected) !important;\n}\n\n.sectionFullWidth {\n border-left: 3px solid var(--ee-color-primary);\n}\n\n.sectionOverlay {\n position: absolute;\n top: -1px;\n right: -1px;\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity var(--ee-transition-fast);\n z-index: 10;\n}\n\n.section:hover .sectionOverlay {\n opacity: 1;\n}\n\n.sectionBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n cursor: pointer;\n font-size: 12px;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n}\n\n.sectionBtn:hover {\n background: var(--ee-color-danger);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-danger);\n}\n\n.sectionBtnDuplicate:hover {\n background: var(--ee-color-primary);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary);\n}\n\n.sectionDragHandle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n cursor: grab;\n font-size: 14px;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n user-select: none;\n line-height: 1;\n}\n\n.sectionDragHandle:hover {\n background: var(--ee-color-primary);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary);\n}\n\n.sectionDragHandle:active {\n cursor: grabbing;\n}\n\n.sectionContent {\n display: flex;\n min-height: 40px;\n}\n\n/* Column */\n.column {\n flex: 1;\n min-height: 40px;\n padding: 4px;\n position: relative;\n}\n\n/* Block */\n.blockWrapper {\n position: relative;\n border: 1px solid transparent;\n border-radius: var(--ee-border-radius-sm);\n transition: all var(--ee-transition-fast);\n cursor: pointer;\n}\n\n.blockWrapper:hover {\n border-color: var(--ee-border-color-strong);\n}\n\n.blockSelected {\n border-color: var(--ee-border-selected) !important;\n box-shadow: var(--ee-shadow-focus);\n}\n\n.blockOverlay {\n position: absolute;\n top: -1px;\n right: -1px;\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity var(--ee-transition-fast);\n z-index: 10;\n}\n\n.blockWrapper:hover .blockOverlay {\n opacity: 1;\n}\n\n.blockBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: 3px;\n cursor: pointer;\n font-size: 10px;\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n}\n\n.blockBtn:hover {\n background: var(--ee-color-danger);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-danger);\n}\n\n.blockBtnDuplicate:hover {\n background: var(--ee-color-primary);\n color: var(--ee-text-inverse);\n border-color: var(--ee-color-primary);\n}\n\n/* Drop Zone */\n.dropZone {\n min-height: 8px;\n padding: 4px 0;\n transition: all var(--ee-transition-fast);\n position: relative;\n margin: 0 4px;\n}\n\n.dropZoneActive {\n min-height: var(--ee-dropzone-height-active);\n background: var(--ee-dropzone-bg);\n border: 2px dashed var(--ee-dropzone-color);\n border-radius: var(--ee-border-radius-sm);\n}\n\n.dropZoneLabel {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ee-font-size-xs);\n color: var(--ee-dropzone-color);\n font-weight: var(--ee-font-weight-medium);\n}\n\n/* Empty column */\n.emptyColumn {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n border: 2px dashed var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n color: var(--ee-text-muted);\n font-size: var(--ee-font-size-sm);\n margin: var(--ee-space-sm);\n transition: all var(--ee-transition-fast);\n cursor: default;\n}\n\n.emptyColumnActive {\n border-color: var(--ee-dropzone-color);\n background: var(--ee-dropzone-bg);\n color: var(--ee-dropzone-color);\n font-weight: var(--ee-font-weight-medium);\n}\n\n/* Section Drop Zone */\n.sectionDropZone {\n min-height: 4px;\n transition: all var(--ee-transition-fast);\n position: relative;\n}\n\n.sectionDropZoneActive {\n min-height: 40px;\n background: var(--ee-dropzone-bg);\n border: 2px dashed var(--ee-dropzone-color);\n border-radius: var(--ee-border-radius-sm);\n margin: 2px 4px;\n}\n\n.sectionDropZoneLabel {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ee-font-size-xs);\n color: var(--ee-dropzone-color);\n font-weight: var(--ee-font-weight-medium);\n}\n\n/* Add section button */\n.addSectionBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ee-space-sm);\n padding: var(--ee-space-md);\n margin: var(--ee-space-sm) var(--ee-space-lg);\n border: 2px dashed var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n background: transparent;\n color: var(--ee-text-secondary);\n font-size: var(--ee-font-size-sm);\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n width: calc(100% - 2 * var(--ee-space-lg));\n}\n\n.addSectionBtn:hover {\n border-color: var(--ee-color-primary);\n color: var(--ee-color-primary);\n background: var(--ee-color-primary-light);\n}\n",".propertiesPanel {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n\n.propertiesHeader {\n padding: var(--ee-space-md) var(--ee-space-lg);\n border-bottom: 1px solid var(--ee-border-color);\n font-size: var(--ee-font-size-sm);\n font-weight: var(--ee-font-weight-semibold);\n color: var(--ee-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.propertiesBody {\n padding: var(--ee-space-md) var(--ee-space-lg);\n display: flex;\n flex-direction: column;\n gap: var(--ee-space-md);\n}\n\n.emptyProperties {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: var(--ee-text-muted);\n font-size: var(--ee-font-size-sm);\n text-align: center;\n padding: var(--ee-space-lg);\n}\n\n.fieldHint {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-text-muted);\n background: var(--ee-bg-hover);\n padding: var(--ee-space-sm) var(--ee-space-md);\n border-radius: var(--ee-border-radius-sm);\n margin: 0;\n line-height: 1.4;\n}\n\n/* Form controls */\n.fieldGroup {\n display: flex;\n flex-direction: column;\n gap: var(--ee-space-xs);\n}\n\n.fieldLabel {\n font-size: var(--ee-font-size-xs);\n font-weight: var(--ee-font-weight-medium);\n color: var(--ee-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.fieldInput {\n width: 100%;\n padding: 6px 8px;\n font-size: var(--ee-font-size-md);\n font-family: var(--ee-font-family);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-input);\n color: var(--ee-text-primary);\n outline: none;\n transition: border-color var(--ee-transition-fast);\n box-sizing: border-box;\n}\n\n.fieldInput:focus {\n border-color: var(--ee-border-focus);\n box-shadow: var(--ee-shadow-focus);\n}\n\n.fieldTextarea {\n composes: fieldInput;\n resize: vertical;\n min-height: 60px;\n}\n\n.fieldSelect {\n composes: fieldInput;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M3 5l3 3 3-3z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 24px;\n}\n\n.fieldRow {\n display: flex;\n gap: var(--ee-space-sm);\n align-items: center;\n}\n\n.fieldHalf {\n flex: 1;\n}\n\n/* Color Picker */\n.colorPickerWrapper {\n position: relative;\n}\n\n.colorPickerTrigger {\n display: flex;\n align-items: center;\n gap: var(--ee-space-sm);\n padding: 6px 8px;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n background: var(--ee-bg-input);\n cursor: pointer;\n width: 100%;\n box-sizing: border-box;\n}\n\n.colorSwatch {\n width: 20px;\n height: 20px;\n border-radius: 3px;\n border: 1px solid var(--ee-border-color);\n flex-shrink: 0;\n}\n\n.colorValue {\n font-size: var(--ee-font-size-sm);\n color: var(--ee-text-primary);\n font-family: monospace;\n}\n\n.colorPresets {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 4px;\n padding: var(--ee-space-sm);\n background: var(--ee-bg-panel);\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius);\n box-shadow: var(--ee-shadow-md);\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: var(--ee-z-dropdown);\n margin-top: 4px;\n}\n\n.colorPresetBtn {\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 2px solid transparent;\n cursor: pointer;\n transition: all var(--ee-transition-fast);\n}\n\n.colorPresetBtn:hover {\n transform: scale(1.15);\n}\n\n.colorPresetBtnActive {\n border-color: var(--ee-color-primary);\n}\n\n/* Padding Input */\n.paddingGrid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--ee-space-xs);\n}\n\n.paddingField {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.paddingLabel {\n font-size: 10px;\n color: var(--ee-text-muted);\n text-align: center;\n}\n\n.paddingInput {\n composes: fieldInput;\n text-align: center;\n padding: 4px;\n font-size: var(--ee-font-size-xs);\n}\n\n/* Alignment Picker */\n.alignmentPicker {\n display: flex;\n border: 1px solid var(--ee-border-color);\n border-radius: var(--ee-border-radius-sm);\n overflow: hidden;\n}\n\n.alignmentBtn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n background: var(--ee-bg-input);\n border: none;\n border-right: 1px solid var(--ee-border-color);\n cursor: pointer;\n font-size: var(--ee-font-size-sm);\n color: var(--ee-text-secondary);\n transition: all var(--ee-transition-fast);\n}\n\n.alignmentBtn:last-child {\n border-right: none;\n}\n\n.alignmentBtn:hover {\n background: var(--ee-bg-hover);\n}\n\n.alignmentBtnActive {\n background: var(--ee-color-primary) !important;\n color: var(--ee-text-inverse);\n}\n\n/* Slider Input */\n.sliderWrapper {\n display: flex;\n align-items: center;\n gap: var(--ee-space-sm);\n}\n\n.sliderInput {\n flex: 1;\n height: 4px;\n appearance: none;\n background: var(--ee-border-color);\n border-radius: 2px;\n outline: none;\n}\n\n.sliderInput::-webkit-slider-thumb {\n appearance: none;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: var(--ee-color-primary);\n cursor: pointer;\n}\n\n.sliderValue {\n font-size: var(--ee-font-size-xs);\n color: var(--ee-text-secondary);\n min-width: 36px;\n text-align: right;\n font-family: monospace;\n}\n\n/* Separator */\n.separator {\n height: 1px;\n background: var(--ee-border-color);\n margin: var(--ee-space-xs) 0;\n}\n",":root {\n /* Colors */\n --ee-color-primary: #2563eb;\n --ee-color-primary-hover: #1d4ed8;\n --ee-color-primary-light: #dbeafe;\n --ee-color-danger: #ef4444;\n --ee-color-danger-hover: #dc2626;\n --ee-color-success: #22c55e;\n --ee-color-warning: #f59e0b;\n\n /* Surfaces */\n --ee-bg-app: #f3f4f6;\n --ee-bg-panel: #ffffff;\n --ee-bg-canvas: #e5e7eb;\n --ee-bg-hover: #f9fafb;\n --ee-bg-selected: #eff6ff;\n --ee-bg-input: #ffffff;\n --ee-bg-toolbar: #ffffff;\n\n /* Borders */\n --ee-border-color: #e5e7eb;\n --ee-border-color-strong: #d1d5db;\n --ee-border-focus: #2563eb;\n --ee-border-selected: #3b82f6;\n --ee-border-radius: 6px;\n --ee-border-radius-sm: 4px;\n --ee-border-radius-lg: 8px;\n\n /* Text */\n --ee-text-primary: #111827;\n --ee-text-secondary: #6b7280;\n --ee-text-muted: #9ca3af;\n --ee-text-inverse: #ffffff;\n --ee-text-link: #2563eb;\n\n /* Spacing */\n --ee-space-xs: 4px;\n --ee-space-sm: 8px;\n --ee-space-md: 12px;\n --ee-space-lg: 16px;\n --ee-space-xl: 24px;\n --ee-space-2xl: 32px;\n\n /* Typography */\n --ee-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n --ee-font-size-xs: 11px;\n --ee-font-size-sm: 12px;\n --ee-font-size-md: 13px;\n --ee-font-size-base: 14px;\n --ee-font-size-lg: 16px;\n --ee-font-size-xl: 18px;\n --ee-font-weight-normal: 400;\n --ee-font-weight-medium: 500;\n --ee-font-weight-semibold: 600;\n\n /* Layout */\n --ee-sidebar-width: 260px;\n --ee-properties-width: 280px;\n --ee-toolbar-height: 48px;\n\n /* Shadows */\n --ee-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --ee-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --ee-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n --ee-shadow-focus: 0 0 0 3px rgba(37, 99, 235, 0.15);\n\n /* Transitions */\n --ee-transition-fast: 150ms ease;\n --ee-transition-normal: 200ms ease;\n\n /* Z-index */\n --ee-z-dropdown: 100;\n --ee-z-toolbar: 200;\n --ee-z-overlay: 250;\n --ee-z-modal: 300;\n --ee-z-tooltip: 400;\n\n /* Overlay */\n --ee-overlay-backdrop: rgba(0, 0, 0, 0.2);\n\n /* Drop zone */\n --ee-dropzone-color: #3b82f6;\n --ee-dropzone-bg: rgba(59, 130, 246, 0.08);\n --ee-dropzone-height: 4px;\n --ee-dropzone-height-active: 40px;\n\n /* Variable chips */\n --ee-variable-bg: #dbeafe;\n --ee-variable-color: #1e40af;\n --ee-variable-border: #93c5fd;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
|
+
import React__default, { ReactNode, ComponentType } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import * as _tiptap_core from '@tiptap/core';
|
|
5
|
+
import { Editor, Node } from '@tiptap/core';
|
|
6
|
+
import * as _tiptap_extension_underline from '@tiptap/extension-underline';
|
|
7
|
+
|
|
8
|
+
type BlockType = 'text' | 'button' | 'image' | 'divider' | 'spacer' | 'social' | 'html' | 'video' | 'heading' | 'countdown' | 'menu' | 'hero';
|
|
9
|
+
interface TextBlockProperties {
|
|
10
|
+
content: string;
|
|
11
|
+
fontFamily: string;
|
|
12
|
+
fontSize: string;
|
|
13
|
+
color: string;
|
|
14
|
+
lineHeight: string;
|
|
15
|
+
padding: string;
|
|
16
|
+
align: 'left' | 'center' | 'right' | 'justify';
|
|
17
|
+
fontWeight: string;
|
|
18
|
+
textTransform: string;
|
|
19
|
+
letterSpacing: string;
|
|
20
|
+
}
|
|
21
|
+
interface ButtonBlockProperties {
|
|
22
|
+
text: string;
|
|
23
|
+
href: string;
|
|
24
|
+
backgroundColor: string;
|
|
25
|
+
color: string;
|
|
26
|
+
fontFamily: string;
|
|
27
|
+
fontSize: string;
|
|
28
|
+
borderRadius: string;
|
|
29
|
+
padding: string;
|
|
30
|
+
innerPadding: string;
|
|
31
|
+
align: 'left' | 'center' | 'right';
|
|
32
|
+
width: string;
|
|
33
|
+
fontWeight: string;
|
|
34
|
+
textTransform: string;
|
|
35
|
+
letterSpacing: string;
|
|
36
|
+
}
|
|
37
|
+
interface ImageBlockProperties {
|
|
38
|
+
src: string;
|
|
39
|
+
alt: string;
|
|
40
|
+
href: string;
|
|
41
|
+
width: string;
|
|
42
|
+
height: string;
|
|
43
|
+
padding: string;
|
|
44
|
+
align: 'left' | 'center' | 'right';
|
|
45
|
+
fluidOnMobile: boolean;
|
|
46
|
+
}
|
|
47
|
+
interface DividerBlockProperties {
|
|
48
|
+
borderColor: string;
|
|
49
|
+
borderWidth: string;
|
|
50
|
+
borderStyle: 'solid' | 'dashed' | 'dotted';
|
|
51
|
+
padding: string;
|
|
52
|
+
width: string;
|
|
53
|
+
}
|
|
54
|
+
interface SpacerBlockProperties {
|
|
55
|
+
height: string;
|
|
56
|
+
}
|
|
57
|
+
interface SocialElement {
|
|
58
|
+
name: string;
|
|
59
|
+
href: string;
|
|
60
|
+
src?: string;
|
|
61
|
+
content?: string;
|
|
62
|
+
backgroundColor?: string;
|
|
63
|
+
color?: string;
|
|
64
|
+
}
|
|
65
|
+
interface SocialBlockProperties {
|
|
66
|
+
elements: SocialElement[];
|
|
67
|
+
mode: 'horizontal' | 'vertical';
|
|
68
|
+
align: 'left' | 'center' | 'right';
|
|
69
|
+
iconSize: string;
|
|
70
|
+
iconPadding: string;
|
|
71
|
+
padding: string;
|
|
72
|
+
fontSize: string;
|
|
73
|
+
color: string;
|
|
74
|
+
borderRadius: string;
|
|
75
|
+
}
|
|
76
|
+
interface HtmlBlockProperties {
|
|
77
|
+
content: string;
|
|
78
|
+
padding: string;
|
|
79
|
+
}
|
|
80
|
+
interface VideoBlockProperties {
|
|
81
|
+
src: string;
|
|
82
|
+
thumbnailUrl: string;
|
|
83
|
+
alt: string;
|
|
84
|
+
padding: string;
|
|
85
|
+
align: 'left' | 'center' | 'right';
|
|
86
|
+
}
|
|
87
|
+
interface HeadingBlockProperties {
|
|
88
|
+
content: string;
|
|
89
|
+
level: 'h1' | 'h2' | 'h3' | 'h4';
|
|
90
|
+
fontFamily: string;
|
|
91
|
+
fontSize: string;
|
|
92
|
+
color: string;
|
|
93
|
+
lineHeight: string;
|
|
94
|
+
fontWeight: string;
|
|
95
|
+
padding: string;
|
|
96
|
+
align: 'left' | 'center' | 'right' | 'justify';
|
|
97
|
+
textTransform: string;
|
|
98
|
+
letterSpacing: string;
|
|
99
|
+
}
|
|
100
|
+
interface CountdownBlockProperties {
|
|
101
|
+
targetDate: string;
|
|
102
|
+
label: string;
|
|
103
|
+
digitBackgroundColor: string;
|
|
104
|
+
digitColor: string;
|
|
105
|
+
labelColor: string;
|
|
106
|
+
fontSize: string;
|
|
107
|
+
padding: string;
|
|
108
|
+
align: 'left' | 'center' | 'right';
|
|
109
|
+
}
|
|
110
|
+
interface MenuItem {
|
|
111
|
+
text: string;
|
|
112
|
+
href: string;
|
|
113
|
+
}
|
|
114
|
+
interface MenuBlockProperties {
|
|
115
|
+
items: MenuItem[];
|
|
116
|
+
align: 'left' | 'center' | 'right';
|
|
117
|
+
fontFamily: string;
|
|
118
|
+
fontSize: string;
|
|
119
|
+
color: string;
|
|
120
|
+
padding: string;
|
|
121
|
+
hamburger: boolean;
|
|
122
|
+
iconColor: string;
|
|
123
|
+
}
|
|
124
|
+
interface HeroBlockProperties {
|
|
125
|
+
heading: string;
|
|
126
|
+
subtext: string;
|
|
127
|
+
buttonText: string;
|
|
128
|
+
buttonHref: string;
|
|
129
|
+
headingColor: string;
|
|
130
|
+
headingFontSize: string;
|
|
131
|
+
subtextColor: string;
|
|
132
|
+
subtextFontSize: string;
|
|
133
|
+
buttonBackgroundColor: string;
|
|
134
|
+
buttonColor: string;
|
|
135
|
+
buttonBorderRadius: string;
|
|
136
|
+
align: 'left' | 'center' | 'right';
|
|
137
|
+
padding: string;
|
|
138
|
+
}
|
|
139
|
+
type BlockProperties = TextBlockProperties | ButtonBlockProperties | ImageBlockProperties | DividerBlockProperties | SpacerBlockProperties | SocialBlockProperties | HtmlBlockProperties | VideoBlockProperties | HeadingBlockProperties | CountdownBlockProperties | MenuBlockProperties | HeroBlockProperties;
|
|
140
|
+
interface BlockPropertiesMap {
|
|
141
|
+
text: TextBlockProperties;
|
|
142
|
+
button: ButtonBlockProperties;
|
|
143
|
+
image: ImageBlockProperties;
|
|
144
|
+
divider: DividerBlockProperties;
|
|
145
|
+
spacer: SpacerBlockProperties;
|
|
146
|
+
social: SocialBlockProperties;
|
|
147
|
+
html: HtmlBlockProperties;
|
|
148
|
+
video: VideoBlockProperties;
|
|
149
|
+
heading: HeadingBlockProperties;
|
|
150
|
+
countdown: CountdownBlockProperties;
|
|
151
|
+
menu: MenuBlockProperties;
|
|
152
|
+
hero: HeroBlockProperties;
|
|
153
|
+
}
|
|
154
|
+
interface Block {
|
|
155
|
+
id: string;
|
|
156
|
+
type: BlockType;
|
|
157
|
+
properties: Record<string, any>;
|
|
158
|
+
}
|
|
159
|
+
interface Column {
|
|
160
|
+
id: string;
|
|
161
|
+
width: string;
|
|
162
|
+
blocks: Block[];
|
|
163
|
+
}
|
|
164
|
+
interface SectionProperties {
|
|
165
|
+
backgroundColor: string;
|
|
166
|
+
padding: string;
|
|
167
|
+
borderRadius: string;
|
|
168
|
+
fullWidth: boolean;
|
|
169
|
+
backgroundImage?: string;
|
|
170
|
+
backgroundSize?: string;
|
|
171
|
+
backgroundRepeat?: string;
|
|
172
|
+
}
|
|
173
|
+
interface Section {
|
|
174
|
+
id: string;
|
|
175
|
+
columns: Column[];
|
|
176
|
+
properties: SectionProperties;
|
|
177
|
+
}
|
|
178
|
+
interface GlobalStyles {
|
|
179
|
+
backgroundColor: string;
|
|
180
|
+
width: number;
|
|
181
|
+
fontFamily: string;
|
|
182
|
+
}
|
|
183
|
+
interface HeadMetadata {
|
|
184
|
+
title: string;
|
|
185
|
+
previewText: string;
|
|
186
|
+
headStyles: string[];
|
|
187
|
+
}
|
|
188
|
+
interface EmailTemplate {
|
|
189
|
+
sections: Section[];
|
|
190
|
+
globalStyles: GlobalStyles;
|
|
191
|
+
headMetadata?: HeadMetadata;
|
|
192
|
+
}
|
|
193
|
+
interface Variable {
|
|
194
|
+
key: string;
|
|
195
|
+
icon?: string;
|
|
196
|
+
sample: string;
|
|
197
|
+
label?: string;
|
|
198
|
+
group?: string;
|
|
199
|
+
}
|
|
200
|
+
interface VariableChipStyle {
|
|
201
|
+
backgroundColor: string;
|
|
202
|
+
color: string;
|
|
203
|
+
borderColor: string;
|
|
204
|
+
fontSize: string;
|
|
205
|
+
borderRadius: string;
|
|
206
|
+
}
|
|
207
|
+
interface PersistenceAdapter {
|
|
208
|
+
save(key: string, template: EmailTemplate): void;
|
|
209
|
+
load(key: string): EmailTemplate | null;
|
|
210
|
+
remove(key: string): void;
|
|
211
|
+
}
|
|
212
|
+
interface UploadOptions {
|
|
213
|
+
context: string;
|
|
214
|
+
blockId: string;
|
|
215
|
+
signal: AbortSignal;
|
|
216
|
+
}
|
|
217
|
+
interface UploadResult {
|
|
218
|
+
url: string;
|
|
219
|
+
width?: number;
|
|
220
|
+
height?: number;
|
|
221
|
+
alt?: string;
|
|
222
|
+
}
|
|
223
|
+
interface BrowseResult {
|
|
224
|
+
url: string;
|
|
225
|
+
width?: number;
|
|
226
|
+
height?: number;
|
|
227
|
+
alt?: string;
|
|
228
|
+
}
|
|
229
|
+
interface TransformOptions {
|
|
230
|
+
width: number;
|
|
231
|
+
height?: number;
|
|
232
|
+
fit: string;
|
|
233
|
+
format: string;
|
|
234
|
+
quality: number;
|
|
235
|
+
}
|
|
236
|
+
interface ImageUploadAdapter {
|
|
237
|
+
upload: (file: File, opts?: UploadOptions) => Promise<UploadResult>;
|
|
238
|
+
browse?: () => Promise<BrowseResult | null>;
|
|
239
|
+
delete?: (url: string) => Promise<void>;
|
|
240
|
+
validate?: (file: File) => string | null;
|
|
241
|
+
transform?: (url: string, opts: TransformOptions) => string;
|
|
242
|
+
}
|
|
243
|
+
type ActiveTab = 'visual' | 'source' | 'preview';
|
|
244
|
+
interface SelectionState {
|
|
245
|
+
sectionId: string | null;
|
|
246
|
+
columnId: string | null;
|
|
247
|
+
blockId: string | null;
|
|
248
|
+
}
|
|
249
|
+
interface EditorState {
|
|
250
|
+
template: EmailTemplate;
|
|
251
|
+
selection: SelectionState;
|
|
252
|
+
activeTab: ActiveTab;
|
|
253
|
+
history: EmailTemplate[];
|
|
254
|
+
historyIndex: number;
|
|
255
|
+
isDirty: boolean;
|
|
256
|
+
}
|
|
257
|
+
type EditorAction = {
|
|
258
|
+
type: 'SET_TEMPLATE';
|
|
259
|
+
payload: EmailTemplate;
|
|
260
|
+
} | {
|
|
261
|
+
type: 'ADD_SECTION';
|
|
262
|
+
payload: {
|
|
263
|
+
section: Section;
|
|
264
|
+
index?: number;
|
|
265
|
+
};
|
|
266
|
+
} | {
|
|
267
|
+
type: 'REMOVE_SECTION';
|
|
268
|
+
payload: {
|
|
269
|
+
sectionId: string;
|
|
270
|
+
};
|
|
271
|
+
} | {
|
|
272
|
+
type: 'MOVE_SECTION';
|
|
273
|
+
payload: {
|
|
274
|
+
sectionId: string;
|
|
275
|
+
toIndex: number;
|
|
276
|
+
};
|
|
277
|
+
} | {
|
|
278
|
+
type: 'UPDATE_SECTION';
|
|
279
|
+
payload: {
|
|
280
|
+
sectionId: string;
|
|
281
|
+
properties: Partial<SectionProperties>;
|
|
282
|
+
};
|
|
283
|
+
} | {
|
|
284
|
+
type: 'ADD_BLOCK';
|
|
285
|
+
payload: {
|
|
286
|
+
sectionId: string;
|
|
287
|
+
columnId: string;
|
|
288
|
+
block: Block;
|
|
289
|
+
index?: number;
|
|
290
|
+
};
|
|
291
|
+
} | {
|
|
292
|
+
type: 'REMOVE_BLOCK';
|
|
293
|
+
payload: {
|
|
294
|
+
sectionId: string;
|
|
295
|
+
columnId: string;
|
|
296
|
+
blockId: string;
|
|
297
|
+
};
|
|
298
|
+
} | {
|
|
299
|
+
type: 'MOVE_BLOCK';
|
|
300
|
+
payload: {
|
|
301
|
+
fromSectionId: string;
|
|
302
|
+
fromColumnId: string;
|
|
303
|
+
blockId: string;
|
|
304
|
+
toSectionId: string;
|
|
305
|
+
toColumnId: string;
|
|
306
|
+
toIndex: number;
|
|
307
|
+
};
|
|
308
|
+
} | {
|
|
309
|
+
type: 'UPDATE_BLOCK';
|
|
310
|
+
payload: {
|
|
311
|
+
blockId: string;
|
|
312
|
+
properties: Partial<BlockProperties>;
|
|
313
|
+
};
|
|
314
|
+
} | {
|
|
315
|
+
type: 'SELECT_BLOCK';
|
|
316
|
+
payload: {
|
|
317
|
+
sectionId: string;
|
|
318
|
+
columnId: string;
|
|
319
|
+
blockId: string;
|
|
320
|
+
} | null;
|
|
321
|
+
} | {
|
|
322
|
+
type: 'SELECT_SECTION';
|
|
323
|
+
payload: {
|
|
324
|
+
sectionId: string;
|
|
325
|
+
} | null;
|
|
326
|
+
} | {
|
|
327
|
+
type: 'SET_ACTIVE_TAB';
|
|
328
|
+
payload: ActiveTab;
|
|
329
|
+
} | {
|
|
330
|
+
type: 'UPDATE_GLOBAL_STYLES';
|
|
331
|
+
payload: Partial<GlobalStyles>;
|
|
332
|
+
} | {
|
|
333
|
+
type: 'UPDATE_HEAD_METADATA';
|
|
334
|
+
payload: Partial<HeadMetadata>;
|
|
335
|
+
} | {
|
|
336
|
+
type: 'DUPLICATE_BLOCK';
|
|
337
|
+
payload: {
|
|
338
|
+
sectionId: string;
|
|
339
|
+
columnId: string;
|
|
340
|
+
blockId: string;
|
|
341
|
+
};
|
|
342
|
+
} | {
|
|
343
|
+
type: 'DUPLICATE_SECTION';
|
|
344
|
+
payload: {
|
|
345
|
+
sectionId: string;
|
|
346
|
+
};
|
|
347
|
+
} | {
|
|
348
|
+
type: 'UNDO';
|
|
349
|
+
} | {
|
|
350
|
+
type: 'REDO';
|
|
351
|
+
};
|
|
352
|
+
interface EmailEditorProps {
|
|
353
|
+
initialTemplate?: EmailTemplate;
|
|
354
|
+
initialMJML?: string;
|
|
355
|
+
variables?: Variable[];
|
|
356
|
+
imageUploadAdapter?: ImageUploadAdapter;
|
|
357
|
+
onChange?: (template: EmailTemplate) => void;
|
|
358
|
+
onSave?: (mjml: string, html: string) => void;
|
|
359
|
+
onReady?: () => void;
|
|
360
|
+
/** Custom font family options for the rich text toolbar. Falls back to FONT_OPTIONS constant. */
|
|
361
|
+
fontFamilies?: string[];
|
|
362
|
+
/** Custom font size options for the rich text toolbar (e.g. ['12px', '14px', '16px']). Falls back to DEFAULT_FONT_SIZES constant. */
|
|
363
|
+
fontSizes?: string[];
|
|
364
|
+
/** Key for auto-persisting the template. Different keys allow multiple editor instances to coexist. */
|
|
365
|
+
persistenceKey?: string;
|
|
366
|
+
/** Custom persistence adapter. Defaults to localStorage when persistenceKey is set. */
|
|
367
|
+
persistenceAdapter?: PersistenceAdapter;
|
|
368
|
+
className?: string;
|
|
369
|
+
style?: React.CSSProperties;
|
|
370
|
+
}
|
|
371
|
+
interface EmailEditorRef {
|
|
372
|
+
getMJML: () => string;
|
|
373
|
+
getHTML: () => Promise<string>;
|
|
374
|
+
getJSON: () => EmailTemplate;
|
|
375
|
+
loadMJML: (source: string) => void;
|
|
376
|
+
loadJSON: (template: EmailTemplate) => void;
|
|
377
|
+
insertBlock: (type: BlockType, sectionIdx?: number) => void;
|
|
378
|
+
getVariables: () => string[];
|
|
379
|
+
undo: () => void;
|
|
380
|
+
redo: () => void;
|
|
381
|
+
reset: () => void;
|
|
382
|
+
exportPDF: () => Promise<void>;
|
|
383
|
+
/** Remove persisted template data for the current persistenceKey. No-op if no key is set. */
|
|
384
|
+
clearPersisted: () => void;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
declare const EmailEditor: React$1.ForwardRefExoticComponent<EmailEditorProps & React$1.RefAttributes<EmailEditorRef>>;
|
|
388
|
+
|
|
389
|
+
interface EditorContextValue {
|
|
390
|
+
state: EditorState;
|
|
391
|
+
dispatch: React__default.Dispatch<EditorAction>;
|
|
392
|
+
/** All variables: pre-defined (props) + custom (user-created) */
|
|
393
|
+
variables: Variable[];
|
|
394
|
+
/** Pre-defined variables from props (read-only) */
|
|
395
|
+
predefinedVariables: Variable[];
|
|
396
|
+
/** User-created custom variables */
|
|
397
|
+
customVariables: Variable[];
|
|
398
|
+
imageUploadAdapter?: ImageUploadAdapter;
|
|
399
|
+
setActiveEditor: (editor: Editor | null) => void;
|
|
400
|
+
getActiveEditor: () => Editor | null;
|
|
401
|
+
insertVariable: (key: string) => boolean;
|
|
402
|
+
addCustomVariable: (variable: Variable) => void;
|
|
403
|
+
removeCustomVariable: (key: string) => void;
|
|
404
|
+
variableChipStyle: VariableChipStyle;
|
|
405
|
+
updateVariableChipStyle: (style: Partial<VariableChipStyle>) => void;
|
|
406
|
+
/** Font family options for the rich text toolbar */
|
|
407
|
+
fontFamilies: string[];
|
|
408
|
+
/** Font size options for the rich text toolbar */
|
|
409
|
+
fontSizes: string[];
|
|
410
|
+
/** Remove persisted template for the current key. No-op if no persistenceKey. */
|
|
411
|
+
clearPersisted: () => void;
|
|
412
|
+
}
|
|
413
|
+
declare function useEditor(): EditorContextValue;
|
|
414
|
+
declare function useEditorState(): EditorState;
|
|
415
|
+
declare function useEditorDispatch(): React__default.Dispatch<EditorAction>;
|
|
416
|
+
declare function useSelectedBlock(): Block | null;
|
|
417
|
+
declare function useSelectedSection(): Section | null;
|
|
418
|
+
interface EditorProviderProps {
|
|
419
|
+
children: ReactNode;
|
|
420
|
+
initialTemplate?: EmailTemplate;
|
|
421
|
+
variables?: Variable[];
|
|
422
|
+
imageUploadAdapter?: ImageUploadAdapter;
|
|
423
|
+
onChange?: (template: EmailTemplate) => void;
|
|
424
|
+
fontFamilies?: string[];
|
|
425
|
+
fontSizes?: string[];
|
|
426
|
+
persistenceKey?: string;
|
|
427
|
+
persistenceAdapter?: PersistenceAdapter;
|
|
428
|
+
}
|
|
429
|
+
declare function EditorProvider({ children, initialTemplate, variables: predefinedVariables, imageUploadAdapter, onChange, fontFamilies: fontFamiliesProp, fontSizes: fontSizesProp, persistenceKey, persistenceAdapter, }: EditorProviderProps): react_jsx_runtime.JSX.Element;
|
|
430
|
+
|
|
431
|
+
declare function parseMJML(mjmlString: string): EmailTemplate;
|
|
432
|
+
|
|
433
|
+
declare function generateMJML(template: EmailTemplate): string;
|
|
434
|
+
|
|
435
|
+
interface CompileResult {
|
|
436
|
+
html: string;
|
|
437
|
+
errors: CompileError[];
|
|
438
|
+
}
|
|
439
|
+
interface CompileError {
|
|
440
|
+
line: number;
|
|
441
|
+
message: string;
|
|
442
|
+
tagName: string;
|
|
443
|
+
}
|
|
444
|
+
declare function compileMJMLToHTML(mjmlString: string): Promise<CompileResult>;
|
|
445
|
+
|
|
446
|
+
declare function getExtensions(placeholder?: string): (_tiptap_core.Node<any, any> | _tiptap_core.Extension<any, any> | _tiptap_core.Mark<_tiptap_extension_underline.UnderlineOptions, any>)[];
|
|
447
|
+
|
|
448
|
+
declare module '@tiptap/core' {
|
|
449
|
+
interface Commands<ReturnType> {
|
|
450
|
+
variableNode: {
|
|
451
|
+
insertVariable: (key: string) => ReturnType;
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
declare const VariableNode: Node<any, any>;
|
|
456
|
+
|
|
457
|
+
declare function generateId(prefix?: string): string;
|
|
458
|
+
declare function generateBlockId(): string;
|
|
459
|
+
declare function generateSectionId(): string;
|
|
460
|
+
declare function generateColumnId(): string;
|
|
461
|
+
|
|
462
|
+
declare function extractVariableKeys(text: string): string[];
|
|
463
|
+
declare function replaceVariables(text: string, variables: Variable[], useSample?: boolean): string;
|
|
464
|
+
declare function groupVariables(variables: Variable[]): Map<string, Variable[]>;
|
|
465
|
+
|
|
466
|
+
declare function sanitizeHTML(html: string): string;
|
|
467
|
+
declare function escapeHTML(str: string): string;
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Default persistence adapter using localStorage.
|
|
471
|
+
* All operations are wrapped in try/catch to handle quota errors,
|
|
472
|
+
* private browsing restrictions, and SSR environments.
|
|
473
|
+
*/
|
|
474
|
+
declare const localStorageAdapter: PersistenceAdapter;
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Block type registries — single source of truth for mapping block types
|
|
478
|
+
* to their renderers, property panels, generators, and parsers.
|
|
479
|
+
*
|
|
480
|
+
* Adding a new block type requires only adding entries here (Open/Closed Principle).
|
|
481
|
+
*/
|
|
482
|
+
|
|
483
|
+
declare function registerBlockRenderer(type: BlockType, component: ComponentType<{
|
|
484
|
+
block: Block;
|
|
485
|
+
}>): void;
|
|
486
|
+
declare function registerBlockProperties(type: BlockType, component: ComponentType<{
|
|
487
|
+
block: Block;
|
|
488
|
+
}>): void;
|
|
489
|
+
declare function registerBlockGenerator(type: BlockType, generator: (block: Block, indent: string) => string): void;
|
|
490
|
+
declare function registerBlockParser(mjmlTag: string, parser: (el: Element) => Block): void;
|
|
491
|
+
|
|
492
|
+
declare const DEFAULT_SOCIAL_PROPERTIES: SocialBlockProperties;
|
|
493
|
+
declare const DEFAULT_BLOCK_PROPERTIES: {
|
|
494
|
+
[K in BlockType]: BlockPropertiesMap[K];
|
|
495
|
+
};
|
|
496
|
+
declare const DEFAULT_SECTION_PROPERTIES: SectionProperties;
|
|
497
|
+
declare const DEFAULT_HEAD_METADATA: HeadMetadata;
|
|
498
|
+
declare const DEFAULT_GLOBAL_STYLES: GlobalStyles;
|
|
499
|
+
declare const DEFAULT_VARIABLE_CHIP_STYLE: VariableChipStyle;
|
|
500
|
+
interface BlockDefinition {
|
|
501
|
+
type: BlockType;
|
|
502
|
+
label: string;
|
|
503
|
+
icon: string;
|
|
504
|
+
description: string;
|
|
505
|
+
}
|
|
506
|
+
declare const BLOCK_DEFINITIONS: BlockDefinition[];
|
|
507
|
+
declare const DEFAULT_FONT_SIZES: string[];
|
|
508
|
+
declare const FONT_OPTIONS: string[];
|
|
509
|
+
declare const COLOR_PRESETS: string[];
|
|
510
|
+
declare const COLUMN_LAYOUTS: {
|
|
511
|
+
label: string;
|
|
512
|
+
widths: string[];
|
|
513
|
+
}[];
|
|
514
|
+
|
|
515
|
+
export { type ActiveTab, BLOCK_DEFINITIONS, type Block, type BlockProperties, type BlockPropertiesMap, type BlockType, type BrowseResult, type ButtonBlockProperties, COLOR_PRESETS, COLUMN_LAYOUTS, type Column, type CountdownBlockProperties, DEFAULT_BLOCK_PROPERTIES, DEFAULT_FONT_SIZES, DEFAULT_GLOBAL_STYLES, DEFAULT_HEAD_METADATA, DEFAULT_SECTION_PROPERTIES, DEFAULT_SOCIAL_PROPERTIES, DEFAULT_VARIABLE_CHIP_STYLE, type DividerBlockProperties, type EditorAction, EditorProvider, type EditorState, EmailEditor, type EmailEditorProps, type EmailEditorRef, type EmailTemplate, FONT_OPTIONS, type GlobalStyles, type HeadMetadata, type HeroBlockProperties, type ImageBlockProperties, type ImageUploadAdapter, type MenuBlockProperties, type MenuItem, type PersistenceAdapter, type Section, type SectionProperties, type SelectionState, type SocialBlockProperties, type SocialElement, type SpacerBlockProperties, type TextBlockProperties, type TransformOptions, type UploadOptions, type UploadResult, type Variable, type VariableChipStyle, VariableNode, compileMJMLToHTML, escapeHTML, extractVariableKeys, generateBlockId, generateColumnId, generateId, generateMJML, generateSectionId, getExtensions, groupVariables, localStorageAdapter, parseMJML, registerBlockGenerator, registerBlockParser, registerBlockProperties, registerBlockRenderer, replaceVariables, sanitizeHTML, useEditor, useEditorDispatch, useEditorState, useSelectedBlock, useSelectedSection };
|