easy-email-pro-theme 1.0.2 → 1.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/lib/index.js CHANGED
@@ -57,7 +57,7 @@ var __async = (__this, __arguments, generator) => {
57
57
  import { classnames, useEditorState, useEditorProps, useRefState, isDOMElement, useEventCallback, useSelectedNode, validation, CustomEvent, ActiveTabKeys, EmailEditorProvider, EmailEditor, useForceUpdate, toggleFormat, TextFormat, IframeComponent, HtmlStringToReactNodes, isFormatActive } from "easy-email-pro-editor";
58
58
  import { useSlate, ReactEditor, useSlateStatic } from "slate-react";
59
59
  import * as React$2 from "react";
60
- import React__default, { useRef, useCallback as useCallback$1, useEffect, useMemo as useMemo$1, createContext, useState, useContext, useLayoutEffect, useReducer, memo, cloneElement, forwardRef, Suspense, Component, PureComponent } from "react";
60
+ import React__default, { useRef, useState, useEffect, useCallback as useCallback$1, useMemo as useMemo$1, createContext, useContext, useLayoutEffect, useReducer, memo, cloneElement, forwardRef, Suspense, Component, PureComponent } from "react";
61
61
  import { NodeUtils, BlockManager, ElementType, EditorCore, t, ElementCategory, classnames as classnames$1, StandardType, PluginManager, ConditionOperator, ConditionOperatorSymbol } from "easy-email-pro-core";
62
62
  import { Editor, Transforms, Path, Node as Node$1, createEditor, Text as Text$2, Range, Element as Element$1, Point } from "slate";
63
63
  import ReactDOM, { createPortal, unstable_batchedUpdates } from "react-dom";
@@ -402,7 +402,7 @@ const styleText$c = `@font-face {
402
402
  }
403
403
 
404
404
  `;
405
- const RetroStyleText = '[data-slate-block="page"] {\r\n min-height: 300px;\r\n}\r\n\r\n\r\n[data-slate-hover="true"] {\r\n z-index: 4;\r\n}\r\n\r\n\r\n[data-slate-focus="true"] {\r\n z-index: 3;\r\n}\r\n\r\n\r\n[data-slate-selected="true"] {\r\n z-index: 3;\r\n}\r\n\r\n\r\n[data-slate-hover="true"] .element-tools-container {\r\n z-index: 4;\r\n}\r\n\r\n\r\n.text-mergetag {\r\n outline: 1px solid rgb(78, 89, 105);\r\n outline-offset: 1px;\r\n padding: 0 2px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n transition: all 0.1s linear;\r\n border: none;\r\n font-weight: inherit;\r\n outline-color: #00a0ac;\r\n color: inherit;\r\n background-color: #ebf9fc;\r\n max-width: 10em;\r\n font-style: inherit;\r\n text-decoration-line: inherit;\r\n position: relative;\r\n}\r\n\r\n\r\nbody .element-tools-container {\n outline: 2px solid var(--hover-color);\n z-index: 1;\n}\r\n\r\n\r\nbody .element-tools-container .element-tools {\n color: #fff;\n background-color: var(--hover-color);\n}\r\n\r\n\r\nbody .element-tools-container .element-drag-button {\n background-color: var(--hover-color);\n}\r\n\r\n\r\n[data-slate-dragover=true] {\n z-index: 2;\n}\r\n\r\n\r\n[data-slate-dragover=true]::after {\n content: "";\n position: absolute;\n pointer-events: none;\n inset: 0px;\n border-radius: 3px;\n background: var(--drag-color);\n z-index: 10;\n left: 0;\n height: 4px;\n opacity: 1;\n}\r\n\r\n\r\n[data-slate-dragging=true] .element-tools-container {\n opacity: 0;\n}\r\n\r\n\r\n[data-slate-dragover-direction=top][data-slate-dragover=true]::after {\n top: 0px;\n}\r\n\r\n\r\n[data-slate-dragover-direction=bottom][data-slate-dragover=true]::after {\n top: auto;\n bottom: 0px;\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true] {\n outline: 2px dashed var(--drag-color);\n z-index: 2;\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true]::after {\n content: "";\n position: absolute;\n pointer-events: none;\n inset: 0px;\n border-radius: 3px;\n background: var(--drag-color);\n z-index: 1;\n left: 0;\n height: 100%;\n width: 100%;\n filter: opacity(10%);\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true] [data-slate-type=placeholder] {\n outline: none;\n}\r\n\r\n\r\n[data-slate-type=placeholder] {\n min-height: 64px;\n position: relative;\n background-color: rgba(242, 244, 245, 0.64);\n outline: rgb(43, 152, 211) dashed 1px;\n outline-offset: -1px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.3;\n color: rgb(48, 59, 67);\n margin: 0 20px;\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete {\n border-radius: 2px;\n padding: 0px;\n cursor: pointer;\n height: 28px;\n width: 28px;\n background-color: rgb(223, 227, 230);\n color: rgb(96, 106, 114);\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n left: 10px;\n top: 10px;\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete:hover {\n background-color: rgb(180, 187, 195);\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete svg {\n width: 20px;\n height: 20px;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] {\n z-index: 2;\n}\r\n\r\n\r\n.universal-element-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 10;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-mask {\n display: none;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask {\n z-index: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n inset: 0px;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask::before {\n content: " ";\n width: 10000px;\n height: 10000px;\n position: fixed;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%);\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask::after {\n position: absolute;\n content: " ";\n width: 100%;\n height: 100%;\n inset: 0px;\n pointer-events: none;\n outline: 9999px solid rgba(255, 255, 255, 0.6);\n}';
405
+ const RetroStyleText = '[data-slate-block="page"] {\r\n min-height: 300px;\r\n}\r\n\r\n\r\n[data-slate-hover="true"] {\r\n z-index: 4;\r\n}\r\n\r\n\r\n[data-slate-focus="true"] {\r\n z-index: 3;\r\n}\r\n\r\n\r\n[data-slate-selected="true"] {\r\n z-index: 3;\r\n}\r\n\r\n\r\n[data-slate-hover="true"] .element-tools-container {\r\n z-index: 4;\r\n}\r\n\r\n\r\n.text-mergetag {\r\n outline: 1px solid rgb(78, 89, 105);\r\n outline-offset: 1px;\r\n padding: 0 2px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n transition: all 0.1s linear;\r\n border: none;\r\n font-weight: inherit;\r\n outline-color: #00a0ac;\r\n color: inherit;\r\n background-color: #ebf9fc;\r\n max-width: 10em;\r\n font-style: inherit;\r\n text-decoration-line: inherit;\r\n position: relative;\r\n}\r\n\r\n\r\nbody .element-tools-container {\n outline: 2px solid var(--hover-color);\n z-index: 1;\n}\r\n\r\n\r\nbody .element-tools-container .element-tools {\n color: #fff;\n background-color: var(--hover-color);\n}\r\n\r\n\r\nbody .element-tools-container .element-drag-button {\n background-color: var(--hover-color);\n}\r\n\r\n\r\n[data-slate-dragover=true] {\n z-index: 2;\n}\r\n\r\n\r\n[data-slate-dragover=true]::after {\n content: "";\n position: absolute;\n pointer-events: none;\n inset: 0px;\n border-radius: 3px;\n background: var(--drag-color);\n z-index: 10;\n left: 0;\n height: 4px;\n opacity: 1;\n}\r\n\r\n\r\n[data-slate-dragging=true] .element-tools-container {\n opacity: 0;\n}\r\n\r\n\r\n[data-slate-dragover-direction=top][data-slate-dragover=true]::after {\n top: 0px;\n}\r\n\r\n\r\n[data-slate-dragover-direction=bottom][data-slate-dragover=true]::after {\n top: auto;\n bottom: 0px;\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true] {\n outline: 2px dashed var(--drag-color);\n z-index: 2;\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true]::after {\n content: "";\n position: absolute;\n pointer-events: none;\n inset: 0px;\n border-radius: 3px;\n background: var(--drag-color);\n z-index: 1;\n left: 0;\n height: 100%;\n width: 100%;\n filter: opacity(10%);\n}\r\n\r\n\r\n[data-slate-dragover-direction=middle][data-slate-dragover=true] [data-slate-type=placeholder] {\n outline: none;\n}\r\n\r\n\r\n[data-slate-type=placeholder] {\n min-height: 64px;\n position: relative;\n background-color: rgba(242, 244, 245, 0.64);\n outline: rgb(43, 152, 211) dashed 1px;\n outline-offset: -1px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.3;\n color: rgb(48, 59, 67);\n margin: 0 20px;\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete {\n border-radius: 2px;\n padding: 0px;\n cursor: pointer;\n height: 28px;\n width: 28px;\n background-color: rgb(223, 227, 230);\n color: rgb(96, 106, 114);\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n left: 10px;\n top: 10px;\n opacity: 0.8;\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete:hover {\n background-color: rgb(180, 187, 195);\n opacity: 1;\n}\r\n\r\n\r\n[data-slate-type=placeholder] .element-delete svg {\n width: 20px;\n height: 20px;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] {\n z-index: 2;\n}\r\n\r\n\r\n.universal-element-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 10;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-mask {\n display: none;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask {\n z-index: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n inset: 0px;\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask::before {\n content: " ";\n width: 10000px;\n height: 10000px;\n position: fixed;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%);\n}\r\n\r\n\r\n[data-slate-universal-editing=true] .universal-element-editing-mask::after {\n position: absolute;\n content: " ";\n width: 100%;\n height: 100%;\n inset: 0px;\n pointer-events: none;\n outline: 9999px solid rgba(255, 255, 255, 0.6);\n}';
406
406
  const withTheme$1 = (editor) => {
407
407
  const { insertBreak, normalizeNode, deleteBackward } = editor;
408
408
  editor.insertBreak = (...args) => {
@@ -479,11 +479,25 @@ const DraggingProvider = ({
479
479
  const editorProps = useEditorProps();
480
480
  const quantityLimitCheck = useRefState(editorProps.quantityLimitCheck);
481
481
  const editor = useSlate();
482
+ const [inited, setInited] = useState(false);
482
483
  let root2 = null;
483
484
  try {
484
485
  root2 = ReactEditor.getWindow(editor).document;
485
486
  } catch (error2) {
486
487
  }
488
+ useEffect(() => {
489
+ const timer = setInterval(() => {
490
+ try {
491
+ if (ReactEditor.getWindow(editor).document) {
492
+ setInited(true);
493
+ }
494
+ } catch (error2) {
495
+ }
496
+ }, 200);
497
+ return () => {
498
+ clearInterval(timer);
499
+ };
500
+ }, [editor]);
487
501
  const isDragging = useRefState(dragNodePath);
488
502
  const removePlaceholder3 = useCallback$1(() => {
489
503
  var _a2;
@@ -499,7 +513,7 @@ const DraggingProvider = ({
499
513
  setDragNodePath(null);
500
514
  }, [root2, setDragNodePath]);
501
515
  useEffect(() => {
502
- if (!root2)
516
+ if (!root2 || !inited)
503
517
  return;
504
518
  if (editorProps.readOnly)
505
519
  return;
@@ -755,6 +769,7 @@ const DraggingProvider = ({
755
769
  }, [
756
770
  editor,
757
771
  editorProps.readOnly,
772
+ inited,
758
773
  isDragging,
759
774
  quantityLimitCheck,
760
775
  removeDraggingStyle,
@@ -1706,7 +1721,7 @@ const ElementSelected$1 = ({ element, nodeElement, path: path2 }) => {
1706
1721
  nodeElement
1707
1722
  ));
1708
1723
  };
1709
- const styleText$8 = "[data-slate-block=page] {\n --sectionElementOffset: 100px ;\n}\n\n@media screen and (max-width: 1600px) {\n [data-slate-block=page] {\n --sectionElementOffset: 50px ;\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[data-is-full-width=true].section-category-hover {\n width: calc(100% - 4px);\n transform: none;\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);\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(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-full-width=true].wrapper-category-hover {\n width: calc(100% - 4px);\n transform: none;\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 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(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n position: absolute;\n}";
1724
+ const styleText$8 = "[data-slate-block=page] {\n --sectionElementOffset: 100px ;\n}\n\n@media screen and (max-width: 850px) {\n [data-slate-block=page] {\n --sectionElementOffset: 70px ;\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[data-is-full-width=true].section-category-hover {\n width: calc(100% - 4px);\n transform: none;\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);\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(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-full-width=true].wrapper-category-hover {\n width: calc(100% - 4px);\n transform: none;\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 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(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n}\n\n[data-is-wrapper-category=true].element-tools-container {\n width: calc(100% + 2 * var(--sectionElementOffset));\n transform: translate(calc(-1 * var(--sectionElementOffset)), 0);\n position: absolute;\n}";
1710
1725
  const ElementPlaceholder$1 = ({ element, nodeElement, isSelected, isHover, path: path2 }) => {
1711
1726
  const { deleteBlock } = useElementInteract();
1712
1727
  const onPointerDown = (ev) => {
@@ -1736,7 +1751,7 @@ const ElementPlaceholder$1 = ({ element, nodeElement, isSelected, isHover, path:
1736
1751
  }
1737
1752
  )))) : /* @__PURE__ */ React__default.createElement("div", { className: "wrapper-category-hover" }));
1738
1753
  } else if (element.type === ElementType.PLACEHOLDER) {
1739
- renderContent = /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement("div", { className: "element-delete" }, /* @__PURE__ */ React__default.createElement(IconDelete, { onPointerDown })), /* @__PURE__ */ React__default.createElement("div", null, t("Drop content here")));
1754
+ renderContent = /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement("div", { className: "element-delete" }, /* @__PURE__ */ React__default.createElement(IconDelete, { onPointerDown })), /* @__PURE__ */ React__default.createElement("div", { style: { textAlign: "center" } }, t("Drop content here")));
1740
1755
  }
1741
1756
  const isContentElement = NodeUtils.isContentElement(element);
1742
1757
  const isUniversalElement = NodeUtils.isUniversalElement(element);
@@ -16742,21 +16757,21 @@ const RichtextBar = (props) => {
16742
16757
  const lastTemplateRef = useRef(null);
16743
16758
  const calculateData = useMemo$1(() => {
16744
16759
  const pageElement = cloneDeep(omit$2(props.pageElement, "children"));
16745
- const template = {
16760
+ const template2 = {
16746
16761
  subject: "Blank",
16747
16762
  content: pageElement
16748
16763
  };
16749
16764
  let path2 = [];
16750
16765
  if (NodeUtils.isPageElement(props.value)) {
16751
- template.content = props.value;
16766
+ template2.content = props.value;
16752
16767
  path2 = [0];
16753
16768
  } else if (NodeUtils.isWrapperElement(props.value) || NodeUtils.isSectionElement(props.value) || NodeUtils.isHeroElement(props.value)) {
16754
- template.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16769
+ template2.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16755
16770
  children: [props.value]
16756
16771
  }));
16757
16772
  path2 = [0, 0];
16758
16773
  } else if (NodeUtils.isColumnElement(props.value) || NodeUtils.isGroupElement(props.value)) {
16759
- template.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16774
+ template2.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16760
16775
  children: [
16761
16776
  BlockManager.getBlockByType(ElementType.STANDARD_SECTION).create({
16762
16777
  children: [props.value],
@@ -16771,7 +16786,7 @@ const RichtextBar = (props) => {
16771
16786
  }));
16772
16787
  path2 = [0, 0, 0];
16773
16788
  } else if (NodeUtils.isContentElement(props.value)) {
16774
- template.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16789
+ template2.content = BlockManager.getBlockByType(ElementType.PAGE).create(__spreadProps(__spreadValues({}, pageElement), {
16775
16790
  children: [
16776
16791
  BlockManager.getBlockByType(ElementType.STANDARD_SECTION).create({
16777
16792
  children: [
@@ -16792,14 +16807,15 @@ const RichtextBar = (props) => {
16792
16807
  }));
16793
16808
  path2 = [0, 0, 0, 0];
16794
16809
  }
16795
- return [template, path2];
16810
+ return [template2, path2];
16796
16811
  }, [props.pageElement, props.value]);
16812
+ const template = calculateData[0];
16797
16813
  const initialValue = useMemo$1(() => {
16798
- if (!isEqual$3(lastTemplateRef.current, calculateData[0])) {
16799
- lastTemplateRef.current = calculateData[0];
16814
+ if (!isEqual$3(lastTemplateRef.current, template)) {
16815
+ lastTemplateRef.current = template;
16800
16816
  }
16801
16817
  return lastTemplateRef.current;
16802
- }, [calculateData[0]]);
16818
+ }, [template]);
16803
16819
  const onPageChange = useEventCallback(
16804
16820
  (page, editor2) => {
16805
16821
  const currentElement = Node$1.get(editor2, calculateData[1]);
@@ -16829,7 +16845,7 @@ const RichtextBar = (props) => {
16829
16845
  /* @__PURE__ */ React__default.createElement(FormProvider, null, /* @__PURE__ */ React__default.createElement(ResetContent, { initialValue })),
16830
16846
  /* @__PURE__ */ React__default.createElement("style", null, styleText$c)
16831
16847
  );
16832
- }, [props.height, clientId, initialValue]);
16848
+ }, [props.height, clientId, initialValue, editor, onPageChange]);
16833
16849
  };
16834
16850
  const ResetContent = ({ initialValue }) => {
16835
16851
  const { reset } = useEditorContext();
@@ -24903,7 +24919,8 @@ const TreeItem = forwardRef(
24903
24919
  moveable,
24904
24920
  removable,
24905
24921
  selected: selected2,
24906
- onSelect
24922
+ onSelect,
24923
+ onHover
24907
24924
  } = _f, props = __objRest(_f, [
24908
24925
  "childCount",
24909
24926
  "clone",
@@ -24924,7 +24941,8 @@ const TreeItem = forwardRef(
24924
24941
  "moveable",
24925
24942
  "removable",
24926
24943
  "selected",
24927
- "onSelect"
24944
+ "onSelect",
24945
+ "onHover"
24928
24946
  ]);
24929
24947
  return /* @__PURE__ */ React__default.createElement(
24930
24948
  "li",
@@ -24949,7 +24967,8 @@ const TreeItem = forwardRef(
24949
24967
  className: styles$1.TreeItem,
24950
24968
  ref: ref2,
24951
24969
  style: style2,
24952
- onClick: onSelect
24970
+ onClick: onSelect,
24971
+ onMouseEnter: onHover
24953
24972
  },
24954
24973
  onCollapse && /* @__PURE__ */ React__default.createElement(
24955
24974
  Action,
@@ -25010,7 +25029,8 @@ function SortableTreeItem(_g) {
25010
25029
  allowMove,
25011
25030
  allowRemove,
25012
25031
  isSelected,
25013
- onSelect
25032
+ onSelect,
25033
+ onHover
25014
25034
  } = _h, props = __objRest(_h, [
25015
25035
  "id",
25016
25036
  "depth",
@@ -25020,7 +25040,8 @@ function SortableTreeItem(_g) {
25020
25040
  "allowMove",
25021
25041
  "allowRemove",
25022
25042
  "isSelected",
25023
- "onSelect"
25043
+ "onSelect",
25044
+ "onHover"
25024
25045
  ]);
25025
25046
  const {
25026
25047
  attributes,
@@ -25039,7 +25060,7 @@ function SortableTreeItem(_g) {
25039
25060
  if (!activeItem)
25040
25061
  return false;
25041
25062
  return !allowDrop(activeItem, item2);
25042
- }, [activeItem, item2]);
25063
+ }, [activeItem, allowDrop, item2]);
25043
25064
  const moveable = useMemo$1(() => {
25044
25065
  return allowMove(item2);
25045
25066
  }, [allowMove, item2]);
@@ -25057,19 +25078,26 @@ function SortableTreeItem(_g) {
25057
25078
  transform: CSS.Translate.toString(transform),
25058
25079
  transition
25059
25080
  };
25060
- const setRef = useCallback$1((node) => {
25061
- setNodeRef(node);
25062
- setDraggableNodeRef(node);
25063
- }, []);
25081
+ const setRef = useCallback$1(
25082
+ (node) => {
25083
+ setNodeRef(node);
25084
+ setDraggableNodeRef(node);
25085
+ },
25086
+ [setDraggableNodeRef, setNodeRef]
25087
+ );
25064
25088
  const handleSelect = useCallback$1(() => {
25065
25089
  onSelect(item2);
25066
- }, [item2]);
25090
+ }, [item2, onSelect]);
25091
+ const handleHover = useCallback$1(() => {
25092
+ onHover(item2);
25093
+ }, [item2, onHover]);
25067
25094
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
25068
25095
  TreeItem,
25069
25096
  __spreadValues({
25070
25097
  ref: setRef,
25071
25098
  wrapperRef: setDroppableNodeRef,
25072
25099
  onSelect: handleSelect,
25100
+ onHover: handleHover,
25073
25101
  style: style2,
25074
25102
  depth,
25075
25103
  ghost: isDragging,
@@ -25194,6 +25222,7 @@ function SortableTree(_i) {
25194
25222
  id,
25195
25223
  item: props,
25196
25224
  onSelect: rest.onSelect,
25225
+ onHover: rest.onHover,
25197
25226
  renderTitle: rest.renderTitle,
25198
25227
  depth: id === activeId && projected ? projected.depth : depth,
25199
25228
  activeItem,
@@ -25219,6 +25248,7 @@ function SortableTree(_i) {
25219
25248
  SortableTreeItem,
25220
25249
  {
25221
25250
  onSelect: rest.onSelect,
25251
+ onHover: rest.onHover,
25222
25252
  isSelected: rest.isSelected,
25223
25253
  allowMove: rest.allowMove,
25224
25254
  allowRemove: rest.allowRemove,
@@ -25289,8 +25319,11 @@ const BlockLayer = () => {
25289
25319
  const { values: values2, inited } = useEditorContext();
25290
25320
  const editor = useSlate();
25291
25321
  const pageElement = values2.content;
25292
- const { selectedNodePath, setSelectedNodePath } = useEditorState();
25322
+ const { selectedNodePath, setSelectedNodePath, setHoverNodePath } = useEditorState();
25293
25323
  const { deleteBlock } = useElementInteract();
25324
+ const { layerConfig } = useEditorProps();
25325
+ const scrollWhenSelect = layerConfig == null ? void 0 : layerConfig.scrollWhenSelect;
25326
+ const scrollWhenHover = layerConfig == null ? void 0 : layerConfig.scrollWhenHover;
25294
25327
  const [items, setItems] = useState([]);
25295
25328
  useEffect(() => {
25296
25329
  const loop2 = (element, idx) => {
@@ -25345,13 +25378,10 @@ const BlockLayer = () => {
25345
25378
  },
25346
25379
  [editor]
25347
25380
  );
25348
- const allowRemove = useCallback$1(
25349
- (item2) => {
25350
- const isUnsetElement = NodeUtils.isUnsetElement(item2.data);
25351
- return !isUnsetElement;
25352
- },
25353
- [editor]
25354
- );
25381
+ const allowRemove = useCallback$1((item2) => {
25382
+ const isUnsetElement = NodeUtils.isUnsetElement(item2.data);
25383
+ return !isUnsetElement;
25384
+ }, []);
25355
25385
  const isSelected = useCallback$1(
25356
25386
  (item2) => {
25357
25387
  const currentPath = ReactEditor.findPath(editor, item2.data);
@@ -25366,8 +25396,37 @@ const BlockLayer = () => {
25366
25396
  (item2) => {
25367
25397
  const currentPath = ReactEditor.findPath(editor, item2.data);
25368
25398
  setSelectedNodePath(currentPath);
25399
+ if (scrollWhenSelect) {
25400
+ setTimeout(() => {
25401
+ const node = ReactEditor.toDOMNode(editor, item2.data);
25402
+ if (node) {
25403
+ node.scrollIntoView({
25404
+ block: "center",
25405
+ behavior: "smooth",
25406
+ inline: "center"
25407
+ });
25408
+ }
25409
+ }, 200);
25410
+ }
25369
25411
  },
25370
- [editor, selectedNodePath, setSelectedNodePath]
25412
+ [editor, scrollWhenSelect, setSelectedNodePath]
25413
+ );
25414
+ const onHover = useMemo$1(
25415
+ () => debounce$2((item2) => {
25416
+ const currentPath = ReactEditor.findPath(editor, item2.data);
25417
+ setHoverNodePath(currentPath);
25418
+ if (scrollWhenHover) {
25419
+ const node = ReactEditor.toDOMNode(editor, item2.data);
25420
+ if (node) {
25421
+ node.scrollIntoView({
25422
+ block: "center",
25423
+ behavior: "smooth",
25424
+ inline: "center"
25425
+ });
25426
+ }
25427
+ }
25428
+ }, 500),
25429
+ [editor, scrollWhenHover, setHoverNodePath]
25371
25430
  );
25372
25431
  const handleRemove = useCallback$1(
25373
25432
  (item2) => {
@@ -25389,7 +25448,7 @@ const BlockLayer = () => {
25389
25448
  );
25390
25449
  if (!inited)
25391
25450
  return null;
25392
- return /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement(
25451
+ return /* @__PURE__ */ React__default.createElement("div", { onMouseOut: (e) => e.stopPropagation() }, /* @__PURE__ */ React__default.createElement(
25393
25452
  SortableTree,
25394
25453
  {
25395
25454
  collapsible: true,
@@ -25404,6 +25463,7 @@ const BlockLayer = () => {
25404
25463
  allowMove,
25405
25464
  isSelected,
25406
25465
  onSelect,
25466
+ onHover,
25407
25467
  removable: true
25408
25468
  }
25409
25469
  ));
@@ -45512,7 +45572,7 @@ const ElementPlaceholder = ({ element, nodeElement, isSelected, isHover, path: p
45512
45572
  }
45513
45573
  )))) : /* @__PURE__ */ React__default.createElement("div", { className: "wrapper-category-hover" }));
45514
45574
  } else if (element.type === ElementType.PLACEHOLDER) {
45515
- renderContent = /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement("div", { className: "element-delete" }, /* @__PURE__ */ React__default.createElement(IconDelete, { onPointerDown })), /* @__PURE__ */ React__default.createElement("div", null, t("Drop content here")));
45575
+ renderContent = /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement("div", { className: "element-delete" }, /* @__PURE__ */ React__default.createElement(IconDelete, { onPointerDown })), /* @__PURE__ */ React__default.createElement("div", { style: { textAlign: "center" } }, t("Drop content here")));
45516
45576
  }
45517
45577
  const isContentElement = NodeUtils.isContentElement(element);
45518
45578
  const isUniversalElement = NodeUtils.isUniversalElement(element);
@@ -13,6 +13,7 @@ interface Props<T extends TreeItem> {
13
13
  allowRemove(item: any): boolean;
14
14
  isSelected(item: any): boolean;
15
15
  onSelect(item: any): void;
16
+ onHover(item: any): void;
16
17
  handleRemove(item: any): void;
17
18
  handleDrop(dragItem: T, dropItem: T): void;
18
19
  }
@@ -2,13 +2,14 @@
2
2
  import type { UniqueIdentifier } from "@dnd-kit/core";
3
3
  import { Props as TreeItemProps } from "./TreeItem";
4
4
  import { TreeItem as ITreeItem } from "../../types";
5
- interface Props extends Omit<TreeItemProps, "onSelect"> {
5
+ interface Props extends Omit<TreeItemProps, "onSelect" | "onHover"> {
6
6
  id: UniqueIdentifier;
7
7
  allowDrop: (dragItem: ITreeItem, dropItem: ITreeItem) => boolean;
8
8
  allowMove: (item: ITreeItem) => boolean;
9
9
  allowRemove: (item: ITreeItem) => boolean;
10
10
  isSelected: (item: ITreeItem) => boolean;
11
11
  onSelect: (item: ITreeItem) => void;
12
+ onHover: (item: ITreeItem) => void;
12
13
  }
13
- export declare function SortableTreeItem({ id, depth, allowDrop, activeItem, item, allowMove, allowRemove, isSelected, onSelect, ...props }: Props): JSX.Element;
14
+ export declare function SortableTreeItem({ id, depth, allowDrop, activeItem, item, allowMove, allowRemove, isSelected, onSelect, onHover, ...props }: Props): JSX.Element;
14
15
  export {};
@@ -21,5 +21,6 @@ export interface Props extends Omit<HTMLAttributes<HTMLLIElement>, "id"> {
21
21
  item: ITreeItem;
22
22
  renderTitle(item: ITreeItem): React.ReactNode;
23
23
  onSelect(): void;
24
+ onHover(): void;
24
25
  }
25
26
  export declare const TreeItem: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
@@ -81,6 +81,10 @@ export interface PluginsCustomEditorTypes {
81
81
  showSidebar?: boolean;
82
82
  showLogic?: boolean;
83
83
  showLayer?: boolean;
84
+ layerConfig?: {
85
+ scrollWhenSelect?: boolean;
86
+ scrollWhenHover?: boolean;
87
+ };
84
88
  compact?: boolean;
85
89
  height: string;
86
90
  unsplash?: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-email-pro-theme",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "",
5
5
  "files": [
6
6
  "lib"