@modusoperandi/licit 1.0.4 → 1.0.7

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 (360) hide show
  1. package/BlockquoteInsertNewLineCommand.js +16 -18
  2. package/BlockquoteInsertNewLineCommand.js.flow +76 -77
  3. package/BlockquoteNodeSpec.js +3 -4
  4. package/BlockquoteNodeSpec.js.flow +29 -30
  5. package/BlockquoteToggleCommand.js +16 -17
  6. package/BlockquoteToggleCommand.js.flow +56 -56
  7. package/BookmarkNodeSpec.js +2 -2
  8. package/BookmarkNodeSpec.js.flow +39 -39
  9. package/BulletListNodeSpec.js.flow +61 -61
  10. package/CZIProseMirror.js.flow +90 -90
  11. package/CodeBlockCommand.js +17 -18
  12. package/CodeBlockCommand.js.flow +65 -65
  13. package/CodeBlockNodeSpec.js.flow +24 -24
  14. package/CodeMarkSpec.js.flow +14 -14
  15. package/ContentPlaceholderPlugin.js +20 -21
  16. package/ContentPlaceholderPlugin.js.flow +185 -187
  17. package/CursorPlaceholderPlugin.js +11 -11
  18. package/CursorPlaceholderPlugin.js.flow +115 -115
  19. package/DocLayoutCommand.js +18 -21
  20. package/DocLayoutCommand.js.flow +97 -99
  21. package/DocNodeSpec.js.flow +64 -64
  22. package/EMMarkSpec.js.flow +14 -14
  23. package/EditorCommands.js.flow +126 -126
  24. package/EditorKeyMap.js +0 -1
  25. package/EditorKeyMap.js.flow +185 -187
  26. package/EditorMarks.js +2 -2
  27. package/EditorMarks.js.flow +71 -71
  28. package/EditorNodes.js +2 -3
  29. package/EditorNodes.js.flow +58 -59
  30. package/EditorPageLayoutPlugin.js +10 -10
  31. package/EditorPageLayoutPlugin.js.flow +67 -67
  32. package/EditorPlugins.js.flow +8 -8
  33. package/EditorSchema.js.flow +12 -12
  34. package/EditorState.js.flow +7 -7
  35. package/FontSizeMarkSpec.js.flow +49 -49
  36. package/FontTypeMarkSpec.js +1 -1
  37. package/FontTypeMarkSpec.js.flow +80 -80
  38. package/HTMLMutator.js +6 -7
  39. package/HTMLMutator.js.flow +59 -59
  40. package/HardBreakNodeSpec.js.flow +15 -15
  41. package/HeadingNodeSpec.js +3 -13
  42. package/HeadingNodeSpec.js.flow +42 -52
  43. package/HistoryRedoCommand.js +15 -16
  44. package/HistoryRedoCommand.js.flow +41 -41
  45. package/HistoryUndoCommand.js +15 -16
  46. package/HistoryUndoCommand.js.flow +41 -41
  47. package/HorizontalRuleCommand.js +15 -16
  48. package/HorizontalRuleCommand.js.flow +71 -71
  49. package/HorizontalRuleNodeSpec.js.flow +39 -39
  50. package/ImageUploadPlaceholderPlugin.js +15 -17
  51. package/ImageUploadPlaceholderPlugin.js.flow +190 -192
  52. package/LinkMarkSpec.js +6 -1
  53. package/LinkMarkSpec.js.flow +37 -32
  54. package/LinkSetURLCommand.js +130 -60
  55. package/LinkSetURLCommand.js.flow +141 -117
  56. package/LinkTooltipPlugin.js +122 -34
  57. package/LinkTooltipPlugin.js.flow +261 -190
  58. package/ListItemInsertNewLineCommand.js +16 -18
  59. package/ListItemInsertNewLineCommand.js.flow +76 -77
  60. package/ListItemMergeCommand.js +24 -24
  61. package/ListItemMergeCommand.js.flow +198 -199
  62. package/ListItemNodeSpec.js.flow +52 -52
  63. package/ListSplitCommand.js +15 -16
  64. package/ListSplitCommand.js.flow +54 -54
  65. package/ListToggleCommand.js +19 -20
  66. package/ListToggleCommand.js.flow +99 -99
  67. package/MarkNames.js.flow +18 -18
  68. package/MarksClearCommand.js +17 -18
  69. package/MarksClearCommand.js.flow +65 -65
  70. package/MathEditCommand.js +17 -19
  71. package/MathEditCommand.js.flow +119 -120
  72. package/MathNodeSpec.js.flow +46 -46
  73. package/NodeNames.js.flow +23 -23
  74. package/OrderedListNodeSpec.js +2 -2
  75. package/OrderedListNodeSpec.js.flow +132 -132
  76. package/ParagraphNodeSpec.js +11 -2
  77. package/ParagraphNodeSpec.js.flow +163 -156
  78. package/ParagraphSpacingCommand.js +21 -23
  79. package/ParagraphSpacingCommand.js.flow +139 -144
  80. package/PrintCommand.js +17 -18
  81. package/PrintCommand.js.flow +53 -53
  82. package/SelectionPlaceholderPlugin.js +11 -11
  83. package/SelectionPlaceholderPlugin.js.flow +131 -131
  84. package/SpacerMarkSpec.js +2 -2
  85. package/SpacerMarkSpec.js.flow +47 -47
  86. package/StrikeMarkSpec.js.flow +21 -21
  87. package/StrongMarkSpec.js.flow +25 -25
  88. package/StyleView.js +5 -7
  89. package/StyleView.js.flow +18 -19
  90. package/TableBackgroundColorCommand.js +34 -23
  91. package/TableBackgroundColorCommand.js.flow +80 -75
  92. package/TableBorderColorCommand.js +34 -23
  93. package/TableBorderColorCommand.js.flow +81 -75
  94. package/TableCellColorCommand.js +20 -21
  95. package/TableCellColorCommand.js.flow +74 -75
  96. package/TableCellMenuPlugin.js +19 -19
  97. package/TableCellMenuPlugin.js.flow +130 -132
  98. package/TableInsertCommand.js +19 -22
  99. package/TableInsertCommand.js.flow +118 -120
  100. package/TableMergeCellsCommand.js +19 -19
  101. package/TableMergeCellsCommand.js.flow +113 -112
  102. package/TableNodesSpecs.js +4 -2
  103. package/TableNodesSpecs.js.flow +80 -78
  104. package/TablePlugins.js.flow +14 -14
  105. package/TableResizePlugin.js +20 -20
  106. package/TableResizePlugin.js.flow +631 -631
  107. package/TextColorMarkSpec.js.flow +35 -35
  108. package/TextHighlightMarkSpec.js.flow +38 -38
  109. package/TextInsertTabSpaceCommand.js +15 -16
  110. package/TextInsertTabSpaceCommand.js.flow +106 -106
  111. package/TextNoWrapMarkSpec.js.flow +14 -14
  112. package/TextNodeSpec.js.flow +7 -7
  113. package/TextSelectionMarkSpec.js.flow +24 -24
  114. package/TextSubMarkSpec.js.flow +20 -20
  115. package/TextSuperMarkSpec.js.flow +20 -20
  116. package/TextUnderlineMarkSpec.js.flow +27 -27
  117. package/Types.js +6 -0
  118. package/Types.js.flow +77 -75
  119. package/WebFontLoader.js +6 -7
  120. package/WebFontLoader.js.flow +22 -22
  121. package/blockQuoteInputRule.js.flow +36 -36
  122. package/bom.xml +17223 -25722
  123. package/browser.js.flow +7 -7
  124. package/buildEditorPlugins.js +6 -7
  125. package/buildEditorPlugins.js.flow +49 -49
  126. package/buildInputRules.js +8 -4
  127. package/buildInputRules.js.flow +85 -81
  128. package/client/CollabConnector.js +20 -20
  129. package/client/CollabConnector.js.flow +90 -90
  130. package/client/EditorConnection.js +10 -9
  131. package/client/EditorConnection.js.flow +324 -323
  132. package/client/Licit.js +78 -115
  133. package/client/Licit.js.flow +611 -643
  134. package/client/Licit.test.js +49 -39
  135. package/client/Licit.test.js.flow +104 -98
  136. package/client/Reporter.js +5 -6
  137. package/client/Reporter.js.flow +37 -37
  138. package/client/SimpleConnector.js +5 -5
  139. package/client/SimpleConnector.js.flow +61 -61
  140. package/client/http.js +0 -6
  141. package/client/http.js.flow +62 -70
  142. package/client/licit.css +12 -12
  143. package/client/throttle.js +8 -2
  144. package/client/throttle.js.flow +27 -27
  145. package/convertFromDOMElement.js +2 -4
  146. package/convertFromDOMElement.js.flow +33 -36
  147. package/convertFromHTML.js +2 -3
  148. package/convertFromHTML.js.flow +15 -17
  149. package/convertFromJSON.js +1 -2
  150. package/convertFromJSON.js.flow +55 -56
  151. package/convertToCSSPTValue.js +6 -10
  152. package/convertToCSSPTValue.js.flow +19 -22
  153. package/convertToJSON.js.flow +7 -7
  154. package/createCommand.js +16 -17
  155. package/createCommand.js.flow +62 -62
  156. package/createEditorKeyMap.js +2 -2
  157. package/createEditorKeyMap.js.flow +94 -94
  158. package/createEmptyEditorState.js +2 -3
  159. package/createEmptyEditorState.js.flow +29 -31
  160. package/createTableResizingPlugin.js +6 -6
  161. package/createTableResizingPlugin.js.flow +86 -86
  162. package/findActionableCell.js.flow +74 -74
  163. package/findActiveMark.js +1 -1
  164. package/findActiveMark.js.flow +32 -32
  165. package/hyphenize.js.flow +17 -17
  166. package/index.d.ts +165 -165
  167. package/index.js.flow +10 -10
  168. package/insertTable.js +0 -3
  169. package/insertTable.js.flow +54 -56
  170. package/isEditorStateEmpty.js.flow +32 -32
  171. package/isTableNode.js.flow +15 -15
  172. package/joinDown.js +1 -3
  173. package/joinDown.js.flow +25 -27
  174. package/joinListNode.js.flow +55 -55
  175. package/joinUp.js +1 -3
  176. package/joinUp.js.flow +37 -39
  177. package/keymaps.js.flow +185 -185
  178. package/lookUpElement.js +2 -1
  179. package/lookUpElement.js.flow +14 -14
  180. package/nodeAt.js.flow +12 -12
  181. package/normalizeHTML.js +3 -1
  182. package/normalizeHTML.js.flow +80 -78
  183. package/package.json +162 -156
  184. package/patchAnchorElements.js +1 -1
  185. package/patchAnchorElements.js.flow +38 -38
  186. package/patchBreakElements.js +3 -2
  187. package/patchBreakElements.js.flow +22 -22
  188. package/patchElementInlineStyles.js +1 -1
  189. package/patchElementInlineStyles.js.flow +92 -92
  190. package/patchListElements.js +4 -4
  191. package/patchListElements.js.flow +276 -276
  192. package/patchMathElements.js +5 -7
  193. package/patchMathElements.js.flow +58 -60
  194. package/patchParagraphElements.js.flow +20 -20
  195. package/patchStyleElements.js +1 -1
  196. package/patchStyleElements.js.flow +197 -196
  197. package/patchTableElements.js +2 -3
  198. package/patchTableElements.js.flow +88 -89
  199. package/rebaseDocWithSteps.js.flow +42 -42
  200. package/sanitizeURL.js +1 -1
  201. package/sanitizeURL.js.flow +13 -13
  202. package/splitListItem.js +3 -3
  203. package/splitListItem.js.flow +191 -191
  204. package/styles.css +19 -19
  205. package/styles0.css +29 -29
  206. package/toClosestFontPtSize.js.flow +22 -22
  207. package/toSafeHTMLDocument.js.flow +9 -9
  208. package/toggleBlockquote.js +4 -5
  209. package/toggleBlockquote.js.flow +101 -108
  210. package/toggleCodeBlock.js +6 -6
  211. package/toggleCodeBlock.js.flow +102 -102
  212. package/ui/AlertInfo.js +15 -16
  213. package/ui/AlertInfo.js.flow +64 -64
  214. package/ui/BookmarkNodeView.js +20 -21
  215. package/ui/BookmarkNodeView.js.flow +66 -66
  216. package/ui/CommandButton.js +15 -16
  217. package/ui/CommandButton.js.flow +68 -68
  218. package/ui/CommandMenu.js +19 -20
  219. package/ui/CommandMenu.js.flow +75 -75
  220. package/ui/CommandMenuButton.js +23 -25
  221. package/ui/CommandMenuButton.js.flow +130 -131
  222. package/ui/CustomEditorView.js +20 -20
  223. package/ui/CustomEditorView.js.flow +29 -28
  224. package/ui/CustomMenu.js +11 -12
  225. package/ui/CustomMenu.js.flow +17 -17
  226. package/ui/CustomMenuItem.js +16 -18
  227. package/ui/CustomMenuItem.js.flow +36 -36
  228. package/ui/CustomNodeView.js +29 -19
  229. package/ui/CustomNodeView.js.flow +207 -200
  230. package/ui/CustomRadioButton.js +18 -21
  231. package/ui/CustomRadioButton.js.flow +64 -65
  232. package/ui/DocLayoutEditor.js +18 -20
  233. package/ui/DocLayoutEditor.js.flow +145 -146
  234. package/ui/Editor.js +30 -28
  235. package/ui/Editor.js.flow +287 -288
  236. package/ui/EditorFrameset.js +13 -14
  237. package/ui/EditorFrameset.js.flow +81 -81
  238. package/ui/EditorToolbar.js +36 -42
  239. package/ui/EditorToolbar.js.flow +199 -218
  240. package/ui/EditorToolbarConfig.js +5 -5
  241. package/ui/EditorToolbarConfig.js.flow +164 -164
  242. package/ui/FontSizeCommandMenuButton.js +14 -15
  243. package/ui/FontSizeCommandMenuButton.js.flow +66 -66
  244. package/ui/FontTypeCommandMenuButton.js +15 -17
  245. package/ui/FontTypeCommandMenuButton.js.flow +60 -61
  246. package/ui/Frag.js +11 -12
  247. package/ui/Frag.js.flow +13 -13
  248. package/ui/Icon.js +21 -24
  249. package/ui/Icon.js.flow +89 -89
  250. package/ui/ImageInlineEditor.js +14 -15
  251. package/ui/ImageInlineEditor.js.flow +67 -67
  252. package/ui/KeyCodes.js.flow +12 -12
  253. package/ui/LinkTooltip.js +68 -34
  254. package/ui/LinkTooltip.js.flow +118 -85
  255. package/ui/LinkURLEditor.js +160 -43
  256. package/ui/LinkURLEditor.js.flow +243 -117
  257. package/ui/ListItemNodeView.js +6 -7
  258. package/ui/ListItemNodeView.js.flow +98 -98
  259. package/ui/ListTypeButton.js +23 -27
  260. package/ui/ListTypeButton.js.flow +128 -131
  261. package/ui/ListTypeCommandButton.js +14 -15
  262. package/ui/ListTypeCommandButton.js.flow +85 -85
  263. package/ui/ListTypeMenu.js +21 -22
  264. package/ui/ListTypeMenu.js.flow +70 -70
  265. package/ui/LoadingIndicator.js +11 -12
  266. package/ui/LoadingIndicator.js.flow +20 -20
  267. package/ui/MathEditor.js +17 -22
  268. package/ui/MathEditor.js.flow +72 -78
  269. package/ui/MathInlineEditor.js +20 -21
  270. package/ui/MathInlineEditor.js.flow +101 -102
  271. package/ui/MathNodeView.js +29 -30
  272. package/ui/MathNodeView.js.flow +176 -186
  273. package/ui/PasteMenu.js +19 -23
  274. package/ui/PasteMenu.js.flow +53 -57
  275. package/ui/ResizeObserver.js +1 -1
  276. package/ui/ResizeObserver.js.flow +106 -106
  277. package/ui/RichTextEditor.js +17 -18
  278. package/ui/RichTextEditor.js.flow +133 -133
  279. package/ui/SelectionObserver.js +8 -9
  280. package/ui/SelectionObserver.js.flow +134 -134
  281. package/ui/TableCellMenu.js +14 -15
  282. package/ui/TableCellMenu.js.flow +51 -51
  283. package/ui/TableGridSizeEditor.js +30 -33
  284. package/ui/TableGridSizeEditor.js.flow +187 -184
  285. package/ui/TableNodeView.js +18 -17
  286. package/ui/TableNodeView.js.flow +25 -25
  287. package/ui/bindScrollHandler.js +2 -1
  288. package/ui/bindScrollHandler.js.flow +46 -46
  289. package/ui/canUseCSSFont.js +5 -4
  290. package/ui/canUseCSSFont.js.flow +42 -43
  291. package/ui/czi-body-layout-editor.css +16 -16
  292. package/ui/czi-bookmark-view.css +10 -10
  293. package/ui/czi-cursor-placeholder.css +36 -36
  294. package/ui/czi-custom-menu-button.css +18 -18
  295. package/ui/czi-custom-menu-item.css +30 -30
  296. package/ui/czi-custom-menu.css +8 -8
  297. package/ui/czi-custom-radio-button.css +80 -80
  298. package/ui/czi-custom-scrollbar.css +21 -21
  299. package/ui/czi-editor-frameset.css +81 -81
  300. package/ui/czi-editor-toolbar.css +122 -122
  301. package/ui/czi-editor.css +217 -220
  302. package/ui/czi-form.css +201 -107
  303. package/ui/czi-frag.css +3 -3
  304. package/ui/czi-heading.css +40 -40
  305. package/ui/czi-icon.css +72 -72
  306. package/ui/czi-image-resize-box.css +165 -165
  307. package/ui/czi-image-upload-editor.css +57 -57
  308. package/ui/czi-image-upload-placeholder.css +50 -50
  309. package/ui/czi-image-url-editor.css +38 -38
  310. package/ui/czi-image-view.css +121 -125
  311. package/ui/czi-indent.css +137 -137
  312. package/ui/czi-inline-editor.css +20 -20
  313. package/ui/czi-link-tooltip.css +112 -71
  314. package/ui/czi-list.css +406 -410
  315. package/ui/czi-loading-indicator.css +66 -111
  316. package/ui/czi-math-view.css +62 -62
  317. package/ui/czi-selection-placeholder.css +24 -24
  318. package/ui/czi-table-cell-menu.css +16 -14
  319. package/ui/czi-table-grid-size-editor.css +37 -37
  320. package/ui/czi-table.css +87 -87
  321. package/ui/czi-vars.css +2 -2
  322. package/ui/findActiveFontSize.js +2 -1
  323. package/ui/findActiveFontSize.js.flow +55 -58
  324. package/ui/findActiveFontType.js +4 -3
  325. package/ui/findActiveFontType.js.flow +35 -38
  326. package/ui/fonts.css +460 -460
  327. package/ui/handleEditorDrop.js +1 -1
  328. package/ui/handleEditorDrop.js.flow +28 -28
  329. package/ui/handleEditorKeyDown.js +1 -1
  330. package/ui/handleEditorKeyDown.js.flow +39 -39
  331. package/ui/handleEditorPaste.js +1 -1
  332. package/ui/handleEditorPaste.js.flow +33 -33
  333. package/ui/htmlElementToRect.js.flow +18 -18
  334. package/ui/icon-font.css +9 -9
  335. package/ui/injectStyleSheet.js +2 -2
  336. package/ui/injectStyleSheet.js.flow +40 -42
  337. package/ui/isElementFullyVisible.js +1 -10
  338. package/ui/isElementFullyVisible.js.flow +14 -26
  339. package/ui/isOffline.js.flow +8 -8
  340. package/ui/isReactClass.js.flow +12 -12
  341. package/ui/listType.css +21 -21
  342. package/ui/mathquill-editor/MathQuillEditor.js +27 -30
  343. package/ui/mathquill-editor/MathQuillEditor.js.flow +158 -159
  344. package/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
  345. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +14 -15
  346. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +50 -50
  347. package/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
  348. package/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
  349. package/ui/mathquill-editor/mathquill-import-kludge.js +1 -8
  350. package/ui/mathquill-editor/mathquill-import-kludge.js.flow +17 -24
  351. package/ui/renderLaTeXAsHTML.js +4 -4
  352. package/ui/renderLaTeXAsHTML.js.flow +46 -46
  353. package/ui/resolveImage.js +5 -6
  354. package/ui/resolveImage.js.flow +121 -123
  355. package/ui/toCSSColor.js.flow +51 -51
  356. package/ui/toCSSLineSpacing.js +2 -3
  357. package/ui/toCSSLineSpacing.js.flow +53 -55
  358. package/ui/toHexColor.js.flow +26 -26
  359. package/ui/uuid.js.flow +9 -9
  360. package/uuid.js.flow +9 -9
@@ -1,86 +1,86 @@
1
- // @flow
2
-
3
- import { Plugin } from 'prosemirror-state';
4
- import { columnResizing } from 'prosemirror-tables';
5
- import { EditorView } from 'prosemirror-view';
6
-
7
- const TABLE_HANDLE_WIDTH = 10;
8
- const TABLE_CELL_MINWIDTH = 25;
9
- const TABLE_VIEW = undefined;
10
- const TABLE_LAST_COLUMN_RESIZABLE = false;
11
-
12
- function lookUpTableWrapper(event: Event): ?HTMLElement {
13
- const target: any = event.target;
14
- if (!target || !target.closest) {
15
- return null;
16
- }
17
- return target.closest('.tableWrapper');
18
- }
19
-
20
- function dispatchMouseEvent(type: string, clientX: number): void {
21
- requestAnimationFrame(() => {
22
- const event = new MouseEvent(type, {
23
- view: window,
24
- bubbles: true,
25
- cancelable: true,
26
- clientX,
27
- });
28
- window.dispatchEvent(event);
29
- });
30
- }
31
-
32
- function calculateMaxClientX(
33
- event: MouseEvent,
34
- targetTable: HTMLElement
35
- ): number {
36
- const { clientX } = event;
37
- const { left, width } = targetTable.getBoundingClientRect();
38
- const offsetX = clientX - left;
39
- const colgroup = targetTable.querySelector('colgroup');
40
- const colsCount = colgroup ? colgroup.querySelectorAll('col').length : 0;
41
- const cx = width - offsetX - colsCount * TABLE_CELL_MINWIDTH;
42
- return Math.round(clientX + Math.max(0, cx));
43
- }
44
-
45
- export default function createTableResizingPlugin(): Plugin {
46
- let maxClientX = 0;
47
-
48
- // https://github.com/ProseMirror/prosemirror-tables/blob/master/src/columnresizing.js
49
- const plugin = columnResizing(
50
- TABLE_HANDLE_WIDTH,
51
- TABLE_CELL_MINWIDTH,
52
- TABLE_VIEW,
53
- TABLE_LAST_COLUMN_RESIZABLE
54
- );
55
-
56
- const captureMouse = (event: any): void => {
57
- if (event.clientX > maxClientX) {
58
- // Current mouse event will make table too wide. Stop it and
59
- // fires a simulated event instead.
60
- event.stopImmediatePropagation();
61
- dispatchMouseEvent(event.type, maxClientX);
62
- } else if (event.type === 'mouseup') {
63
- window.removeEventListener('mousemove', captureMouse, true);
64
- window.removeEventListener('mouseup', captureMouse, true);
65
- }
66
- };
67
-
68
- const { mousedown } = plugin.props.handleDOMEvents;
69
-
70
- // This is a workaround to constraint the mousemove to prevent
71
- // the table become too wide.
72
- Object.assign(plugin.props.handleDOMEvents, {
73
- mousedown(view: EditorView, event: MouseEvent): boolean {
74
- const targetTable = lookUpTableWrapper(event);
75
- maxClientX = targetTable
76
- ? calculateMaxClientX(event, targetTable)
77
- : Number.MAX_VALUE;
78
- window.addEventListener('mousemove', captureMouse, true);
79
- window.addEventListener('mouseup', captureMouse, true);
80
- mousedown(view, event);
81
- return false;
82
- },
83
- });
84
-
85
- return plugin;
86
- }
1
+ // @flow
2
+
3
+ import { Plugin } from 'prosemirror-state';
4
+ import { columnResizing } from 'prosemirror-tables';
5
+ import { EditorView } from 'prosemirror-view';
6
+
7
+ const TABLE_HANDLE_WIDTH = 10;
8
+ const TABLE_CELL_MINWIDTH = 25;
9
+ const TABLE_VIEW = undefined;
10
+ const TABLE_LAST_COLUMN_RESIZABLE = false;
11
+
12
+ function lookUpTableWrapper(event: Event): ?HTMLElement {
13
+ const target: any = event.target;
14
+ if (!target?.closest) {
15
+ return null;
16
+ }
17
+ return target.closest('.tableWrapper');
18
+ }
19
+
20
+ function dispatchMouseEvent(type: string, clientX: number): void {
21
+ requestAnimationFrame(() => {
22
+ const event = new MouseEvent(type, {
23
+ view: window,
24
+ bubbles: true,
25
+ cancelable: true,
26
+ clientX,
27
+ });
28
+ window.dispatchEvent(event);
29
+ });
30
+ }
31
+
32
+ function calculateMaxClientX(
33
+ event: MouseEvent,
34
+ targetTable: HTMLElement
35
+ ): number {
36
+ const { clientX } = event;
37
+ const { left, width } = targetTable.getBoundingClientRect();
38
+ const offsetX = clientX - left;
39
+ const colgroup = targetTable.querySelector('colgroup');
40
+ const colsCount = colgroup ? colgroup.querySelectorAll('col').length : 0;
41
+ const cx = width - offsetX - colsCount * TABLE_CELL_MINWIDTH;
42
+ return Math.round(clientX + Math.max(0, cx));
43
+ }
44
+
45
+ export default function createTableResizingPlugin(): Plugin {
46
+ let maxClientX = 0;
47
+
48
+ // https://github.com/ProseMirror/prosemirror-tables/blob/master/src/columnresizing.js
49
+ const plugin = columnResizing(
50
+ TABLE_HANDLE_WIDTH,
51
+ TABLE_CELL_MINWIDTH,
52
+ TABLE_VIEW,
53
+ TABLE_LAST_COLUMN_RESIZABLE
54
+ );
55
+
56
+ const captureMouse = (event: any): void => {
57
+ if (event.clientX > maxClientX) {
58
+ // Current mouse event will make table too wide. Stop it and
59
+ // fires a simulated event instead.
60
+ event.stopImmediatePropagation();
61
+ dispatchMouseEvent(event.type, maxClientX);
62
+ } else if (event.type === 'mouseup') {
63
+ window.removeEventListener('mousemove', captureMouse, true);
64
+ window.removeEventListener('mouseup', captureMouse, true);
65
+ }
66
+ };
67
+
68
+ const { mousedown } = plugin.props.handleDOMEvents;
69
+
70
+ // This is a workaround to constraint the mousemove to prevent
71
+ // the table become too wide.
72
+ Object.assign(plugin.props.handleDOMEvents, {
73
+ mousedown(view: EditorView, event: MouseEvent): boolean {
74
+ const targetTable = lookUpTableWrapper(event);
75
+ maxClientX = targetTable
76
+ ? calculateMaxClientX(event, targetTable)
77
+ : Number.MAX_VALUE;
78
+ window.addEventListener('mousemove', captureMouse, true);
79
+ window.addEventListener('mouseup', captureMouse, true);
80
+ mousedown(view, event);
81
+ return false;
82
+ },
83
+ });
84
+
85
+ return plugin;
86
+ }
@@ -1,74 +1,74 @@
1
- // @flow
2
-
3
- import { Node } from 'prosemirror-model';
4
- import { EditorState, TextSelection } from 'prosemirror-state';
5
- import { CellSelection, TableMap } from 'prosemirror-tables';
6
- import { findParentNodeOfType } from 'prosemirror-utils';
7
-
8
- import { TABLE_CELL, TABLE_HEADER } from './NodeNames.js';
9
-
10
- type Result = {
11
- node: Node,
12
- pos: number,
13
- };
14
-
15
- function findActionableCellFromSelection(selection: CellSelection): ?Result {
16
- const { $anchorCell } = selection;
17
- const start = $anchorCell.start(-1);
18
- const table = $anchorCell.node(-1);
19
- const tableMap = TableMap.get(table);
20
- let topRightRect;
21
- let posFound = null;
22
- let nodeFound = null;
23
- selection.forEachCell((cell, cellPos) => {
24
- const cellRect = tableMap.findCell(cellPos - start);
25
- if (
26
- !topRightRect ||
27
- (cellRect.top >= topRightRect.top && cellRect.left > topRightRect.left)
28
- ) {
29
- topRightRect = cellRect;
30
- posFound = cellPos;
31
- nodeFound = cell;
32
- }
33
- });
34
-
35
- return posFound === null
36
- ? null
37
- : {
38
- node: nodeFound,
39
- pos: posFound,
40
- };
41
- }
42
-
43
- export default function findActionableCell(state: EditorState): ?Result {
44
- const { doc, selection, schema } = state;
45
- const tdType = schema.nodes[TABLE_CELL];
46
- const thType = schema.nodes[TABLE_HEADER];
47
- if (!tdType && !thType) {
48
- return null;
49
- }
50
-
51
- let userSelection = selection;
52
-
53
- if (userSelection instanceof TextSelection) {
54
- const { from, to } = selection;
55
- if (from !== to) {
56
- return null;
57
- }
58
- const result =
59
- (tdType && findParentNodeOfType(tdType)(selection)) ||
60
- (thType && findParentNodeOfType(thType)(selection));
61
-
62
- if (!result) {
63
- return null;
64
- }
65
-
66
- userSelection = CellSelection.create(doc, result.pos);
67
- }
68
-
69
- if (userSelection instanceof CellSelection) {
70
- return findActionableCellFromSelection(userSelection);
71
- }
72
-
73
- return null;
74
- }
1
+ // @flow
2
+
3
+ import { Node } from 'prosemirror-model';
4
+ import { EditorState, TextSelection } from 'prosemirror-state';
5
+ import { CellSelection, TableMap } from 'prosemirror-tables';
6
+ import { findParentNodeOfType } from 'prosemirror-utils';
7
+
8
+ import { TABLE_CELL, TABLE_HEADER } from './NodeNames.js';
9
+
10
+ type Result = {
11
+ node: Node,
12
+ pos: number,
13
+ };
14
+
15
+ function findActionableCellFromSelection(selection: CellSelection): ?Result {
16
+ const { $anchorCell } = selection;
17
+ const start = $anchorCell.start(-1);
18
+ const table = $anchorCell.node(-1);
19
+ const tableMap = TableMap.get(table);
20
+ let topRightRect;
21
+ let posFound = null;
22
+ let nodeFound = null;
23
+ selection.forEachCell((cell, cellPos) => {
24
+ const cellRect = tableMap.findCell(cellPos - start);
25
+ if (
26
+ !topRightRect ||
27
+ (cellRect.top >= topRightRect.top && cellRect.left > topRightRect.left)
28
+ ) {
29
+ topRightRect = cellRect;
30
+ posFound = cellPos;
31
+ nodeFound = cell;
32
+ }
33
+ });
34
+
35
+ return posFound === null
36
+ ? null
37
+ : {
38
+ node: nodeFound,
39
+ pos: posFound,
40
+ };
41
+ }
42
+
43
+ export default function findActionableCell(state: EditorState): ?Result {
44
+ const { doc, selection, schema } = state;
45
+ const tdType = schema.nodes[TABLE_CELL];
46
+ const thType = schema.nodes[TABLE_HEADER];
47
+ if (!tdType && !thType) {
48
+ return null;
49
+ }
50
+
51
+ let userSelection = selection;
52
+
53
+ if (userSelection instanceof TextSelection) {
54
+ const { from, to } = selection;
55
+ if (from !== to) {
56
+ return null;
57
+ }
58
+ const result =
59
+ (tdType && findParentNodeOfType(tdType)(selection)) ||
60
+ (thType && findParentNodeOfType(thType)(selection));
61
+
62
+ if (!result) {
63
+ return null;
64
+ }
65
+
66
+ userSelection = CellSelection.create(doc, result.pos);
67
+ }
68
+
69
+ if (userSelection instanceof CellSelection) {
70
+ return findActionableCellFromSelection(userSelection);
71
+ }
72
+
73
+ return null;
74
+ }
package/findActiveMark.js CHANGED
@@ -11,7 +11,7 @@ export default function findActiveMark(doc, from, to, markType) {
11
11
  to = Math.min(to, doc.nodeSize - 2);
12
12
  while (ii <= to) {
13
13
  var node = doc.nodeAt(ii);
14
- if (!node || !node.marks) {
14
+ if (!(node !== null && node !== void 0 && node.marks)) {
15
15
  ii++;
16
16
  continue;
17
17
  }
@@ -1,32 +1,32 @@
1
- // @flow
2
-
3
- import { Mark, MarkType, Node } from 'prosemirror-model';
4
-
5
- export default function findActiveMark(
6
- doc: Node,
7
- from: number,
8
- to: number,
9
- markType: MarkType
10
- ): ?Mark {
11
- let ii = from;
12
- if (doc.nodeSize <= 2) {
13
- return null;
14
- }
15
- const finder = (mark) => mark.type === markType;
16
- from = Math.max(2, from);
17
- to = Math.min(to, doc.nodeSize - 2);
18
-
19
- while (ii <= to) {
20
- const node = doc.nodeAt(ii);
21
- if (!node || !node.marks) {
22
- ii++;
23
- continue;
24
- }
25
- const mark = node.marks.find(finder);
26
- if (mark) {
27
- return mark;
28
- }
29
- ii++;
30
- }
31
- return null;
32
- }
1
+ // @flow
2
+
3
+ import { Mark, MarkType, Node } from 'prosemirror-model';
4
+
5
+ export default function findActiveMark(
6
+ doc: Node,
7
+ from: number,
8
+ to: number,
9
+ markType: MarkType
10
+ ): ?Mark {
11
+ let ii = from;
12
+ if (doc.nodeSize <= 2) {
13
+ return null;
14
+ }
15
+ const finder = (mark) => mark.type === markType;
16
+ from = Math.max(2, from);
17
+ to = Math.min(to, doc.nodeSize - 2);
18
+
19
+ while (ii <= to) {
20
+ const node = doc.nodeAt(ii);
21
+ if (!node?.marks) {
22
+ ii++;
23
+ continue;
24
+ }
25
+ const mark = node.marks.find(finder);
26
+ if (mark) {
27
+ return mark;
28
+ }
29
+ ii++;
30
+ }
31
+ return null;
32
+ }
package/hyphenize.js.flow CHANGED
@@ -1,17 +1,17 @@
1
- // @flow
2
-
3
- function hadnleMatch(matched: string): string {
4
- return matched[0] + '-' + matched[1].toLowerCase();
5
- }
6
-
7
- const cached = {};
8
-
9
- // converts `fooBar` to `foo-bar`.
10
- export default function hyphenize(str: string): string {
11
- if (cached.hasOwnProperty(str)) {
12
- return cached[str];
13
- }
14
- const result = str.replace(/[a-z][A-Z]/g, hadnleMatch);
15
- cached[str] = result;
16
- return result;
17
- }
1
+ // @flow
2
+
3
+ function hadnleMatch(matched: string): string {
4
+ return matched[0] + '-' + matched[1].toLowerCase();
5
+ }
6
+
7
+ const cached = {};
8
+
9
+ // converts `fooBar` to `foo-bar`.
10
+ export default function hyphenize(str: string): string {
11
+ if (cached.hasOwnProperty(str)) {
12
+ return cached[str];
13
+ }
14
+ const result = str.replace(/[a-z][A-Z]/g, hadnleMatch);
15
+ cached[str] = result;
16
+ return result;
17
+ }