@seafile/sea-email-editor 0.0.1

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.
Files changed (266) hide show
  1. package/README.md +1 -0
  2. package/dist/assets/icons/align-center.svg +1 -0
  3. package/dist/assets/icons/align-left.svg +1 -0
  4. package/dist/assets/icons/align-right.svg +1 -0
  5. package/dist/assets/icons/arrow-down.svg +1 -0
  6. package/dist/assets/icons/arrow-right.svg +1 -0
  7. package/dist/assets/icons/arrow-up.svg +1 -0
  8. package/dist/assets/icons/bold.svg +1 -0
  9. package/dist/assets/icons/callout-color.svg +1 -0
  10. package/dist/assets/icons/check-mark-option.svg +3 -0
  11. package/dist/assets/icons/check-square.svg +1 -0
  12. package/dist/assets/icons/clear-format.svg +1 -0
  13. package/dist/assets/icons/close.svg +3 -0
  14. package/dist/assets/icons/code-block.svg +1 -0
  15. package/dist/assets/icons/image.svg +1 -0
  16. package/dist/assets/icons/inline-code.svg +1 -0
  17. package/dist/assets/icons/insert.svg +1 -0
  18. package/dist/assets/icons/italic.svg +1 -0
  19. package/dist/assets/icons/link.svg +1 -0
  20. package/dist/assets/icons/more.svg +1 -0
  21. package/dist/assets/icons/ol.svg +1 -0
  22. package/dist/assets/icons/quote.svg +1 -0
  23. package/dist/assets/icons/rename.svg +4 -0
  24. package/dist/assets/icons/strikethrough.svg +1 -0
  25. package/dist/assets/icons/table.svg +1 -0
  26. package/dist/assets/icons/ul.svg +1 -0
  27. package/dist/assets/icons/underline.svg +1 -0
  28. package/dist/assets/icons/unlink.svg +1 -0
  29. package/dist/components/browser-tip/index.css +18 -0
  30. package/dist/components/browser-tip/index.js +28 -0
  31. package/dist/components/centered-loading.js +23 -0
  32. package/dist/components/icon/index.css +7 -0
  33. package/dist/components/icon/index.js +30 -0
  34. package/dist/components/icon-button/index.css +33 -0
  35. package/dist/components/icon-button/index.js +71 -0
  36. package/dist/components/index.js +92 -0
  37. package/dist/components/loading/index.css +54 -0
  38. package/dist/components/loading/index.js +15 -0
  39. package/dist/components/modal/index.css +0 -0
  40. package/dist/components/modal/index.js +27 -0
  41. package/dist/components/modal-header/index.css +22 -0
  42. package/dist/components/modal-header/index.js +36 -0
  43. package/dist/components/option/index.css +20 -0
  44. package/dist/components/option/index.js +39 -0
  45. package/dist/components/options-editor/container/index.css +49 -0
  46. package/dist/components/options-editor/container/index.js +122 -0
  47. package/dist/components/options-editor/index.css +26 -0
  48. package/dist/components/options-editor/index.js +70 -0
  49. package/dist/components/options-editor/options/index.css +5 -0
  50. package/dist/components/options-editor/options/index.js +138 -0
  51. package/dist/components/options-editor/options/option/index.css +54 -0
  52. package/dist/components/options-editor/options/option/index.js +138 -0
  53. package/dist/components/popover/index.js +85 -0
  54. package/dist/components/popover/utils.js +76 -0
  55. package/dist/components/search-input/index.css +52 -0
  56. package/dist/components/search-input/index.js +148 -0
  57. package/dist/components/selector-display/index.css +86 -0
  58. package/dist/components/selector-display/index.js +66 -0
  59. package/dist/components/toolbar/index.js +20 -0
  60. package/dist/components/toolbar/toolbar-group/index.css +13 -0
  61. package/dist/components/toolbar/toolbar-group/index.js +22 -0
  62. package/dist/components/toolbar/toolbar-item/index.css +3 -0
  63. package/dist/components/toolbar/toolbar-item/index.js +53 -0
  64. package/dist/components/tooltip/index.css +68 -0
  65. package/dist/components/tooltip/index.js +46 -0
  66. package/dist/components/tooltip/shortcut-key/index.css +7 -0
  67. package/dist/components/tooltip/shortcut-key/index.js +20 -0
  68. package/dist/constants/event-types.js +25 -0
  69. package/dist/constants/index.js +40 -0
  70. package/dist/constants/key-codes.js +104 -0
  71. package/dist/editor/index.css +44 -0
  72. package/dist/editor/index.js +50 -0
  73. package/dist/editor/main/index.css +19 -0
  74. package/dist/editor/main/index.js +166 -0
  75. package/dist/editor/with-props-editor.js +20 -0
  76. package/dist/extension/commons/dropdown-menu-item/index.css +52 -0
  77. package/dist/extension/commons/dropdown-menu-item/index.js +62 -0
  78. package/dist/extension/commons/index.js +5 -0
  79. package/dist/extension/commons/insert-element-dialog/index.js +91 -0
  80. package/dist/extension/commons/menu/index.js +3 -0
  81. package/dist/extension/commons/menu/menu-drop-down.js +98 -0
  82. package/dist/extension/commons/menu-shortcut-indicator/index.js +24 -0
  83. package/dist/extension/commons/menu-shortcut-indicator/style.css +18 -0
  84. package/dist/extension/constants/element-default-style.js +78 -0
  85. package/dist/extension/constants/element-types.js +33 -0
  86. package/dist/extension/constants/index.js +63 -0
  87. package/dist/extension/constants/keyboard.js +33 -0
  88. package/dist/extension/constants/menus-config.js +142 -0
  89. package/dist/extension/core/index.js +38 -0
  90. package/dist/extension/core/queries/index.js +507 -0
  91. package/dist/extension/core/transforms/focus-editor.js +18 -0
  92. package/dist/extension/core/transforms/index.js +49 -0
  93. package/dist/extension/core/transforms/move-children.js +35 -0
  94. package/dist/extension/core/transforms/remove-node-children.js +19 -0
  95. package/dist/extension/core/transforms/replace-node-children.js +24 -0
  96. package/dist/extension/core/utils/index.js +120 -0
  97. package/dist/extension/event-transfer/get-event-transfer.js +38 -0
  98. package/dist/extension/event-transfer/set-event-transfer.js +36 -0
  99. package/dist/extension/highlight/index.js +20 -0
  100. package/dist/extension/highlight/normalize-tokens.js +94 -0
  101. package/dist/extension/highlight/prismjs.js +27 -0
  102. package/dist/extension/highlight/set-node-decorations.js +81 -0
  103. package/dist/extension/highlight/use-highlight.js +20 -0
  104. package/dist/extension/index.js +67 -0
  105. package/dist/extension/plugins/blockquote/helpers.js +68 -0
  106. package/dist/extension/plugins/blockquote/index.js +18 -0
  107. package/dist/extension/plugins/blockquote/menu/index.js +35 -0
  108. package/dist/extension/plugins/blockquote/plugin.js +154 -0
  109. package/dist/extension/plugins/blockquote/render-elem.js +29 -0
  110. package/dist/extension/plugins/check-list/helper.js +34 -0
  111. package/dist/extension/plugins/check-list/index.js +19 -0
  112. package/dist/extension/plugins/check-list/menu/index.js +39 -0
  113. package/dist/extension/plugins/check-list/plugin.js +92 -0
  114. package/dist/extension/plugins/check-list/render-elem.js +61 -0
  115. package/dist/extension/plugins/clear-format/helpers.js +51 -0
  116. package/dist/extension/plugins/clear-format/menu/index.js +35 -0
  117. package/dist/extension/plugins/code-block/helpers.js +140 -0
  118. package/dist/extension/plugins/code-block/index.js +20 -0
  119. package/dist/extension/plugins/code-block/menu/index.js +59 -0
  120. package/dist/extension/plugins/code-block/plugin.js +288 -0
  121. package/dist/extension/plugins/code-block/render-elem/constant.js +22 -0
  122. package/dist/extension/plugins/code-block/render-elem/index.js +89 -0
  123. package/dist/extension/plugins/code-block/render-elem/language-selector/index.css +18 -0
  124. package/dist/extension/plugins/code-block/render-elem/language-selector/index.js +38 -0
  125. package/dist/extension/plugins/formula/formula.css +22 -0
  126. package/dist/extension/plugins/formula/helper.js +80 -0
  127. package/dist/extension/plugins/formula/index.js +19 -0
  128. package/dist/extension/plugins/formula/menu/formula-modal.js +98 -0
  129. package/dist/extension/plugins/formula/menu/index.js +35 -0
  130. package/dist/extension/plugins/formula/plugin.js +22 -0
  131. package/dist/extension/plugins/formula/render-elem.js +64 -0
  132. package/dist/extension/plugins/header/helper.js +55 -0
  133. package/dist/extension/plugins/header/index.js +19 -0
  134. package/dist/extension/plugins/header/menu/index.js +72 -0
  135. package/dist/extension/plugins/header/plugin.js +155 -0
  136. package/dist/extension/plugins/header/render-elem.js +39 -0
  137. package/dist/extension/plugins/html/index.js +13 -0
  138. package/dist/extension/plugins/html/plugin.js +69 -0
  139. package/dist/extension/plugins/image/helper.js +131 -0
  140. package/dist/extension/plugins/image/index.js +19 -0
  141. package/dist/extension/plugins/image/menu/image-menu-dialog.js +92 -0
  142. package/dist/extension/plugins/image/menu/index.css +3 -0
  143. package/dist/extension/plugins/image/menu/index.js +103 -0
  144. package/dist/extension/plugins/image/plugin.js +56 -0
  145. package/dist/extension/plugins/image/render-element/image-previewer.js +89 -0
  146. package/dist/extension/plugins/image/render-element/index.js +141 -0
  147. package/dist/extension/plugins/image/render-element/style.css +68 -0
  148. package/dist/extension/plugins/index.js +116 -0
  149. package/dist/extension/plugins/link/helper.js +258 -0
  150. package/dist/extension/plugins/link/index.js +19 -0
  151. package/dist/extension/plugins/link/menu/index.js +92 -0
  152. package/dist/extension/plugins/link/menu/link-modal.js +169 -0
  153. package/dist/extension/plugins/link/plugin.js +172 -0
  154. package/dist/extension/plugins/link/render-elem/index.css +12 -0
  155. package/dist/extension/plugins/link/render-elem/index.js +103 -0
  156. package/dist/extension/plugins/link/render-elem/link-op-menu/index.css +33 -0
  157. package/dist/extension/plugins/link/render-elem/link-op-menu/index.js +89 -0
  158. package/dist/extension/plugins/list/constant.js +8 -0
  159. package/dist/extension/plugins/list/helpers.js +102 -0
  160. package/dist/extension/plugins/list/index.js +19 -0
  161. package/dist/extension/plugins/list/menu/index.js +41 -0
  162. package/dist/extension/plugins/list/plugin/index.js +80 -0
  163. package/dist/extension/plugins/list/plugin/insert-break-list.js +29 -0
  164. package/dist/extension/plugins/list/plugin/insert-fragment-list.js +179 -0
  165. package/dist/extension/plugins/list/plugin/normalize-list.js +79 -0
  166. package/dist/extension/plugins/list/plugin/on-tab-handle.js +63 -0
  167. package/dist/extension/plugins/list/plugin/shortcut.js +69 -0
  168. package/dist/extension/plugins/list/queries/index.js +52 -0
  169. package/dist/extension/plugins/list/render-elem/index.js +68 -0
  170. package/dist/extension/plugins/list/transforms/index.js +75 -0
  171. package/dist/extension/plugins/list/transforms/insert-list-item.js +98 -0
  172. package/dist/extension/plugins/list/transforms/move-list-item-down.js +50 -0
  173. package/dist/extension/plugins/list/transforms/move-list-item-up.js +124 -0
  174. package/dist/extension/plugins/list/transforms/move-list-items-to-list.js +63 -0
  175. package/dist/extension/plugins/list/transforms/move-list-items.js +73 -0
  176. package/dist/extension/plugins/list/transforms/normalize-list-item.js +110 -0
  177. package/dist/extension/plugins/list/transforms/normalize-nested-list.js +38 -0
  178. package/dist/extension/plugins/list/transforms/remove-first-list-item.js +24 -0
  179. package/dist/extension/plugins/list/transforms/transforms-to-list.js +131 -0
  180. package/dist/extension/plugins/list/transforms/unwrap-list.js +48 -0
  181. package/dist/extension/plugins/markdown/index.js +12 -0
  182. package/dist/extension/plugins/markdown/plugin.js +257 -0
  183. package/dist/extension/plugins/node-id/constants.js +24 -0
  184. package/dist/extension/plugins/node-id/helpers.js +78 -0
  185. package/dist/extension/plugins/node-id/index.js +12 -0
  186. package/dist/extension/plugins/node-id/with-node-id.js +37 -0
  187. package/dist/extension/plugins/p/helper.js +17 -0
  188. package/dist/extension/plugins/p/index.js +17 -0
  189. package/dist/extension/plugins/p/plugin.js +141 -0
  190. package/dist/extension/plugins/p/render-elem.js +29 -0
  191. package/dist/extension/plugins/paragraph/helper.js +17 -0
  192. package/dist/extension/plugins/paragraph/index.js +17 -0
  193. package/dist/extension/plugins/paragraph/plugin.js +141 -0
  194. package/dist/extension/plugins/paragraph/render-elem.js +29 -0
  195. package/dist/extension/plugins/table/constant.js +24 -0
  196. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/index.css +3 -0
  197. package/dist/extension/plugins/table/context-menu/horizontal-align-popover/index.js +64 -0
  198. package/dist/extension/plugins/table/context-menu/index.css +13 -0
  199. package/dist/extension/plugins/table/context-menu/index.js +152 -0
  200. package/dist/extension/plugins/table/context-menu/insert-table-element/index.css +27 -0
  201. package/dist/extension/plugins/table/context-menu/insert-table-element/index.js +113 -0
  202. package/dist/extension/plugins/table/helper.js +333 -0
  203. package/dist/extension/plugins/table/index.js +21 -0
  204. package/dist/extension/plugins/table/menu/index.js +61 -0
  205. package/dist/extension/plugins/table/menu/table-operator.js +97 -0
  206. package/dist/extension/plugins/table/menu/table-size-selector/index.css +27 -0
  207. package/dist/extension/plugins/table/menu/table-size-selector/index.js +98 -0
  208. package/dist/extension/plugins/table/model.js +102 -0
  209. package/dist/extension/plugins/table/plugin.js +351 -0
  210. package/dist/extension/plugins/table/render-elem/index.css +64 -0
  211. package/dist/extension/plugins/table/render-elem/index.js +252 -0
  212. package/dist/extension/plugins/table/table-operations.js +323 -0
  213. package/dist/extension/plugins/text-style/helpers.js +57 -0
  214. package/dist/extension/plugins/text-style/index.js +17 -0
  215. package/dist/extension/plugins/text-style/menu/index.js +37 -0
  216. package/dist/extension/plugins/text-style/plugin.js +38 -0
  217. package/dist/extension/plugins/text-style/render-elem.js +63 -0
  218. package/dist/extension/render/render-element.js +115 -0
  219. package/dist/extension/render/render-leaf.js +22 -0
  220. package/dist/extension/toolbar/index.css +16 -0
  221. package/dist/extension/toolbar/index.js +89 -0
  222. package/dist/extension/toolbar/insert-toolbar.js +78 -0
  223. package/dist/hooks/use-attachments.js +38 -0
  224. package/dist/hooks/use-container-style.js +50 -0
  225. package/dist/hooks/use-mathjax.js +46 -0
  226. package/dist/hooks/use-scroll-context.js +20 -0
  227. package/dist/hooks/use-selection-update.js +20 -0
  228. package/dist/hooks/user-link-click.js +52 -0
  229. package/dist/index.js +9 -0
  230. package/dist/intl/ReactIntlUniversal.js +310 -0
  231. package/dist/intl/constants.js +21 -0
  232. package/dist/intl/index.js +33 -0
  233. package/dist/locale/index.js +11 -0
  234. package/dist/locale/lang/en.json +83 -0
  235. package/dist/slate-convert/html-to-slate/constants.js +146 -0
  236. package/dist/slate-convert/html-to-slate/helper.js +106 -0
  237. package/dist/slate-convert/html-to-slate/index.js +138 -0
  238. package/dist/slate-convert/html-to-slate/rules/blockquote.js +26 -0
  239. package/dist/slate-convert/html-to-slate/rules/br.js +29 -0
  240. package/dist/slate-convert/html-to-slate/rules/check-list.js +29 -0
  241. package/dist/slate-convert/html-to-slate/rules/code-block.js +95 -0
  242. package/dist/slate-convert/html-to-slate/rules/header.js +26 -0
  243. package/dist/slate-convert/html-to-slate/rules/image.js +31 -0
  244. package/dist/slate-convert/html-to-slate/rules/index.js +20 -0
  245. package/dist/slate-convert/html-to-slate/rules/link.js +31 -0
  246. package/dist/slate-convert/html-to-slate/rules/list.js +74 -0
  247. package/dist/slate-convert/html-to-slate/rules/p.js +37 -0
  248. package/dist/slate-convert/html-to-slate/rules/paragraph.js +37 -0
  249. package/dist/slate-convert/html-to-slate/rules/table.js +64 -0
  250. package/dist/slate-convert/html-to-slate/rules/text.js +71 -0
  251. package/dist/slate-convert/index.js +20 -0
  252. package/dist/slate-convert/slate-to-html/index.js +143 -0
  253. package/dist/utils/common.js +46 -0
  254. package/dist/utils/deserialize-html.js +219 -0
  255. package/dist/utils/dom-utils.js +57 -0
  256. package/dist/utils/dom.js +133 -0
  257. package/dist/utils/event-bus.js +40 -0
  258. package/dist/utils/event-handler.js +44 -0
  259. package/dist/utils/get-browser-Info.js +35 -0
  260. package/dist/utils/hotkey.js +45 -0
  261. package/dist/utils/is-punctuation-mark.js +50 -0
  262. package/dist/utils/object-utils.js +56 -0
  263. package/dist/utils/search.js +20 -0
  264. package/dist/utils/translate.js +18 -0
  265. package/dist/utils/type-detection.js +42 -0
  266. package/package.json +177 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactstrap = require("reactstrap");
10
+ var _constants = require("@/constants");
11
+ var _core = require("../../../core");
12
+ var _components = require("../../../../components");
13
+ var _helper = require("../helper");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ const FormulaModal = _ref => {
16
+ let {
17
+ editor,
18
+ formula,
19
+ onCloseModal
20
+ } = _ref;
21
+ const oldFormulaRef = (0, _react.useRef)(formula);
22
+ const [newFormula, setNewFormula] = (0, _react.useState)(formula);
23
+ const [modifyPath, setModifyPath] = (0, _react.useState)(null);
24
+ const [isDisabled, setIsDisabled] = (0, _react.useState)(true);
25
+ const formulaPreviewRef = (0, _react.useRef)(null);
26
+
27
+ // record current selection position
28
+ (0, _react.useEffect)(() => {
29
+ const node = (0, _core.getAboveBlockNode)(editor);
30
+ if (node) {
31
+ setModifyPath(node[1]);
32
+ return;
33
+ }
34
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35
+ }, []);
36
+ (0, _react.useEffect)(() => {
37
+ if (formulaPreviewRef.current) {
38
+ formulaPreviewRef.current.innerHTML = '';
39
+ const dom = window.MathJax.tex2svg(newFormula);
40
+ formulaPreviewRef.current.appendChild(dom);
41
+ }
42
+ });
43
+ const onFormulaChange = (0, _react.useCallback)(event => {
44
+ setIsDisabled(false);
45
+ setNewFormula(event.target.value);
46
+ }, []);
47
+ const handleUpdateFormula = (0, _react.useCallback)(() => {
48
+ const data = {
49
+ formula: newFormula,
50
+ at: modifyPath
51
+ };
52
+ if (oldFormulaRef.current) {
53
+ (0, _helper.updateFormula)(editor, data);
54
+ } else {
55
+ (0, _helper.insertFormula)(editor, data);
56
+ }
57
+ onCloseModal();
58
+ }, [editor, modifyPath, newFormula, onCloseModal]);
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactstrap.Modal, {
60
+ isOpen: true,
61
+ toggle: onCloseModal,
62
+ autoFocus: false,
63
+ wrapClassName: "formula-dialog-wrapper",
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ModalHeader, {
65
+ toggle: onCloseModal,
66
+ children: (0, _constants.gettext)('Insert_formula')
67
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactstrap.ModalBody, {
68
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
69
+ className: "form-group",
70
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("label", {
71
+ className: "form-check-label",
72
+ children: (0, _constants.gettext)('Formula')
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactstrap.Input, {
74
+ type: "textarea",
75
+ className: "form-control",
76
+ value: newFormula,
77
+ autoFocus: true,
78
+ onChange: onFormulaChange
79
+ })]
80
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
81
+ ref: formulaPreviewRef,
82
+ className: "formula-preview"
83
+ })]
84
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactstrap.ModalFooter, {
85
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactstrap.Button, {
86
+ color: "secondary",
87
+ onClick: onCloseModal,
88
+ children: (0, _constants.gettext)('Cancel')
89
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactstrap.Button, {
90
+ color: "primary",
91
+ disabled: isDisabled,
92
+ onClick: handleUpdateFormula,
93
+ children: (0, _constants.gettext)('Insert_formula')
94
+ })]
95
+ })]
96
+ });
97
+ };
98
+ var _default = exports.default = FormulaModal;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _eventTypes = require("../../../../constants/event-types");
10
+ var _menusConfig = require("../../../constants/menus-config");
11
+ var _elementTypes = require("../../../constants/element-types");
12
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
13
+ var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.FORMULA];
16
+ const FormulaMenu = _ref => {
17
+ let {
18
+ readonly,
19
+ toggle
20
+ } = _ref;
21
+ const OpenFormulaModal = () => {
22
+ toggle && toggle();
23
+ const eventBus = _eventBus.default.getInstance();
24
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.INSERT_ELEMENT, {
25
+ type: _elementTypes.FORMULA
26
+ });
27
+ };
28
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_dropdownMenuItem.default, {
29
+ disabled: readonly,
30
+ menuConfig: menuConfig,
31
+ className: "pr-2",
32
+ onClick: OpenFormulaModal
33
+ });
34
+ };
35
+ var _default = exports.default = FormulaMenu;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _constants = require("../../constants");
8
+ const withFormula = editor => {
9
+ const {
10
+ isVoid
11
+ } = editor;
12
+ const newEditor = editor;
13
+ newEditor.isVoid = element => {
14
+ const {
15
+ type
16
+ } = element;
17
+ if (type === _constants.ElementTypes.FORMULA) return true;
18
+ return isVoid(element);
19
+ };
20
+ return newEditor;
21
+ };
22
+ var _default = exports.default = withFormula;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _slateReact = require("slate-react");
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _eventTypes = require("../../../constants/event-types");
13
+ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
14
+ var _constants = require("../../constants");
15
+ require("./formula.css");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ const Formula = _ref => {
18
+ let {
19
+ attributes,
20
+ element,
21
+ children
22
+ } = _ref;
23
+ const isSelected = (0, _slateReact.useSelected)();
24
+ const formulaContainerRef = (0, _react.useRef)(null);
25
+ (0, _react.useEffect)(() => {
26
+ const {
27
+ formula = ''
28
+ } = element.data || {};
29
+ if (!formula) return;
30
+ if (formulaContainerRef.current && window.MathJax) {
31
+ formulaContainerRef.current.innerHTML = '';
32
+ const dom = window.MathJax.tex2svg(formula);
33
+ formulaContainerRef.current.appendChild(dom);
34
+ }
35
+ }, [element]);
36
+ const toggleFormulaEditor = (0, _react.useCallback)(() => {
37
+ const eventBus = _eventBus.default.getInstance();
38
+ eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.ON_OPEN_FORMULA_DIALOG, element);
39
+ }, [element]);
40
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
41
+ onDoubleClick: toggleFormulaEditor,
42
+ className: (0, _classnames.default)('sea-email-formula-block', {
43
+ 'sea-email-selected-formula': isSelected
44
+ }),
45
+ ...attributes,
46
+ style: {
47
+ ...((element === null || element === void 0 ? void 0 : element.style) || {}),
48
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {})
49
+ },
50
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
51
+ contentEditable: false,
52
+ ref: formulaContainerRef
53
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
54
+ contentEditable: false,
55
+ children: children
56
+ })]
57
+ });
58
+ };
59
+ const renderFormula = props => {
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Formula, {
61
+ ...props
62
+ });
63
+ };
64
+ var _default = exports.default = renderFormula;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setHeaderType = exports.isMenuDisabled = exports.getHeaderType = void 0;
7
+ var _slate = require("slate");
8
+ var _queries = require("../../core/queries");
9
+ var _constants = require("../../constants");
10
+ var _core = require("../../core");
11
+ const isMenuDisabled = function (editor) {
12
+ let readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
13
+ if (readonly) return true;
14
+ if (!editor.selection) return true;
15
+ const [match] = _slate.Editor.nodes(editor, {
16
+ match(node, path) {
17
+ let type = (0, _queries.getNodeType)(node);
18
+ if (!type && (0, _queries.isTextNode)(node) && node.id) {
19
+ const parentNode = (0, _queries.getParentNode)(node, node.id);
20
+ type = (0, _queries.getNodeType)(parentNode);
21
+ }
22
+ if (type === _constants.ElementTypes.PARAGRAPH) return true;
23
+ if (type && type.startsWith(_constants.ElementTypes.HEADER)) return true;
24
+ return false;
25
+ },
26
+ universal: true,
27
+ mode: 'highest'
28
+ });
29
+ return !match;
30
+ };
31
+ exports.isMenuDisabled = isMenuDisabled;
32
+ const getHeaderType = editor => {
33
+ const [match] = _slate.Editor.nodes(editor, {
34
+ match: node => {
35
+ if (_slate.Element.isElement(node) && _slate.Editor.isBlock(editor, node)) {
36
+ const type = (0, _queries.getNodeType)(node);
37
+ if (type && type.startsWith(_constants.ElementTypes.HEADER)) return true;
38
+ }
39
+ return false;
40
+ },
41
+ universal: true
42
+ });
43
+ if (!match) return;
44
+ const [matchedNode] = match;
45
+ return (0, _queries.getNodeType)(matchedNode);
46
+ };
47
+ exports.getHeaderType = getHeaderType;
48
+ const setHeaderType = (editor, type) => {
49
+ if (!type) return;
50
+ _slate.Transforms.setNodes(editor, {
51
+ type
52
+ });
53
+ (0, _core.focusEditor)(editor);
54
+ };
55
+ exports.setHeaderType = setHeaderType;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _constants = require("../../constants");
9
+ var _renderElem = require("./render-elem");
10
+ var _plugin = _interopRequireDefault(require("./plugin"));
11
+ var _menu = _interopRequireDefault(require("./menu"));
12
+ const HeaderPlugin = {
13
+ type: _constants.ElementTypes.HEADER,
14
+ nodeType: 'element',
15
+ editorMenus: [_menu.default],
16
+ editorPlugin: _plugin.default,
17
+ renderElements: [_renderElem.renderHeader]
18
+ };
19
+ var _default = exports.default = HeaderPlugin;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _constants = require("@/constants");
10
+ var _helper = require("../helper");
11
+ var _keyboard = require("../../../constants/keyboard");
12
+ var _constants2 = require("../../../constants");
13
+ var _components = require("../../../../components");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ const HeaderMenu = _ref => {
16
+ let {
17
+ editor,
18
+ readonly
19
+ } = _ref;
20
+ const [isShowHeaderPopover, setIsShowHeaderPopover] = (0, _react.useState)(false);
21
+ const headerRef = (0, _react.useRef)();
22
+ const options = (0, _react.useMemo)(() => {
23
+ const isMac = window.navigator.userAgent.indexOf('Macintosh') !== -1;
24
+ return [_constants2.ElementTypes.PARAGRAPH, ..._constants2.HEADERS].map(type => {
25
+ return {
26
+ value: type,
27
+ label: (0, _constants.gettext)(_constants2.HEADER_TITLE_MAP[type !== null && type !== void 0 ? type : _constants2.ElementTypes.PARAGRAPH]),
28
+ tooltip: isMac ? _keyboard.MAC_HOTKEYS_TIP_HEADER[type] : _keyboard.WIN_HOTKEYS_EVENT_HEADER[type]
29
+ };
30
+ });
31
+ }, []);
32
+ const currentHeaderType = (0, _helper.getHeaderType)(editor);
33
+ const isDisabled = (0, _helper.isMenuDisabled)(editor, readonly);
34
+ const onHideHeaderMenu = (0, _react.useCallback)(e => {
35
+ setIsShowHeaderPopover(false);
36
+ // eslint-disable-next-line react-hooks/exhaustive-deps
37
+ }, []);
38
+ const onToggleClick = event => {
39
+ event.stopPropagation();
40
+ event.preventDefault();
41
+ event.nativeEvent.stopImmediatePropagation();
42
+ setIsShowHeaderPopover(!isShowHeaderPopover);
43
+ };
44
+ const onChange = (0, _react.useCallback)(type => {
45
+ (0, _helper.setHeaderType)(editor, type);
46
+ setIsShowHeaderPopover(false);
47
+ }, [editor]);
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
49
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.SelectorDisplay, {
50
+ icon: isShowHeaderPopover ? 'arrow-up' : 'arrow-down',
51
+ onClick: onToggleClick,
52
+ disabled: isDisabled,
53
+ iconPlacement: "right",
54
+ innerRef: headerRef,
55
+ border: false,
56
+ height: 24,
57
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
58
+ className: "active",
59
+ children: (0, _constants.gettext)(_constants2.HEADER_TITLE_MAP[currentHeaderType !== null && currentHeaderType !== void 0 ? currentHeaderType : _constants2.ElementTypes.PARAGRAPH])
60
+ })
61
+ }), isShowHeaderPopover && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.OptionsEditor, {
62
+ target: headerRef,
63
+ isMultiple: false,
64
+ isSearchEnabled: false,
65
+ options: options,
66
+ value: currentHeaderType,
67
+ onChange: onChange,
68
+ onToggle: onHideHeaderMenu
69
+ })]
70
+ });
71
+ };
72
+ var _default = exports.default = HeaderMenu;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _slate = require("slate");
9
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
10
+ var _core = require("../../core");
11
+ var _helper = require("./helper");
12
+ var _keyboard = require("../../constants/keyboard");
13
+ var _common = require("../../../utils/common");
14
+ var _constants = require("../../constants");
15
+ var _elementTypes = require("../../constants/element-types");
16
+ const isSelectionAtLineEnd = (editor, path) => {
17
+ const {
18
+ selection
19
+ } = editor;
20
+ if (!selection) return false;
21
+ const isAtLineEnd = _slate.Editor.isEnd(editor, selection.anchor, path) || _slate.Editor.isEnd(editor, selection.focus, path);
22
+ return isAtLineEnd;
23
+ };
24
+ const isSelectionAtLineStart = (editor, path) => {
25
+ const {
26
+ selection
27
+ } = editor;
28
+ if (!selection) return false;
29
+ const isAtLineEnd = _slate.Editor.isStart(editor, selection.anchor, path) || _slate.Editor.isStart(editor, selection.focus, path);
30
+ return isAtLineEnd;
31
+ };
32
+ const withHeader = editor => {
33
+ const {
34
+ insertBreak,
35
+ insertFragment,
36
+ insertText,
37
+ deleteBackward,
38
+ onHotKeyDown
39
+ } = editor;
40
+ const newEditor = editor;
41
+
42
+ // Rewrite insertBreak - insert paragraph when carriage return at the end of header
43
+ newEditor.insertBreak = () => {
44
+ const [match] = _slate.Editor.nodes(newEditor, {
45
+ match: n => {
46
+ if (!_slate.Element.isElement(n)) return false;
47
+ if (n.type.startsWith(_constants.ElementTypes.HEADER)) return true;
48
+ return false;
49
+ },
50
+ // Matches nodes whose node.type starts with header
51
+ universal: true
52
+ });
53
+ if (!match) {
54
+ insertBreak();
55
+ return;
56
+ }
57
+ const isAtLineEnd = isSelectionAtLineEnd(editor, match[1]);
58
+ // If an empty p is inserted at the end of the line, otherwise wrap normally
59
+ if (isAtLineEnd) {
60
+ const p = (0, _core.generateEmptyElement)(_constants.ElementTypes.PARAGRAPH);
61
+ _slate.Transforms.insertNodes(newEditor, p, {
62
+ mode: 'highest'
63
+ });
64
+ } else {
65
+ insertBreak();
66
+ }
67
+ };
68
+ newEditor.deleteBackward = unit => {
69
+ const {
70
+ selection
71
+ } = editor;
72
+ if (!selection) return deleteBackward(unit);
73
+ const [headerEntry] = _slate.Editor.nodes(newEditor, {
74
+ match: n => {
75
+ if (!_slate.Element.isElement(n)) return false;
76
+ if (n.type && n.type.startsWith(_constants.ElementTypes.HEADER)) return true;
77
+ return false;
78
+ },
79
+ // Matches nodes whose node.type starts with header
80
+ universal: true
81
+ });
82
+ if (!headerEntry) {
83
+ deleteBackward(unit);
84
+ return false;
85
+ }
86
+ const isAtLineStart = isSelectionAtLineStart(editor, headerEntry[1]);
87
+ if (isAtLineStart) {
88
+ (0, _helper.setHeaderType)(editor, _constants.ElementTypes.PARAGRAPH);
89
+ return true;
90
+ }
91
+ return deleteBackward(unit);
92
+ };
93
+ newEditor.insertFragment = fragment => {
94
+ const headerEntry = (0, _core.getSelectedNodeEntryByTypes)(editor, _constants.HEADERS);
95
+ if (!headerEntry) return insertFragment(fragment);
96
+ const firstChild = fragment[0];
97
+ if (fragment.length === 1) {
98
+ // is single list item
99
+ if (_constants.LIST_TYPE_ARRAY.includes(firstChild.type)) {
100
+ if (firstChild.children.length === 1) {
101
+ const text = _slate.Node.string(fragment[0]);
102
+ insertText(text);
103
+ return;
104
+ }
105
+
106
+ // insert list at current path
107
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
108
+ _slate.Transforms.insertNodes(newEditor, fragment);
109
+ return;
110
+ }
111
+ const nextPath = _slate.Path.next(headerEntry[1]);
112
+ _slate.Transforms.insertNodes(newEditor, fragment, {
113
+ at: nextPath
114
+ });
115
+ return;
116
+ }
117
+ if (firstChild.type === _elementTypes.TABLE) {
118
+ const nextPath = _slate.Path.next(headerEntry[1]);
119
+ _slate.Transforms.insertNodes(newEditor, fragment, {
120
+ at: nextPath
121
+ });
122
+ return;
123
+ }
124
+ }
125
+ return insertFragment(fragment);
126
+ };
127
+ newEditor.onHotKeyDown = event => {
128
+ const HOT_KEYS = (0, _common.isMac)() ? _keyboard.MAC_HOTKEYS_EVENT_HEADER : _keyboard.WIN_HOTKEYS_EVENT_HEADER;
129
+ const hotEntries = Object.entries(HOT_KEYS);
130
+ let isHeaderEvent = false;
131
+ let headerType = '';
132
+ for (const element of hotEntries) {
133
+ const [key, value] = element;
134
+ isHeaderEvent = (0, _isHotkey.default)(value, event);
135
+ if (isHeaderEvent) {
136
+ headerType = key;
137
+ break;
138
+ }
139
+ }
140
+ if (!isHeaderEvent) {
141
+ return onHotKeyDown && onHotKeyDown(event);
142
+ }
143
+ event.preventDefault();
144
+ if ((0, _helper.isMenuDisabled)(newEditor)) return true;
145
+ const currentHeaderType = (0, _helper.getHeaderType)(editor);
146
+ if (currentHeaderType === headerType) {
147
+ (0, _helper.setHeaderType)(newEditor, _constants.ElementTypes.PARAGRAPH);
148
+ } else {
149
+ (0, _helper.setHeaderType)(newEditor, headerType);
150
+ }
151
+ return true;
152
+ };
153
+ return newEditor;
154
+ };
155
+ var _default = exports.default = withHeader;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.renderHeader = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _core = require("../../core");
10
+ var _constants = require("../../constants");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const renderHeader = (props, editor) => {
13
+ const {
14
+ element,
15
+ attributes,
16
+ children
17
+ } = props;
18
+ const HeaderTagName = `h${getHeaderTagName(element)}`;
19
+ function getHeaderTagName(element) {
20
+ const currentNodeType = (0, _core.getNodeType)(element);
21
+ if (currentNodeType.indexOf(_constants.ElementTypes.HEADER) > -1) {
22
+ return currentNodeType.split(_constants.ElementTypes.HEADER)[1];
23
+ }
24
+ return '1';
25
+ }
26
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(HeaderTagName, {
27
+ "data-id": element.id,
28
+ "data-root": "true",
29
+ ...attributes,
30
+ className: element.className,
31
+ style: {
32
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
33
+ ...((element === null || element === void 0 ? void 0 : element.style) || {}),
34
+ textAlign: element.align
35
+ },
36
+ children: children
37
+ });
38
+ };
39
+ exports.renderHeader = renderHeader;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _plugin = _interopRequireDefault(require("./plugin"));
9
+ const HtmlPlugin = {
10
+ type: 'html',
11
+ editorPlugin: _plugin.default
12
+ };
13
+ var _default = exports.default = HtmlPlugin;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _isUrl = _interopRequireDefault(require("is-url"));
9
+ var _slugid = _interopRequireDefault(require("slugid"));
10
+ var _slateConvert = require("../../../slate-convert");
11
+ var _elementTypes = require("../../constants/element-types");
12
+ var _helpers = require("../code-block/helpers");
13
+ const withHtml = editor => {
14
+ const {
15
+ insertData
16
+ } = editor;
17
+ const newEditor = editor;
18
+ newEditor.insertData = data => {
19
+ // If the text is a link and is not within the code_block block, it is processed as link
20
+ const text = data.getData('text/plain') || '';
21
+ if (text.trim() && (0, _isUrl.default)(text.trim()) && !(0, _helpers.isInCodeBlock)(newEditor)) {
22
+ insertData(data);
23
+ return;
24
+ }
25
+
26
+ // If the copied content contains files, proceed as shown in the image
27
+ if (data.types.includes('Files')) {
28
+ insertData(data);
29
+ return;
30
+ }
31
+
32
+ // If code_block is selected, the copied content will be processed according to code_block
33
+ if (!data.types.includes('text/code-block') && (0, _helpers.isInCodeBlock)(newEditor)) {
34
+ const plaintext = data.getData('text/plain') || '';
35
+ if (plaintext) {
36
+ let fragmentData = [];
37
+ plaintext.split('\n').forEach(item => {
38
+ const codeLine = {
39
+ id: _slugid.default.nice(),
40
+ type: _elementTypes.CODE_LINE,
41
+ children: [{
42
+ text: item,
43
+ id: _slugid.default.nice()
44
+ }]
45
+ };
46
+ fragmentData.push(codeLine);
47
+ });
48
+ newEditor.insertFragment(fragmentData);
49
+ }
50
+ return;
51
+ }
52
+
53
+ // If it is in slate format, it will be processed in slate format.
54
+ if (newEditor.insertFragmentData(data)) {
55
+ return;
56
+ }
57
+
58
+ // If it is in html format, it will be processed in html format.
59
+ const htmlContent = data.getData('text/html') || '';
60
+ if (htmlContent) {
61
+ const content = (0, _slateConvert.deserializeHtml)(htmlContent);
62
+ editor.insertFragment(content);
63
+ return;
64
+ }
65
+ insertData(data);
66
+ };
67
+ return newEditor;
68
+ };
69
+ var _default = exports.default = withHtml;