@ivanholiak/easy-email-extensions 4.16.8 → 4.16.10

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/index2.js CHANGED
@@ -52,7 +52,7 @@ var __async = (__this, __arguments, generator) => {
52
52
  };
53
53
  import * as React$1 from "react";
54
54
  import React__default, { createContext, useContext, isValidElement, Children, cloneElement, Component, useRef, useMemo, memo, forwardRef, createRef, useState, useImperativeHandle, useEffect, useLayoutEffect, useCallback, PureComponent, useReducer, Fragment, Suspense } from "react";
55
- import { IconFont, useEditorProps, Stack as Stack$4, useRefState, getShadowRoot, DATA_CONTENT_EDITABLE_TYPE, ContentEditableType, TextStyle, useEditorContext, useBlock, useFocusIdx, DATA_CONTENT_EDITABLE_IDX, useFocusBlockLayout, MergeTagBadge, AvailableTools, FIXED_CONTAINER_ID, getPluginElement, RICH_TEXT_BAR_ID, CONTENT_EDITABLE_CLASS_NAME, getEditorRoot, scrollBlockEleIntoView, useHoverIdx, useDataTransfer, getBlockNodeByChildEle, getDirectionPosition, DATA_ATTRIBUTE_DROP_CONTAINER, BlockAvatarWrapper, isTextBlock, getBlockNodeByIdx, useLazyState, useActiveTab, ActiveTabKeys } from "@ivanholiak/easy-email-editor";
55
+ import { IconFont, useEditorProps, Stack as Stack$4, useRefState, getShadowRoot, DATA_CONTENT_EDITABLE_TYPE, ContentEditableType, MergeTagBadge, TextStyle, useEditorContext, useBlock, useFocusIdx, DATA_CONTENT_EDITABLE_IDX, useFocusBlockLayout, AvailableTools, FIXED_CONTAINER_ID, getPluginElement, RICH_TEXT_BAR_ID, CONTENT_EDITABLE_CLASS_NAME, getEditorRoot, scrollBlockEleIntoView, useHoverIdx, useDataTransfer, getBlockNodeByChildEle, getDirectionPosition, DATA_ATTRIBUTE_DROP_CONTAINER, BlockAvatarWrapper, isTextBlock, getBlockNodeByIdx, useLazyState, useActiveTab, ActiveTabKeys } from "@ivanholiak/easy-email-editor";
56
56
  import { BasicType, ImageManager, EMAIL_BLOCK_CLASS_NAME, BlockManager, createBlockDataByType, AdvancedType, Operator, OperatorSymbol, isAdvancedBlock, getParentByIdx, getParentIdx, getIndexByIdx, getSiblingIdx, getNodeIdxFromClassName, getNodeIdxClassName, getPageIdx, getChildIdx, JsonToMjml, getNodeTypeFromClassName } from "@ivanholiak/easy-email-core";
57
57
  import ReactDOM$1, { createPortal } from "react-dom";
58
58
  import { Field, useForm as useForm$1, useField, Form as Form$3, version as version$2, useFormState as useFormState$2 } from "react-final-form";
@@ -35980,6 +35980,7 @@ function InlineText({ idx, onChange, children }) {
35980
35980
  const {
35981
35981
  mutators: { setFieldTouched }
35982
35982
  } = useForm$1();
35983
+ const { enabledMergeTagsBadge, mergeTagGenerate } = useEditorProps();
35983
35984
  useField(idx);
35984
35985
  useEffect(() => {
35985
35986
  const shadowRoot = getShadowRoot();
@@ -36008,13 +36009,57 @@ function InlineText({ idx, onChange, children }) {
36008
36009
  }
36009
36010
  }
36010
36011
  };
36012
+ const onDrop = (e2) => {
36013
+ var _a2, _b2, _c;
36014
+ const target2 = e2.target;
36015
+ if (!target2 || !target2.getAttribute("contenteditable"))
36016
+ return;
36017
+ const mergeTagText = ((_a2 = e2.dataTransfer) == null ? void 0 : _a2.getData("text/merge-tag")) || ((_b2 = e2.dataTransfer) == null ? void 0 : _b2.getData("text/plain"));
36018
+ if (mergeTagText && (mergeTagText.startsWith("{{") || mergeTagText.includes("{{"))) {
36019
+ e2.preventDefault();
36020
+ e2.stopPropagation();
36021
+ const contentEditableType = target2.getAttribute(DATA_CONTENT_EDITABLE_TYPE);
36022
+ let insertText = mergeTagText;
36023
+ if (enabledMergeTagsBadge && mergeTagGenerate) {
36024
+ const match = mergeTagText.match(/{{([^}]+)}}/);
36025
+ if (match && match[1]) {
36026
+ const mergeTagKey = match[1].trim();
36027
+ const generatedTag = mergeTagGenerate(mergeTagKey);
36028
+ insertText = MergeTagBadge.transform(generatedTag);
36029
+ } else {
36030
+ insertText = MergeTagBadge.transform(mergeTagText);
36031
+ }
36032
+ }
36033
+ document.execCommand("insertHTML", false, insertText);
36034
+ if (contentEditableType === ContentEditableType.RichText) {
36035
+ onChange(target2.innerHTML || "");
36036
+ } else if (contentEditableType === ContentEditableType.Text) {
36037
+ onChange(((_c = target2.textContent) == null ? void 0 : _c.trim()) || "");
36038
+ }
36039
+ }
36040
+ };
36041
+ const onDragOver = (e2) => {
36042
+ var _a2, _b2;
36043
+ const target2 = e2.target;
36044
+ if (target2 && target2.getAttribute("contenteditable")) {
36045
+ const mergeTagText = ((_a2 = e2.dataTransfer) == null ? void 0 : _a2.getData("text/merge-tag")) || ((_b2 = e2.dataTransfer) == null ? void 0 : _b2.getData("text/plain"));
36046
+ if (mergeTagText && (mergeTagText.startsWith("{{") || mergeTagText.includes("{{"))) {
36047
+ e2.preventDefault();
36048
+ e2.dataTransfer.dropEffect = "copy";
36049
+ }
36050
+ }
36051
+ };
36011
36052
  shadowRoot.addEventListener("paste", onPaste, true);
36012
36053
  shadowRoot.addEventListener("input", onInput);
36054
+ shadowRoot.addEventListener("drop", onDrop, true);
36055
+ shadowRoot.addEventListener("dragover", onDragOver, true);
36013
36056
  return () => {
36014
36057
  shadowRoot.removeEventListener("paste", onPaste, true);
36015
36058
  shadowRoot.removeEventListener("input", onInput);
36059
+ shadowRoot.removeEventListener("drop", onDrop, true);
36060
+ shadowRoot.removeEventListener("dragover", onDragOver, true);
36016
36061
  };
36017
- }, [onChange, setFieldTouched]);
36062
+ }, [onChange, setFieldTouched, enabledMergeTagsBadge, mergeTagGenerate]);
36018
36063
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children);
36019
36064
  }
36020
36065
  function AutoComplete(props) {