email-builder-online 4.0.0 → 4.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 +661 -21
- package/README.md +792 -789
- package/dist/email-builder-standalone/src/App/AIGeneration/AIGenerationDialog.d.ts +18 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/AIGenerationDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/AIPreviewPanel.d.ts +29 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/AIPreviewPanel.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/AIVisualWizard.d.ts +14 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/AIVisualWizard.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/ChipQuestion.d.ts +23 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/ChipQuestion.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/EntryPicker.d.ts +6 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/EntryPicker.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/SummaryStep.d.ts +11 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/SummaryStep.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/WizardField.d.ts +14 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/WizardField.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/WizardHeader.d.ts +8 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/WizardHeader.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/briefDefaults.d.ts +44 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/briefDefaults.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/compileBriefClient.d.ts +12 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/compileBriefClient.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step01Strategy.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step01Strategy.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step02Tone.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step02Tone.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step03Visual.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step03Visual.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step04Imagery.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step04Imagery.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step05Layout.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/steps/Step05Layout.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/useVisualBrief.d.ts +41 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/Wizard/useVisualBrief.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/index.d.ts +18 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/ndjsonStreamClient.d.ts +75 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/ndjsonStreamClient.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/repairOrphanedBlocks.d.ts +154 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/repairOrphanedBlocks.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/trackUnsplashFromDocument.d.ts +24 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/trackUnsplashFromDocument.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/validateGeneratedTemplate.d.ts +53 -0
- package/dist/email-builder-standalone/src/App/AIGeneration/validateGeneratedTemplate.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ComponentTreeColumnIcons.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ComponentTreeColumnIcons.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ComponentTreePanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ToggleComponentTreeButton.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ApplyTemplateConfirmDialog.d.ts +20 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ApplyTemplateConfirmDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ComponentsLibraryDrawer.d.ts +28 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ComponentsLibraryDrawer.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ComponentsLibraryHandle.d.ts +12 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ComponentsLibraryHandle.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/LibraryHoverPreviewPortal.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/LibraryHoverPreviewPortal.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/LibrarySearchToolbar.d.ts +10 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/LibrarySearchToolbar.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/RenameSubtreeDialog.d.ts +18 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/RenameSubtreeDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/SaveSubtreeDialog.d.ts +27 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/SaveSubtreeDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/SaveTemplateDialog.d.ts +21 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/SaveTemplateDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/TagsInput.d.ts +13 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/TagsInput.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ThemesList.d.ts +26 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/ThemesList.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/devSeedTemplates.d.ts +31 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/devSeedTemplates.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/dnd.d.ts +36 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/dnd.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/fetchSavedSubtree.d.ts +12 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/fetchSavedSubtree.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/fetchTheme.d.ts +70 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/fetchTheme.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/hoverPreviewStore.d.ts +58 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/hoverPreviewStore.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/index.d.ts +15 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/librarySearch.d.ts +48 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/librarySearch.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/localLibraryStore.d.ts +91 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/localLibraryStore.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/styles.d.ts +3 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/styles.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardPrimitiveRender.d.ts +41 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardPrimitiveRender.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardThemeSwatch.d.ts +52 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardThemeSwatch.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardThumbnail.d.ts +31 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/LibraryCardThumbnail.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/buildThumbnailHtml.d.ts +34 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/buildThumbnailHtml.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/captureThumbnail.d.ts +76 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/captureThumbnail.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/thumbnailUrl.d.ts +29 -0
- package/dist/email-builder-standalone/src/App/ComponentsLibrary/thumbnail/thumbnailUrl.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/index.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/index.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ButtonSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ColumnsContainerSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ContainerSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/DividerSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.d.ts +8 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ImageSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/NotionTextSidebarPanel.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SocialSidebarPanel.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SpacerSidebarPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/BaseSidebarPanel.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/containers/StickyWrapper.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/containers/Wrapper.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/containers/Wrapper.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BackgroundImageInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BackgroundImageInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BooleanInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BorderInput.d.ts +2 -2
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BorderInput.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/BaseColorInput.d.ts +29 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/BaseColorInput.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/EyeDropperButton.d.ts +6 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/EyeDropperButton.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/LinksInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/LinksInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Picker.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Swatch.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Swatch.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/eyedropper.types.d.ts +16 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/eyedropper.types.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/index.d.ts +36 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/useEyeDropper.d.ts +5 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/useEyeDropper.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColumnWidthsInput.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColumnWidthsInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ContentAligment.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontFamily.d.ts +10 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontFamily.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontSizeInput.d.ts +20 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontSizeInput.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontWeightInput.d.ts +10 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontWeightInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/HeightInput.d.ts +4 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/HeightInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ImageInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ImageInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputSizeButton.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputSizeButton.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputSizeSelector.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputWidth.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputWidth.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InspectorPillToggleGroup.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LabelProperty.d.ts +7 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LabelProperty.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LayoutSelectorInput.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LayoutSelectorInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LineHeightInput.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PaddingInput.d.ts +26 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PaddingInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PropertyLabelWithWarning.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/RadioGroupInput.d.ts +11 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/RadioGroupInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SelectScreen.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/Shape.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/Shape.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SliderInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SliderInput.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SocialMediaInput.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextAlignInput.d.ts +10 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextAlignInput.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextDimensionInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextDimensionInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/WidthInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/WidthInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ai-image-generation.d.ts +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ai-image-generation.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/CloseButton.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/ErrorDialog.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/ErrorDialog.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/ImagePreview.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/PromptInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/Select.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/Select.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/SkeletonImage.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/SourceImagePreview.d.ts +30 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/SourceImagePreview.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/hooks.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/hooks.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/positionIcons.d.ts +22 -0
- package/dist/email-builder-standalone/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/positionIcons.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/raw/RawSliderInput.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/raw/RawSliderInput.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/utils/errorHandling.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/MultiStylePropertyPanel.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/MultiStylePropertyPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/SingleStylePropertyPanel.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/SingleStylePropertyPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/StylesPanel.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/InspectorDrawer/index.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/SidebarButton.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/HtmlPanel.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/MainTabsGroup.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ApplyThemeConfirmDialog.d.ts +21 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ApplyThemeConfirmDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/BlockTypeAccordion.d.ts +22 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/BlockTypeAccordion.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/RenameThemeDialog.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/RenameThemeDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ResetButton.d.ts +25 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ResetButton.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/RootAccordion.d.ts +15 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/RootAccordion.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/SaveThemeDialog.d.ts +17 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/SaveThemeDialog.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ThemeFieldRow.d.ts +22 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/ThemeFieldRow.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/index.d.ts +19 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/registry.d.ts +26 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePanel/registry.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePresets/ThemePresetsButton.d.ts +7 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePresets/ThemePresetsButton.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePresets/defaults/index.d.ts +9 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/ThemePresets/defaults/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/helper/cleanDocument.d.ts +12 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/helper/cleanDocument.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/extraFunctions.d.ts +8 -8
- package/dist/email-builder-standalone/src/App/TemplatePanel/helper/extraFunctions.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/formatting.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/globalsStyles.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/highlighters.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/qlcss.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/index.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/App/TemplatePanel/renderToStaticMarkup.d.ts +22 -0
- package/dist/email-builder-standalone/src/App/TemplatePanel/renderToStaticMarkup.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/App/index.d.ts +22 -0
- package/dist/email-builder-standalone/src/App/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/EmailBuilderStandalone.d.ts +5 -0
- package/dist/email-builder-standalone/src/EmailBuilderStandalone.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/ShadowDomProvider.d.ts +23 -0
- package/dist/email-builder-standalone/src/ShadowDomProvider.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/components/ImageSourceTabs.d.ts +32 -0
- package/dist/email-builder-standalone/src/components/ImageSourceTabs.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/components/SampleImageGallery.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/UnsplashCreditLine.d.ts +14 -0
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/UnsplashCreditLine.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/index.d.ts +24 -0
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/unsplash-api.d.ts +84 -0
- package/dist/email-builder-standalone/src/components/UnsplashImagePicker/unsplash-api.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/constants.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/ColumnsContainer/ColumnsContainerEditor.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/ColumnsContainer/ColumnsContainerPropsSchema.d.ts +90 -90
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/ColumnsContainer/ColumnsContainerPropsSchema.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/Container/ContainerPropsSchema.d.ts +126 -126
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/Container/ContainerPropsSchema.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +44 -4
- package/dist/email-builder-standalone/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/documents/blocks/customHooks/useParentImageWidth.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlockButton.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlocksMenu.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.d.ts +34 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/EditorChildrenNoDragable.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/index.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/TStyle.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/EditorBlockWrapper.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/EditorBlockWrapper.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/ReaderBlockWrapper.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/TuneMenu.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/TuneMenu.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/changeWidth.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/constants.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/documents/blocks/helpers/fontFamily.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/zod.d.ts +4 -4
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/ClientOnly.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/EJEMPLO_USO_GRANULAR.d.ts +1 -1
- package/dist/email-builder-standalone/src/documents/editor/EJEMPLO_USO_GRANULAR.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/EditorBlock.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/EditorBlock.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/EditorContext.d.ts +1063 -852
- package/dist/email-builder-standalone/src/documents/editor/EditorContext.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/blockHooks.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/documents/editor/blockSelectors.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/blockUpdaters.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/documents/editor/classifyBlockSubtree.d.ts +11 -0
- package/dist/email-builder-standalone/src/documents/editor/classifyBlockSubtree.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/componentTreeColumnSlot.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/core.d.ts +2039 -2120
- package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/core.d.ts.map +1 -1
- package/dist/email-builder-standalone/src/documents/editor/migrateDocument.d.ts +15 -0
- package/dist/email-builder-standalone/src/documents/editor/migrateDocument.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/documents/editor/unsplashCreditsStore.d.ts +15 -0
- package/dist/email-builder-standalone/src/documents/editor/unsplashCreditsStore.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/getConfiguration/sample/empty-email-message.d.ts +19 -0
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/empty-email-message.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/one-time-passcode.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/order-ecommerce.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/post-metrics-report.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/reservation-reminder.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/reset-password.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/subscription-receipt.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/test-load-json.d.ts.map +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/i18n.d.ts +1 -1
- package/dist/email-builder-standalone/src/i18n.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/index.d.ts +164 -0
- package/dist/email-builder-standalone/src/index.d.ts.map +1 -0
- package/dist/email-builder-standalone/src/locales/en-US/aiWizard.json.d.ts +140 -0
- package/dist/{editor-sample → email-builder-standalone}/src/locales/en-US/common.json.d.ts +43 -43
- package/dist/email-builder-standalone/src/locales/en-US/inspector.json.d.ts +558 -0
- package/dist/email-builder-standalone/src/locales/es-419/aiWizard.json.d.ts +140 -0
- package/dist/{editor-sample → email-builder-standalone}/src/locales/es-419/common.json.d.ts +43 -43
- package/dist/email-builder-standalone/src/locales/es-419/inspector.json.d.ts +558 -0
- package/dist/email-builder-standalone/src/locales/it-IT/aiWizard.json.d.ts +140 -0
- package/dist/{editor-sample → email-builder-standalone}/src/locales/it-IT/common.json.d.ts +43 -43
- package/dist/email-builder-standalone/src/locales/it-IT/inspector.json.d.ts +558 -0
- package/dist/email-builder-standalone/src/standalone.d.ts +4 -0
- package/dist/email-builder-standalone/src/standalone.d.ts.map +1 -0
- package/dist/{editor-sample → email-builder-standalone}/src/theme.d.ts +1 -1
- package/dist/{editor-sample → email-builder-standalone}/src/theme.d.ts.map +1 -1
- package/dist/index.cjs +342 -313
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +71392 -71343
- package/dist/standalone.js +1401 -0
- package/dist/standalone.mjs +159706 -0
- package/dist/style.css +1 -1
- package/package.json +34 -15
- package/vite.config.standalone.ts +106 -0
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/index.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HeadingSidebarPanel.d.ts +0 -8
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HeadingSidebarPanel.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HtmlSidebarPanel.d.ts +0 -8
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HtmlSidebarPanel.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SocialSidebarPanel.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/containers/Wrapper.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BorderInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/BaseColorInput.d.ts +0 -16
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/BaseColorInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/index.d.ts +0 -16
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/index.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColumnWidthsInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontFamily.d.ts +0 -8
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontFamily.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontSizeInput.d.ts +0 -11
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontSizeInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontWeightInput.d.ts +0 -8
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontWeightInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LabelProperty.d.ts +0 -6
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LayoutSelectorInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PaddingInput.d.ts +0 -17
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PaddingInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/RadioGroupInput.d.ts +0 -10
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/RadioGroupInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SocialMediaInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextAlignInput.d.ts +0 -8
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextAlignInput.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ai-image-generation.d.ts.map +0 -1
- package/dist/editor-sample/src/App/InspectorDrawer/index.d.ts.map +0 -1
- package/dist/editor-sample/src/App/TemplatePanel/CustomReader/CustomReader.d.ts +0 -10
- package/dist/editor-sample/src/App/TemplatePanel/CustomReader/CustomReader.d.ts.map +0 -1
- package/dist/editor-sample/src/App/TemplatePanel/helper/cleanDocument.d.ts +0 -9
- package/dist/editor-sample/src/App/TemplatePanel/helper/cleanDocument.d.ts.map +0 -1
- package/dist/editor-sample/src/App/TemplatePanel/helper/extraFunctions.d.ts.map +0 -1
- package/dist/editor-sample/src/App/TemplatePanel/renderToStaticMarkup.d.ts +0 -7
- package/dist/editor-sample/src/App/TemplatePanel/renderToStaticMarkup.d.ts.map +0 -1
- package/dist/editor-sample/src/App/index.d.ts +0 -17
- package/dist/editor-sample/src/App/index.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/blocks/customHooks/useParentImageWidth.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.d.ts +0 -10
- package/dist/editor-sample/src/documents/blocks/helpers/fontFamily.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/editor/EJEMPLO_USO_GRANULAR.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/editor/EditorContext.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/editor/blockSelectors.d.ts.map +0 -1
- package/dist/editor-sample/src/documents/editor/migrateDocument.d.ts +0 -7
- package/dist/editor-sample/src/documents/editor/migrateDocument.d.ts.map +0 -1
- package/dist/editor-sample/src/getConfiguration/sample/empty-email-message.d.ts +0 -5
- package/dist/editor-sample/src/i18n.d.ts.map +0 -1
- package/dist/editor-sample/src/index.d.ts +0 -57
- package/dist/editor-sample/src/index.d.ts.map +0 -1
- package/dist/editor-sample/src/locales/en-US/inspector.json.d.ts +0 -259
- package/dist/editor-sample/src/locales/es-419/inspector.json.d.ts +0 -258
- package/dist/editor-sample/src/locales/it-IT/inspector.json.d.ts +0 -258
- /package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ComponentTreePanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/ComponentTree/ToggleComponentTreeButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ButtonSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ColumnsContainerSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ContainerSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/DividerSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ImageSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/NotionTextSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SocialSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SpacerSidebarPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/BaseSidebarPanel.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/containers/StickyWrapper.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BooleanInput.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Picker.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ContentAligment.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InputSizeSelector.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/InspectorPillToggleGroup.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/LineHeightInput.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PropertyLabelWithWarning.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SelectScreen.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SocialMediaInput.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/WarningIcon.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/WarningIcon.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/CloseButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/ImagePreview.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/PromptInput.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/SkeletonImage.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/inputStyles.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/components/inputStyles.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/types/errors.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/types/errors.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/utils/errorHandling.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/StylesPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ToggleInspectorPanelButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/ToggleInspectorPanelButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/InspectorDrawer/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/SidebarButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/ToggleSamplesPanelButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/ToggleSamplesPanelButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/SamplesDrawer/index.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/DownloadJson/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/DownloadJson/index.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/HtmlPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/ImportJsonDialog.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/ImportJsonDialog.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/index.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/validateJsonStringValue.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ImportJson/validateJsonStringValue.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/JsonPanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/JsonPanel.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/MainTabsGroup.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ShareButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/ShareButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/HighlightedCodePanel.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/HighlightedCodePanel.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/formatting.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/globalsStyles.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/highlighters.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/helper/qlcss.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/App/TemplatePanel/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/components/SampleImageGallery.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/constants.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/ColumnsContainer/ColumnsContainerEditor.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/Container/ContainerEditor.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/Container/ContainerEditor.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/EmailLayout/EmailLayoutEditor.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/EmailLayout/EmailLayoutEditor.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/customHooks/useParentImageWidth.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlockButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlocksMenu.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/DividerButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/DividerButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/PlaceholderButton.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/PlaceholderButton.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/EditorChildrenNoDragable.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/EditorChildrenIds/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/TStyle.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/block-wrappers/ReaderBlockWrapper.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/changeWidth.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/constants.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/fontFamily.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/blocks/helpers/zod.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/ClientOnly.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/UndoRedoStore.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/UndoRedoStore.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/blockHooks.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/blockSelectors.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/blockUpdaters.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/componentTreeColumnSlot.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/granular.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/documents/editor/granular.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/index.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/index.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/gallery-test.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/gallery-test.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/one-time-passcode.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/order-ecommerce.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/post-metrics-report.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/reservation-reminder.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/reset-password.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/respond-to-message.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/respond-to-message.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/subscription-receipt.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/test-load-json.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/welcome.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/getConfiguration/sample/welcome.d.ts.map +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/utils/useDebounce.d.ts +0 -0
- /package/dist/{editor-sample → email-builder-standalone}/src/utils/useDebounce.d.ts.map +0 -0
package/README.md
CHANGED
|
@@ -1,789 +1,792 @@
|
|
|
1
|
-
# email-builder-online
|
|
2
|
-
|
|
3
|
-
Powerful, modern email builder with drag-and-drop blocks, live preview, and HTML export. Built with React and Material UI, distributed as a React component and as a Web Component so it can be embedded in other frameworks (Nuxt 3, Next.js, SvelteKit, etc.). Compatible with React 18 and 19.
|
|
4
|
-
|
|
5
|
-
🚀 **[Live Demo](https://emailbuilder.online/)**
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
- **Drag-and-drop blocks**: Text (Rich Text Editor),
|
|
10
|
-
- **Editor and Preview tabs** with responsive screen sizes (Desktop/Mobile)
|
|
11
|
-
- **Undo/Redo** and keyboard shortcuts
|
|
12
|
-
- **HTML export** and copy-to-clipboard helpers
|
|
13
|
-
- **CSS size guard** for email client compatibility
|
|
14
|
-
- **Dark mode** support
|
|
15
|
-
- **AI features** for text (rewrite, grammar, continue, tone) and image generation
|
|
16
|
-
- **Image gallery** integration with custom image provider support
|
|
17
|
-
- **Internationalization (i18n)** with English, Spanish, and Italian support
|
|
18
|
-
- **Works as React component or Web Component** - embed in any framework (Nuxt 3, Next.js, SvelteKit, Vue, etc.)
|
|
19
|
-
- **Built with TypeScript** for better developer experience
|
|
20
|
-
- **Responsive design** that works on mobile and desktop
|
|
21
|
-
|
|
22
|
-
## Installation
|
|
23
|
-
|
|
24
|
-
Install the package:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
npm i email-builder-online
|
|
28
|
-
# or
|
|
29
|
-
yarn add email-builder-online
|
|
30
|
-
# or
|
|
31
|
-
pnpm add email-builder-online
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
> **Note:** All dependencies (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
import {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
React
|
|
716
|
-
|
|
717
|
-
|
|
|
718
|
-
|
|
|
719
|
-
|
|
|
720
|
-
|
|
|
721
|
-
|
|
|
722
|
-
|
|
|
723
|
-
|
|
|
724
|
-
|
|
|
725
|
-
|
|
|
726
|
-
|
|
|
727
|
-
|
|
|
728
|
-
|
|
|
729
|
-
|
|
|
730
|
-
|
|
|
731
|
-
|
|
|
732
|
-
|
|
|
733
|
-
|
|
|
734
|
-
|
|
|
735
|
-
|
|
|
736
|
-
|
|
|
737
|
-
|
|
|
738
|
-
| enableAI | enable-ai | boolean | false | Enable AI features for text and image generation |
|
|
739
|
-
| onAIRequest | - | (request: AIFeatureRequest) => Promise\<string\> | - | Callback for AI text processing requests |
|
|
740
|
-
|
|
|
741
|
-
|
|
|
742
|
-
|
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
-
|
|
785
|
-
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
1
|
+
# email-builder-online
|
|
2
|
+
|
|
3
|
+
Powerful, modern email builder with drag-and-drop blocks, live preview, and HTML export. Built with React and Material UI, distributed as a React component and as a Web Component so it can be embedded in other frameworks (Nuxt 3, Next.js, SvelteKit, etc.). Compatible with React 18 and 19.
|
|
4
|
+
|
|
5
|
+
🚀 **[Live Demo](https://emailbuilder.online/)**
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Drag-and-drop blocks**: Text (Rich Text Editor), Image, Button, Columns, Divider, Spacer, Social Media, Container
|
|
10
|
+
- **Editor and Preview tabs** with responsive screen sizes (Desktop/Mobile)
|
|
11
|
+
- **Undo/Redo** and keyboard shortcuts
|
|
12
|
+
- **HTML export** and copy-to-clipboard helpers
|
|
13
|
+
- **CSS size guard** for email client compatibility
|
|
14
|
+
- **Dark mode** support
|
|
15
|
+
- **AI features** for text (rewrite, grammar, continue, tone) and image generation
|
|
16
|
+
- **Image gallery** integration with custom image provider support
|
|
17
|
+
- **Internationalization (i18n)** with English, Spanish, and Italian support
|
|
18
|
+
- **Works as React component or Web Component** - embed in any framework (Nuxt 3, Next.js, SvelteKit, Vue, etc.)
|
|
19
|
+
- **Built with TypeScript** for better developer experience
|
|
20
|
+
- **Responsive design** that works on mobile and desktop
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
Install the package along with React:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm i email-builder-online react react-dom
|
|
28
|
+
# or
|
|
29
|
+
yarn add email-builder-online react react-dom
|
|
30
|
+
# or
|
|
31
|
+
pnpm add email-builder-online react react-dom
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
> **Note:** All other dependencies (Material UI, i18n, drag-and-drop, Tiptap, etc.) are bundled with the package — no extra installs needed.
|
|
35
|
+
|
|
36
|
+
> **Requirements:** This package targets **Node 24+** and **pnpm** (declared in `engines`). Node 24 + pnpm are required when building or self-hosting the builder from source.
|
|
37
|
+
|
|
38
|
+
### Peer dependencies (React / React-DOM)
|
|
39
|
+
|
|
40
|
+
**`react` and `react-dom` must be the same major/minor version** (e.g. both 18.x or both 19.x). Mixing versions (e.g. react@18 with react-dom@19) can cause runtime errors such as "Cannot read properties of undefined (reading 'S')".
|
|
41
|
+
|
|
42
|
+
If your project uses **Vite**, add this to your `vite.config` to avoid multiple instances of React (recommended on Windows and in monorepos):
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
export default defineConfig({
|
|
46
|
+
resolve: {
|
|
47
|
+
dedupe: ['react', 'react-dom', 'react-dom/client'],
|
|
48
|
+
},
|
|
49
|
+
// ...
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Add the stylesheet (required):
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
// React / Vite / Nuxt / Next
|
|
57
|
+
import 'email-builder-online/style.css';
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## AI Features
|
|
61
|
+
|
|
62
|
+
The builder supports AI-powered features for both text and image blocks, controlled by a single `enableAI` prop.
|
|
63
|
+
|
|
64
|
+
### Text AI
|
|
65
|
+
|
|
66
|
+
When `enableAI` is `true`, the rich text editor (NotionText) shows AI actions in the bubble menu toolbar and slash menu:
|
|
67
|
+
- Rewrite, grammar check, continue writing
|
|
68
|
+
- Tone adjustments: shorter, descriptive, detailed, friendly, professional
|
|
69
|
+
|
|
70
|
+
Text AI uses the `onAIRequest` callback to process requests. You provide the backend integration:
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
<EmailBuilder
|
|
74
|
+
enableAI={true}
|
|
75
|
+
onAIRequest={async ({ text, content, action, blockId }) => {
|
|
76
|
+
const response = await fetch('/api/ai', {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
body: JSON.stringify({ text, content, action }),
|
|
79
|
+
headers: { 'Content-Type': 'application/json' },
|
|
80
|
+
});
|
|
81
|
+
const data = await response.json();
|
|
82
|
+
return data.processedContent;
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Image AI Generation
|
|
88
|
+
|
|
89
|
+
When `enableAI` is `true`, image blocks and background image inputs show a "Generate with AI" button that opens a dialog for prompt-based image generation.
|
|
90
|
+
|
|
91
|
+
#### Events
|
|
92
|
+
|
|
93
|
+
The image AI generation uses a custom event system:
|
|
94
|
+
|
|
95
|
+
**`request-ai-image`** - Fired when the user submits a prompt to generate an image
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
window.addEventListener('request-ai-image', (event: CustomEvent) => {
|
|
99
|
+
const prompt = event.detail; // string: the user's prompt
|
|
100
|
+
|
|
101
|
+
// Call your AI image generation API
|
|
102
|
+
const imageUrl = await generateImage(prompt);
|
|
103
|
+
|
|
104
|
+
// Respond with the generated image
|
|
105
|
+
window.dispatchEvent(
|
|
106
|
+
new CustomEvent('generated-image', {
|
|
107
|
+
detail: { url: imageUrl, success: true },
|
|
108
|
+
})
|
|
109
|
+
);
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**`store-ai-image`** - Fired when the user confirms and inserts the generated image
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
window.addEventListener('store-ai-image', (event: CustomEvent) => {
|
|
117
|
+
const imageUrl = event.detail; // string: URL of the image to store
|
|
118
|
+
// Persist the image to your storage if needed
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**`generated-image`** - Dispatch this event to return the generated image to the builder
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
// Success
|
|
126
|
+
window.dispatchEvent(
|
|
127
|
+
new CustomEvent('generated-image', {
|
|
128
|
+
detail: { url: 'https://example.com/generated.png', success: true },
|
|
129
|
+
})
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
// Error
|
|
133
|
+
window.dispatchEvent(
|
|
134
|
+
new CustomEvent('generated-image', {
|
|
135
|
+
detail: { url: null, success: false, error: { code: 500, message: 'Generation failed' } },
|
|
136
|
+
})
|
|
137
|
+
);
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Template AI Generation (demo)
|
|
141
|
+
|
|
142
|
+
The dev playground wires `onAIGenerateTemplate` to the bundled
|
|
143
|
+
[`@eb/backend`](../backend) workspace package so you can try the
|
|
144
|
+
end-to-end flow (prompt → SSE NDJSON stream → live preview → Apply).
|
|
145
|
+
|
|
146
|
+
Run both packages in parallel from the repo root (two terminals):
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Terminal 1 — AI backend on http://localhost:3100
|
|
150
|
+
cp packages/backend/.env.example packages/backend/.env
|
|
151
|
+
# edit OPENAI_API_KEY inside packages/backend/.env
|
|
152
|
+
pnpm dev:backend
|
|
153
|
+
|
|
154
|
+
# Terminal 2 — React 19 playground on http://localhost:2501
|
|
155
|
+
pnpm dev
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
The consumer code in `playground/react-19/src/App.tsx` is the minimal
|
|
159
|
+
reference: a single `fetch` to `http://localhost:3100/api/generate` that
|
|
160
|
+
returns the SSE response body as a `ReadableStream<string>` to the
|
|
161
|
+
builder's dialog. The backend URL is hardcoded there — change the
|
|
162
|
+
`AI_BACKEND_URL` constant if your backend runs elsewhere.
|
|
163
|
+
|
|
164
|
+
## Custom Image Provider
|
|
165
|
+
|
|
166
|
+
You can integrate your own image selector/gallery by passing a React component through the `customImageProvider` prop. This component will be rendered at the top of the image input panel, allowing users to select images from your custom source.
|
|
167
|
+
|
|
168
|
+
### Events
|
|
169
|
+
|
|
170
|
+
The custom image provider can listen to and dispatch the following events:
|
|
171
|
+
|
|
172
|
+
#### Listening to Events
|
|
173
|
+
|
|
174
|
+
**`email-builder-image-panel-opened`** - Fired when an Image block is selected/opened in the editor
|
|
175
|
+
|
|
176
|
+
```tsx
|
|
177
|
+
window.addEventListener('email-builder-image-panel-opened', (event: CustomEvent) => {
|
|
178
|
+
const { blockId, currentImageUrl, alt } = event.detail;
|
|
179
|
+
// You can use this to highlight the current image in your gallery
|
|
180
|
+
// or load additional data based on the current selection
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Event detail properties:
|
|
185
|
+
|
|
186
|
+
- `blockId` (string): The ID of the selected image block
|
|
187
|
+
- `currentImageUrl` (string | null): The URL of the currently selected image, or null if no image is set
|
|
188
|
+
- `alt` (string | null): The alt text of the current image, or null if not set
|
|
189
|
+
|
|
190
|
+
#### Dispatching Events
|
|
191
|
+
|
|
192
|
+
**`email-builder-set-image`** - Dispatch this event to set an image in the currently selected block
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
window.dispatchEvent(
|
|
196
|
+
new CustomEvent('email-builder-set-image', {
|
|
197
|
+
detail: imageUrl, // string: URL of the image to set
|
|
198
|
+
})
|
|
199
|
+
);
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Complete Example
|
|
203
|
+
|
|
204
|
+
```tsx
|
|
205
|
+
import React, { useEffect, useState } from 'react';
|
|
206
|
+
import { EmailBuilder } from 'email-builder-online';
|
|
207
|
+
|
|
208
|
+
function MyImageGallery() {
|
|
209
|
+
const [currentImageUrl, setCurrentImageUrl] = useState<string | null>(null);
|
|
210
|
+
|
|
211
|
+
useEffect(() => {
|
|
212
|
+
// Listen for when the image panel opens
|
|
213
|
+
const handlePanelOpened = (event: CustomEvent) => {
|
|
214
|
+
const { currentImageUrl } = event.detail;
|
|
215
|
+
setCurrentImageUrl(currentImageUrl);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
window.addEventListener('email-builder-image-panel-opened', handlePanelOpened);
|
|
219
|
+
|
|
220
|
+
return () => {
|
|
221
|
+
window.removeEventListener('email-builder-image-panel-opened', handlePanelOpened);
|
|
222
|
+
};
|
|
223
|
+
}, []);
|
|
224
|
+
|
|
225
|
+
const handleImageSelect = (imageUrl: string) => {
|
|
226
|
+
// Dispatch event to set the image
|
|
227
|
+
window.dispatchEvent(
|
|
228
|
+
new CustomEvent('email-builder-set-image', {
|
|
229
|
+
detail: imageUrl,
|
|
230
|
+
})
|
|
231
|
+
);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
return (
|
|
235
|
+
<div>
|
|
236
|
+
<h4>My Custom Gallery</h4>
|
|
237
|
+
{currentImageUrl && <p style={{ fontSize: '12px', color: '#666' }}>Current: {currentImageUrl}</p>}
|
|
238
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '8px' }}>
|
|
239
|
+
<img
|
|
240
|
+
src="https://example.com/image1.jpg"
|
|
241
|
+
onClick={() => handleImageSelect('https://example.com/image1.jpg')}
|
|
242
|
+
style={{
|
|
243
|
+
cursor: 'pointer',
|
|
244
|
+
width: '100%',
|
|
245
|
+
border: currentImageUrl === 'https://example.com/image1.jpg' ? '2px solid blue' : 'none',
|
|
246
|
+
}}
|
|
247
|
+
/>
|
|
248
|
+
{/* More images... */}
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export default function Page() {
|
|
255
|
+
return (
|
|
256
|
+
<EmailBuilder
|
|
257
|
+
customImageProvider={<MyImageGallery />}
|
|
258
|
+
// ... other props
|
|
259
|
+
/>
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
> **Live Example**: Check out the working implementation in `packages/email-builder-online/src/components/SampleImageGallery.tsx` and see it in action in the demo app.
|
|
265
|
+
|
|
266
|
+
## Custom Merge Tags
|
|
267
|
+
|
|
268
|
+
You can provide your own merge tags that will appear in the text editor's merge tag menu. Pass an array of tags or a complete group configuration:
|
|
269
|
+
|
|
270
|
+
### Simple Array of Tags
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
import { EmailBuilder, MergeTag } from 'email-builder-online';
|
|
274
|
+
|
|
275
|
+
const myMergeTags: MergeTag[] = [
|
|
276
|
+
{
|
|
277
|
+
label: 'First Name',
|
|
278
|
+
value: '[first_name]',
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
label: 'Last Name',
|
|
282
|
+
value: '[last_name]',
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
label: 'Company',
|
|
286
|
+
value: '[company]',
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
type: 'divider', // Add a divider
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
label: 'Custom Link',
|
|
293
|
+
value: '{custom_link}Click here{/custom_link}',
|
|
294
|
+
},
|
|
295
|
+
];
|
|
296
|
+
|
|
297
|
+
export default function Page() {
|
|
298
|
+
return (
|
|
299
|
+
<EmailBuilder
|
|
300
|
+
mergeTags={myMergeTags}
|
|
301
|
+
// ... other props
|
|
302
|
+
/>
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Complete Group with Custom Icons
|
|
308
|
+
|
|
309
|
+
```tsx
|
|
310
|
+
import { EmailBuilder, MergeTagGroup } from 'email-builder-online';
|
|
311
|
+
import { User, Building, Mail } from 'lucide-react'; // or any icon library
|
|
312
|
+
|
|
313
|
+
const myMergeTagGroup: MergeTagGroup = {
|
|
314
|
+
label: 'My Custom Tags',
|
|
315
|
+
icon: <Mail />,
|
|
316
|
+
children: [
|
|
317
|
+
{
|
|
318
|
+
label: 'First Name',
|
|
319
|
+
value: '[first_name]',
|
|
320
|
+
icon: <User />,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
label: 'Company Name',
|
|
324
|
+
value: '[company]',
|
|
325
|
+
icon: <Building />,
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
type: 'divider',
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
label: 'Verification Link',
|
|
332
|
+
value: '{verify}Verify Account{/verify}',
|
|
333
|
+
icon: <Mail />,
|
|
334
|
+
},
|
|
335
|
+
],
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
export default function Page() {
|
|
339
|
+
return (
|
|
340
|
+
<EmailBuilder
|
|
341
|
+
mergeTags={myMergeTagGroup}
|
|
342
|
+
// ... other props
|
|
343
|
+
/>
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Programmatic Image Loading
|
|
349
|
+
|
|
350
|
+
You can load images programmatically using the ref:
|
|
351
|
+
|
|
352
|
+
```tsx
|
|
353
|
+
import { useRef } from 'react';
|
|
354
|
+
import { EmailBuilder, EmailBuilderRef } from 'email-builder-online';
|
|
355
|
+
|
|
356
|
+
export default function Page() {
|
|
357
|
+
const emailBuilderRef = useRef<EmailBuilderRef>(null);
|
|
358
|
+
|
|
359
|
+
const handleSelectFromMyGallery = (imageUrl: string, blockId: string) => {
|
|
360
|
+
// Set image URL for a specific block
|
|
361
|
+
emailBuilderRef.current?.setImageUrl(blockId, imageUrl);
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
return (
|
|
365
|
+
<EmailBuilder
|
|
366
|
+
ref={emailBuilderRef}
|
|
367
|
+
customImageProvider={<MyCustomGallery onSelect={handleSelectFromMyGallery} />}
|
|
368
|
+
/>
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Using with Custom Image Provider Events
|
|
374
|
+
|
|
375
|
+
You can combine the ref approach with the event system for a more robust solution:
|
|
376
|
+
|
|
377
|
+
```tsx
|
|
378
|
+
import { useRef, useEffect, useState } from 'react';
|
|
379
|
+
import { EmailBuilder, EmailBuilderRef } from 'email-builder-online';
|
|
380
|
+
|
|
381
|
+
function MyCustomGallery() {
|
|
382
|
+
const [currentBlockId, setCurrentBlockId] = useState<string | null>(null);
|
|
383
|
+
const [currentImageUrl, setCurrentImageUrl] = useState<string | null>(null);
|
|
384
|
+
|
|
385
|
+
useEffect(() => {
|
|
386
|
+
const handlePanelOpened = (event: CustomEvent) => {
|
|
387
|
+
const { blockId, currentImageUrl } = event.detail;
|
|
388
|
+
setCurrentBlockId(blockId);
|
|
389
|
+
setCurrentImageUrl(currentImageUrl);
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
window.addEventListener('email-builder-image-panel-opened', handlePanelOpened);
|
|
393
|
+
return () => window.removeEventListener('email-builder-image-panel-opened', handlePanelOpened);
|
|
394
|
+
}, []);
|
|
395
|
+
|
|
396
|
+
const handleImageSelect = (imageUrl: string) => {
|
|
397
|
+
// Use the event system to set the image
|
|
398
|
+
window.dispatchEvent(
|
|
399
|
+
new CustomEvent('email-builder-set-image', {
|
|
400
|
+
detail: imageUrl,
|
|
401
|
+
})
|
|
402
|
+
);
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
return (
|
|
406
|
+
<div>
|
|
407
|
+
<h4>Select Image</h4>
|
|
408
|
+
{currentImageUrl && <p>Current: {currentImageUrl}</p>}
|
|
409
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '8px' }}>
|
|
410
|
+
{/* Your image gallery */}
|
|
411
|
+
</div>
|
|
412
|
+
</div>
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export default function Page() {
|
|
417
|
+
const emailBuilderRef = useRef<EmailBuilderRef>(null);
|
|
418
|
+
|
|
419
|
+
// Alternative: Use ref method directly
|
|
420
|
+
const handleSelectFromGallery = (imageUrl: string, blockId: string) => {
|
|
421
|
+
emailBuilderRef.current?.setImageUrl(blockId, imageUrl);
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
return <EmailBuilder ref={emailBuilderRef} customImageProvider={<MyCustomGallery />} />;
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
## Available Blocks
|
|
429
|
+
|
|
430
|
+
The email builder includes the following drag-and-drop blocks:
|
|
431
|
+
|
|
432
|
+
- **Notion Text** - Rich text editor with Notion-like editing experience (Tiptap-based)
|
|
433
|
+
- **Image** - Image block with link support
|
|
434
|
+
- **Button** - Call-to-action button with customizable styling
|
|
435
|
+
- **Columns** - Multi-column layout container
|
|
436
|
+
- **Divider** - Horizontal divider/separator line
|
|
437
|
+
- **Spacer** - Vertical spacing block
|
|
438
|
+
- **Social Media** - Social media icons with links
|
|
439
|
+
- **Container** - Container block for grouping content
|
|
440
|
+
|
|
441
|
+
## Backward Compatibility
|
|
442
|
+
|
|
443
|
+
The email builder automatically migrates legacy blocks when loading a document so templates created before the NotionText block was introduced still hydrate cleanly. The following retired block types are converted to **NotionText** on load:
|
|
444
|
+
|
|
445
|
+
- **CustomEditor** → **NotionText** (type rename, compatible data)
|
|
446
|
+
- **Html** → **NotionText** (`props.contents` wrapped into `props.html`)
|
|
447
|
+
- **Heading** → **NotionText** (`props.text` wrapped into `<hN>…</hN>` in `props.html`)
|
|
448
|
+
|
|
449
|
+
Other previously-supported types (`Wysiwyg`, `Text`, `Avatar`) were fully retired and are no longer migrated — old documents containing them will silently drop those blocks.
|
|
450
|
+
|
|
451
|
+
## Usage
|
|
452
|
+
|
|
453
|
+
There are three ways to use the builder:
|
|
454
|
+
|
|
455
|
+
### 1) As a React component with Ref (recommended for programmatic control)
|
|
456
|
+
|
|
457
|
+
Use a ref to control saving and access the document programmatically:
|
|
458
|
+
|
|
459
|
+
```tsx
|
|
460
|
+
import React, { useRef, useState, useEffect } from 'react';
|
|
461
|
+
import { EmailBuilder, EmailBuilderRef, TEditorConfiguration, MergeTag } from 'email-builder-online';
|
|
462
|
+
import 'email-builder-online/style.css';
|
|
463
|
+
|
|
464
|
+
// Custom Image Gallery Component
|
|
465
|
+
function MyImageGallery() {
|
|
466
|
+
const images = ['https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg'];
|
|
467
|
+
|
|
468
|
+
const handleImageSelect = (imageUrl: string) => {
|
|
469
|
+
window.dispatchEvent(
|
|
470
|
+
new CustomEvent('email-builder-set-image', {
|
|
471
|
+
detail: imageUrl,
|
|
472
|
+
})
|
|
473
|
+
);
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
return (
|
|
477
|
+
<div>
|
|
478
|
+
<h4>My Custom Gallery</h4>
|
|
479
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '8px' }}>
|
|
480
|
+
{images.map((img, idx) => (
|
|
481
|
+
<img
|
|
482
|
+
key={idx}
|
|
483
|
+
src={img}
|
|
484
|
+
onClick={() => handleImageSelect(img)}
|
|
485
|
+
style={{ cursor: 'pointer', width: '100%', borderRadius: '4px' }}
|
|
486
|
+
/>
|
|
487
|
+
))}
|
|
488
|
+
</div>
|
|
489
|
+
</div>
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// Custom Merge Tags
|
|
494
|
+
const customMergeTags: MergeTag[] = [
|
|
495
|
+
{
|
|
496
|
+
label: 'First Name',
|
|
497
|
+
value: '[first_name]',
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
label: 'Last Name',
|
|
501
|
+
value: '[last_name]',
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
label: 'Company',
|
|
505
|
+
value: '[company]',
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
type: 'divider',
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
label: 'Verification Link',
|
|
512
|
+
value: '{verify}Verify your account{/verify}',
|
|
513
|
+
},
|
|
514
|
+
];
|
|
515
|
+
|
|
516
|
+
export default function Page() {
|
|
517
|
+
const emailBuilderRef = useRef<EmailBuilderRef>(null);
|
|
518
|
+
const [document, setDocument] = useState<TEditorConfiguration | null>(null);
|
|
519
|
+
|
|
520
|
+
// Load saved document on mount
|
|
521
|
+
useEffect(() => {
|
|
522
|
+
const saved = localStorage.getItem('draft');
|
|
523
|
+
if (saved) {
|
|
524
|
+
setDocument(JSON.parse(saved));
|
|
525
|
+
}
|
|
526
|
+
}, []);
|
|
527
|
+
|
|
528
|
+
const handleSave = () => {
|
|
529
|
+
if (emailBuilderRef.current) {
|
|
530
|
+
const document = emailBuilderRef.current.save();
|
|
531
|
+
// Send to your backend
|
|
532
|
+
fetch('/api/save', {
|
|
533
|
+
method: 'POST',
|
|
534
|
+
body: JSON.stringify(document),
|
|
535
|
+
headers: { 'Content-Type': 'application/json' },
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
const handleExportHtml = () => {
|
|
541
|
+
if (emailBuilderRef.current) {
|
|
542
|
+
const html = emailBuilderRef.current.getHtml();
|
|
543
|
+
// Download HTML file or send to backend
|
|
544
|
+
const blob = new Blob([html], { type: 'text/html' });
|
|
545
|
+
const url = URL.createObjectURL(blob);
|
|
546
|
+
const a = document.createElement('a');
|
|
547
|
+
a.href = url;
|
|
548
|
+
a.download = 'email.html';
|
|
549
|
+
a.click();
|
|
550
|
+
URL.revokeObjectURL(url);
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
const handleSendEmail = async () => {
|
|
555
|
+
if (emailBuilderRef.current) {
|
|
556
|
+
const html = emailBuilderRef.current.getHtml();
|
|
557
|
+
// Send email via your backend
|
|
558
|
+
await fetch('/api/send-email', {
|
|
559
|
+
method: 'POST',
|
|
560
|
+
body: JSON.stringify({ html }),
|
|
561
|
+
headers: { 'Content-Type': 'application/json' },
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
return (
|
|
567
|
+
<div style={{ height: '100vh' }}>
|
|
568
|
+
<button onClick={handleSave}>Save</button>
|
|
569
|
+
<button onClick={handleExportHtml}>Export HTML</button>
|
|
570
|
+
<button onClick={handleSendEmail}>Send Email</button>
|
|
571
|
+
<EmailBuilder
|
|
572
|
+
ref={emailBuilderRef}
|
|
573
|
+
data={document}
|
|
574
|
+
onAutoSave={(doc) => localStorage.setItem('draft', JSON.stringify(doc))}
|
|
575
|
+
customImageProvider={<MyImageGallery />}
|
|
576
|
+
mergeTags={customMergeTags}
|
|
577
|
+
primaryColor="#0d9488"
|
|
578
|
+
secondaryColor="#0ea5a6"
|
|
579
|
+
locale="en"
|
|
580
|
+
height="calc(100vh - 80px)"
|
|
581
|
+
/>
|
|
582
|
+
</div>
|
|
583
|
+
);
|
|
584
|
+
}
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**Ref Methods:**
|
|
588
|
+
|
|
589
|
+
The `EmailBuilderRef` exposes the following methods:
|
|
590
|
+
|
|
591
|
+
- `getDocument(): TEditorConfiguration` - Returns the current editor document
|
|
592
|
+
- `setDocument(document: TEditorConfiguration): void` - Replaces the current document
|
|
593
|
+
- `save(): TEditorConfiguration` - Flushes pending changes, calls `onSave` (if provided) and returns the document
|
|
594
|
+
- `getHtml(): string` - Returns the rendered HTML for the current document
|
|
595
|
+
- `setImageUrl(blockId: string, url: string): void` - Sets the URL of an image block with the given ID and updates the document
|
|
596
|
+
|
|
597
|
+
### 2) As a React component (basic usage)
|
|
598
|
+
|
|
599
|
+
```tsx
|
|
600
|
+
import React from 'react';
|
|
601
|
+
import { EmailBuilder } from 'email-builder-online';
|
|
602
|
+
import 'email-builder-online/style.css';
|
|
603
|
+
|
|
604
|
+
export default function Page() {
|
|
605
|
+
return (
|
|
606
|
+
<div style={{ height: '100vh' }}>
|
|
607
|
+
<EmailBuilder
|
|
608
|
+
primaryColor="#0d9488"
|
|
609
|
+
secondaryColor="#0ea5a6"
|
|
610
|
+
darkMode={false}
|
|
611
|
+
stickyHeader
|
|
612
|
+
locale="en"
|
|
613
|
+
height="calc(100vh - 80px)"
|
|
614
|
+
/>
|
|
615
|
+
</div>
|
|
616
|
+
);
|
|
617
|
+
}
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### 3) As a Web Component (works in Nuxt 3, Vue, Svelte, plain HTML)
|
|
621
|
+
|
|
622
|
+
For Web Component usage, the component auto-registers in browser environments. Here's how to use it in different frameworks:
|
|
623
|
+
|
|
624
|
+
#### Nuxt 3 Example
|
|
625
|
+
|
|
626
|
+
1. Register the email builder component:
|
|
627
|
+
|
|
628
|
+
```ts
|
|
629
|
+
// plugins/email-builder.client.ts
|
|
630
|
+
import { registerEmailBuilder } from 'email-builder-online';
|
|
631
|
+
import 'email-builder-online/style.css';
|
|
632
|
+
|
|
633
|
+
export default defineNuxtPlugin(() => {
|
|
634
|
+
// Register the web component
|
|
635
|
+
registerEmailBuilder('email-builder');
|
|
636
|
+
});
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
#### Vanilla JavaScript Example
|
|
640
|
+
|
|
641
|
+
For plain HTML (no bundler, no React in the host page), use the **standalone build**.
|
|
642
|
+
It bundles React + ReactDOM, renders inside a Shadow DOM, and auto-registers the
|
|
643
|
+
`<email-builder>` element on load (no manual `registerEmailBuilder` call needed).
|
|
644
|
+
|
|
645
|
+
> The standalone files (`dist/standalone.js`, `dist/standalone.mjs`) are produced by
|
|
646
|
+
> `pnpm build:standalone` (or `pnpm build:all`). The regular `dist/index.*` build
|
|
647
|
+
> externalizes React and is meant for bundler-based apps, not plain `<script>` usage.
|
|
648
|
+
|
|
649
|
+
```html
|
|
650
|
+
<!DOCTYPE html>
|
|
651
|
+
<html>
|
|
652
|
+
<head>
|
|
653
|
+
<link rel="stylesheet" href="path/to/email-builder-online/dist/style.css" />
|
|
654
|
+
<!-- IIFE build (no module support needed); exposes window.EmailBuilder -->
|
|
655
|
+
<script src="path/to/email-builder-online/dist/standalone.js"></script>
|
|
656
|
+
</head>
|
|
657
|
+
<body>
|
|
658
|
+
<!-- Auto-registered on load -->
|
|
659
|
+
<email-builder></email-builder>
|
|
660
|
+
</body>
|
|
661
|
+
</html>
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
Or with the ES module variant:
|
|
665
|
+
|
|
666
|
+
```html
|
|
667
|
+
<link rel="stylesheet" href="path/to/email-builder-online/dist/style.css" />
|
|
668
|
+
<script type="module" src="path/to/email-builder-online/dist/standalone.mjs"></script>
|
|
669
|
+
<email-builder></email-builder>
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
Then use it anywhere in your templates (wrap in `<ClientOnly>` for Nuxt):
|
|
673
|
+
|
|
674
|
+
```vue
|
|
675
|
+
<template>
|
|
676
|
+
<ClientOnly>
|
|
677
|
+
<email-builder
|
|
678
|
+
primary-color="#0d9488"
|
|
679
|
+
secondary-color="#0ea5a6"
|
|
680
|
+
dark-mode="false"
|
|
681
|
+
sticky-header="true"
|
|
682
|
+
locale="en"
|
|
683
|
+
height="calc(100vh - 80px)"
|
|
684
|
+
/>
|
|
685
|
+
</ClientOnly>
|
|
686
|
+
</template>
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
For Vue/Nuxt, you can silence unknown element warnings by marking the tag as a custom element:
|
|
690
|
+
|
|
691
|
+
```ts
|
|
692
|
+
// nuxt.config.ts
|
|
693
|
+
export default defineNuxtConfig({
|
|
694
|
+
vue: {
|
|
695
|
+
compilerOptions: {
|
|
696
|
+
isCustomElement: (tag) => tag === 'email-builder',
|
|
697
|
+
},
|
|
698
|
+
},
|
|
699
|
+
css: ['email-builder-online/style.css'],
|
|
700
|
+
});
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
**Notes on SSR and dependencies:**
|
|
704
|
+
|
|
705
|
+
- The Web Component wrapper is registered only on the client. Use a client-only plugin in SSR frameworks.
|
|
706
|
+
- React and ReactDOM are peer dependencies for the package-based usage (React component and the `registerEmailBuilder` Web Component). Install them in your app or use a bundler that provides them. React 18 and 19 are supported. (The self-contained `standalone` build bundles its own React.)
|
|
707
|
+
- i18n dependencies (`i18next`, `react-i18next`, `i18next-browser-languagedetector`) are **bundled** with the package — you do not need to install them separately.
|
|
708
|
+
|
|
709
|
+
## Props / Attributes
|
|
710
|
+
|
|
711
|
+
React Props (camelCase) and Web Component attributes (dash-case) map 1:1:
|
|
712
|
+
|
|
713
|
+
| React Prop | Web Component Attribute | Type | Default | Description |
|
|
714
|
+
| ------------------- | ----------------------- | ---------------------------------------- | ------- | ---------------------------------------------------------------------------------------- |
|
|
715
|
+
| ref | - | React.Ref<EmailBuilderRef> | - | Ref to access component methods (getDocument, setDocument, save, getHtml, setImageUrl) |
|
|
716
|
+
| onSave | - | (document: TEditorConfiguration) => void | - | Callback when ref.save() is called |
|
|
717
|
+
| onAutoSave | - | (document: TEditorConfiguration) => void | - | Callback for auto-save (2s after changes) |
|
|
718
|
+
| data | data | TEditorConfiguration \| string | - | Document to load (reactive - updates when changed) |
|
|
719
|
+
| initialDocument | - | TEditorConfiguration \| string | - | Initial document to load on mount (one-time only) |
|
|
720
|
+
| customImageProvider | - | React.ReactNode | - | Custom image selector component to integrate your own image gallery |
|
|
721
|
+
| mergeTags | - | MergeTag[] \| MergeTagGroup | - | Custom merge tags to show in the text editor |
|
|
722
|
+
| primaryColor | primary-color | string | #058705 | Primary theme color |
|
|
723
|
+
| secondaryColor | secondary-color | string | #079707 | Secondary theme color |
|
|
724
|
+
| darkMode | dark-mode | boolean | false | Enable dark mode |
|
|
725
|
+
| height | height | string | - | Container height (e.g. "calc(100vh - 80px)") |
|
|
726
|
+
| stickyHeader | sticky-header | boolean | true | Sticky header behavior |
|
|
727
|
+
| sticky | sticky | boolean | false | Sticky content behavior |
|
|
728
|
+
| galleryImages | gallery-images | boolean | false | Enable image gallery |
|
|
729
|
+
| locale | locale | string | - | UI language (en, es, it, en-US, es-419, it-IT). Falls back to dataLocale if not provided |
|
|
730
|
+
| dataLocale | data-locale | string | - | Alternative locale prop (used as fallback if locale is not provided) |
|
|
731
|
+
| htmlTab | html-tab | boolean | true | Show HTML tab |
|
|
732
|
+
| jsonTab | json-tab | boolean | true | Show JSON tab |
|
|
733
|
+
| imagePlaceholder | image-placeholder | string | - | Default placeholder for images |
|
|
734
|
+
| imageUrlInput | image-url-input | boolean | true | Show the URL field in the Image block picker's Upload tab. When `false`, only the dropzone is rendered (subject to `imageUploadInput`). When both `imageUrlInput` and `imageUploadInput` are `false`, the Upload tab is hidden. |
|
|
735
|
+
| imageUploadInput | image-upload-input | boolean | true | Show the drag & drop / file upload zone in the Image block picker's Upload tab. When `false`, only the URL field is rendered (subject to `imageUrlInput`). When both `imageUrlInput` and `imageUploadInput` are `false`, the Upload tab is hidden. |
|
|
736
|
+
| backgroundUrlInput | background-url-input | boolean | true | Show the URL field in the Background image picker's Upload tab (Container, ColumnsContainer, EmailLayout). Same hide-on-both-false behavior as `imageUrlInput`. |
|
|
737
|
+
| backgroundUploadInput | background-upload-input | boolean | true | Show the drag & drop / file upload zone in the Background image picker's Upload tab. Same hide-on-both-false behavior as `imageUploadInput`. |
|
|
738
|
+
| enableAI | enable-ai | boolean | false | Enable AI features for text and image generation |
|
|
739
|
+
| onAIRequest | - | (request: AIFeatureRequest) => Promise\<string\> | - | Callback for AI text processing requests |
|
|
740
|
+
| onAIGenerateTemplate | - | (request: AIGenerateTemplateRequest, options: { signal: AbortSignal }) => Promise\<AIGenerateTemplateResponse\> | - | Callback for AI template generation (prompt → template). When undefined, the "Generate with AI" entry point is hidden |
|
|
741
|
+
| unsplashEnabled | - | boolean | false | Show the built-in Unsplash picker tab (requires the backend proxy) |
|
|
742
|
+
| unsplashBackendUrl | - | string | - | Override the backend URL used for Unsplash proxy calls |
|
|
743
|
+
| portalContainer | - | HTMLElement | - | Container element for MUI portals (menus, dialogs); useful when mounting inside Shadow DOM |
|
|
744
|
+
| showVersion | show-version | boolean | - | Show version indicator in the editor |
|
|
745
|
+
| componentTree | component-tree | boolean | true | Show the component tree panel |
|
|
746
|
+
|
|
747
|
+
## Internationalization (i18n)
|
|
748
|
+
|
|
749
|
+
The builder supports multiple languages. Pass the `locale` prop with one of the supported values:
|
|
750
|
+
|
|
751
|
+
- `en` or `en-US` - English (default)
|
|
752
|
+
- `es` or `es-419` - Spanish
|
|
753
|
+
- `it` or `it-IT` - Italian
|
|
754
|
+
|
|
755
|
+
```tsx
|
|
756
|
+
<EmailBuilder locale="es" />
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
## TypeScript
|
|
760
|
+
|
|
761
|
+
Types are shipped. You can import them as:
|
|
762
|
+
|
|
763
|
+
```ts
|
|
764
|
+
import type { EmailBuilderProps, AIFeatureRequest, MergeTag, MergeTagGroup, EmailBuilderRef } from 'email-builder-online';
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
The `AIFeatureRequest` interface:
|
|
768
|
+
|
|
769
|
+
```ts
|
|
770
|
+
interface AIFeatureRequest {
|
|
771
|
+
text: string; // Selected or relevant text
|
|
772
|
+
content: string; // Full block content
|
|
773
|
+
action: string; // AI action (rewrite, grammar_check, continue_writing, shorter, descriptive, detailed, friendly, professional)
|
|
774
|
+
blockId?: string; // Block ID where the request originated
|
|
775
|
+
}
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
## License
|
|
779
|
+
|
|
780
|
+
Free to use. © Laravel42. All rights reserved.
|
|
781
|
+
|
|
782
|
+
## Links
|
|
783
|
+
|
|
784
|
+
- 🌐 **Website:** [laravel42.com](https://laravel42.com/)
|
|
785
|
+
- 📦 **More Packages:** [npmjs.com/~laravel42](https://www.npmjs.com/~laravel42)
|
|
786
|
+
- 💼 **LinkedIn:** [Laravel42](https://www.linkedin.com/company/laravel42/)
|
|
787
|
+
- 📘 **Facebook:** [Laravel42](https://www.facebook.com/Laravel42)
|
|
788
|
+
- 📸 **Instagram:** [@laravel42\_](https://www.instagram.com/laravel42_/)
|
|
789
|
+
|
|
790
|
+
## Changelog
|
|
791
|
+
|
|
792
|
+
See Git history for details. Please open issues or PRs for bugs and improvements.
|