easy-email-extensions 4.16.2 → 4.16.4

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.
@@ -10,4 +10,5 @@ export interface LinkProps extends PopoverProps {
10
10
  currentRange: Range | null | undefined;
11
11
  onChange: (val: LinkParams) => void;
12
12
  }
13
+ export declare function getLinkNode(currentRange: Range | null | undefined): HTMLAnchorElement | null;
13
14
  export declare function Link(props: LinkProps): JSX.Element;
package/lib/index2.js CHANGED
@@ -56,7 +56,7 @@ var __async = (__this, __arguments, generator) => {
56
56
  };
57
57
  import * as React from "react";
58
58
  import React__default, { Children, isValidElement, cloneElement, createContext, useContext, Component, useMemo, memo, forwardRef, useEffect, useRef, useLayoutEffect, useState, useImperativeHandle, PureComponent, useCallback, useReducer, createRef, Fragment, createElement, Suspense } from "react";
59
- import { IconFont, useEditorProps, Stack as Stack$4, useRefState, getShadowRoot, DATA_CONTENT_EDITABLE_TYPE, ContentEditableType, TextStyle, useEditorContext, useBlock, useFocusIdx, DATA_CONTENT_EDITABLE_IDX, useFocusBlockLayout, MergeTagBadge, 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 "easy-email-editor";
59
+ 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 "easy-email-editor";
60
60
  import { BasicType, ImageManager, EMAIL_BLOCK_CLASS_NAME, BlockManager, createBlockDataByType, AdvancedType, Operator, OperatorSymbol, isAdvancedBlock, getParentByIdx, getParentIdx, getIndexByIdx, getSiblingIdx, getNodeIdxFromClassName, getNodeIdxClassName, getPageIdx, getChildIdx, JsonToMjml, getNodeTypeFromClassName } from "easy-email-core";
61
61
  import ReactDOM, { findDOMNode, render, createPortal } from "react-dom";
62
62
  import { Field, useForm as useForm$1, useField, Form as Form$3, version as version$2, useFormState } from "react-final-form";
@@ -37529,11 +37529,12 @@ function FontSize(props) {
37529
37529
  }));
37530
37530
  }
37531
37531
  function Tools(props) {
37532
- const { mergeTags: mergeTags2, enabledMergeTagsBadge } = useEditorProps();
37532
+ var _a, _b;
37533
+ const { mergeTags: mergeTags2, enabledMergeTagsBadge, toolbar } = useEditorProps();
37533
37534
  const { focusBlockNode } = useFocusBlockLayout();
37534
37535
  const { selectionRange, restoreRange, setRangeByElement } = useSelectionRange();
37535
37536
  const execCommand = useCallback((cmd, val) => {
37536
- var _a;
37537
+ var _a2;
37537
37538
  if (!selectionRange) {
37538
37539
  console.error(t("No selectionRange"));
37539
37540
  return;
@@ -37571,12 +37572,18 @@ function Tools(props) {
37571
37572
  insertMergeTagEle.focus();
37572
37573
  setRangeByElement(insertMergeTagEle);
37573
37574
  }
37575
+ } else if (cmd === "foreColor") {
37576
+ document.execCommand(cmd, false, val);
37577
+ let linkNode = getLinkNode$1(selectionRange);
37578
+ if (linkNode) {
37579
+ linkNode.style.color = "inherit";
37580
+ }
37574
37581
  } else {
37575
37582
  document.execCommand(cmd, false, val);
37576
37583
  }
37577
37584
  const contenteditableElement = getShadowRoot().activeElement;
37578
37585
  if ((contenteditableElement == null ? void 0 : contenteditableElement.getAttribute("contenteditable")) === "true") {
37579
- const html = ((_a = getShadowRoot().activeElement) == null ? void 0 : _a.innerHTML) || "";
37586
+ const html = ((_a2 = getShadowRoot().activeElement) == null ? void 0 : _a2.innerHTML) || "";
37580
37587
  props.onChange(html);
37581
37588
  }
37582
37589
  }, [
@@ -37588,15 +37595,194 @@ function Tools(props) {
37588
37595
  setRangeByElement
37589
37596
  ]);
37590
37597
  const execCommandWithRange = useCallback((cmd, val) => {
37591
- var _a;
37598
+ var _a2;
37592
37599
  document.execCommand(cmd, false, val);
37593
37600
  const contenteditableElement = getShadowRoot().activeElement;
37594
37601
  if ((contenteditableElement == null ? void 0 : contenteditableElement.getAttribute("contenteditable")) === "true") {
37595
- const html = ((_a = getShadowRoot().activeElement) == null ? void 0 : _a.innerHTML) || "";
37602
+ const html = ((_a2 = getShadowRoot().activeElement) == null ? void 0 : _a2.innerHTML) || "";
37596
37603
  props.onChange(html);
37597
37604
  }
37598
37605
  }, [props.onChange]);
37599
37606
  const getPopoverMountNode = () => document.getElementById(FIXED_CONTAINER_ID);
37607
+ const enabledTools = (_a = toolbar == null ? void 0 : toolbar.tools) != null ? _a : [
37608
+ AvailableTools.MergeTags,
37609
+ AvailableTools.FontFamily,
37610
+ AvailableTools.FontSize,
37611
+ AvailableTools.Bold,
37612
+ AvailableTools.Italic,
37613
+ AvailableTools.StrikeThrough,
37614
+ AvailableTools.Underline,
37615
+ AvailableTools.IconFontColor,
37616
+ AvailableTools.IconBgColor,
37617
+ AvailableTools.Link,
37618
+ AvailableTools.Justify,
37619
+ AvailableTools.Lists,
37620
+ AvailableTools.HorizontalRule,
37621
+ AvailableTools.RemoveFormat
37622
+ ];
37623
+ const tools = enabledTools.flatMap((tool) => {
37624
+ switch (tool) {
37625
+ case AvailableTools.MergeTags:
37626
+ if (!mergeTags2)
37627
+ return [];
37628
+ return [
37629
+ /* @__PURE__ */ React__default.createElement(MergeTags, {
37630
+ key: tool,
37631
+ execCommand,
37632
+ getPopupContainer: getPopoverMountNode
37633
+ })
37634
+ ];
37635
+ case AvailableTools.FontFamily:
37636
+ return [
37637
+ /* @__PURE__ */ React__default.createElement(FontFamily$1, {
37638
+ key: tool,
37639
+ execCommand,
37640
+ getPopupContainer: getPopoverMountNode
37641
+ })
37642
+ ];
37643
+ case AvailableTools.FontSize:
37644
+ return [
37645
+ /* @__PURE__ */ React__default.createElement(FontSize, {
37646
+ key: tool,
37647
+ execCommand,
37648
+ getPopupContainer: getPopoverMountNode
37649
+ })
37650
+ ];
37651
+ case AvailableTools.Bold:
37652
+ return [
37653
+ /* @__PURE__ */ React__default.createElement(Bold, {
37654
+ key: tool,
37655
+ currentRange: selectionRange,
37656
+ onChange: () => execCommandWithRange("bold")
37657
+ })
37658
+ ];
37659
+ case AvailableTools.Italic:
37660
+ return [
37661
+ /* @__PURE__ */ React__default.createElement(Italic, {
37662
+ key: tool,
37663
+ currentRange: selectionRange,
37664
+ onChange: () => execCommandWithRange("italic")
37665
+ })
37666
+ ];
37667
+ case AvailableTools.StrikeThrough:
37668
+ return [
37669
+ /* @__PURE__ */ React__default.createElement(StrikeThrough, {
37670
+ key: tool,
37671
+ currentRange: selectionRange,
37672
+ onChange: () => execCommandWithRange("strikeThrough")
37673
+ })
37674
+ ];
37675
+ case AvailableTools.Underline:
37676
+ return [
37677
+ /* @__PURE__ */ React__default.createElement(Underline, {
37678
+ key: tool,
37679
+ currentRange: selectionRange,
37680
+ onChange: () => execCommandWithRange("underline")
37681
+ })
37682
+ ];
37683
+ case AvailableTools.IconFontColor:
37684
+ return [
37685
+ /* @__PURE__ */ React__default.createElement(IconFontColor, {
37686
+ selectionRange,
37687
+ execCommand,
37688
+ getPopoverMountNode
37689
+ })
37690
+ ];
37691
+ case AvailableTools.IconBgColor:
37692
+ return [
37693
+ /* @__PURE__ */ React__default.createElement(IconBgColor, {
37694
+ selectionRange,
37695
+ execCommand,
37696
+ getPopoverMountNode
37697
+ })
37698
+ ];
37699
+ case AvailableTools.Link:
37700
+ return [
37701
+ /* @__PURE__ */ React__default.createElement(Link$1, {
37702
+ key: `${tool}-link`,
37703
+ currentRange: selectionRange,
37704
+ onChange: (values2) => execCommand("createLink", values2),
37705
+ getPopupContainer: getPopoverMountNode
37706
+ }),
37707
+ /* @__PURE__ */ React__default.createElement(Unlink, {
37708
+ key: `${tool}-unlink`,
37709
+ currentRange: selectionRange,
37710
+ onChange: () => execCommand("")
37711
+ })
37712
+ ];
37713
+ case "justify":
37714
+ return [
37715
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37716
+ key: `${tool}-justify-left`,
37717
+ onClick: () => execCommand("justifyLeft"),
37718
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37719
+ iconName: "icon-align-left"
37720
+ }),
37721
+ title: t("Align left")
37722
+ }),
37723
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37724
+ key: `${tool}-justify-center`,
37725
+ onClick: () => execCommand("justifyCenter"),
37726
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37727
+ iconName: "icon-align-center"
37728
+ }),
37729
+ title: t("Align center")
37730
+ }),
37731
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37732
+ key: `${tool}-justify-right`,
37733
+ onClick: () => execCommand("justifyRight"),
37734
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37735
+ iconName: "icon-align-right"
37736
+ }),
37737
+ title: t("Align right")
37738
+ })
37739
+ ];
37740
+ case AvailableTools.Lists:
37741
+ return [
37742
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37743
+ key: `${tool}-ordered-list`,
37744
+ onClick: () => execCommand("insertOrderedList"),
37745
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37746
+ iconName: "icon-list-ol"
37747
+ }),
37748
+ title: t("Orderlist")
37749
+ }),
37750
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37751
+ key: `${tool}-unordered-list`,
37752
+ onClick: () => execCommand("insertUnorderedList"),
37753
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37754
+ iconName: "icon-list-ul"
37755
+ }),
37756
+ title: t("Unorderlist")
37757
+ })
37758
+ ];
37759
+ case AvailableTools.HorizontalRule:
37760
+ return [
37761
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37762
+ key: tool,
37763
+ onClick: () => execCommand("insertHorizontalRule"),
37764
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37765
+ iconName: "icon-line"
37766
+ }),
37767
+ title: t("Line")
37768
+ })
37769
+ ];
37770
+ case AvailableTools.RemoveFormat:
37771
+ return [
37772
+ /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37773
+ key: tool,
37774
+ onClick: () => execCommand("removeFormat"),
37775
+ icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37776
+ iconName: "icon-close"
37777
+ }),
37778
+ title: t("Remove format")
37779
+ })
37780
+ ];
37781
+ default:
37782
+ console.error("Not existing tool", tool);
37783
+ throw new Error(`Not existing tool ${tool}`);
37784
+ }
37785
+ });
37600
37786
  return /* @__PURE__ */ React__default.createElement("div", {
37601
37787
  id: RICH_TEXT_TOOL_BAR,
37602
37788
  style: { display: "flex", flexWrap: "nowrap" }
@@ -37605,117 +37791,13 @@ function Tools(props) {
37605
37791
  display: "flex",
37606
37792
  alignItems: "center"
37607
37793
  }
37608
- }, /* @__PURE__ */ React__default.createElement(BasicTools, null), mergeTags2 && /* @__PURE__ */ React__default.createElement(MergeTags, {
37609
- execCommand,
37610
- getPopupContainer: getPopoverMountNode
37611
- }), /* @__PURE__ */ React__default.createElement("div", {
37612
- className: "easy-email-extensions-divider"
37613
- }), /* @__PURE__ */ React__default.createElement("div", {
37614
- className: "easy-email-extensions-divider"
37615
- }), /* @__PURE__ */ React__default.createElement(FontFamily$1, {
37616
- execCommand,
37617
- getPopupContainer: getPopoverMountNode
37618
- }), /* @__PURE__ */ React__default.createElement("div", {
37619
- className: "easy-email-extensions-divider"
37620
- }), /* @__PURE__ */ React__default.createElement(FontSize, {
37621
- execCommand,
37622
- getPopupContainer: getPopoverMountNode
37623
- }), /* @__PURE__ */ React__default.createElement("div", {
37624
- className: "easy-email-extensions-divider"
37625
- }), /* @__PURE__ */ React__default.createElement(Bold, {
37626
- currentRange: selectionRange,
37627
- onChange: () => execCommandWithRange("bold")
37628
- }), /* @__PURE__ */ React__default.createElement("div", {
37629
- className: "easy-email-extensions-divider"
37630
- }), /* @__PURE__ */ React__default.createElement(Italic, {
37631
- currentRange: selectionRange,
37632
- onChange: () => execCommandWithRange("italic")
37633
- }), /* @__PURE__ */ React__default.createElement("div", {
37634
- className: "easy-email-extensions-divider"
37635
- }), /* @__PURE__ */ React__default.createElement(StrikeThrough, {
37636
- currentRange: selectionRange,
37637
- onChange: () => execCommandWithRange("strikeThrough")
37638
- }), /* @__PURE__ */ React__default.createElement("div", {
37639
- className: "easy-email-extensions-divider"
37640
- }), /* @__PURE__ */ React__default.createElement(Underline, {
37641
- currentRange: selectionRange,
37642
- onChange: () => execCommandWithRange("underline")
37643
- }), /* @__PURE__ */ React__default.createElement("div", {
37644
- className: "easy-email-extensions-divider"
37645
- }), /* @__PURE__ */ React__default.createElement(IconFontColor, {
37646
- selectionRange,
37647
- execCommand,
37648
- getPopoverMountNode
37649
- }), /* @__PURE__ */ React__default.createElement("div", {
37650
- className: "easy-email-extensions-divider"
37651
- }), /* @__PURE__ */ React__default.createElement(IconBgColor, {
37652
- selectionRange,
37653
- execCommand,
37654
- getPopoverMountNode
37655
- }), /* @__PURE__ */ React__default.createElement("div", {
37656
- className: "easy-email-extensions-divider"
37657
- }), /* @__PURE__ */ React__default.createElement(Link$1, {
37658
- currentRange: selectionRange,
37659
- onChange: (values2) => execCommand("createLink", values2),
37660
- getPopupContainer: getPopoverMountNode
37661
- }), /* @__PURE__ */ React__default.createElement("div", {
37662
- className: "easy-email-extensions-divider"
37663
- }), /* @__PURE__ */ React__default.createElement(Unlink, {
37664
- currentRange: selectionRange,
37665
- onChange: () => execCommand("")
37666
- }), /* @__PURE__ */ React__default.createElement("div", {
37667
- className: "easy-email-extensions-divider"
37668
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37669
- onClick: () => execCommand("justifyLeft"),
37670
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37671
- iconName: "icon-align-left"
37672
- }),
37673
- title: t("Align left")
37674
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37675
- onClick: () => execCommand("justifyCenter"),
37676
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37677
- iconName: "icon-align-center"
37678
- }),
37679
- title: t("Align center")
37680
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37681
- onClick: () => execCommand("justifyRight"),
37682
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37683
- iconName: "icon-align-right"
37684
- }),
37685
- title: t("Align right")
37686
- }), /* @__PURE__ */ React__default.createElement("div", {
37687
- className: "easy-email-extensions-divider"
37688
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37689
- onClick: () => execCommand("insertOrderedList"),
37690
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37691
- iconName: "icon-list-ol"
37692
- }),
37693
- title: t("Orderlist")
37694
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37695
- onClick: () => execCommand("insertUnorderedList"),
37696
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37697
- iconName: "icon-list-ul"
37698
- }),
37699
- title: t("Unorderlist")
37700
- }), /* @__PURE__ */ React__default.createElement("div", {
37701
- className: "easy-email-extensions-divider"
37702
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37703
- onClick: () => execCommand("insertHorizontalRule"),
37704
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37705
- iconName: "icon-line"
37706
- }),
37707
- title: t("Line")
37708
- }), /* @__PURE__ */ React__default.createElement("div", {
37709
- className: "easy-email-extensions-divider"
37710
- }), /* @__PURE__ */ React__default.createElement(ToolItem$1, {
37711
- onClick: () => execCommand("removeFormat"),
37712
- icon: /* @__PURE__ */ React__default.createElement(IconFont, {
37713
- iconName: "icon-close"
37714
- }),
37715
- title: t("Remove format")
37716
- }), /* @__PURE__ */ React__default.createElement("div", {
37717
- className: "easy-email-extensions-divider"
37718
- })));
37794
+ }, /* @__PURE__ */ React__default.createElement(BasicTools, null), tools.flatMap((tool, index2) => [
37795
+ tool,
37796
+ /* @__PURE__ */ React__default.createElement("div", {
37797
+ className: "easy-email-extensions-divider",
37798
+ key: `divider-${index2}`
37799
+ })
37800
+ ])), (_b = toolbar == null ? void 0 : toolbar.suffix) == null ? void 0 : _b.call(toolbar, execCommand));
37719
37801
  }
37720
37802
  var styleText = ".easy-email-extensions-emailToolItem{display:inline-flex;align-items:center;justify-content:center;position:relative;outline:none;font-weight:400;appearance:none;cursor:pointer!important;white-space:nowrap;transition:all .1s linear;box-sizing:border-box;border-radius:2px;border:none;background-color:transparent;color:#fff;width:28px;height:27px}.easy-email-extensions-emailToolItem:hover,.easy-email-extensions-emailToolItem-active{background-color:#f2f3f5;color:#4e5969}.easy-email-extensions-divider{position:relative;display:inline-flex;width:1px;height:16px;background-color:#808080e6}\n";
37721
37803
  function RichTextToolBar(props) {