@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,120 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.match = exports.isEmptyParagraph = exports.generateHeaderElement = exports.generateEmptyElement = exports.generateElement = exports.generateDefaultText = exports.generateDefaultParagraph = exports.Placeholder = void 0;
8
+ var _slugid = _interopRequireDefault(require("slugid"));
9
+ var _constants = require("@/constants");
10
+ var _elementTypes = require("../../constants/element-types");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const match = (node, path, predicate) => {
13
+ if (!predicate) return true;
14
+ if (typeof predicate === 'object') {
15
+ return Object.entries(predicate).every(_ref => {
16
+ let [key, value] = _ref;
17
+ if (value && !Array.isArray(value)) {
18
+ return node[key] === value;
19
+ }
20
+ value = value ? value : [];
21
+ return value.includes(node[key]);
22
+ });
23
+ }
24
+ return predicate(node, path);
25
+ };
26
+ exports.match = match;
27
+ const generateDefaultText = () => {
28
+ return {
29
+ id: _slugid.default.nice(),
30
+ text: ''
31
+ };
32
+ };
33
+ exports.generateDefaultText = generateDefaultText;
34
+ const generateDefaultParagraph = () => {
35
+ return {
36
+ id: _slugid.default.nice(),
37
+ type: _elementTypes.PARAGRAPH,
38
+ children: [generateDefaultText()]
39
+ };
40
+ };
41
+ exports.generateDefaultParagraph = generateDefaultParagraph;
42
+ const generateEmptyElement = type => {
43
+ return {
44
+ id: _slugid.default.nice(),
45
+ type,
46
+ children: [generateDefaultText()]
47
+ };
48
+ };
49
+ exports.generateEmptyElement = generateEmptyElement;
50
+ const generateHeaderElement = text => {
51
+ const headerText = {
52
+ id: _slugid.default.nice(),
53
+ text: text
54
+ };
55
+ return {
56
+ id: _slugid.default.nice(),
57
+ type: _elementTypes.HEADER1,
58
+ children: [headerText]
59
+ };
60
+ };
61
+
62
+ /**
63
+ * @param {String} type
64
+ * @param {Object} options
65
+ * @param {Node[] | String} [options.childrenOrText = ''] If provide a string,that will generate a text node as children automatically
66
+ * @param {object} [options.props = {}]
67
+ * @returns {Node}
68
+ */
69
+ exports.generateHeaderElement = generateHeaderElement;
70
+ const generateElement = function (type) {
71
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
72
+ let {
73
+ childrenOrText = '',
74
+ props = {}
75
+ } = options;
76
+ if (typeof childrenOrText === 'string') {
77
+ childrenOrText = [{
78
+ id: _slugid.default.nice(),
79
+ text: childrenOrText
80
+ }];
81
+ }
82
+ if (!Array.isArray(childrenOrText)) {
83
+ throw Error('childrenOrText must be a string or a Node array!');
84
+ }
85
+ return {
86
+ id: _slugid.default.nice(),
87
+ type,
88
+ children: childrenOrText,
89
+ ...props
90
+ };
91
+ };
92
+ exports.generateElement = generateElement;
93
+ const isEmptyParagraph = node => {
94
+ if (node.type !== 'paragraph') return false;
95
+ if (node.children.length !== 1) return false;
96
+ const [child] = node.children;
97
+ if (Text.isText(child) && child.text === '' && child.type !== 'image') return true;
98
+ return false;
99
+ };
100
+ exports.isEmptyParagraph = isEmptyParagraph;
101
+ const Placeholder = props => {
102
+ const {
103
+ title
104
+ } = props;
105
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
106
+ style: {
107
+ position: 'absolute',
108
+ top: '0px',
109
+ color: 'rgba(191,191,191,1)',
110
+ pointerEvents: 'none',
111
+ width: '100%',
112
+ maxWidth: '100%',
113
+ display: 'block',
114
+ userSelect: 'none',
115
+ textDecoration: 'none'
116
+ },
117
+ children: (0, _constants.gettext)(title)
118
+ });
119
+ };
120
+ exports.Placeholder = Placeholder;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const getEventTransfer = data => {
8
+ const fragmentString = data.getData('application/x-slate-fragment');
9
+ const textContent = data.getData('text') || data.getData('text/plain') || '';
10
+ let fragmentContent = fragmentString ? JSON.parse(decodeURIComponent(window.atob(fragmentString))) : null;
11
+ const htmlContent = data.getData('text/html') || '';
12
+ const hasRtfContent = data.types.includes('text/rtf');
13
+
14
+ /**
15
+ * compat old version slate: if clipboard content is old version slate fragment
16
+ * return html content
17
+ */
18
+ const files = data.files;
19
+ let type = 'text';
20
+ // Paste rtf format content which copied from PPT or Word or Excel as text to document
21
+ if (hasRtfContent) {
22
+ type = 'text';
23
+ } else if (files.length > 0) {
24
+ type = 'file';
25
+ } else if (fragmentContent && Array.isArray(fragmentContent)) {
26
+ type = 'fragment';
27
+ } else if (htmlContent) {
28
+ type = 'html';
29
+ }
30
+ return {
31
+ text: textContent,
32
+ html: htmlContent,
33
+ fragment: fragmentContent,
34
+ type,
35
+ files: files
36
+ };
37
+ };
38
+ var _default = exports.default = getEventTransfer;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ const TRANSFER_TYPES = {
9
+ fragment: 'application/x-slate-fragment',
10
+ html: 'text/html',
11
+ text: 'text/plain'
12
+ };
13
+
14
+ // transform slate fragment and write to clipboard
15
+ function setEventTransfer(event, type, content) {
16
+ const mime = TRANSFER_TYPES[type];
17
+ const transfer = event.dataTransfer || event.clipboardData;
18
+ if (type === 'fragment') {
19
+ // use the same encoding as slate
20
+ const encodedContent = window.btoa(encodeURIComponent(JSON.stringify(content)));
21
+ transfer.setData(mime, encodedContent);
22
+ let texts = '';
23
+ let textItem = '';
24
+ content.forEach(element => {
25
+ textItem = _slate.Node.string(element).replace(/\ufeff/, '');
26
+ texts += textItem + '\r\n';
27
+ });
28
+ transfer.setData('text', texts);
29
+ } else if (type === 'html') {
30
+ transfer.setData(mime, content);
31
+ transfer.setData('text', transfer.getData('text'));
32
+ } else {
33
+ transfer.setData('text', content);
34
+ }
35
+ }
36
+ var _default = exports.default = setEventTransfer;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "SetNodeToDecorations", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _setNodeDecorations.default;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "useHighlight", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _useHighlight.default;
17
+ }
18
+ });
19
+ var _setNodeDecorations = _interopRequireDefault(require("./set-node-decorations"));
20
+ var _useHighlight = _interopRequireDefault(require("./use-highlight"));
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normalizeTokens = void 0;
7
+ const newlineRe = /\r\n|\r|\n/;
8
+ const normalizeEmptyLines = line => {
9
+ if (line.length === 0) {
10
+ line.push({
11
+ types: ['plain'],
12
+ content: '\n',
13
+ empty: true
14
+ });
15
+ } else if (line.length === 1 && line[0].content === '') {
16
+ line[0].content = '\n';
17
+ line[0].empty = true;
18
+ }
19
+ };
20
+ const appendTypes = (types, add) => {
21
+ const typesSize = types.length;
22
+ if (typesSize > 0 && types[typesSize - 1] === add) {
23
+ return types;
24
+ }
25
+ return types.concat(add);
26
+ };
27
+ const normalizeTokens = tokens => {
28
+ const typeArrStack = [[]];
29
+ const tokenArrStack = [tokens];
30
+ const tokenArrIndexStack = [0];
31
+ const tokenArrSizeStack = [tokens.length];
32
+ let i = 0;
33
+ let stackIndex = 0;
34
+ let currentLine = [];
35
+ const acc = [currentLine];
36
+ while (stackIndex > -1) {
37
+ while ((i = tokenArrIndexStack[stackIndex]++) < tokenArrSizeStack[stackIndex]) {
38
+ let content;
39
+ let types = typeArrStack[stackIndex];
40
+ const tokenArr = tokenArrStack[stackIndex];
41
+ const token = tokenArr[i];
42
+
43
+ // Determine content and append type to types if necessary
44
+ if (typeof token === 'string') {
45
+ types = stackIndex > 0 ? types : ['plain'];
46
+ content = token;
47
+ } else {
48
+ types = appendTypes(types, token.type);
49
+ if (token.alias) {
50
+ types = appendTypes(types, token.alias);
51
+ }
52
+ content = token.content;
53
+ }
54
+
55
+ // If token.content is an array, increase the stack depth and repeat this while-loop
56
+ if (typeof content !== 'string') {
57
+ stackIndex++;
58
+ typeArrStack.push(types);
59
+ tokenArrStack.push(content);
60
+ tokenArrIndexStack.push(0);
61
+ tokenArrSizeStack.push(content.length);
62
+ continue;
63
+ }
64
+
65
+ // Split by newlines
66
+ const splitByNewlines = content.split(newlineRe);
67
+ const newlineCount = splitByNewlines.length;
68
+ currentLine.push({
69
+ types,
70
+ content: splitByNewlines[0]
71
+ });
72
+
73
+ // Create a new line for each string on a new line
74
+ for (let i = 1; i < newlineCount; i++) {
75
+ normalizeEmptyLines(currentLine);
76
+ acc.push(currentLine = []);
77
+ currentLine.push({
78
+ types,
79
+ content: splitByNewlines[i]
80
+ });
81
+ }
82
+ }
83
+
84
+ // Decreate the stack depth
85
+ stackIndex--;
86
+ typeArrStack.pop();
87
+ tokenArrStack.pop();
88
+ tokenArrIndexStack.pop();
89
+ tokenArrSizeStack.pop();
90
+ }
91
+ normalizeEmptyLines(currentLine);
92
+ return acc;
93
+ };
94
+ exports.normalizeTokens = normalizeTokens;
@@ -0,0 +1,27 @@
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 _prismjs = _interopRequireDefault(require("prismjs"));
9
+ require("prismjs/themes/prism.css");
10
+ require("prismjs/components/prism-javascript");
11
+ require("prismjs/components/prism-typescript");
12
+ require("prismjs/components/prism-markup");
13
+ require("prismjs/components/prism-markup-templating");
14
+ require("prismjs/components/prism-go");
15
+ require("prismjs/components/prism-php");
16
+ require("prismjs/components/prism-c");
17
+ require("prismjs/components/prism-python");
18
+ require("prismjs/components/prism-java");
19
+ require("prismjs/components/prism-cpp");
20
+ require("prismjs/components/prism-csharp");
21
+ require("prismjs/components/prism-sql");
22
+ require("prismjs/components/prism-ruby");
23
+ require("prismjs/components/prism-swift");
24
+ require("prismjs/components/prism-bash");
25
+ require("prismjs/components/prism-lua");
26
+ require("prismjs/components/prism-json");
27
+ var _default = exports.default = _prismjs.default;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _slate = require("slate");
9
+ var _slateReact = require("slate-react");
10
+ var _elementTypes = require("../constants/element-types");
11
+ var _prismjs = _interopRequireDefault(require("./prismjs"));
12
+ var _normalizeTokens = require("./normalize-tokens");
13
+ var _constant = require("../plugins/code-block/render-elem/constant");
14
+ const mergeMaps = function () {
15
+ const map = new Map();
16
+ for (var _len = arguments.length, maps = new Array(_len), _key = 0; _key < _len; _key++) {
17
+ maps[_key] = arguments[_key];
18
+ }
19
+ for (const m of maps) {
20
+ for (const item of m) {
21
+ map.set(...item);
22
+ }
23
+ }
24
+ return map;
25
+ };
26
+ const getChildNodeToDecorations = _ref => {
27
+ let [block, blockPath] = _ref;
28
+ const nodeToDecorations = new Map();
29
+ const text = block.children.map(line => _slate.Node.string(line)).join('\n');
30
+ const language = _constant.LANGUAGE_MAP[block.lang] ? block.lang : 'text';
31
+ const tokens = _prismjs.default.tokenize(text, _prismjs.default.languages[language]);
32
+ const normalizedTokens = (0, _normalizeTokens.normalizeTokens)(tokens); // make tokens flat and grouped by line
33
+ const blockChildren = block.children;
34
+ for (let index = 0; index < normalizedTokens.length; index++) {
35
+ const tokens = normalizedTokens[index];
36
+ const element = blockChildren[index];
37
+ if (element) {
38
+ if (!nodeToDecorations.has(element)) {
39
+ nodeToDecorations.set(element, []);
40
+ }
41
+ }
42
+ let start = 0;
43
+ for (const token of tokens) {
44
+ const length = token.content.length;
45
+ if (!length) {
46
+ continue;
47
+ }
48
+ const end = start + length;
49
+ const path = [...blockPath, index, 0];
50
+ const range = {
51
+ anchor: {
52
+ path,
53
+ offset: start
54
+ },
55
+ focus: {
56
+ path,
57
+ offset: end
58
+ },
59
+ token: true,
60
+ ...Object.fromEntries(token.types.map(type => [type, true]))
61
+ };
62
+ if (nodeToDecorations.get(element)) {
63
+ nodeToDecorations.get(element).push(range);
64
+ }
65
+ start = end;
66
+ }
67
+ }
68
+ return nodeToDecorations;
69
+ };
70
+ const SetNodeToDecorations = () => {
71
+ const editor = (0, _slateReact.useSlate)();
72
+ const blockEntries = Array.from(_slate.Editor.nodes(editor, {
73
+ at: [],
74
+ mode: 'highest',
75
+ match: n => _slate.Element.isElement(n) && n.type === _elementTypes.CODE_BLOCK
76
+ }));
77
+ const nodeToDecorations = mergeMaps(...blockEntries.map(getChildNodeToDecorations));
78
+ editor.nodeToDecorations = nodeToDecorations;
79
+ return null;
80
+ };
81
+ var _default = exports.default = SetNodeToDecorations;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useHighlight = exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _elementTypes = require("../constants/element-types");
9
+ const useHighlight = editor => _ref => {
10
+ let [node, path] = _ref;
11
+ let ranges = [];
12
+ if (_slate.Element.isElement(node) && node.type === _elementTypes.CODE_LINE) {
13
+ var _editor$nodeToDecorat;
14
+ ranges = (editor === null || editor === void 0 ? void 0 : (_editor$nodeToDecorat = editor.nodeToDecorations) === null || _editor$nodeToDecorat === void 0 ? void 0 : _editor$nodeToDecorat.get(node)) || [];
15
+ return ranges;
16
+ }
17
+ return ranges;
18
+ };
19
+ exports.useHighlight = useHighlight;
20
+ var _default = exports.default = useHighlight;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "ElementTypes", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _constants.ElementTypes;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "Plugins", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _plugins.default;
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "SetNodeToDecorations", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _highlight.SetNodeToDecorations;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "Toolbar", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _toolbar.default;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "getNodePathById", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _core.getNodePathById;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "isEmptyParagraph", {
38
+ enumerable: true,
39
+ get: function () {
40
+ return _core.isEmptyParagraph;
41
+ }
42
+ });
43
+ Object.defineProperty(exports, "renderElement", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _renderElement.default;
47
+ }
48
+ });
49
+ Object.defineProperty(exports, "renderLeaf", {
50
+ enumerable: true,
51
+ get: function () {
52
+ return _renderLeaf.default;
53
+ }
54
+ });
55
+ Object.defineProperty(exports, "useHighlight", {
56
+ enumerable: true,
57
+ get: function () {
58
+ return _highlight.useHighlight;
59
+ }
60
+ });
61
+ var _constants = require("./constants");
62
+ var _core = require("./core");
63
+ var _highlight = require("./highlight");
64
+ var _renderElement = _interopRequireDefault(require("./render/render-element"));
65
+ var _renderLeaf = _interopRequireDefault(require("./render/render-leaf"));
66
+ var _toolbar = _interopRequireDefault(require("./toolbar"));
67
+ var _plugins = _interopRequireDefault(require("./plugins"));
@@ -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.setBlockQuoteType = exports.isMenuDisabled = exports.getBlockQuoteType = void 0;
8
+ var _slate = require("slate");
9
+ var _slugid = _interopRequireDefault(require("slugid"));
10
+ var _elementTypes = require("../../constants/element-types");
11
+ var _core = require("../../core");
12
+ const isMenuDisabled = (editor, readonly) => {
13
+ if (readonly) return true;
14
+ if (editor.selection == null) return true;
15
+ const [nodeEntry] = _slate.Editor.nodes(editor, {
16
+ match: n => {
17
+ const type = (0, _core.getNodeType)(n);
18
+
19
+ // Only available for p and blockquote
20
+ if (type === _elementTypes.PARAGRAPH) return true;
21
+ if (type === _elementTypes.BLOCKQUOTE) return true;
22
+ if (type === _elementTypes.UNORDERED_LIST) return true;
23
+ if (type === _elementTypes.ORDERED_LIST) return true;
24
+ if (type === _elementTypes.CHECK_LIST_ITEM) return true;
25
+ if (type && type.startWith && type.startWith('header')) return true;
26
+ if (type === _elementTypes.IMAGE) return true;
27
+ return false;
28
+ },
29
+ universal: true,
30
+ mode: 'highest' // Match top level
31
+ });
32
+
33
+ // Match to p blockquote, do not disable
34
+ if (nodeEntry) {
35
+ return false;
36
+ }
37
+ return true;
38
+ };
39
+ exports.isMenuDisabled = isMenuDisabled;
40
+ const getBlockQuoteType = editor => {
41
+ const [match] = _slate.Editor.nodes(editor, {
42
+ match: n => (0, _core.getNodeType)(n) === _elementTypes.BLOCKQUOTE,
43
+ universal: true
44
+ });
45
+ if (!match) return _elementTypes.PARAGRAPH;
46
+ const [n] = match;
47
+ return (0, _core.getNodeType)(n);
48
+ };
49
+ exports.getBlockQuoteType = getBlockQuoteType;
50
+ const setBlockQuoteType = (editor, active) => {
51
+ if (!active) {
52
+ const blockquoteNode = {
53
+ id: _slugid.default.nice(),
54
+ type: _elementTypes.BLOCKQUOTE
55
+ };
56
+ _slate.Transforms.wrapNodes(editor, blockquoteNode, {
57
+ mode: 'highest',
58
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n)
59
+ });
60
+ } else {
61
+ _slate.Transforms.unwrapNodes(editor, {
62
+ mode: 'highest',
63
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n)
64
+ });
65
+ }
66
+ (0, _core.focusEditor)(editor);
67
+ };
68
+ exports.setBlockQuoteType = setBlockQuoteType;
@@ -0,0 +1,18 @@
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 BlockquotePlugin = {
12
+ type: _elementTypes.BLOCKQUOTE,
13
+ nodeType: 'element',
14
+ editorMenus: [],
15
+ editorPlugin: _plugin.default,
16
+ renderElements: [_renderElem.default]
17
+ };
18
+ var _default = exports.default = BlockquotePlugin;
@@ -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 = BlockquoteMenu;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _components = require("../../../../components");
10
+ var _menusConfig = require("../../../constants/menus-config");
11
+ var _elementTypes = require("../../../constants/element-types");
12
+ var _helpers = require("../helpers");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.BLOCKQUOTE];
15
+ const isActive = editor => {
16
+ return (0, _helpers.getBlockQuoteType)(editor) === _elementTypes.BLOCKQUOTE;
17
+ };
18
+ function BlockquoteMenu(_ref) {
19
+ let {
20
+ className,
21
+ readonly,
22
+ editor
23
+ } = _ref;
24
+ const onClick = (0, _react.useCallback)(event => {
25
+ const active = isActive(editor);
26
+ (0, _helpers.setBlockQuoteType)(editor, active);
27
+ }, [editor]);
28
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
29
+ className: className,
30
+ disabled: (0, _helpers.isMenuDisabled)(editor, readonly),
31
+ isActive: isActive(editor),
32
+ onClick: onClick,
33
+ ...menuConfig
34
+ });
35
+ }