@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,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _core = require("../../core");
9
+ var _elementTypes = require("../../constants/element-types");
10
+ var _constants = require("../../constants");
11
+ const isSelectionAtLineEnd = (editor, path) => {
12
+ const {
13
+ selection
14
+ } = editor;
15
+ if (!selection) return false;
16
+ const isAtLineEnd = _slate.Editor.isEnd(editor, selection.anchor, path) || _slate.Editor.isEnd(editor, selection.focus, path);
17
+ return isAtLineEnd;
18
+ };
19
+ const isSelectionAtLineStart = (editor, path) => {
20
+ const {
21
+ selection
22
+ } = editor;
23
+ if (!selection) return false;
24
+ const isAtLineEnd = _slate.Editor.isStart(editor, selection.anchor, path) || _slate.Editor.isStart(editor, selection.focus, path);
25
+ return isAtLineEnd;
26
+ };
27
+ const withP = editor => {
28
+ const {
29
+ deleteBackward,
30
+ insertBreak,
31
+ insertFragment
32
+ } = editor;
33
+ const newEditor = editor;
34
+ newEditor.insertBreak = () => {
35
+ if (!newEditor.selection) {
36
+ insertBreak();
37
+ return;
38
+ }
39
+ const [node] = _slate.Editor.nodes(newEditor, {
40
+ mode: 'lowest'
41
+ });
42
+ if (node && node[0].code) {
43
+ const aboveNode = (0, _core.getAboveBlockNode)(newEditor, {
44
+ match: n => _slate.Element.isElement(n),
45
+ mode: 'highest'
46
+ });
47
+ if (isSelectionAtLineStart(editor, node[1]) && _slate.Node.string(node[0]).length !== 0) {
48
+ _slate.Transforms.insertNodes(newEditor, (0, _core.generateDefaultParagraph)(), {
49
+ at: aboveNode[1],
50
+ select: true
51
+ });
52
+ const startPosition = _slate.Editor.start(editor, _slate.Path.next(aboveNode[1]));
53
+ const range = {
54
+ anchor: startPosition,
55
+ focus: startPosition
56
+ };
57
+ (0, _core.focusEditor)(newEditor, range);
58
+ return;
59
+ }
60
+ if (isSelectionAtLineEnd(editor, node[1])) {
61
+ const nextPath = _slate.Path.next(aboveNode[1]);
62
+ _slate.Transforms.insertNodes(newEditor, (0, _core.generateDefaultParagraph)(), {
63
+ at: nextPath,
64
+ select: true
65
+ });
66
+ return;
67
+ }
68
+ }
69
+ insertBreak();
70
+ };
71
+ newEditor.deleteBackward = unit => {
72
+ const {
73
+ selection
74
+ } = newEditor;
75
+ if (!selection) {
76
+ deleteBackward(unit);
77
+ return;
78
+ }
79
+ const selectedParagraphNodeEntry = (0, _core.getSelectedNodeEntryByType)(newEditor, _elementTypes.P);
80
+ if (selectedParagraphNodeEntry) {
81
+ if (_slate.Node.string(selectedParagraphNodeEntry[0]) === '') {
82
+ const previousNodeEntry = (0, _core.getPrevNode)(newEditor);
83
+ if (previousNodeEntry && previousNodeEntry[0].type === _elementTypes.TABLE_CELL) {
84
+ _slate.Transforms.removeNodes(newEditor, {
85
+ at: selectedParagraphNodeEntry[1]
86
+ });
87
+ return;
88
+ }
89
+ }
90
+ }
91
+ return deleteBackward(unit);
92
+ };
93
+ newEditor.insertFragment = fragment => {
94
+ const match = {
95
+ type: [_elementTypes.P]
96
+ };
97
+ const [paragraphEntry] = (0, _core.getNodeEntries)(newEditor, {
98
+ match
99
+ });
100
+ if (!paragraphEntry) return insertFragment(fragment);
101
+ const firstChild = fragment[0];
102
+ if (fragment.length === 1 && _constants.LIST_TYPE_ARRAY.includes(firstChild.type)) {
103
+ // insert text
104
+ if (firstChild.children.length === 1) {
105
+ const text = _slate.Node.string(fragment[0]);
106
+ (0, _slate.insertText)(text);
107
+ return;
108
+ }
109
+
110
+ // insert list at current path
111
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
112
+ _slate.Transforms.insertNodes(newEditor, fragment);
113
+ return;
114
+ }
115
+
116
+ // insert list at next path
117
+ const nextPath = _slate.Path.next(paragraphEntry[1]);
118
+ _slate.Transforms.insertNodes(newEditor, fragment, {
119
+ at: nextPath
120
+ });
121
+ return;
122
+ }
123
+ if (fragment.length === 1 && firstChild.type === _elementTypes.TABLE) {
124
+ const hasVoidNode = paragraphEntry[0].children.some(item => _slate.Editor.isVoid(newEditor, item));
125
+ if (_slate.Node.string(paragraphEntry[0]).length === 0 && !hasVoidNode) {
126
+ _slate.Transforms.insertNodes(newEditor, fragment, {
127
+ at: paragraphEntry[1]
128
+ });
129
+ return;
130
+ }
131
+ const nextPath = _slate.Path.next(paragraphEntry[1]);
132
+ _slate.Transforms.insertNodes(newEditor, fragment, {
133
+ at: nextPath
134
+ });
135
+ return;
136
+ }
137
+ return insertFragment(fragment);
138
+ };
139
+ return newEditor;
140
+ };
141
+ var _default = exports.default = withP;
@@ -0,0 +1,29 @@
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 _constants = require("../../constants");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ const renderP = _ref => {
12
+ let {
13
+ element,
14
+ attributes,
15
+ children
16
+ } = _ref;
17
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
18
+ "data-id": element.id,
19
+ "data-root": "true",
20
+ className: element.className,
21
+ ...attributes,
22
+ style: {
23
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
24
+ ...((element === null || element === void 0 ? void 0 : element.style) || {})
25
+ },
26
+ children: children
27
+ });
28
+ };
29
+ var _default = exports.default = renderP;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformToParagraph = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../../constants/element-types");
9
+ var _core = require("../../core");
10
+ const transformToParagraph = (editor, focusLocation) => {
11
+ if (!editor.selection) return;
12
+ _slate.Transforms.setNodes(editor, {
13
+ type: _elementTypes.PARAGRAPH
14
+ });
15
+ (0, _core.focusEditor)(editor, focusLocation);
16
+ };
17
+ exports.transformToParagraph = transformToParagraph;
@@ -0,0 +1,17 @@
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 _elementTypes = require("../../constants/element-types");
9
+ var _plugin = _interopRequireDefault(require("./plugin"));
10
+ var _renderElem = _interopRequireDefault(require("./render-elem"));
11
+ const ParagraphPlugin = {
12
+ type: _elementTypes.PARAGRAPH,
13
+ nodeType: 'element',
14
+ editorPlugin: _plugin.default,
15
+ renderElements: [_renderElem.default]
16
+ };
17
+ var _default = exports.default = ParagraphPlugin;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _core = require("../../core");
9
+ var _elementTypes = require("../../constants/element-types");
10
+ var _constants = require("../../constants");
11
+ const isSelectionAtLineEnd = (editor, path) => {
12
+ const {
13
+ selection
14
+ } = editor;
15
+ if (!selection) return false;
16
+ const isAtLineEnd = _slate.Editor.isEnd(editor, selection.anchor, path) || _slate.Editor.isEnd(editor, selection.focus, path);
17
+ return isAtLineEnd;
18
+ };
19
+ const isSelectionAtLineStart = (editor, path) => {
20
+ const {
21
+ selection
22
+ } = editor;
23
+ if (!selection) return false;
24
+ const isAtLineEnd = _slate.Editor.isStart(editor, selection.anchor, path) || _slate.Editor.isStart(editor, selection.focus, path);
25
+ return isAtLineEnd;
26
+ };
27
+ const withParagraph = editor => {
28
+ const {
29
+ deleteBackward,
30
+ insertBreak,
31
+ insertFragment
32
+ } = editor;
33
+ const newEditor = editor;
34
+ newEditor.insertBreak = () => {
35
+ if (!newEditor.selection) {
36
+ insertBreak();
37
+ return;
38
+ }
39
+ const [node] = _slate.Editor.nodes(newEditor, {
40
+ mode: 'lowest'
41
+ });
42
+ if (node && node[0].code) {
43
+ const aboveNode = (0, _core.getAboveBlockNode)(newEditor, {
44
+ match: n => _slate.Element.isElement(n),
45
+ mode: 'highest'
46
+ });
47
+ if (isSelectionAtLineStart(editor, node[1]) && _slate.Node.string(node[0]).length !== 0) {
48
+ _slate.Transforms.insertNodes(newEditor, (0, _core.generateDefaultParagraph)(), {
49
+ at: aboveNode[1],
50
+ select: true
51
+ });
52
+ const startPosition = _slate.Editor.start(editor, _slate.Path.next(aboveNode[1]));
53
+ const range = {
54
+ anchor: startPosition,
55
+ focus: startPosition
56
+ };
57
+ (0, _core.focusEditor)(newEditor, range);
58
+ return;
59
+ }
60
+ if (isSelectionAtLineEnd(editor, node[1])) {
61
+ const nextPath = _slate.Path.next(aboveNode[1]);
62
+ _slate.Transforms.insertNodes(newEditor, (0, _core.generateDefaultParagraph)(), {
63
+ at: nextPath,
64
+ select: true
65
+ });
66
+ return;
67
+ }
68
+ }
69
+ insertBreak();
70
+ };
71
+ newEditor.deleteBackward = unit => {
72
+ const {
73
+ selection
74
+ } = newEditor;
75
+ if (!selection) {
76
+ deleteBackward(unit);
77
+ return;
78
+ }
79
+ const selectedParagraphNodeEntry = (0, _core.getSelectedNodeEntryByType)(newEditor, _elementTypes.PARAGRAPH);
80
+ if (selectedParagraphNodeEntry) {
81
+ if (_slate.Node.string(selectedParagraphNodeEntry[0]) === '') {
82
+ const previousNodeEntry = (0, _core.getPrevNode)(newEditor);
83
+ if (previousNodeEntry && previousNodeEntry[0].type === _elementTypes.TABLE_CELL) {
84
+ _slate.Transforms.removeNodes(newEditor, {
85
+ at: selectedParagraphNodeEntry[1]
86
+ });
87
+ return;
88
+ }
89
+ }
90
+ }
91
+ return deleteBackward(unit);
92
+ };
93
+ newEditor.insertFragment = fragment => {
94
+ const match = {
95
+ type: [_elementTypes.PARAGRAPH]
96
+ };
97
+ const [paragraphEntry] = (0, _core.getNodeEntries)(newEditor, {
98
+ match
99
+ });
100
+ if (!paragraphEntry) return insertFragment(fragment);
101
+ const firstChild = fragment[0];
102
+ if (fragment.length === 1 && _constants.LIST_TYPE_ARRAY.includes(firstChild.type)) {
103
+ // insert text
104
+ if (firstChild.children.length === 1) {
105
+ const text = _slate.Node.string(fragment[0]);
106
+ (0, _slate.insertText)(text);
107
+ return;
108
+ }
109
+
110
+ // insert list at current path
111
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
112
+ _slate.Transforms.insertNodes(newEditor, fragment);
113
+ return;
114
+ }
115
+
116
+ // insert list at next path
117
+ const nextPath = _slate.Path.next(paragraphEntry[1]);
118
+ _slate.Transforms.insertNodes(newEditor, fragment, {
119
+ at: nextPath
120
+ });
121
+ return;
122
+ }
123
+ if (fragment.length === 1 && firstChild.type === _elementTypes.TABLE) {
124
+ const hasVoidNode = paragraphEntry[0].children.some(item => _slate.Editor.isVoid(newEditor, item));
125
+ if (_slate.Node.string(paragraphEntry[0]).length === 0 && !hasVoidNode) {
126
+ _slate.Transforms.insertNodes(newEditor, fragment, {
127
+ at: paragraphEntry[1]
128
+ });
129
+ return;
130
+ }
131
+ const nextPath = _slate.Path.next(paragraphEntry[1]);
132
+ _slate.Transforms.insertNodes(newEditor, fragment, {
133
+ at: nextPath
134
+ });
135
+ return;
136
+ }
137
+ return insertFragment(fragment);
138
+ };
139
+ return newEditor;
140
+ };
141
+ var _default = exports.default = withParagraph;
@@ -0,0 +1,29 @@
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 _constants = require("../../constants");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ const renderParagraph = _ref => {
12
+ let {
13
+ element,
14
+ attributes,
15
+ children
16
+ } = _ref;
17
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
18
+ "data-id": element.id,
19
+ "data-root": "true",
20
+ className: element.className,
21
+ ...attributes,
22
+ style: {
23
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
24
+ ...((element === null || element === void 0 ? void 0 : element.style) || {})
25
+ },
26
+ children: children
27
+ });
28
+ };
29
+ var _default = exports.default = renderParagraph;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TABLE_ROW_NODE_NAME = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_STYLE = exports.TABLE_CELL_NODE_NAME = exports.TABLE_BODY_NODE_NAME = void 0;
7
+ const TABLE_CELL_NODE_NAME = exports.TABLE_CELL_NODE_NAME = 'td';
8
+ const TABLE_ROW_NODE_NAME = exports.TABLE_ROW_NODE_NAME = 'tr';
9
+ const TABLE_BODY_NODE_NAME = exports.TABLE_BODY_NODE_NAME = 'tbody';
10
+ const TABLE_MAX_ROWS = exports.TABLE_MAX_ROWS = 500;
11
+ const TABLE_MAX_COLUMNS = exports.TABLE_MAX_COLUMNS = 50;
12
+ const TABLE_ELEMENT = exports.TABLE_ELEMENT = {
13
+ TABLE: 'table',
14
+ ROW: 'row',
15
+ COLUMN: 'column',
16
+ CELL: 'cell'
17
+ };
18
+ const TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT_POSITION = {
19
+ AFTER: 'after',
20
+ BEFORE: 'before'
21
+ };
22
+ const TABLE_CELL_STYLE = exports.TABLE_CELL_STYLE = {
23
+ TEXT_ALIGN: 'textAlign'
24
+ };
@@ -0,0 +1,3 @@
1
+ .sea-email-horizontal-align-popover .popover {
2
+ margin-left: -10px;
3
+ }
@@ -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 _constants = require("@/constants");
11
+ var _reactstrap = require("reactstrap");
12
+ var _core = require("../../../../core");
13
+ var _tableOperations = require("../../table-operations");
14
+ var _container = _interopRequireDefault(require("../../../../../components/options-editor/container"));
15
+ require("./index.css");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ const HorizontalAlignPopover = _ref => {
18
+ let {
19
+ target,
20
+ editor,
21
+ readonly,
22
+ horizontalAlign
23
+ } = _ref;
24
+ const options = (0, _react.useMemo)(() => {
25
+ return [{
26
+ value: 'left',
27
+ label: (0, _constants.gettext)('Left')
28
+ }, {
29
+ value: 'center',
30
+ label: (0, _constants.gettext)('Center')
31
+ }, {
32
+ value: 'right',
33
+ label: (0, _constants.gettext)('Right')
34
+ }];
35
+ }, []);
36
+ const setTextAlignStyle = (0, _react.useCallback)(textAlign => {
37
+ if (readonly) return;
38
+ (0, _tableOperations.changeColumnAlign)(editor, textAlign);
39
+ const focusPoint = editor.selection.focus;
40
+ // prevent select all text in the editor
41
+ (0, _core.focusEditor)(editor, focusPoint);
42
+ // Select last focus point
43
+ setTimeout(() => {
44
+ (0, _core.focusEditor)(editor, focusPoint);
45
+ }, 0);
46
+ }, [editor, readonly]);
47
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactstrap.UncontrolledPopover, {
48
+ target: target,
49
+ trigger: "hover",
50
+ className: "sea-email-option-editor-popover sea-email-horizontal-align-popover",
51
+ placement: "right-start",
52
+ hideArrow: true,
53
+ fade: false,
54
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_container.default, {
55
+ isMultiple: false,
56
+ isSearchEnabled: false,
57
+ checkPlacement: "left",
58
+ value: horizontalAlign || 'left',
59
+ options: options,
60
+ onChange: v => setTextAlignStyle(v)
61
+ })
62
+ });
63
+ };
64
+ var _default = exports.default = HorizontalAlignPopover;
@@ -0,0 +1,13 @@
1
+ .sea-email-table-context-menu {
2
+ height: fit-content;
3
+ width: fit-content;
4
+ position: absolute;
5
+ }
6
+
7
+ .sea-email-table-context-menu .popover {
8
+ max-width: fit-content;
9
+ }
10
+
11
+ .sea-email-table-context-menu .sea-email-option-editor-content {
12
+ max-height: fit-content;
13
+ }
@@ -0,0 +1,152 @@
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 _constants = require("@/constants");
11
+ var _tableOperations = require("../table-operations");
12
+ var _insertTableElement = _interopRequireDefault(require("./insert-table-element"));
13
+ var _constant = require("../constant");
14
+ var _core = require("../../../core");
15
+ var _elementTypes = require("../../../constants/element-types");
16
+ var _horizontalAlignPopover = _interopRequireDefault(require("./horizontal-align-popover"));
17
+ var _option = _interopRequireDefault(require("../../../../components/options-editor/options/option"));
18
+ require("./index.css");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ const ContextMenu = _ref => {
21
+ var _getSelectedNodeByTyp, _cellDom$style;
22
+ let {
23
+ element,
24
+ position,
25
+ editor,
26
+ handleCloseContextMenu
27
+ } = _ref;
28
+ const [contextMenuStyle, setContextMenuStyle] = (0, _react.useState)({});
29
+ const contextMenuRef = (0, _react.useRef)(null);
30
+ const horizontalAlignRef = (0, _react.useRef)(null);
31
+ const tableCellNodeId = (_getSelectedNodeByTyp = (0, _core.getSelectedNodeByType)(editor, _elementTypes.TABLE_CELL)) === null || _getSelectedNodeByTyp === void 0 ? void 0 : _getSelectedNodeByTyp.id;
32
+ const cellDom = document.querySelector(`td[data-id="${tableCellNodeId}"]`);
33
+ const horizontalAlign = cellDom === null || cellDom === void 0 ? void 0 : (_cellDom$style = cellDom.style) === null || _cellDom$style === void 0 ? void 0 : _cellDom$style[_constant.TABLE_CELL_STYLE.TEXT_ALIGN];
34
+ const currentRowsCount = (0, _react.useMemo)(() => {
35
+ const rows = element.children;
36
+ return rows.length;
37
+ }, [element.children]);
38
+ const currentColumnsCount = (0, _react.useMemo)(() => {
39
+ const rows = element.children;
40
+ const cols = rows[0].children;
41
+ return cols.length;
42
+ }, [element.children]);
43
+ (0, _react.useLayoutEffect)(() => {
44
+ const {
45
+ top,
46
+ left
47
+ } = position;
48
+ setContextMenuStyle({
49
+ top,
50
+ left,
51
+ zIndex: '1071',
52
+ display: 'block'
53
+ });
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ }, [position]);
56
+ const handleClickOperationBtn = function (callback) {
57
+ for (var _len = arguments.length, arg = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
58
+ arg[_key - 1] = arguments[_key];
59
+ }
60
+ callback && callback(editor, ...arg);
61
+ handleCloseContextMenu();
62
+ };
63
+ const _insertTableChildren = (type, position, count) => {
64
+ (0, _tableOperations.insertTableElement)(editor, type, position, count);
65
+ handleCloseContextMenu();
66
+ };
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
68
+ contentEditable: false,
69
+ ref: contextMenuRef,
70
+ style: contextMenuStyle,
71
+ className: "sea-email-option-editor-popover show sea-email-table-context-menu",
72
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
73
+ className: "popover show bs-popover-auto",
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
75
+ className: "popover-inner",
76
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
77
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
78
+ className: "sea-email-option-editor-container",
79
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
80
+ className: "sea-email-option-editor-content",
81
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_insertTableElement.default, {
82
+ type: _constant.TABLE_ELEMENT.ROW,
83
+ count: 1,
84
+ currentCount: currentRowsCount,
85
+ position: _constant.TABLE_ELEMENT_POSITION.BEFORE,
86
+ insertTableElement: _insertTableChildren
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_insertTableElement.default, {
88
+ type: _constant.TABLE_ELEMENT.ROW,
89
+ count: 1,
90
+ currentCount: currentRowsCount,
91
+ position: _constant.TABLE_ELEMENT_POSITION.AFTER,
92
+ insertTableElement: _insertTableChildren
93
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_insertTableElement.default, {
94
+ type: _constant.TABLE_ELEMENT.COLUMN,
95
+ count: 1,
96
+ currentCount: currentColumnsCount,
97
+ position: _constant.TABLE_ELEMENT_POSITION.BEFORE,
98
+ insertTableElement: _insertTableChildren
99
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_insertTableElement.default, {
100
+ type: _constant.TABLE_ELEMENT.COLUMN,
101
+ count: 1,
102
+ currentCount: currentColumnsCount,
103
+ position: _constant.TABLE_ELEMENT_POSITION.AFTER,
104
+ insertTableElement: _insertTableChildren
105
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
106
+ className: "sea-email-option-editor-option-divider"
107
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_option.default, {
108
+ option: {
109
+ value: '',
110
+ label: (0, _constants.gettext)('Delete row')
111
+ },
112
+ isShowSelectedStatus: false,
113
+ onChange: () => handleClickOperationBtn(_tableOperations.removeRow)
114
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_option.default, {
115
+ option: {
116
+ value: '',
117
+ label: (0, _constants.gettext)('Delete column')
118
+ },
119
+ isShowSelectedStatus: false,
120
+ onChange: () => handleClickOperationBtn(_tableOperations.removeColumn)
121
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
122
+ className: "sea-email-option-editor-option-divider"
123
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_option.default, {
124
+ option: {
125
+ value: '',
126
+ label: (0, _constants.gettext)('Delete table')
127
+ },
128
+ isShowSelectedStatus: false,
129
+ onChange: () => handleClickOperationBtn(_tableOperations.removeTable)
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
131
+ className: "sea-email-option-editor-option-divider"
132
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_option.default, {
133
+ innerRef: horizontalAlignRef,
134
+ option: {
135
+ value: '',
136
+ label: (0, _constants.gettext)('Delete table'),
137
+ selectedIcon: 'arrow-right'
138
+ },
139
+ onChange: () => {}
140
+ }), horizontalAlignRef.current && /*#__PURE__*/(0, _jsxRuntime.jsx)(_horizontalAlignPopover.default, {
141
+ target: horizontalAlignRef,
142
+ editor: editor,
143
+ horizontalAlign: horizontalAlign
144
+ })]
145
+ })
146
+ })
147
+ })
148
+ })
149
+ })
150
+ });
151
+ };
152
+ var _default = exports.default = ContextMenu;
@@ -0,0 +1,27 @@
1
+ .sea-email-insert-table-element-option .sea-email-insert-table-element-count-container {
2
+ align-items: center;
3
+ display: flex;
4
+ margin-left: 50px;
5
+ }
6
+
7
+ .sea-email-insert-table-element-option .sea-email-insert-table-element-count-container {
8
+ align-items: center;
9
+ display: flex;
10
+ margin-left: 50px;
11
+ }
12
+
13
+ .sea-email-insert-table-element-option .sea-email-insert-table-element-count-input {
14
+ height: 20px;
15
+ margin-right: .25rem;
16
+ padding-left: 4px;
17
+ padding-right: 4px;
18
+ text-align: center;
19
+ transition: none;
20
+ width: 36px;
21
+ }
22
+
23
+ .sea-email-insert-table-element-option.sea-email-option-editor-option .sea-email-option-editor-option-content {
24
+ width: 100%;
25
+ justify-content: space-between;
26
+ white-space: nowrap;
27
+ }