@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,68 @@
1
+ .sea-email-image-wrapper {
2
+ position: relative;
3
+ display: inline-block;
4
+ max-width: 100%;
5
+ padding: 1px;
6
+ }
7
+
8
+ .sea-email-image-wrapper .sea-email-image.error {
9
+ height: 21px;
10
+ width: 21px;
11
+ }
12
+
13
+ .sea-email-image-wrapper .sea-email-image.selected {
14
+ box-shadow: 0 0 0 2px #007bff;
15
+ }
16
+
17
+ .sea-email-image-wrapper .resizer {
18
+ width: 10px;
19
+ height: 10px;
20
+ position: absolute;
21
+ right: -5px;
22
+ bottom: -5px;
23
+ background-color: #007bff;
24
+ border: 1px solid #fff;
25
+ cursor: se-resize;
26
+ }
27
+
28
+ .sea-email-image-wrapper .full-screen {
29
+ position: absolute;
30
+ height: 26px;
31
+ display: inline-block;
32
+ width: 26px;
33
+ top: 0;
34
+ right: -32px;
35
+ text-align: center;
36
+ line-height: 20px;
37
+ padding: 2px;
38
+ box-shadow: 0 2px 5px 0 #0003;
39
+ border-radius: 3px;
40
+ border: 1px solid #0028641f;
41
+ background-color: #fff;
42
+ user-select: none !important;
43
+ z-index: 100;
44
+ cursor: pointer;
45
+ }
46
+
47
+ .sea-email-image-wrapper .full-screen:hover {
48
+ display: block;
49
+ background-color: #efefef;
50
+ }
51
+
52
+ .sea-email-image-wrapper .image-size-info-tooltip {
53
+ display: inline-block;
54
+ padding: 5px;
55
+ white-space: nowrap;
56
+ height: 22px;
57
+ position: absolute;
58
+ bottom: -25px;
59
+ left: 100%;
60
+ z-index: 1;
61
+ transform: translateX(5px);
62
+ border-radius: 3px;
63
+ line-height: 12px;
64
+ color: #fff;
65
+ background-color: #4c4c4c;
66
+ font-size: 12px;
67
+ user-select: none;
68
+ }
@@ -0,0 +1,116 @@
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, "BlockquotePlugin", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _blockquote.default;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "CheckListPlugin", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _checkList.default;
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "CodeBlockPlugin", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _codeBlock.default;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "FormulaPlugin", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _formula.default;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "HeaderPlugin", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _header.default;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "HtmlPlugin", {
38
+ enumerable: true,
39
+ get: function () {
40
+ return _html.default;
41
+ }
42
+ });
43
+ Object.defineProperty(exports, "ImagePlugin", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _image.default;
47
+ }
48
+ });
49
+ Object.defineProperty(exports, "LinkPlugin", {
50
+ enumerable: true,
51
+ get: function () {
52
+ return _link.default;
53
+ }
54
+ });
55
+ Object.defineProperty(exports, "ListPlugin", {
56
+ enumerable: true,
57
+ get: function () {
58
+ return _list.default;
59
+ }
60
+ });
61
+ Object.defineProperty(exports, "MarkDownPlugin", {
62
+ enumerable: true,
63
+ get: function () {
64
+ return _markdown.default;
65
+ }
66
+ });
67
+ Object.defineProperty(exports, "NodeIdPlugin", {
68
+ enumerable: true,
69
+ get: function () {
70
+ return _nodeId.default;
71
+ }
72
+ });
73
+ Object.defineProperty(exports, "PPlugin", {
74
+ enumerable: true,
75
+ get: function () {
76
+ return _p.default;
77
+ }
78
+ });
79
+ Object.defineProperty(exports, "ParagraphPlugin", {
80
+ enumerable: true,
81
+ get: function () {
82
+ return _paragraph.default;
83
+ }
84
+ });
85
+ Object.defineProperty(exports, "TablePlugin", {
86
+ enumerable: true,
87
+ get: function () {
88
+ return _table.default;
89
+ }
90
+ });
91
+ Object.defineProperty(exports, "TextPlugin", {
92
+ enumerable: true,
93
+ get: function () {
94
+ return _textStyle.default;
95
+ }
96
+ });
97
+ exports.default = void 0;
98
+ var _blockquote = _interopRequireDefault(require("./blockquote"));
99
+ var _paragraph = _interopRequireDefault(require("./paragraph"));
100
+ var _textStyle = _interopRequireDefault(require("./text-style"));
101
+ var _header = _interopRequireDefault(require("./header"));
102
+ var _image = _interopRequireDefault(require("./image"));
103
+ var _nodeId = _interopRequireDefault(require("./node-id"));
104
+ var _link = _interopRequireDefault(require("./link"));
105
+ var _codeBlock = _interopRequireDefault(require("./code-block"));
106
+ var _checkList = _interopRequireDefault(require("./check-list"));
107
+ var _list = _interopRequireDefault(require("./list"));
108
+ var _table = _interopRequireDefault(require("./table"));
109
+ var _formula = _interopRequireDefault(require("./formula"));
110
+ var _markdown = _interopRequireDefault(require("./markdown"));
111
+ var _html = _interopRequireDefault(require("./html"));
112
+ var _p = _interopRequireDefault(require("./p"));
113
+ const Plugins = [_paragraph.default, _textStyle.default, _header.default, _image.default, _checkList.default, _list.default, _codeBlock.default, _table.default, _blockquote.default, _link.default, _formula.default, _markdown.default, _html.default, _p.default,
114
+ // put at the end
115
+ _nodeId.default];
116
+ var _default = exports.default = Plugins;
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.upsertLinkText = exports.updateLink = exports.unWrapLinkNode = exports.isMenuDisabled = exports.isLinkType = exports.insertSeafileLink = exports.insertLink = exports.getLinkInfo = exports.getElementHref = exports.generateLinkNode = void 0;
8
+ var _slate = require("slate");
9
+ var _slugid = _interopRequireDefault(require("slugid"));
10
+ var _queries = require("../../core/queries");
11
+ var _focusEditor = require("../../core/transforms/focus-editor");
12
+ var _constants = require("../../constants");
13
+ var _utils = require("../../core/utils");
14
+ var _replaceNodeChildren = require("../../core/transforms/replace-node-children");
15
+ const isMenuDisabled = function (editor) {
16
+ let readonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
17
+ if (readonly) return true;
18
+ const {
19
+ selection
20
+ } = editor;
21
+ if (!selection) return false;
22
+ const selectedElems = (0, _queries.getSelectedElems)(editor);
23
+ // Check if the selected element is illegal
24
+ const isSelectedIllegalElement = selectedElems.some(elem => {
25
+ const {
26
+ type
27
+ } = elem;
28
+ if (editor.isVoid(elem)) return true;
29
+ if ([_constants.ElementTypes.CODE_BLOCK, _constants.ElementTypes.CODE_LINE].includes(type)) return true;
30
+ return false;
31
+ });
32
+ if (isSelectedIllegalElement) return true;
33
+ return false;
34
+ };
35
+ exports.isMenuDisabled = isMenuDisabled;
36
+ const isLinkType = editor => {
37
+ const [match] = _slate.Editor.nodes(editor, {
38
+ match: n => (0, _queries.getNodeType)(n) === _constants.ElementTypes.LINK,
39
+ universal: true
40
+ });
41
+ return !!match;
42
+ };
43
+ exports.isLinkType = isLinkType;
44
+ const generateLinkNode = (url, title) => {
45
+ const linkNode = {
46
+ type: _constants.ElementTypes.LINK,
47
+ url: url,
48
+ title: title,
49
+ id: _slugid.default.nice(),
50
+ children: [{
51
+ id: _slugid.default.nice(),
52
+ text: title || ''
53
+ }]
54
+ };
55
+ return linkNode;
56
+ };
57
+
58
+ /**
59
+ * @param {Object} props
60
+ * @param {Object} props.editor
61
+ * @param {String} props.url
62
+ * @param {String} props.title
63
+ * @param {InsertPosition} props.insertPosition
64
+ * @param {Object | undefined} props.slateNode
65
+ */
66
+ exports.generateLinkNode = generateLinkNode;
67
+ const insertLink = props => {
68
+ const {
69
+ editor,
70
+ url,
71
+ title,
72
+ insertPosition = _constants.INSERT_POSITION.CURRENT,
73
+ slateNode
74
+ } = props;
75
+ const {
76
+ selection
77
+ } = editor;
78
+ if (insertPosition === _constants.INSERT_POSITION.CURRENT && isMenuDisabled(editor)) return;
79
+ // We had validated in modal,here we do it again for safety
80
+ if (!title || !url) return;
81
+ if (!selection) return;
82
+ const linkNode = generateLinkNode(url, title);
83
+ if (insertPosition === _constants.INSERT_POSITION.AFTER) {
84
+ let path = _slate.Editor.path(editor, selection);
85
+ if (slateNode && (slateNode === null || slateNode === void 0 ? void 0 : slateNode.type) === _constants.ElementTypes.LIST_ITEM) {
86
+ path = (0, _queries.findPath)(editor, slateNode, []);
87
+ const nextPath = _slate.Path.next(path);
88
+ _slate.Editor.insertNodes(editor, linkNode, {
89
+ at: nextPath
90
+ });
91
+ return;
92
+ }
93
+ const linkNodeWrapper = (0, _utils.generateEmptyElement)(_constants.ElementTypes.PARAGRAPH);
94
+ // LinkNode should be wrapped by p and within text nodes in order to be editable
95
+ linkNodeWrapper.children.push(linkNode, (0, _utils.generateDefaultText)());
96
+ _slate.Transforms.insertNodes(editor, linkNodeWrapper, {
97
+ at: [path[0] + 1]
98
+ });
99
+ (0, _focusEditor.focusEditor)(editor);
100
+ return;
101
+ }
102
+ const isCollapsed = _slate.Range.isCollapsed(selection);
103
+ if (isCollapsed) {
104
+ // If selection is collapsed, we insert a space and then insert link node that help operation easier
105
+ editor.insertText('');
106
+ _slate.Editor.insertFragment(editor, [linkNode]);
107
+ // Using insertText directly causes the added Spaces to be added to the linked text, as in the issue above, so replaced by insertFragment
108
+ _slate.Editor.insertFragment(editor, [{
109
+ id: _slugid.default.nice(),
110
+ text: ''
111
+ }]);
112
+ (0, _focusEditor.focusEditor)(editor);
113
+ return;
114
+ } else {
115
+ const selectedText = _slate.Editor.string(editor, selection); // Selected text
116
+ if (selectedText !== title) {
117
+ // Replace the selected text with the link node if the selected text is different from the entered text
118
+ editor.deleteFragment();
119
+ _slate.Transforms.insertNodes(editor, linkNode);
120
+ } else {
121
+ // Wrap the selected text with the link node if the selected text is the same as the entered text
122
+ _slate.Transforms.wrapNodes(editor, linkNode, {
123
+ split: true,
124
+ at: selection
125
+ });
126
+ _slate.Transforms.collapse(editor, {
127
+ edge: 'end'
128
+ });
129
+ }
130
+ }
131
+ (0, _focusEditor.focusEditor)(editor);
132
+ };
133
+ exports.insertLink = insertLink;
134
+ const insertSeafileLink = _ref => {
135
+ let {
136
+ editor,
137
+ url,
138
+ title,
139
+ selection
140
+ } = _ref;
141
+ (0, _focusEditor.focusEditor)(editor, selection);
142
+ const linkNode = generateLinkNode(url, title);
143
+ const isCollapsed = _slate.Range.isCollapsed(selection);
144
+ if (isCollapsed) {
145
+ // If selection is collapsed, we insert a space and then insert link node that help operation easier
146
+ editor.insertText('');
147
+ _slate.Editor.insertFragment(editor, [linkNode]);
148
+ // Using insertText directly causes the added Spaces to be added to the linked text, as in the issue above, so replaced by insertFragment
149
+ _slate.Editor.insertFragment(editor, [{
150
+ id: _slugid.default.nice(),
151
+ text: ''
152
+ }]);
153
+ (0, _focusEditor.focusEditor)(editor);
154
+ return;
155
+ } else {
156
+ const selectedText = _slate.Editor.string(editor, selection); // Selected text
157
+ if (selectedText !== title) {
158
+ // Replace the selected text with the link node if the selected text is different from the entered text
159
+ editor.deleteFragment();
160
+ _slate.Transforms.insertNodes(editor, linkNode);
161
+ } else {
162
+ // Wrap the selected text with the link node if the selected text is the same as the entered text
163
+ _slate.Transforms.wrapNodes(editor, linkNode, {
164
+ split: true,
165
+ at: selection
166
+ });
167
+ _slate.Transforms.collapse(editor, {
168
+ edge: 'end'
169
+ });
170
+ }
171
+ }
172
+ };
173
+ exports.insertSeafileLink = insertSeafileLink;
174
+ const getElementHref = element => {
175
+ if (!element) return '';
176
+ return element.href || element.url;
177
+ };
178
+ exports.getElementHref = getElementHref;
179
+ const getLinkInfo = editor => {
180
+ const isLinkNode = isLinkType(editor);
181
+ if (!isLinkNode) return null;
182
+ const [match] = _slate.Editor.nodes(editor, {
183
+ match: n => (0, _queries.getNodeType)(n) === _constants.ElementTypes.LINK,
184
+ universal: true
185
+ });
186
+ if (!match) return null;
187
+ const [node, path] = match;
188
+ const showedText = (0, _queries.getEditorString)(editor, path);
189
+ return {
190
+ linkUrl: getElementHref(node),
191
+ linkTitle: showedText || node.title,
192
+ path: path
193
+ };
194
+ };
195
+ exports.getLinkInfo = getLinkInfo;
196
+ const updateLink = (editor, newUrl, newText) => {
197
+ const linkAbove = (0, _queries.getAboveNode)(editor, {
198
+ match: {
199
+ type: _constants.ElementTypes.LINK
200
+ }
201
+ });
202
+ if (!linkAbove) return;
203
+ const {
204
+ href: oldUrl,
205
+ title: oldText
206
+ } = linkAbove[0] || {};
207
+ if (oldUrl !== newUrl || oldText !== newText) {
208
+ _slate.Transforms.setNodes(editor, {
209
+ url: newUrl,
210
+ title: newText
211
+ }, {
212
+ at: linkAbove[1]
213
+ });
214
+ }
215
+ upsertLinkText(editor, {
216
+ text: newText
217
+ });
218
+ };
219
+ exports.updateLink = updateLink;
220
+ const upsertLinkText = (editor, _ref2) => {
221
+ let {
222
+ text
223
+ } = _ref2;
224
+ const newLink = (0, _queries.getAboveNode)(editor, {
225
+ match: {
226
+ type: _constants.ElementTypes.LINK
227
+ }
228
+ });
229
+ if (!newLink) return;
230
+ const [newLInkNode, newLinkPath] = newLink;
231
+ if (text && text.length && text !== (0, _queries.getEditorString)(editor, newLinkPath)) {
232
+ const firstText = newLInkNode.children[0];
233
+ (0, _replaceNodeChildren.replaceNodeChildren)(editor, {
234
+ at: newLinkPath,
235
+ nodes: {
236
+ ...firstText,
237
+ text
238
+ },
239
+ insertOptions: {
240
+ select: true
241
+ }
242
+ });
243
+ }
244
+ };
245
+ exports.upsertLinkText = upsertLinkText;
246
+ const unWrapLinkNode = async editor => {
247
+ if (editor.selection == null) return;
248
+ const [linkNode] = _slate.Editor.nodes(editor, {
249
+ match: n => (0, _queries.getNodeType)(n) === _constants.ElementTypes.LINK,
250
+ universal: true
251
+ });
252
+ // Check selection is link node
253
+ if (!linkNode || !linkNode[0]) return;
254
+ _slate.Transforms.unwrapNodes(editor, {
255
+ match: n => (0, _queries.getNodeType)(n) === _constants.ElementTypes.LINK
256
+ });
257
+ };
258
+ exports.unWrapLinkNode = unWrapLinkNode;
@@ -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 LinkPlugin = {
13
+ type: _elementTypes.LINK,
14
+ nodeType: 'element',
15
+ editorMenus: [_menu.default],
16
+ editorPlugin: _plugin.default,
17
+ renderElements: [_renderElem.default]
18
+ };
19
+ var _default = exports.default = LinkPlugin;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _slate = require("slate");
11
+ var _components = require("../../../../components");
12
+ var _menusConfig = require("../../../constants/menus-config");
13
+ var _elementTypes = require("../../../constants/element-types");
14
+ var _helper = require("../helper");
15
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
16
+ var _linkModal = _interopRequireDefault(require("./link-modal"));
17
+ var _eventTypes = require("../../../../constants/event-types");
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+ const menuConfig = _menusConfig.MENUS_CONFIG_MAP[_elementTypes.LINK];
20
+ const LinkMenu = _ref => {
21
+ let {
22
+ className,
23
+ readonly,
24
+ editor
25
+ } = _ref;
26
+ const [isOpenLinkModal, setIsOpenLinkModal] = (0, _react.useState)(false);
27
+ const [linkInfo, setLinkInfo] = (0, _react.useState)({
28
+ linkTitle: '',
29
+ linkUrl: ''
30
+ });
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ const isLinkActive = (0, _react.useMemo)(() => (0, _helper.isLinkType)(editor), [editor.selection]);
33
+ (0, _react.useEffect)(() => {
34
+ const eventBus = _eventBus.default.getInstance();
35
+ const unsubscribe = eventBus.subscribe(_eventTypes.INTERNAL_EVENTS.ON_OPEN_LINK_MODAL, handleOpenLinkModal);
36
+ return () => unsubscribe();
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, []);
39
+ (0, _react.useEffect)(() => {
40
+ if ((0, _helper.isLinkType)(editor)) {
41
+ const newTitle = editor.selection && _slate.Editor.string(editor, editor.selection);
42
+ newTitle && setLinkInfo({
43
+ ...linkInfo,
44
+ linkTitle: newTitle
45
+ });
46
+ }
47
+ // eslint-disable-next-line react-hooks/exhaustive-deps
48
+ }, [editor.selection]);
49
+ const handleOpenLinkModal = (0, _react.useCallback)(linkInfo => {
50
+ Reflect.ownKeys.length && setLinkInfo(linkInfo);
51
+ setIsOpenLinkModal(true);
52
+ }, [setIsOpenLinkModal, setLinkInfo]);
53
+ const onClick = (0, _react.useCallback)(event => {
54
+ event.preventDefault();
55
+ event.stopPropagation();
56
+ if (isLinkActive) {
57
+ isLinkActive && (0, _helper.unWrapLinkNode)(editor);
58
+ return;
59
+ }
60
+ if (editor.selection) {
61
+ const selectedText = _slate.Editor.string(editor, editor.selection);
62
+ setLinkInfo({
63
+ ...linkInfo,
64
+ linkTitle: selectedText
65
+ });
66
+ }
67
+ setIsOpenLinkModal(true);
68
+ document.getElementById(`sea_email_${_elementTypes.LINK}`).blur();
69
+ }, [editor, isLinkActive, linkInfo]);
70
+ const onCloseModal = (0, _react.useCallback)(() => {
71
+ setIsOpenLinkModal(false);
72
+ setLinkInfo({
73
+ linkTitle: '',
74
+ linkUrl: ''
75
+ });
76
+ }, []);
77
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
78
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToolbarItem, {
79
+ className: className,
80
+ disabled: (0, _helper.isMenuDisabled)(editor, readonly),
81
+ isActive: isLinkActive,
82
+ onClick: onClick,
83
+ ...menuConfig
84
+ }), isOpenLinkModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_linkModal.default, {
85
+ onCloseModal: onCloseModal,
86
+ editor: editor,
87
+ linkTitle: linkInfo.linkTitle,
88
+ linkUrl: linkInfo.linkUrl
89
+ })]
90
+ });
91
+ };
92
+ var _default = exports.default = LinkMenu;