easy-email-pro-theme 1.49.7 → 1.50.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/lib/index.js CHANGED
@@ -54,7 +54,7 @@ var __async = (__this, __arguments, generator) => {
54
54
  step((generator = generator.apply(__this, __arguments)).next());
55
55
  });
56
56
  };
57
- import { classnames, useEditorActions, useDragNodePath, useStandaloneElementEditing, useEditorProps, useRefState, isDOMElement, useMergeTagsData, useLockState, useEventCallback, useSelectedNodePath, useSelectedNode, useSetSelectedNodePath, useSetHoverNodePath, useUniversalElementEditing, useUniversalElementPath, useStandaloneElementPath, useStandaloneElement, useActiveTab, ActiveTabKeys, toggleFormat, TextFormat, useUniversalElement, isFormatActive, validation, CustomEvent, getDynamicImagePlaceholder, EmailEditorProvider, EmailEditor, useForceUpdate, IframeComponent, useEditorState, HtmlStringToReactNodes, useStandaloneElementSaveButton, useEqualState, useDragoverDirection } from "easy-email-pro-editor";
57
+ import { classnames, useEditorActions, useDragNodePath, useStandaloneElementEditing, useEditorProps, useRefState, isDOMElement, useMergeTagsData, useLockState, useEventCallback, useSelectedNodePath, useSelectedNode, useSetSelectedNodePath, useSetHoverNodePath, useUniversalElementEditing, useUniversalElementPath, useStandaloneElementPath, useStandaloneElement, useActiveTab, ActiveTabKeys, toggleFormat, TextFormat, useUniversalElement, isFormatActive, validation, CustomEvent, getDynamicImagePlaceholder, EmailEditorProvider, EmailEditor, useForceUpdate, IframeComponent, useEditorState, HtmlStringToReactNodes, useStandaloneElementSaveButton, useEqualState, ExternalComponents, useDragoverDirection } from "easy-email-pro-editor";
58
58
  import { useSlate, ReactEditor, useSlateStatic, useSelected } from "slate-react";
59
59
  import * as React$2 from "react";
60
60
  import React__default, { useRef, useState, useEffect, useCallback, useMemo, createContext, useContext, useLayoutEffect, memo, useReducer, cloneElement, forwardRef, Suspense, Component, createElement } from "react";
@@ -66,8 +66,8 @@ import { Form, Input, Modal, Collapse, Space, Empty, Card, Grid, Button as Butto
66
66
  import { IconPlus, IconDelete, IconEdit, IconLeft, IconCopy, IconUndo, IconRedo, IconMinus, IconEye, IconSubscribeAdd, IconClose, IconCheckCircleFill, IconDragArrow, IconLock, IconUnlock, IconQuestionCircle, IconLink, IconCloud, IconSend, IconDown } from "@arco-design/web-react/icon";
67
67
  import { unstable_batchedUpdates, createPortal } from "react-dom";
68
68
  import mjml from "mjml-browser";
69
- import { renderToStaticMarkup } from "react-dom/server";
70
69
  import { HistoryEditor } from "slate-history";
70
+ import { renderToStaticMarkup } from "react-dom/server";
71
71
  const styleText$h = `@font-face {
72
72
  font-family: "iconfont"; /* Project id 4003152 */
73
73
  src: url('data:font/woff2;base64,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') format('woff2'),
@@ -697,13 +697,20 @@ function IconFont(props) {
697
697
  );
698
698
  }
699
699
  const assignIdsToElementTree = (element, overwrite = false) => {
700
+ const map = /* @__PURE__ */ new Map();
700
701
  const newElement = cloneDeep(element);
701
702
  const loop2 = (node) => {
702
703
  if (NodeUtils.isElement(node)) {
703
704
  if (overwrite) {
704
705
  node.id = nanoid();
705
706
  } else {
706
- node.id = node.id || nanoid();
707
+ if (map.has(node.id)) {
708
+ const newId = nanoid();
709
+ node.id = newId;
710
+ console.log(`have same id ${node.id}, regenerate ${newId}`);
711
+ } else {
712
+ map.set(node.id, true);
713
+ }
707
714
  }
708
715
  if (node.children) {
709
716
  node.children.forEach(loop2);
@@ -732,11 +739,18 @@ const DraggingProvider = ({
732
739
  const editor = useSlate();
733
740
  const [inited, setInited] = useState(false);
734
741
  const [isDragging, setIsDragging] = useState(false);
742
+ const autoScrollIntervalRef = useRef(null);
743
+ const lastThrottleTime = useRef(0);
744
+ const THROTTLE_DELAY = 100;
735
745
  let root2 = null;
746
+ let rootWindow = null;
736
747
  try {
737
748
  root2 = ReactEditor.getWindow(editor).document;
749
+ rootWindow = ReactEditor.getWindow(editor);
738
750
  } catch (error2) {
739
751
  }
752
+ const autoScrollConfig = useRefState(editorProps.autoScroll);
753
+ const dragoverType = editorProps.dragoverType;
740
754
  useEffect(() => {
741
755
  if (!root2)
742
756
  return;
@@ -779,7 +793,84 @@ const DraggingProvider = ({
779
793
  return;
780
794
  if (editorProps.readOnly)
781
795
  return;
796
+ let lastScrollClientY = 0;
797
+ const handleAutoScroll = (clientY) => {
798
+ if (!root2)
799
+ return;
800
+ const hasMoved = Math.abs(clientY - lastScrollClientY) > 20;
801
+ if (hasMoved) {
802
+ lastScrollClientY = clientY;
803
+ if (autoScrollIntervalRef.current !== null) {
804
+ window.clearInterval(autoScrollIntervalRef.current);
805
+ autoScrollIntervalRef.current = null;
806
+ }
807
+ return;
808
+ }
809
+ const scrollContainer = root2.defaultView;
810
+ if (!scrollContainer)
811
+ return;
812
+ const inputConfig = autoScrollConfig.current === true ? {} : autoScrollConfig.current;
813
+ const config = __spreadValues({
814
+ scrollSpeed: 10,
815
+ bottomTriggerArea: 50,
816
+ topTriggerArea: 50,
817
+ scrollDelay: 300
818
+ }, inputConfig);
819
+ const scrollSpeed = config.scrollSpeed;
820
+ const bottomTriggerArea = config.bottomTriggerArea;
821
+ const topTriggerArea = config.topTriggerArea;
822
+ const scrollDelay = config.scrollDelay;
823
+ const viewportHeight = rootWindow.innerHeight;
824
+ const scrollTop = scrollContainer.scrollY;
825
+ const scrollHeight = root2.body.scrollHeight;
826
+ if (autoScrollIntervalRef.current !== null) {
827
+ return;
828
+ }
829
+ const distanceFromBottom = viewportHeight - clientY;
830
+ if (distanceFromBottom < bottomTriggerArea && scrollTop + viewportHeight < scrollHeight - 5) {
831
+ lastScrollClientY = clientY;
832
+ const scrollTimer = setTimeout(() => {
833
+ autoScrollIntervalRef.current = window.setInterval(() => {
834
+ const currentScrollY = scrollContainer.scrollY;
835
+ const currentViewportHeight = rootWindow.innerHeight;
836
+ const currentScrollHeight = root2.body.scrollHeight;
837
+ if (currentScrollY + currentViewportHeight >= currentScrollHeight - 5) {
838
+ if (autoScrollIntervalRef.current) {
839
+ window.clearInterval(autoScrollIntervalRef.current);
840
+ autoScrollIntervalRef.current = null;
841
+ }
842
+ return;
843
+ }
844
+ scrollContainer.scrollBy(0, scrollSpeed);
845
+ }, 16);
846
+ }, scrollDelay);
847
+ autoScrollIntervalRef.current = scrollTimer;
848
+ return;
849
+ }
850
+ if (clientY < topTriggerArea && scrollTop > 0) {
851
+ lastScrollClientY = clientY;
852
+ const scrollTimer = setTimeout(() => {
853
+ autoScrollIntervalRef.current = window.setInterval(() => {
854
+ const currentScrollY = scrollContainer.scrollY;
855
+ if (currentScrollY <= 0) {
856
+ if (autoScrollIntervalRef.current) {
857
+ window.clearInterval(autoScrollIntervalRef.current);
858
+ autoScrollIntervalRef.current = null;
859
+ }
860
+ return;
861
+ }
862
+ scrollContainer.scrollBy(0, -scrollSpeed);
863
+ }, 16);
864
+ }, scrollDelay);
865
+ autoScrollIntervalRef.current = scrollTimer;
866
+ return;
867
+ }
868
+ };
782
869
  const onDragover = (ev) => {
870
+ if (propsDataRef.current && autoScrollConfig.current) {
871
+ handleAutoScroll(ev.clientY);
872
+ }
873
+ const now2 = Date.now();
783
874
  const removeSelectedStyle = () => {
784
875
  root2 == null ? void 0 : root2.querySelectorAll("[data-slate-dragover='true']").forEach((item2) => item2.removeAttribute("data-slate-dragover"));
785
876
  root2 == null ? void 0 : root2.querySelectorAll("[data-slate-dragover-direction]").forEach(
@@ -901,6 +992,12 @@ const DraggingProvider = ({
901
992
  return;
902
993
  }
903
994
  ev.preventDefault();
995
+ if (dragoverType === "placeholder") {
996
+ if (now2 - lastThrottleTime.current < THROTTLE_DELAY) {
997
+ return;
998
+ }
999
+ lastThrottleTime.current = now2;
1000
+ }
904
1001
  const node = ReactEditor.toDOMNode(editor, dropElement);
905
1002
  const rect = node.getBoundingClientRect();
906
1003
  const isTop = ev.clientY < rect.y + rect.height / 2;
@@ -944,6 +1041,10 @@ const DraggingProvider = ({
944
1041
  }
945
1042
  };
946
1043
  const onDrop = (ev) => {
1044
+ if (autoScrollIntervalRef.current !== null) {
1045
+ window.clearInterval(autoScrollIntervalRef.current);
1046
+ autoScrollIntervalRef.current = null;
1047
+ }
947
1048
  removePlaceholder();
948
1049
  setIsDragging(false);
949
1050
  const propsData = propsDataRef.current;
@@ -1106,17 +1207,27 @@ const DraggingProvider = ({
1106
1207
  removeDraggingStyle();
1107
1208
  setHoverNodePath(null);
1108
1209
  removePlaceholder();
1210
+ if (autoScrollIntervalRef.current !== null) {
1211
+ window.clearInterval(autoScrollIntervalRef.current);
1212
+ autoScrollIntervalRef.current = null;
1213
+ }
1109
1214
  }
1110
1215
  };
1111
1216
  root2.addEventListener("dragover", onDragover, false);
1112
1217
  root2.addEventListener("mousemove", onMousemove);
1113
1218
  root2.addEventListener("drop", onDrop);
1114
1219
  return () => {
1220
+ if (autoScrollIntervalRef.current !== null) {
1221
+ window.clearInterval(autoScrollIntervalRef.current);
1222
+ autoScrollIntervalRef.current = null;
1223
+ }
1115
1224
  root2 == null ? void 0 : root2.removeEventListener("dragover", onDragover, false);
1116
1225
  root2 == null ? void 0 : root2.removeEventListener("drop", onDrop);
1117
1226
  root2 == null ? void 0 : root2.removeEventListener("mousemove", onMousemove);
1118
1227
  };
1119
1228
  }, [
1229
+ autoScrollConfig,
1230
+ dragoverType,
1120
1231
  editor,
1121
1232
  editorProps.readOnly,
1122
1233
  inited,
@@ -1125,6 +1236,7 @@ const DraggingProvider = ({
1125
1236
  removeDraggingStyle,
1126
1237
  removePlaceholder,
1127
1238
  root2,
1239
+ rootWindow,
1128
1240
  setDragoverDirection,
1129
1241
  setDragoverNodePath,
1130
1242
  setHoverNodePath,
@@ -1167,6 +1279,10 @@ const DraggingProvider = ({
1167
1279
  setIsDragging(true);
1168
1280
  },
1169
1281
  onDragEnd() {
1282
+ if (autoScrollIntervalRef.current !== null) {
1283
+ window.clearInterval(autoScrollIntervalRef.current);
1284
+ autoScrollIntervalRef.current = null;
1285
+ }
1170
1286
  removeDraggingStyle();
1171
1287
  setHoverNodePath(null);
1172
1288
  removePlaceholder();
@@ -2256,7 +2372,7 @@ const ElementSelected = ({ element, nodeElement, path: path2 }) => {
2256
2372
  const renderContent = /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(ElementTools$1, { element, nodeElement, path: path2 }), /* @__PURE__ */ React__default.createElement("style", null, styleText$e));
2257
2373
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, renderContent);
2258
2374
  };
2259
- const styleText$d = "[data-slate-block=page] {\n --sectionElementOffset: 100px;\n --wrapperElementOffset: 150px;\n}\n\n@media screen and (max-width: 850px) {\n [data-slate-block=page] {\n --sectionElementOffset: 70px;\n --wrapperElementOffset: 100px;\n }\n}\n.section-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n.hero-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-full-width=true].section-category-hover {\n width: calc(100% - 4px);\n transform: none;\n}\n\n[data-is-hero-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-section-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-section-category=true][data-is-full-width=true].element-tools-container {\n width: calc(100% - 4px - 16px);\n transform: none;\n}\n\n.wrapper-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n}\n\n[data-is-full-width=true].wrapper-category-hover {\n width: calc(100% - 4px - 16px);\n transform: none;\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n position: absolute;\n}\n\n[data-is-wrapper-category=true][data-is-full-width=true].element-tools-container {\n width: calc(100% - 4px);\n transform: none;\n}\n\n.wrapper-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n position: absolute;\n}";
2375
+ const styleText$d = "body {\n --sectionElementOffset: 100px;\n --wrapperElementOffset: 150px;\n}\n\n@media screen and (max-width: 850px) {\n [data-slate-block=page] {\n --sectionElementOffset: 70px;\n --wrapperElementOffset: 100px;\n }\n}\n.section-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n.hero-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-full-width=true].section-category-hover {\n width: calc(100% - 4px);\n transform: none;\n}\n\n[data-is-hero-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-section-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-section-category=true][data-is-full-width=true].element-tools-container {\n width: calc(100% - 4px - 16px);\n transform: none;\n}\n\n.wrapper-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n}\n\n[data-is-full-width=true].wrapper-category-hover {\n width: calc(100% - 4px - 16px);\n transform: none;\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n position: absolute;\n}\n\n[data-is-wrapper-category=true][data-is-full-width=true].element-tools-container {\n width: calc(100% - 4px);\n transform: none;\n}\n\n.wrapper-category-hover {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--wrapperElementOffset));\n transform: translate(calc(-1 * var(--wrapperElementOffset)), 0);\n position: absolute;\n}";
2260
2376
  const styleText$c = "[data-standard-table2-selected=true] ::selection {\n background: none !important;\n}\n\n[data-standard-table2-selected=true] [data-standard-table2-td-selected=true] {\n background-color: rgba(199, 199, 199, 0.4) !important;\n}";
2261
2377
  const styleText$b = ".easy-email-pro-table-operation-menu {\n position: fixed;\n z-index: 999999;\n background-color: #fff;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n font-size: 14px;\n z-index: 100;\n overflow: hidden;\n border-radius: 4px;\n padding: 4px 0;\n}\n.easy-email-pro-table-operation-menu .easy-email-pro-table-operation-menu-dividing {\n height: 1px;\n background-color: #efefef;\n}\n.easy-email-pro-table-operation-menu .easy-email-pro-table-operation-menu-item {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n line-height: 18px;\n background-color: #fff;\n cursor: pointer;\n color: #595959;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.easy-email-pro-table-operation-menu .easy-email-pro-table-operation-menu-item:hover {\n background-color: #efefef;\n}\n.easy-email-pro-table-operation-menu .easy-email-pro-table-operation-menu-item .easy-email-pro-table-operation-menu-icon {\n margin-right: 8px;\n height: 20px;\n width: 20px;\n font-size: 0;\n}";
2262
2378
  const stylesText$1 = '.BlockSideBar .arco-tabs-header {\n display: flex;\n width: 100%;\n}\n.BlockSideBar .arco-tabs-header .arco-tabs-header-title {\n flex: 1;\n margin: 0px !important;\n padding: 0 !important;\n height: 60px;\n line-height: 60px;\n position: relative;\n}\n.BlockSideBar .arco-tabs-header .arco-tabs-header-title:hover::after {\n content: "";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n top: initial;\n height: 2px;\n background-color: var(--color-border-3);\n transition: left 0.2s cubic-bezier(0.34, 0.69, 0.1, 1), width 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);\n}\n.BlockSideBar .arco-tabs-header .arco-tabs-header-title .arco-tabs-header-title-text {\n display: block;\n text-align: center;\n width: 100%;\n}\n.BlockSideBar .arco-tabs-header .arco-tabs-header-title .arco-tabs-header-title-text::before {\n display: none;\n}\n.BlockSideBar .arco-tabs-content {\n padding-top: 0;\n}\n\n.ConfigurationSideBar {\n height: 60px;\n line-height: 60px;\n position: relative;\n border-bottom: 1px solid #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgb(var(--primary-6));\n font-weight: 500;\n}';
@@ -7969,7 +8085,14 @@ const EditorTabs = (props) => {
7969
8085
  TabHeader,
7970
8086
  {
7971
8087
  className: "easy-email-pro-editor-tabs",
7972
- right: /* @__PURE__ */ React__default.createElement(Space, null, !universalElementEditing && !standaloneElementEditing && !readOnly && /* @__PURE__ */ React__default.createElement(Tooltip, { content: t("clear the entire canvas") }, /* @__PURE__ */ React__default.createElement(
8088
+ left: /* @__PURE__ */ React__default.createElement(Space, null, showBlockPaths && /* @__PURE__ */ React__default.createElement(
8089
+ BlockPaths,
8090
+ {
8091
+ standaloneElementPath,
8092
+ universalElementPath
8093
+ }
8094
+ ), props.left),
8095
+ right: /* @__PURE__ */ React__default.createElement(Space, null, props.right, !universalElementEditing && !standaloneElementEditing && !readOnly && /* @__PURE__ */ React__default.createElement(Tooltip, { content: t("clear the entire canvas") }, /* @__PURE__ */ React__default.createElement(
7973
8096
  Button$2,
7974
8097
  {
7975
8098
  className: "easy-email-pro-editor-tabs-clear-btn",
@@ -7990,14 +8113,7 @@ const EditorTabs = (props) => {
7990
8113
  disabled: lock
7991
8114
  },
7992
8115
  /* @__PURE__ */ React__default.createElement(IconEye, null)
7993
- )))), /* @__PURE__ */ React__default.createElement("div", null)),
7994
- left: /* @__PURE__ */ React__default.createElement("div", null, showBlockPaths && /* @__PURE__ */ React__default.createElement(
7995
- BlockPaths,
7996
- {
7997
- standaloneElementPath,
7998
- universalElementPath
7999
- }
8000
- ))
8116
+ )))), /* @__PURE__ */ React__default.createElement("div", null))
8001
8117
  }
8002
8118
  ), /* @__PURE__ */ React__default.createElement(
8003
8119
  "div",
@@ -36364,6 +36480,23 @@ const StandaloneElementSaveButtonPortal = (props) => {
36364
36480
  }, [cacheProps, setStandaloneElementSaveButton]);
36365
36481
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null);
36366
36482
  };
36483
+ const DraggingPlaceholderWrapper = (props) => {
36484
+ const isDragover = get(props.attributes, "data-slate-dragover");
36485
+ const isDragging = get(props.attributes, "data-slate-dragging");
36486
+ return /* @__PURE__ */ React__default.createElement(
36487
+ "div",
36488
+ {
36489
+ className: classnames$1(
36490
+ "render-with-block-container",
36491
+ isDragover && "render-with-block-container-is-dragover",
36492
+ isDragging && "render-with-block-container-is-dragging"
36493
+ )
36494
+ },
36495
+ props.children,
36496
+ props.placeholder
36497
+ );
36498
+ };
36499
+ ExternalComponents.ChildrenWithPlaceholderWrapper = DraggingPlaceholderWrapper;
36367
36500
  const SharedComponents = {
36368
36501
  PreviewEmailDrawer,
36369
36502
  PreviewEmail,
@@ -37418,7 +37551,7 @@ const useCreateConfig$1 = (_k) => {
37418
37551
  initialValues
37419
37552
  });
37420
37553
  };
37421
- const Layout$1 = ({ children, footer, header }) => {
37554
+ const Layout$1 = ({ children, footer, header, tabLeft, tabRight }) => {
37422
37555
  const { inited, values } = useEditorContext();
37423
37556
  const {
37424
37557
  showSidebar = true,
@@ -37507,7 +37640,15 @@ const Layout$1 = ({ children, footer, header }) => {
37507
37640
  },
37508
37641
  /* @__PURE__ */ React__default.createElement(SharedComponents.BlockSideBar, { height })
37509
37642
  ),
37510
- /* @__PURE__ */ React__default.createElement("div", { style: { height, minWidth: 800, flex: 1 } }, /* @__PURE__ */ React__default.createElement(SharedComponents.EditorTabs, { header, footer }, /* @__PURE__ */ React__default.createElement(EmailEditor, null, /* @__PURE__ */ React__default.createElement("style", { id: "Retro-CSS" }, styleText$h, RetroStyleText, `
37643
+ /* @__PURE__ */ React__default.createElement("div", { style: { height, minWidth: 800, flex: 1 } }, /* @__PURE__ */ React__default.createElement(
37644
+ SharedComponents.EditorTabs,
37645
+ {
37646
+ header,
37647
+ footer,
37648
+ left: tabLeft,
37649
+ right: tabRight
37650
+ },
37651
+ /* @__PURE__ */ React__default.createElement(EmailEditor, null, /* @__PURE__ */ React__default.createElement("style", { id: "Retro-CSS" }, styleText$h, RetroStyleText, `
37511
37652
  body {
37512
37653
  --page-width: ${pageDataWidth}px;
37513
37654
  }
@@ -37518,7 +37659,8 @@ const Layout$1 = ({ children, footer, header }) => {
37518
37659
  transition: transform 0.2s ease;
37519
37660
  }
37520
37661
 
37521
- `), children))),
37662
+ `), children)
37663
+ )),
37522
37664
  showSidebar && compact && /* @__PURE__ */ React__default.createElement(
37523
37665
  Layout$2.Sider,
37524
37666
  {
@@ -37541,6 +37683,8 @@ const Layout$1 = ({ children, footer, header }) => {
37541
37683
  pageDataWidth,
37542
37684
  showSidebar,
37543
37685
  sidebarWidth,
37686
+ tabLeft,
37687
+ tabRight,
37544
37688
  widgetMode,
37545
37689
  zoom
37546
37690
  ]);
@@ -0,0 +1,9 @@
1
+ import { Element } from "easy-email-pro-core";
2
+ import React from "react";
3
+ import { RenderElementProps } from "slate-react";
4
+ export declare const DraggingPlaceholderWrapper: (props: {
5
+ children: React.ReactNode;
6
+ attributes: RenderElementProps["attributes"];
7
+ placeholder: React.ReactNode;
8
+ element: Element;
9
+ }) => React.JSX.Element;
@@ -3,4 +3,6 @@ export declare const EditorTabs: React.FC<{
3
3
  children: React.ReactNode;
4
4
  header?: React.ReactNode;
5
5
  footer?: React.ReactNode;
6
+ left?: React.ReactNode;
7
+ right?: React.ReactNode;
6
8
  }>;
@@ -58,6 +58,8 @@ export declare const SharedComponents: {
58
58
  children: import("react").ReactNode;
59
59
  header?: import("react").ReactNode;
60
60
  footer?: import("react").ReactNode;
61
+ left?: import("react").ReactNode;
62
+ right?: import("react").ReactNode;
61
63
  }>;
62
64
  UniversalElementEditorDrawer: import("react").FC<{
63
65
  children: import("react").ReactNode;
@@ -7,5 +7,7 @@ export declare const Retro: {
7
7
  children?: React.ReactNode;
8
8
  header?: React.ReactNode;
9
9
  footer?: React.ReactNode;
10
+ tabLeft?: React.ReactNode;
11
+ tabRight?: React.ReactNode;
10
12
  }>;
11
13
  };
@@ -165,6 +165,12 @@ export interface PluginsCustomEditorTypes {
165
165
  path: Path;
166
166
  }>;
167
167
  dragoverType?: "line" | "placeholder";
168
+ autoScroll?: {
169
+ scrollSpeed?: number;
170
+ bottomTriggerArea?: number;
171
+ topTriggerArea?: number;
172
+ scrollDelay?: number;
173
+ } | true;
168
174
  };
169
175
  EmailTemplate: BasicEmailTemplate;
170
176
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-email-pro-theme",
3
- "version": "1.49.7",
3
+ "version": "1.50.0",
4
4
  "description": "",
5
5
  "files": [
6
6
  "lib"