@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,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 = require("./render-elem");
12
+ const ListPlugin = {
13
+ type: _elementTypes.LIST_ITEM,
14
+ nodeType: 'element',
15
+ editorMenus: [_menu.default],
16
+ editorPlugin: _plugin.default,
17
+ renderElements: [_renderElem.renderList, _renderElem.renderListItem, _renderElem.renderListLic]
18
+ };
19
+ var _default = exports.default = ListPlugin;
@@ -0,0 +1,41 @@
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 _components = require("../../../../components");
10
+ var _helpers = require("../helpers");
11
+ var _constants = require("../../../constants");
12
+ var _transforms = require("../transforms");
13
+ var _core = require("../../../core");
14
+ var _elementTypes = require("../../../constants/element-types");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ const ListMenu = _ref => {
17
+ let {
18
+ editor,
19
+ readonly,
20
+ type,
21
+ className
22
+ } = _ref;
23
+ const isActive = (0, _helpers.getActiveListType)(editor, type) === type;
24
+
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ const menuConfig = (0, _react.useMemo)(() => _constants.MENUS_CONFIG_MAP[type], []);
27
+ const onClick = (0, _react.useCallback)(e => {
28
+ e.preventDefault();
29
+ (0, _transforms.transformsToList)(editor, type);
30
+ (0, _core.focusEditor)(editor);
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ }, [isActive]);
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
34
+ isActive: isActive,
35
+ disabled: (0, _helpers.isMenuDisabled)(editor, readonly),
36
+ className: className,
37
+ onClick: onClick,
38
+ ...menuConfig
39
+ });
40
+ };
41
+ var _default = exports.default = ListMenu;
@@ -0,0 +1,80 @@
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 _isHotkey = _interopRequireDefault(require("is-hotkey"));
9
+ var _helpers = require("../helpers");
10
+ var _onTabHandle = require("./on-tab-handle");
11
+ var _insertBreakList = require("./insert-break-list");
12
+ var _insertFragmentList = require("./insert-fragment-list");
13
+ var _normalizeList = require("./normalize-list");
14
+ var _constant = require("../constant");
15
+ var _shortcut = require("./shortcut");
16
+ var _queries = require("../queries");
17
+ var _core = require("../../../core");
18
+ var _transforms = require("../transforms");
19
+ var _elementTypes = require("../../../constants/element-types");
20
+ const withList = editor => {
21
+ const {
22
+ insertBreak,
23
+ onHotKeyDown,
24
+ deleteBackward,
25
+ insertText
26
+ } = editor;
27
+ const newEditor = editor;
28
+ newEditor.insertBreak = () => {
29
+ if ((0, _insertBreakList.insertBreakList)(editor)) return;
30
+ insertBreak();
31
+ return;
32
+ };
33
+ newEditor.deleteBackward = unit => {
34
+ const {
35
+ selection
36
+ } = newEditor;
37
+ if (selection === null) {
38
+ deleteBackward(unit);
39
+ return;
40
+ }
41
+ const res = (0, _queries.getListItemEntry)(editor, {});
42
+ if (res && (0, _core.isSelectionAtBlockStart)(editor, {
43
+ match: node => node.type === _elementTypes.LIST_ITEM
44
+ })) {
45
+ const {
46
+ list,
47
+ listItem
48
+ } = res;
49
+ if ((0, _core.isFirstNode)(list[0], listItem[0]) && !(0, _queries.isListNested)(editor, list[1])) {
50
+ (0, _transforms.unwrapList)(editor);
51
+ return;
52
+ }
53
+ }
54
+ // nothing todo
55
+ deleteBackward(unit);
56
+ };
57
+ newEditor.insertText = text => {
58
+ const isPreventInsert = (0, _shortcut.handleShortcut)(newEditor, text);
59
+ if (isPreventInsert) return;
60
+ return insertText(text);
61
+ };
62
+ newEditor.onHotKeyDown = event => {
63
+ const activeListType = (0, _helpers.getActiveListType)(editor);
64
+ const isListActive = _constant.LIST_TYPES.includes(activeListType);
65
+ if (isListActive) {
66
+ if ((0, _isHotkey.default)(['tab', 'shift+tab'], event)) {
67
+ if ((0, _onTabHandle.handleTab)(newEditor, event)) return true;
68
+ }
69
+ if ((0, _isHotkey.default)('shift+enter', event)) {
70
+ event.preventDefault();
71
+ return true;
72
+ }
73
+ }
74
+ return onHotKeyDown && onHotKeyDown(event);
75
+ };
76
+ newEditor.insertFragment = (0, _insertFragmentList.insertFragmentList)(newEditor);
77
+ newEditor.normalizeNode = (0, _normalizeList.normalizeList)(newEditor);
78
+ return newEditor;
79
+ };
80
+ var _default = exports.default = withList;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.insertBreakList = void 0;
7
+ var _core = require("../../../core");
8
+ var _queries = require("../queries");
9
+ var _transforms = require("../transforms");
10
+ const insertBreakList = editor => {
11
+ if (!editor.selection) return;
12
+
13
+ // moved | inserted
14
+ let moved = false;
15
+ const res = (0, _queries.getListItemEntry)(editor, {});
16
+ // If selection is in a li, and li content is empty
17
+ if (res) {
18
+ if ((0, _core.isBlockAboveEmpty)(editor)) {
19
+ moved = (0, _transforms.movedListItemUp)(editor, res);
20
+ if (moved) return true;
21
+ }
22
+ }
23
+ if (!moved) {
24
+ const inserted = (0, _transforms.insertListItem)(editor);
25
+ if (inserted) return true;
26
+ }
27
+ return;
28
+ };
29
+ exports.insertBreakList = insertBreakList;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.insertFragmentList = exports.getTextAndListItemNodes = void 0;
8
+ var _slate = require("slate");
9
+ var _slugid = _interopRequireDefault(require("slugid"));
10
+ var _core = require("../../../core");
11
+ var _constant = require("../constant");
12
+ var _elementTypes = require("../../../constants/element-types");
13
+ const isListRoot = node => {
14
+ return _slate.Element.isElement(node) && _constant.LIST_TYPES.includes(node.type);
15
+ };
16
+ const getFirstAncestorOfType = (root, entry, _ref) => {
17
+ let {
18
+ type
19
+ } = _ref;
20
+ let ancestor = _slate.Path.parent(entry[1]);
21
+ while ((0, _core.getNode)(root, ancestor).type !== type) {
22
+ ancestor = _slate.Path.parent(ancestor);
23
+ }
24
+ return [(0, _core.getNode)(root, ancestor), ancestor];
25
+ };
26
+ const findListItemsWithContent = first => {
27
+ let prev = null;
28
+ let node = first;
29
+ while (isListRoot(node) || node.type === _elementTypes.LIST_ITEM && node.children[0].type !== _elementTypes.PARAGRAPH) {
30
+ prev = node;
31
+ [node] = node.children;
32
+ }
33
+ return prev ? prev.children : [node];
34
+ };
35
+ const trimList = listRoot => {
36
+ if (!isListRoot(listRoot)) {
37
+ return [listRoot];
38
+ }
39
+ const _texts = _slate.Node.texts(listRoot);
40
+ const textEntries = Array.from(_texts);
41
+ const commonAncestorEntry = textEntries.reduce((commonAncestor, textEntry) => {
42
+ return _slate.Path.isAncestor(commonAncestor[1], textEntry[1]) ? commonAncestor : (0, _core.getCommonNode)(listRoot, textEntry[1], commonAncestor[1]);
43
+ }, getFirstAncestorOfType(listRoot, textEntries[0], {
44
+ type: _elementTypes.LIST_ITEM
45
+ }));
46
+
47
+ // is ul/ol: return children
48
+ // is not ul/ol
49
+ const [first, ...rest] = isListRoot(commonAncestorEntry[0]) ? commonAncestorEntry[0].children : [commonAncestorEntry[0]];
50
+ return [...findListItemsWithContent(first), ...rest];
51
+ };
52
+ const wrapNodeIntoListItem = node => {
53
+ if (node.type === _elementTypes.LIST_ITEM) return node;
54
+ const children = (0, _core.getInlineNodes)(node);
55
+ return {
56
+ id: _slugid.default.nice(),
57
+ type: _elementTypes.LIST_ITEM,
58
+ children: [{
59
+ id: _slugid.default.nice(),
60
+ type: _elementTypes.PARAGRAPH,
61
+ children
62
+ }]
63
+ };
64
+ };
65
+ const isSingleLic = fragment => {
66
+ const isFragmentOnlyListRoot = fragment.length === 1 && isListRoot(fragment[0]);
67
+ return isFragmentOnlyListRoot && [...(0, _core.getNodes)({
68
+ children: fragment
69
+ })].filter(entry => _slate.Element.isElement(entry[0])).filter(_ref2 => {
70
+ let [node] = _ref2;
71
+ return node.type === _elementTypes.PARAGRAPH;
72
+ }).length === 1;
73
+ };
74
+ const getTextAndListItemNodes = (editor, fragment, liEntry, licEntry) => {
75
+ const [, liPath] = liEntry;
76
+ const [licNode, licPath] = licEntry;
77
+ const isEmptyNode = !_slate.Node.string(licNode);
78
+ // format copied fragment
79
+ // first: lic, path: [...liPath, 0, 0]
80
+ // rest: children, path: [...liPath, 1, 0]
81
+ const [first, ...rest] = fragment.flatMap(trimList).map(wrapNodeIntoListItem);
82
+ let textNode = null;
83
+ let listItemNodes = [];
84
+ if (isListRoot(fragment[0])) {
85
+ if (isSingleLic(fragment)) {
86
+ textNode = first;
87
+ listItemNodes = rest;
88
+ } else if (isEmptyNode) {
89
+ const li = (0, _core.getNode)(editor, liPath);
90
+ const [, ...currentSubLists] = li.children; // old
91
+
92
+ const [newLic, ...newSubLists] = first.children; // copied
93
+ // insert copied contents
94
+ _slate.Transforms.insertNodes(editor, newLic, {
95
+ at: _slate.Path.next(licPath),
96
+ select: true
97
+ });
98
+ _slate.Transforms.removeNodes(editor, {
99
+ at: licPath
100
+ });
101
+ if (newSubLists.length) {
102
+ if (currentSubLists.length) {
103
+ const path = [...liPath, 1, 0];
104
+ _slate.Transforms.insertNodes(editor, newSubLists[0].children, {
105
+ at: path,
106
+ select: true
107
+ });
108
+ } else {
109
+ _slate.Transforms.insertNodes(editor, newSubLists, {
110
+ at: _slate.Path.next(licPath),
111
+ select: true
112
+ });
113
+ }
114
+ }
115
+ textNode = (0, _core.generateDefaultText)();
116
+ listItemNodes = rest;
117
+ } else {
118
+ textNode = (0, _core.generateDefaultText)();
119
+ listItemNodes = [first, ...rest];
120
+ }
121
+ } else {
122
+ textNode = first;
123
+ listItemNodes = rest;
124
+ return {
125
+ textNode,
126
+ listItemNodes
127
+ };
128
+ }
129
+ return {
130
+ textNode,
131
+ listItemNodes
132
+ };
133
+ };
134
+ exports.getTextAndListItemNodes = getTextAndListItemNodes;
135
+ const insertFragmentList = editor => {
136
+ return fragment => {
137
+ _slate.Editor.withoutNormalizing(editor, () => {
138
+ let liEntry = (0, _core.findNode)(editor, {
139
+ match: {
140
+ type: _elementTypes.LIST_ITEM
141
+ },
142
+ mode: 'lowest'
143
+ });
144
+ if (!liEntry) {
145
+ const nodes = isListRoot(fragment) ? [(0, _core.generateDefaultText)(), ...fragment] : fragment;
146
+ return (0, _slate.insertFragment)(editor, nodes);
147
+ }
148
+ (0, _slate.insertFragment)(editor, [(0, _core.generateDefaultText)()]); // need ' '
149
+
150
+ liEntry = (0, _core.findNode)(editor, {
151
+ match: {
152
+ type: _elementTypes.LIST_ITEM
153
+ },
154
+ mode: 'lowest'
155
+ });
156
+ const licEntry = (0, _core.findNode)(editor, {
157
+ match: {
158
+ type: _elementTypes.PARAGRAPH
159
+ },
160
+ mode: 'lowest'
161
+ });
162
+ if (!licEntry) {
163
+ const nodes = isListRoot(fragment) ? [(0, _core.generateDefaultText)(), ...fragment] : fragment;
164
+ return (0, _slate.insertFragment)(editor, nodes);
165
+ }
166
+ const {
167
+ textNode,
168
+ listItemNodes
169
+ } = getTextAndListItemNodes(editor, fragment, liEntry, licEntry);
170
+ (0, _slate.insertFragment)(editor, [textNode]);
171
+ const [, liPath] = liEntry;
172
+ return _slate.Transforms.insertNodes(editor, listItemNodes, {
173
+ at: _slate.Path.next(liPath),
174
+ select: true
175
+ });
176
+ });
177
+ };
178
+ };
179
+ exports.insertFragmentList = insertFragmentList;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normalizeList = void 0;
7
+ var _slate = require("slate");
8
+ var _transforms = require("../transforms");
9
+ var _elementTypes = require("../../../constants/element-types");
10
+ var _core = require("../../../core");
11
+ var _constant = require("../constant");
12
+ const normalizeList = editor => {
13
+ const {
14
+ normalizeNode
15
+ } = editor;
16
+ return _ref => {
17
+ let [node, path] = _ref;
18
+ if (!_slate.Element.isElement(node)) {
19
+ return normalizeNode([node, path]);
20
+ }
21
+
22
+ // root
23
+ if (_constant.LIST_TYPES.includes(node.type)) {
24
+ const children = (0, _core.getChildren)([node, path]);
25
+ const nonLiChild = children.find(_ref2 => {
26
+ let [child] = _ref2;
27
+ return child.type !== _elementTypes.LIST_ITEM;
28
+ });
29
+ if (nonLiChild) {
30
+ const listItem = (0, _core.generateElement)(_elementTypes.LIST_ITEM, {
31
+ childrenOrText: []
32
+ });
33
+ _slate.Transforms.wrapNodes(editor, listItem, {
34
+ at: nonLiChild[1]
35
+ });
36
+ return;
37
+ }
38
+ }
39
+ if ((0, _core.match)(node, [], {
40
+ type: _constant.LIST_TYPES
41
+ })) {
42
+ if (!node.children.length || !node.children.find(item => item.type === _elementTypes.LIST_ITEM)) {
43
+ _slate.Transforms.removeNodes(editor, {
44
+ at: path
45
+ });
46
+ return;
47
+ }
48
+ const nextPath = _slate.Path.next(path);
49
+ const nextNode = (0, _core.getNode)(editor, nextPath);
50
+ if ((nextNode === null || nextNode === void 0 ? void 0 : nextNode.type) === node.type) {
51
+ (0, _transforms.moveListItemsToList)(editor, {
52
+ fromList: [nextNode, nextPath],
53
+ toList: [node, path],
54
+ deleteFromList: true
55
+ });
56
+ }
57
+ const prevPath = (0, _core.getPreviousPath)(path);
58
+ const prevNode = (0, _core.getNode)(editor, prevPath);
59
+ if ((prevNode === null || prevNode === void 0 ? void 0 : prevNode.type) === node.type) {
60
+ editor.normalizeNode([prevNode, prevPath]);
61
+ return;
62
+ }
63
+ if ((0, _transforms.normalizeNestedList)(editor, {
64
+ nestedListItem: [node, path]
65
+ })) {
66
+ return;
67
+ }
68
+ }
69
+ if (node.type === _elementTypes.LIST_ITEM) {
70
+ if ((0, _transforms.normalizeListItem)(editor, {
71
+ listItem: [node, path]
72
+ })) {
73
+ return;
74
+ }
75
+ }
76
+ normalizeNode([node, path]);
77
+ };
78
+ };
79
+ exports.normalizeList = normalizeList;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.handleTab = void 0;
8
+ var _slate = require("slate");
9
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
10
+ var _core = require("../../../core");
11
+ var _elementTypes = require("../../../constants/element-types");
12
+ var _transforms = require("../transforms");
13
+ const handleTab = (editor, event) => {
14
+ const {
15
+ selection,
16
+ hasMovedSelection
17
+ } = editor;
18
+ if (!selection) return;
19
+ if (hasMovedSelection) event.stopPropagation();
20
+ const selectedList = (0, _core.findNode)(editor, {
21
+ type: [_elementTypes.LIST_ITEM]
22
+ });
23
+ if (!selectedList) return;
24
+ let workRange = editor.selection;
25
+ if (!_slate.Range.isCollapsed(selection)) {
26
+ let {
27
+ anchor,
28
+ focus
29
+ } = selection;
30
+ if (_slate.Range.isBackward(selection)) {
31
+ ({
32
+ anchor,
33
+ focus
34
+ } = {
35
+ anchor: {
36
+ ...selection.focus
37
+ },
38
+ focus: {
39
+ ...selection.anchor
40
+ }
41
+ });
42
+ }
43
+ const unHungRange = _slate.Editor.unhangRange(editor, {
44
+ anchor,
45
+ focus
46
+ });
47
+ if (unHungRange) {
48
+ workRange = unHungRange;
49
+ _slate.Transforms.select(editor, unHungRange);
50
+ }
51
+ }
52
+ const isIncrease = (0, _isHotkey.default)('shift+tab', event) ? false : true;
53
+ if (workRange && selectedList) {
54
+ event.preventDefault();
55
+ (0, _transforms.moveListItems)(editor, {
56
+ at: workRange,
57
+ increase: isIncrease,
58
+ enableResetOnShiftTab: true
59
+ });
60
+ return true;
61
+ }
62
+ };
63
+ exports.handleTab = handleTab;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleShortcut = void 0;
7
+ var _slate = require("slate");
8
+ var _helpers = require("../helpers");
9
+ var _elementTypes = require("../../../constants/element-types");
10
+ var _core = require("../../../core");
11
+ /**
12
+ * @param {Editor} editor
13
+ * @param {String} text
14
+ * @returns {Boolean} isPreventInsert
15
+ */
16
+ const handleShortcut = (editor, text) => {
17
+ if (text !== ' ') return false;
18
+ const {
19
+ selection
20
+ } = editor;
21
+ if (!_slate.Range.isCollapsed(selection)) return false;
22
+ let [aboveNode, aboveNodePath] = _slate.Editor.above(editor);
23
+ if (aboveNode.type !== _elementTypes.PARAGRAPH) return false;
24
+ // Match ordered list shortcut
25
+ const regOrderListShortcut = /^\s*[1]+\.\s*$/;
26
+ const regUnorderedListShortcut = /^\s*\*+\s*$/;
27
+ const {
28
+ beforeText,
29
+ range
30
+ } = (0, _helpers.getBeforeText)(editor);
31
+ const matchOrderListResult = beforeText.match(regOrderListShortcut);
32
+ const matchUnorderedListResult = beforeText.match(regUnorderedListShortcut);
33
+ const matchedOrderListText = matchOrderListResult && matchOrderListResult[0];
34
+ const matchedUnorderedListText = matchUnorderedListResult && matchUnorderedListResult[0];
35
+ if (matchUnorderedListResult) {
36
+ // Unordered list shortcut
37
+ if (matchedUnorderedListText !== '*') return false;
38
+ if (matchUnorderedListResult.index !== 0) return false;
39
+ // Delete shortcut key text
40
+ _slate.Transforms.delete(editor, {
41
+ at: range
42
+ });
43
+ (0, _helpers.setListType)(editor, _elementTypes.UNORDERED_LIST);
44
+ (0, _core.focusEditor)(editor);
45
+ return true;
46
+ } else if (matchOrderListResult) {
47
+ // Ordered list shortcut
48
+ // If the match fails or the match is not at the beginning of the line, it is not a shortcut
49
+ if (matchOrderListResult.index !== 0) return false;
50
+ if (matchedOrderListText !== '1.') return false;
51
+ const previousNodePath = (0, _core.getPreviousPath)(aboveNodePath);
52
+ let previousNodeEntry = null;
53
+ if (previousNodePath) {
54
+ previousNodeEntry = _slate.Editor.node(editor, previousNodePath);
55
+ }
56
+ // If the previous node is not an ordered list and is start with `1.`,transforms to ordered list
57
+ if (!previousNodePath || previousNodeEntry[0].type !== _elementTypes.ORDERED_LIST) {
58
+ // Delete shortcut key text
59
+ _slate.Transforms.delete(editor, {
60
+ at: range
61
+ });
62
+ (0, _helpers.setListType)(editor, _elementTypes.ORDERED_LIST);
63
+ (0, _core.focusEditor)(editor);
64
+ return true;
65
+ }
66
+ }
67
+ return false;
68
+ };
69
+ exports.handleShortcut = handleShortcut;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isListNested = exports.hasListChild = exports.getListItemEntry = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../../../constants/element-types");
9
+ var _constant = require("../constant");
10
+ const getListItemEntry = function (editor) {
11
+ let {
12
+ at = editor.selection
13
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
+ let _at = null;
15
+ if (_slate.Range.isRange(at) && !_slate.Range.isCollapsed(at)) {
16
+ _at = at.focus.path;
17
+ } else if (_slate.Range.isRange(at)) {
18
+ _at = at.anchor.path;
19
+ } else {
20
+ _at = at;
21
+ }
22
+ if (_at) {
23
+ const node = _slate.Node.get(editor, _at);
24
+ if (node) {
25
+ const listItem = _slate.Editor.above(editor, {
26
+ at: _at,
27
+ match: n => _slate.Element.isElement(n) && n.type === _elementTypes.LIST_ITEM
28
+ });
29
+ if (listItem) {
30
+ const list = _slate.Editor.parent(editor, listItem[1]);
31
+ return {
32
+ list,
33
+ listItem
34
+ };
35
+ }
36
+ }
37
+ }
38
+ return null;
39
+ };
40
+ exports.getListItemEntry = getListItemEntry;
41
+ const hasListChild = node => {
42
+ return node.children.some(n => {
43
+ return _slate.Element.isElement(n) && _constant.LIST_TYPES.includes(n.type);
44
+ });
45
+ };
46
+ exports.hasListChild = hasListChild;
47
+ const isListNested = (editor, listPath) => {
48
+ var _Editor$parent;
49
+ const listParentNode = (_Editor$parent = _slate.Editor.parent(editor, listPath)) === null || _Editor$parent === void 0 ? void 0 : _Editor$parent[0];
50
+ return (listParentNode === null || listParentNode === void 0 ? void 0 : listParentNode.type) === _elementTypes.LIST_ITEM;
51
+ };
52
+ exports.isListNested = isListNested;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.renderListLic = exports.renderListItem = exports.renderList = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _elementTypes = require("../../../constants/element-types");
10
+ var _constants = require("../../../constants");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const renderList = (props, editor) => {
13
+ const {
14
+ attributes,
15
+ children,
16
+ element: node
17
+ } = props;
18
+ const Tag = node.type === _elementTypes.ORDERED_LIST ? 'ol' : 'ul';
19
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Tag, {
20
+ "data-id": node.id,
21
+ "data-root": "true",
22
+ ...attributes,
23
+ className: node.className,
24
+ style: {
25
+ ...(_constants.ELEMENT_DEFAULT_STYLE[node.type] || {}),
26
+ ...((node === null || node === void 0 ? void 0 : node.style) || {})
27
+ },
28
+ children: children
29
+ });
30
+ };
31
+ exports.renderList = renderList;
32
+ const renderListItem = (props, editor) => {
33
+ const {
34
+ attributes,
35
+ children,
36
+ element
37
+ } = props;
38
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
39
+ "data-id": element.id,
40
+ "data-root": "true",
41
+ ...attributes,
42
+ className: element.className,
43
+ style: {
44
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
45
+ ...((element === null || element === void 0 ? void 0 : element.style) || {})
46
+ },
47
+ children: children
48
+ });
49
+ };
50
+ exports.renderListItem = renderListItem;
51
+ const renderListLic = (props, editor) => {
52
+ const {
53
+ attributes,
54
+ children,
55
+ element
56
+ } = props;
57
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
58
+ "data-id": element.id,
59
+ ...attributes,
60
+ className: element.className,
61
+ style: {
62
+ ...(_constants.ELEMENT_DEFAULT_STYLE[element.type] || {}),
63
+ ...((element === null || element === void 0 ? void 0 : element.style) || {})
64
+ },
65
+ children: children
66
+ });
67
+ };
68
+ exports.renderListLic = renderListLic;