@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,154 @@
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 _helpers = require("./helpers");
11
+ var _constant = require("../list/constant");
12
+ const getCurrentLineEntry = editor => {
13
+ // blockquote > paragraph
14
+ // blockquote > check_list_item
15
+ // blockquote > list > list_item > paragraph
16
+ const [currentLineEntry] = _slate.Editor.nodes(editor, {
17
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n),
18
+ mode: 'lowest'
19
+ });
20
+ if (!currentLineEntry) return null;
21
+ const type = currentLineEntry[0].type;
22
+ if (type === _elementTypes.PARAGRAPH) {
23
+ const parentPath = _slate.Path.parent(currentLineEntry[1]);
24
+ if (parentPath.length === 1) return currentLineEntry; // top level element
25
+ const [listEntry] = _slate.Editor.nodes(editor, {
26
+ match: n => _slate.Element.isElement(n) && _constant.LIST_TYPES.includes(n.type),
27
+ mode: 'highest'
28
+ });
29
+ return listEntry;
30
+ }
31
+ return currentLineEntry;
32
+ };
33
+ const withBlockquote = editor => {
34
+ const {
35
+ insertBreak,
36
+ deleteBackward,
37
+ insertFragment
38
+ } = editor;
39
+ const newEditor = editor;
40
+ newEditor.insertBreak = () => {
41
+ const {
42
+ selection
43
+ } = editor;
44
+ if (selection == null) return insertBreak();
45
+ const [blockquoteEntry] = _slate.Editor.nodes(editor, {
46
+ match: n => _slate.Element.isElement(n) && n.type === _elementTypes.BLOCKQUOTE,
47
+ universal: true
48
+ });
49
+ if (!blockquoteEntry) return insertBreak();
50
+
51
+ // blockquote > paragraph
52
+ // blockquote > check_list_item
53
+ // blockquote > list > list_item
54
+ const currentLineEntry = getCurrentLineEntry(newEditor);
55
+ if (!currentLineEntry) return insertBreak();
56
+
57
+ // handle this case by list plugin
58
+ const currentLineType = currentLineEntry[0].type;
59
+ if (_constant.LIST_TYPES.includes(currentLineType) || currentLineType === _elementTypes.CHECK_LIST_ITEM) {
60
+ insertBreak();
61
+ return;
62
+ }
63
+ const isEmptyLine = _slate.Node.string(currentLineEntry[0]).length === 0;
64
+ const isFirst = (0, _core.isFirstChild)(blockquoteEntry, currentLineEntry[1]);
65
+ if (isEmptyLine && isFirst && blockquoteEntry[0].children.length === 1) {
66
+ _slate.Transforms.unwrapNodes(editor, {
67
+ mode: 'highest',
68
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n)
69
+ });
70
+ return;
71
+ }
72
+ const isLast = (0, _core.isLastChild)(blockquoteEntry, currentLineEntry[1]);
73
+ if (isEmptyLine && isLast) {
74
+ const nextPath = _slate.Path.next(blockquoteEntry[1]);
75
+ _slate.Transforms.moveNodes(newEditor, {
76
+ at: currentLineEntry[1],
77
+ to: nextPath
78
+ });
79
+ return;
80
+ }
81
+
82
+ // In other cases, insert a newline
83
+ _slate.Transforms.insertNodes(newEditor, (0, _core.generateDefaultParagraph)(), {
84
+ at: newEditor.selection,
85
+ select: true
86
+ });
87
+ };
88
+ newEditor.deleteBackward = unit => {
89
+ const {
90
+ selection
91
+ } = newEditor;
92
+ if (selection === null) {
93
+ deleteBackward(unit);
94
+ return;
95
+ }
96
+ const [blockquoteEntry] = _slate.Editor.nodes(editor, {
97
+ match: n => _slate.Element.isElement(n) && n.type === _elementTypes.BLOCKQUOTE,
98
+ universal: true
99
+ });
100
+ if (!blockquoteEntry) return deleteBackward(unit);
101
+
102
+ // blockquote > paragraph
103
+ // blockquote > check_list_item
104
+ // blockquote > list > list_item
105
+ const currentLineEntry = getCurrentLineEntry(editor);
106
+ if (!currentLineEntry) return deleteBackward(unit);
107
+
108
+ // handle this case by list plugin
109
+ const currentLineType = currentLineEntry[0].type;
110
+ if (_constant.LIST_TYPES.includes(currentLineType) || currentLineType === _elementTypes.CHECK_LIST_ITEM) {
111
+ deleteBackward(unit);
112
+ return;
113
+ }
114
+ const isEmptyLine = _slate.Node.string(currentLineEntry[0]).length === 0;
115
+ const isFirst = (0, _core.isFirstChild)(blockquoteEntry, currentLineEntry[1]);
116
+ if (isEmptyLine && isFirst && blockquoteEntry[0].children.length === 1) {
117
+ (0, _helpers.setBlockQuoteType)(editor, _elementTypes.PARAGRAPH);
118
+ return;
119
+ }
120
+ deleteBackward(unit);
121
+ };
122
+ newEditor.insertFragment = fragment => {
123
+ const {
124
+ selection
125
+ } = editor;
126
+ if (selection == null) return insertFragment(fragment);
127
+ const [blockquoteEntry] = _slate.Editor.nodes(editor, {
128
+ match: n => _slate.Element.isElement(n) && n.type === _elementTypes.BLOCKQUOTE,
129
+ universal: true
130
+ });
131
+ if (!blockquoteEntry) return insertFragment(fragment);
132
+ const firstChild = fragment[0];
133
+ if (fragment.length === 1 && firstChild.type === _elementTypes.TABLE) {
134
+ // const nodeEntry = Editor.nodes(newEditor, { mode: 'highest' });
135
+ const nextPath = _slate.Path.next(blockquoteEntry[1]);
136
+ _slate.Transforms.insertNodes(newEditor, fragment, {
137
+ at: nextPath
138
+ });
139
+ return;
140
+ }
141
+ const insertData = fragment.map(node => {
142
+ if (node.type === _elementTypes.TABLE) {
143
+ const text = _slate.Node.string(node);
144
+ return (0, _core.generateElement)(_elementTypes.PARAGRAPH, {
145
+ childrenOrText: text
146
+ });
147
+ }
148
+ return node;
149
+ });
150
+ return insertFragment(insertData);
151
+ };
152
+ return newEditor;
153
+ };
154
+ var _default = exports.default = withBlockquote;
@@ -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 renderBlockquote = props => {
12
+ const {
13
+ attributes,
14
+ children,
15
+ element
16
+ } = props;
17
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("blockquote", {
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 = renderBlockquote;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformToCheckList = exports.isMenuDisabled = exports.getCheckListEntryList = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../../constants/element-types");
9
+ var _core = require("../../core");
10
+ const isMenuDisabled = (editor, isReadonly) => {
11
+ if (isReadonly || !editor.selection) return true;
12
+ const disabledElementTypes = [_elementTypes.CODE_LINE, _elementTypes.CODE_BLOCK, _elementTypes.LIST_ITEM, _elementTypes.TABLE, _elementTypes.TABLE_ROW, _elementTypes.TABLE_CELL];
13
+ const isSelectedDisableElement = !!(0, _core.getSelectedElems)(editor).find(elem => disabledElementTypes.includes(elem.type));
14
+ if (isSelectedDisableElement) return true;
15
+ return false;
16
+ };
17
+ exports.isMenuDisabled = isMenuDisabled;
18
+ const getCheckListEntryList = editor => {
19
+ const checkListEntries = _slate.Editor.nodes(editor, {
20
+ match: node => node.type === _elementTypes.CHECK_LIST_ITEM,
21
+ universal: true
22
+ });
23
+ const checkListEntryList = Array.from(checkListEntries);
24
+ return checkListEntryList;
25
+ };
26
+ exports.getCheckListEntryList = getCheckListEntryList;
27
+ const transformToCheckList = editor => {
28
+ if (!editor.selection) return;
29
+ _slate.Transforms.setNodes(editor, {
30
+ type: _elementTypes.CHECK_LIST_ITEM
31
+ });
32
+ (0, _core.focusEditor)(editor);
33
+ };
34
+ exports.transformToCheckList = transformToCheckList;
@@ -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 _elementTypes = require("../../constants/element-types");
9
+ var _menu = _interopRequireDefault(require("./menu"));
10
+ var _plugin = _interopRequireDefault(require("./plugin"));
11
+ var _renderElem = _interopRequireDefault(require("./render-elem"));
12
+ const CheckListPlugin = {
13
+ type: _elementTypes.CHECK_LIST_ITEM,
14
+ nodeType: 'element',
15
+ editorMenus: [_menu.default],
16
+ editorPlugin: _plugin.default,
17
+ renderElements: [_renderElem.default]
18
+ };
19
+ var _default = exports.default = CheckListPlugin;
@@ -0,0 +1,39 @@
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 _elementTypes = require("../../../constants/element-types");
11
+ var _components = require("../../../../components");
12
+ var _helper = require("../helper");
13
+ var _helper2 = require("../../paragraph/helper");
14
+ var _core = require("../../../core");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ const menuConfig = _constants.MENUS_CONFIG_MAP[_elementTypes.CHECK_LIST_ITEM];
17
+ const CheckListMenu = _ref => {
18
+ let {
19
+ editor,
20
+ readonly,
21
+ className
22
+ } = _ref;
23
+ // eslint-disable-next-line react-hooks/exhaustive-deps
24
+ const isDisabled = (0, _react.useMemo)(() => (0, _helper.isMenuDisabled)(editor), [editor.selection, readonly]);
25
+ const isActive = !!(0, _core.getSelectedNodeByType)(editor, _elementTypes.CHECK_LIST_ITEM);
26
+ const onClick = (0, _react.useCallback)(e => {
27
+ e.preventDefault();
28
+ isActive ? (0, _helper2.transformToParagraph)(editor) : (0, _helper.transformToCheckList)(editor);
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ }, [isActive]);
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
32
+ className: className,
33
+ disabled: isDisabled,
34
+ isActive: isActive,
35
+ onClick: onClick,
36
+ ...menuConfig
37
+ });
38
+ };
39
+ var _default = exports.default = CheckListMenu;
@@ -0,0 +1,92 @@
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 _helper = require("../paragraph/helper");
11
+ var _constants = require("../../constants");
12
+ const withCheckList = editor => {
13
+ const {
14
+ insertBreak,
15
+ deleteBackward,
16
+ insertFragment
17
+ } = editor;
18
+ const newEditor = editor;
19
+ newEditor.insertBreak = () => {
20
+ if (!newEditor.selection) {
21
+ insertBreak();
22
+ return;
23
+ }
24
+ const checkListNode = (0, _core.getSelectedNodeByType)(newEditor, _elementTypes.CHECK_LIST_ITEM);
25
+ if (!checkListNode) {
26
+ insertBreak();
27
+ return;
28
+ }
29
+ const nodeText = _slate.Node.string(checkListNode);
30
+ if (nodeText.length === 0) {
31
+ (0, _helper.transformToParagraph)(newEditor);
32
+ } else {
33
+ _slate.Transforms.splitNodes(newEditor, {
34
+ always: true
35
+ });
36
+ }
37
+ };
38
+ newEditor.deleteBackward = unit => {
39
+ const {
40
+ selection
41
+ } = newEditor;
42
+ if (selection && _slate.Range.isCollapsed(selection)) {
43
+ const selectedCheckListNode = (0, _core.getSelectedNodeByType)(newEditor, _elementTypes.CHECK_LIST_ITEM);
44
+ if (selectedCheckListNode && (0, _core.isSelectionAtBlockStart)(editor)) {
45
+ (0, _helper.transformToParagraph)(newEditor);
46
+ return;
47
+ }
48
+ }
49
+ deleteBackward(unit);
50
+ };
51
+ newEditor.insertFragment = fragment => {
52
+ const match = {
53
+ type: [_elementTypes.CHECK_LIST_ITEM]
54
+ };
55
+ const [checkListEntry] = (0, _core.getNodeEntries)(newEditor, {
56
+ match
57
+ });
58
+ if (!checkListEntry) return insertFragment(fragment);
59
+ const firstChild = fragment[0];
60
+ if (fragment.length === 1 && _constants.LIST_TYPE_ARRAY.includes(firstChild.type)) {
61
+ // insert text
62
+ if (firstChild.children.length === 1) {
63
+ const text = _slate.Node.string(fragment[0]);
64
+ (0, _slate.insertText)(text);
65
+ return;
66
+ }
67
+
68
+ // insert list at current path
69
+ if ((0, _core.isSelectionAtBlockStart)(editor)) {
70
+ _slate.Transforms.insertNodes(newEditor, fragment);
71
+ return;
72
+ }
73
+
74
+ // insert list at next path
75
+ const nextPath = _slate.Path.next(checkListEntry[1]);
76
+ _slate.Transforms.insertNodes(newEditor, fragment, {
77
+ at: nextPath
78
+ });
79
+ return;
80
+ }
81
+ if (fragment.length === 1 && firstChild.type === _elementTypes.TABLE) {
82
+ const nextPath = _slate.Path.next(checkListEntry[1]);
83
+ _slate.Transforms.insertNodes(newEditor, fragment, {
84
+ at: nextPath
85
+ });
86
+ return;
87
+ }
88
+ return insertFragment(fragment);
89
+ };
90
+ return newEditor;
91
+ };
92
+ var _default = exports.default = withCheckList;
@@ -0,0 +1,61 @@
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 _slate = require("slate");
10
+ var _slateReact = require("slate-react");
11
+ var _constants = require("../../constants");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ /* eslint-disable react-hooks/rules-of-hooks */
14
+
15
+ const renderCheckListItem = (_ref, editor) => {
16
+ let {
17
+ attributes,
18
+ children,
19
+ element
20
+ } = _ref;
21
+ const isReadonly = (0, _slateReact.useReadOnly)();
22
+ const {
23
+ id,
24
+ checked = false
25
+ } = element || {};
26
+ const onChange = event => {
27
+ const checked = event.target.checked;
28
+ const path = _slateReact.ReactEditor.findPath(editor, element);
29
+ _slate.Transforms.setNodes(editor, {
30
+ checked
31
+ }, {
32
+ at: path
33
+ });
34
+ };
35
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
36
+ "data-id": id,
37
+ "data-root": "true",
38
+ className: element.className,
39
+ ...attributes,
40
+ style: {
41
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
42
+ ...((element === null || element === void 0 ? void 0 : element.style) || {})
43
+ },
44
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
45
+ contentEditable: false,
46
+ style: {
47
+ marginRight: 6
48
+ },
49
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
50
+ type: "checkbox",
51
+ style: {
52
+ verticalAlign: -2
53
+ },
54
+ onChange: onChange,
55
+ checked: checked,
56
+ disabled: isReadonly
57
+ })
58
+ }), children]
59
+ });
60
+ };
61
+ var _default = exports.default = renderCheckListItem;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isMenuDisabled = exports.clearStyles = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../../constants/element-types");
9
+ var _core = require("../../core");
10
+ const isMenuDisabled = function (editor) {
11
+ let readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
12
+ if (readonly) return true;
13
+ if (editor.selection == null) return true;
14
+ const [match] = _slate.Editor.nodes(editor, {
15
+ match: n => {
16
+ const type = (0, _core.getNodeType)(n);
17
+ if ([_elementTypes.CODE_BLOCK, _elementTypes.CODE_LINE].includes(type)) return true; // code-block
18
+ if (_slate.Editor.isVoid(editor, n)) return true; // void node
19
+
20
+ return false;
21
+ },
22
+ universal: true
23
+ });
24
+ if (match) return true;
25
+ return false;
26
+ };
27
+ exports.isMenuDisabled = isMenuDisabled;
28
+ const removeMarks = (editor, textNode) => {
29
+ // Iterate text node properties, clearing styles
30
+ const keys = Object.keys(textNode);
31
+ keys.forEach(key => {
32
+ if (key === 'text') {
33
+ // Keep only the text attribute (Text attributes are necessary)
34
+ return;
35
+ }
36
+ // All other attributes are deleted
37
+ _slate.Editor.removeMark(editor, key);
38
+ });
39
+ };
40
+ const clearStyles = editor => {
41
+ const nodeEntries = _slate.Editor.nodes(editor, {
42
+ match: n => _slate.Text.isText(n),
43
+ universal: true
44
+ });
45
+ for (const nodeEntry of nodeEntries) {
46
+ // single text node
47
+ const n = nodeEntry[0];
48
+ removeMarks(editor, n);
49
+ }
50
+ };
51
+ exports.clearStyles = clearStyles;
@@ -0,0 +1,35 @@
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 _components = require("../../../../components");
11
+ var _helpers = require("../helpers");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.CLEAR_FORMAT];
14
+ const ClearFormatMenu = _ref => {
15
+ let {
16
+ className,
17
+ editor,
18
+ readonly
19
+ } = _ref;
20
+ const onClick = (0, _react.useCallback)(() => {
21
+ (0, _helpers.clearStyles)(editor);
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ }, [editor]);
24
+ const props = {
25
+ className,
26
+ ...menuConfig,
27
+ disabled: (0, _helpers.isMenuDisabled)(editor, readonly),
28
+ isActive: false,
29
+ onClick: onClick
30
+ };
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
32
+ ...props
33
+ });
34
+ };
35
+ var _default = exports.default = ClearFormatMenu;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unwrapCodeBlock = exports.transformToCodeBlock = exports.setCodeBlockLanguage = exports.isMenuDisabled = exports.isInCodeBlock = exports.getCodeBlockNodeEntry = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../../constants/element-types");
9
+ var _core = require("../../core");
10
+ var _constant = require("./render-elem/constant");
11
+ // eslint-disable-next-line no-unused-vars
12
+
13
+ const isMenuDisabled = (editor, readonly) => {
14
+ if (readonly) return true;
15
+ const {
16
+ selection
17
+ } = editor;
18
+ if (!selection) return true;
19
+ const selectedElements = (0, _core.getSelectedElems)(editor);
20
+ const isSelectedVoid = selectedElements.find(node => editor.isVoid(node));
21
+ if (isSelectedVoid) return true;
22
+ // Disable the menu when selection is not in the paragraph or code block
23
+ const isEnable = selectedElements.every(node => [_elementTypes.CODE_BLOCK, _elementTypes.PARAGRAPH, _elementTypes.CODE_LINE].includes(node.type));
24
+ return !isEnable;
25
+ };
26
+ exports.isMenuDisabled = isMenuDisabled;
27
+ const getCodeBlockNodeEntry = editor => {
28
+ if (!editor.selection) return;
29
+ const [codeBlock] = _slate.Editor.nodes(editor, {
30
+ match: node => node.type === _elementTypes.CODE_BLOCK,
31
+ mode: 'highest'
32
+ });
33
+ return codeBlock;
34
+ };
35
+ exports.getCodeBlockNodeEntry = getCodeBlockNodeEntry;
36
+ const isInCodeBlock = editor => {
37
+ if (!editor.selection) return false;
38
+ const [codeBlock] = _slate.Editor.nodes(editor, {
39
+ match: node => node.type === _elementTypes.CODE_BLOCK,
40
+ mode: 'highest'
41
+ });
42
+ if (!codeBlock) return false;
43
+ const selectedElements = (0, _core.getSelectedElems)(editor);
44
+ const isInCodeBlock = !selectedElements.find(element => ![_elementTypes.CODE_BLOCK, _elementTypes.CODE_LINE].includes(element.type));
45
+ return isInCodeBlock;
46
+ };
47
+ exports.isInCodeBlock = isInCodeBlock;
48
+ const transformToCodeBlock = editor => {
49
+ const selectedElements = (0, _core.getSelectedElems)(editor);
50
+ const selectedCodeBlockNum = selectedElements.reduce((codeBlockNum, node) => node.type === _elementTypes.CODE_BLOCK ? ++codeBlockNum : codeBlockNum, 0);
51
+ if (selectedCodeBlockNum > 0) return;
52
+ const originSelection = editor.selection;
53
+ const {
54
+ anchor: originAnchor,
55
+ focus: originFocus
56
+ } = originSelection;
57
+ const textList = [];
58
+ const nodeEntries = _slate.Editor.nodes(editor, {
59
+ match: node => editor.children.includes(node),
60
+ // Match the highest level node that custom selected
61
+ universal: true
62
+ });
63
+ for (let nodeEntry of nodeEntries) {
64
+ const [node] = nodeEntry;
65
+ if (node) {
66
+ textList.push(_slate.Node.string(node));
67
+ }
68
+ }
69
+ // Generate code block
70
+ const codeBlockChildren = textList.map(text => (0, _core.generateElement)(_elementTypes.CODE_LINE, {
71
+ childrenOrText: text
72
+ }));
73
+ const codeBlock = (0, _core.generateElement)(_elementTypes.CODE_BLOCK, {
74
+ childrenOrText: codeBlockChildren,
75
+ props: {
76
+ lang: _constant.EXPLAIN_TEXT
77
+ }
78
+ });
79
+ _slate.Editor.withoutNormalizing(editor, () => {
80
+ _slate.Transforms.removeNodes(editor, {
81
+ mode: 'highest'
82
+ });
83
+ const selectedPath = _slate.Editor.path(editor, originSelection);
84
+ const beginPath = _slate.Point.isBefore(originAnchor, originFocus) ? originAnchor.path : originFocus.path;
85
+ const insertPath = selectedPath && Object.keys(selectedPath).length ? [selectedPath[0]] : [beginPath[0]];
86
+ _slate.Transforms.insertNodes(editor, codeBlock, {
87
+ at: insertPath
88
+ });
89
+ const focusPoint = _slate.Editor.start(editor, insertPath);
90
+ (0, _core.focusEditor)(editor, focusPoint);
91
+ // const atPoint = {
92
+ // anchor: { offset: 0, path: [insertPath[0], 0, 0] },
93
+ // focus: { offset: 0, path: [insertPath[0], 0, 0] }
94
+ // };
95
+ // focusEditor(editor, atPoint);
96
+ });
97
+ };
98
+ exports.transformToCodeBlock = transformToCodeBlock;
99
+ const unwrapCodeBlock = editor => {
100
+ const selectedCodeBlock = (0, _core.getSelectedNodeEntryByType)(editor, _elementTypes.CODE_BLOCK);
101
+ if (!selectedCodeBlock) return;
102
+ const selectedCodeBlockPath = selectedCodeBlock[1];
103
+ const codeLineEntries = _slate.Editor.nodes(editor, {
104
+ at: selectedCodeBlockPath,
105
+ match: node => node.type === _elementTypes.CODE_LINE
106
+ });
107
+ const paragraphNodes = [];
108
+ for (const codeLineEntry of codeLineEntries) {
109
+ const [codeLineNode] = codeLineEntry;
110
+ const paragraph = (0, _core.generateElement)(_elementTypes.PARAGRAPH, {
111
+ childrenOrText: _slate.Node.string(codeLineNode)
112
+ });
113
+ paragraphNodes.push(paragraph);
114
+ }
115
+ _slate.Transforms.removeNodes(editor, {
116
+ at: selectedCodeBlockPath,
117
+ match: node => node.type === _elementTypes.CODE_BLOCK,
118
+ mode: 'highest'
119
+ });
120
+ _slate.Transforms.insertNodes(editor, paragraphNodes, {
121
+ at: selectedCodeBlockPath
122
+ });
123
+ const focusPath = [selectedCodeBlockPath[0] + paragraphNodes.length - 1];
124
+ (0, _core.focusEditor)(editor, _slate.Editor.end(editor, focusPath));
125
+ };
126
+
127
+ /**
128
+ * @param {object} editor
129
+ * @param {keyof LANGUAGE_MAP} [lang = EXPLAIN_TEXT] by default is 'none'
130
+ */
131
+ exports.unwrapCodeBlock = unwrapCodeBlock;
132
+ const setCodeBlockLanguage = (editor, lang, path) => {
133
+ _slate.Transforms.setNodes(editor, {
134
+ lang
135
+ }, {
136
+ at: path
137
+ });
138
+ (0, _core.focusEditor)(editor, editor.selection || _slate.Editor.start(editor, path));
139
+ };
140
+ exports.setCodeBlockLanguage = setCodeBlockLanguage;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _elementTypes = require("../../constants/element-types");
10
+ var _menu = _interopRequireDefault(require("./menu"));
11
+ var _plugin = _interopRequireDefault(require("./plugin"));
12
+ var _renderElem = _interopRequireWildcard(require("./render-elem"));
13
+ const CodeBlockPlugin = {
14
+ type: _elementTypes.CODE_BLOCK,
15
+ nodeType: 'element',
16
+ editorMenus: [_menu.default],
17
+ editorPlugin: _plugin.default,
18
+ renderElements: [_renderElem.default, _renderElem.renderCodeLine]
19
+ };
20
+ var _default = exports.default = CodeBlockPlugin;