@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,218 +1,199 @@
1
- // @flow
2
-
3
- import cx from 'classnames';
4
- import { EditorState } from 'prosemirror-state';
5
- import { Transform } from 'prosemirror-transform';
6
- import { EditorView } from 'prosemirror-view';
7
- import * as React from 'react';
8
- import ReactDOM from 'react-dom';
9
-
10
- import CommandButton from './CommandButton.js';
11
- import CommandMenuButton from './CommandMenuButton.js';
12
- import {
13
- CustomButton
14
- } from '@modusoperandi/licit-ui-commands';
15
- import {
16
- COMMAND_GROUPS,
17
- parseLabel
18
- } from './EditorToolbarConfig.js';
19
- import Icon from './Icon.js';
20
- import ResizeObserver from './ResizeObserver.js';
21
- import {
22
- UICommand
23
- } from '@modusoperandi/licit-doc-attrs-step';
24
- import isReactClass from './isReactClass.js';
25
-
26
- import './czi-editor-toolbar.css';
27
-
28
- class EditorToolbar extends React.PureComponent<any, any> {
29
- _body = null;
30
-
31
- props: {
32
- disabled?: ?boolean,
33
- dispatchTransaction?: ?(tr: Transform) => void,
34
- editorState: EditorState,
35
- editorView: ?EditorView,
36
- onReady?: ?(view: EditorView) => void,
37
- readOnly?: ?boolean,
38
- };
39
-
40
- state = {
41
- expanded: false,
42
- wrapped: null,
43
- };
44
-
45
- render(): React.Element<any> {
46
- const { wrapped, expanded } = this.state;
47
- const className = cx('czi-editor-toolbar', { expanded, wrapped });
48
- const wrappedButton = wrapped ? (
49
- <CustomButton
50
- active={expanded}
51
- className="czi-editor-toolbar-expand-button"
52
- icon={Icon.get('more_horiz')}
53
- key="expand"
54
- onClick={this._toggleExpansion}
55
- title="More"
56
- value={expanded}
57
- />
58
- ) : null;
59
-
60
- // Start with static button controls and append any button groups
61
- // supplied by plugins
62
- const commandGroups = COMMAND_GROUPS.concat(
63
- (this.props.editorState.plugins || [])
64
- // This should have been a simple property instead of a function:
65
- // p => p.buttonGroup
66
- // but changing it now would mean finding every plugin that was
67
- // implemented this way.
68
- .map((p) => p.initButtonCommands && p.initButtonCommands())
69
- .filter(Boolean)
70
- )
71
- .map(this._renderButtonsGroup)
72
- .filter(Boolean);
73
-
74
- return (
75
- <div className={className}>
76
- <div className="czi-editor-toolbar-flex">
77
- <div className="czi-editor-toolbar-body">
78
- <div
79
- className="czi-editor-toolbar-body-content"
80
- ref={this._onBodyRef}
81
- >
82
- <i className="czi-editor-toolbar-wrapped-anchor" />
83
- {commandGroups}
84
- <div className="czi-editor-toolbar-background">
85
- <div className="czi-editor-toolbar-background-line" />
86
- <div className="czi-editor-toolbar-background-line" />
87
- <div className="czi-editor-toolbar-background-line" />
88
- <div className="czi-editor-toolbar-background-line" />
89
- <div className="czi-editor-toolbar-background-line" />
90
- </div>
91
- <i className="czi-editor-toolbar-wrapped-anchor" />
92
- </div>
93
- {wrappedButton}
94
- </div>
95
- <div className="czi-editor-toolbar-footer" />
96
- </div>
97
- </div>
98
- );
99
- }
100
-
101
- _renderButtonsGroup = (group: Object, index: number): React.Element<any> => {
102
- const buttons = Object.keys(group)
103
- .map((label) => {
104
- const obj = group[label];
105
-
106
- if (isReactClass(obj)) {
107
- // JSX requies the component to be named with upper camel case.
108
- const ThatComponent = obj;
109
- const { editorState, editorView, dispatchTransaction } = this.props;
110
- return (
111
- <ThatComponent
112
- dispatch={dispatchTransaction}
113
- editorState={editorState}
114
- editorView={editorView}
115
- key={label}
116
- />
117
- );
118
- } else if (obj instanceof UICommand) {
119
- return this._renderButton(label, obj);
120
- } else if (Array.isArray(obj)) {
121
- return this._renderMenuButton(label, obj);
122
- } else {
123
- return null;
124
- }
125
- })
126
- .filter(Boolean);
127
- return (
128
- <div className="czi-custom-buttons" key={'g' + String(index)}>
129
- {buttons}
130
- </div>
131
- );
132
- };
133
-
134
- _renderMenuButton = (
135
- label: string,
136
- commandGroups: Array<{ [string]: UICommand }>
137
- ): React.Element<any> => {
138
- const {
139
- editorState,
140
- editorView,
141
- disabled,
142
- dispatchTransaction,
143
- } = this.props;
144
- const { icon, title } = parseLabel(label);
145
- return (
146
- <CommandMenuButton
147
- commandGroups={commandGroups}
148
- disabled={disabled}
149
- dispatch={dispatchTransaction}
150
- editorState={editorState}
151
- editorView={editorView}
152
- icon={icon}
153
- key={label}
154
- label={icon ? null : title}
155
- title={title}
156
- />
157
- );
158
- };
159
-
160
- _renderButton = (label: string, command: UICommand): React.Element<any> => {
161
- const {
162
- disabled,
163
- editorState,
164
- editorView,
165
- dispatchTransaction,
166
- } = this.props;
167
- const { icon, title } = parseLabel(label);
168
-
169
- return (
170
- <CommandButton
171
- command={command}
172
- disabled={disabled}
173
- dispatch={dispatchTransaction}
174
- editorState={editorState}
175
- editorView={editorView}
176
- icon={icon}
177
- key={label}
178
- label={icon ? null : title}
179
- title={title}
180
- />
181
- );
182
- };
183
-
184
- _onBodyRef = (ref: any): void => {
185
- if (ref) {
186
- this._body = ref;
187
- // Mounting
188
- const el = ReactDOM.findDOMNode(ref);
189
- if (el instanceof HTMLElement) {
190
- ResizeObserver.observe(el, this._checkIfContentIsWrapped);
191
- }
192
- } else {
193
- // Unmounting.
194
- const el = this._body && ReactDOM.findDOMNode(this._body);
195
- if (el instanceof HTMLElement) {
196
- ResizeObserver.unobserve(el);
197
- }
198
- this._body = null;
199
- }
200
- };
201
-
202
- _checkIfContentIsWrapped = (): void => {
203
- const ref = this._body;
204
- const el: any = ref && ReactDOM.findDOMNode(ref);
205
- const startAnchor = el && el.firstChild;
206
- const endAnchor = el && el.lastChild;
207
- if (startAnchor && endAnchor) {
208
- const wrapped = startAnchor.offsetTop < endAnchor.offsetTop;
209
- this.setState({ wrapped });
210
- }
211
- };
212
-
213
- _toggleExpansion = (expanded: boolean): void => {
214
- this.setState({ expanded: !expanded });
215
- };
216
- }
217
-
218
- export default EditorToolbar;
1
+ // @flow
2
+
3
+ import cx from 'classnames';
4
+ import { EditorState } from 'prosemirror-state';
5
+ import { Transform } from 'prosemirror-transform';
6
+ import { EditorView } from 'prosemirror-view';
7
+ import * as React from 'react';
8
+
9
+ import CommandButton from './CommandButton.js';
10
+ import CommandMenuButton from './CommandMenuButton.js';
11
+ import { CustomButton } from '@modusoperandi/licit-ui-commands';
12
+ import { COMMAND_GROUPS, parseLabel } from './EditorToolbarConfig.js';
13
+ import Icon from './Icon.js';
14
+ import ResizeObserver from './ResizeObserver.js';
15
+ import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
16
+ import isReactClass from './isReactClass.js';
17
+
18
+ import './czi-editor-toolbar.css';
19
+
20
+ class EditorToolbar extends React.PureComponent<any, any> {
21
+ _body = null;
22
+
23
+ props: {
24
+ disabled?: ?boolean,
25
+ dispatchTransaction?: ?(tr: Transform) => void,
26
+ editorState: EditorState,
27
+ editorView: ?EditorView,
28
+ onReady?: ?(view: EditorView) => void,
29
+ readOnly?: ?boolean,
30
+ };
31
+
32
+ state = {
33
+ expanded: false,
34
+ wrapped: null,
35
+ };
36
+
37
+ render(): React.Element<any> {
38
+ const { wrapped, expanded } = this.state;
39
+ const className = cx('czi-editor-toolbar', { expanded, wrapped });
40
+ const wrappedButton = wrapped ? (
41
+ <CustomButton
42
+ active={expanded}
43
+ className="czi-editor-toolbar-expand-button"
44
+ icon={Icon.get('more_horiz')}
45
+ key="expand"
46
+ onClick={this._toggleExpansion}
47
+ title="More"
48
+ value={expanded}
49
+ />
50
+ ) : null;
51
+
52
+ // Start with static button controls and append any button groups
53
+ // supplied by plugins
54
+ const commandGroups = COMMAND_GROUPS.concat(
55
+ (this.props.editorState.plugins || [])
56
+ // This should have been a simple property instead of a function:
57
+ // p => p.buttonGroup
58
+ // but changing it now would mean finding every plugin that was
59
+ // implemented this way.
60
+ .map((p) => p.initButtonCommands?.())
61
+ .filter(Boolean)
62
+ )
63
+ .map(this._renderButtonsGroup)
64
+ .filter(Boolean);
65
+
66
+ return (
67
+ <div className={className}>
68
+ <div className="czi-editor-toolbar-flex">
69
+ <div className="czi-editor-toolbar-body">
70
+ <div
71
+ className="czi-editor-toolbar-body-content"
72
+ ref={this._onBodyRef}
73
+ >
74
+ <i className="czi-editor-toolbar-wrapped-anchor" />
75
+ {commandGroups}
76
+ <div className="czi-editor-toolbar-background">
77
+ <div className="czi-editor-toolbar-background-line" />
78
+ <div className="czi-editor-toolbar-background-line" />
79
+ <div className="czi-editor-toolbar-background-line" />
80
+ <div className="czi-editor-toolbar-background-line" />
81
+ <div className="czi-editor-toolbar-background-line" />
82
+ </div>
83
+ <i className="czi-editor-toolbar-wrapped-anchor" />
84
+ </div>
85
+ {wrappedButton}
86
+ </div>
87
+ <div className="czi-editor-toolbar-footer" />
88
+ </div>
89
+ </div>
90
+ );
91
+ }
92
+
93
+ _renderButtonsGroup = (group: Object, index: number): React.Element<any> => {
94
+ const buttons = Object.keys(group)
95
+ .map((label) => {
96
+ const obj = group[label];
97
+
98
+ if (isReactClass(obj)) {
99
+ // JSX requies the component to be named with upper camel case.
100
+ const ThatComponent = obj;
101
+ const { editorState, editorView, dispatchTransaction } = this.props;
102
+ return (
103
+ <ThatComponent
104
+ dispatch={dispatchTransaction}
105
+ editorState={editorState}
106
+ editorView={editorView}
107
+ key={label}
108
+ />
109
+ );
110
+ } else if (obj instanceof UICommand) {
111
+ return this._renderButton(label, obj);
112
+ } else if (Array.isArray(obj)) {
113
+ return this._renderMenuButton(label, obj);
114
+ } else {
115
+ return null;
116
+ }
117
+ })
118
+ .filter(Boolean);
119
+ return (
120
+ <div className="czi-custom-buttons" key={'g' + String(index)}>
121
+ {buttons}
122
+ </div>
123
+ );
124
+ };
125
+
126
+ _renderMenuButton = (
127
+ label: string,
128
+ commandGroups: Array<{ [string]: UICommand }>
129
+ ): React.Element<any> => {
130
+ const { editorState, editorView, disabled, dispatchTransaction } =
131
+ this.props;
132
+ const { icon, title } = parseLabel(label);
133
+ return (
134
+ <CommandMenuButton
135
+ commandGroups={commandGroups}
136
+ disabled={disabled}
137
+ dispatch={dispatchTransaction}
138
+ editorState={editorState}
139
+ editorView={editorView}
140
+ icon={icon}
141
+ key={label}
142
+ label={icon ? null : title}
143
+ title={title}
144
+ />
145
+ );
146
+ };
147
+
148
+ _renderButton = (label: string, command: UICommand): React.Element<any> => {
149
+ const { disabled, editorState, editorView, dispatchTransaction } =
150
+ this.props;
151
+ const { icon, title } = parseLabel(label);
152
+
153
+ return (
154
+ <CommandButton
155
+ command={command}
156
+ disabled={disabled}
157
+ dispatch={dispatchTransaction}
158
+ editorState={editorState}
159
+ editorView={editorView}
160
+ icon={icon}
161
+ key={label}
162
+ label={icon ? null : title}
163
+ title={title}
164
+ />
165
+ );
166
+ };
167
+
168
+ _onBodyRef = (ref: HTMLElement): void => {
169
+ if (ref) {
170
+ this._body = ref;
171
+ // Mounting
172
+ ResizeObserver.observe(ref, this._checkIfContentIsWrapped);
173
+ } else if (this._body) {
174
+ // Unmounting
175
+ ResizeObserver.unobserve(this._body);
176
+ this._body = null;
177
+ }
178
+ };
179
+
180
+ _checkIfContentIsWrapped = (): void => {
181
+ const ref = this._body;
182
+
183
+ if (ref) {
184
+ const startAnchor = ref.firstChild;
185
+ const endAnchor = ref.lastChild;
186
+
187
+ if (startAnchor && endAnchor) {
188
+ const wrapped = startAnchor.offsetTop < endAnchor.offsetTop;
189
+ this.setState({ wrapped });
190
+ }
191
+ }
192
+ };
193
+
194
+ _toggleExpansion = (expanded: boolean): void => {
195
+ this.setState({ expanded: !expanded });
196
+ };
197
+ }
198
+
199
+ export default EditorToolbar;
@@ -1,9 +1,9 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
2
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
5
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
7
  // eslint-disable-next-line no-unused-vars
8
8
  import * as React from 'react';
9
9
  import * as EditorCommands from '../EditorCommands.js';
@@ -13,7 +13,7 @@ import ListTypeCommandButton from './ListTypeCommandButton.js';
13
13
  import Icon from './Icon.js';
14
14
  var ICON_LABEL_PATTERN = /\[([A-Za-z_\d]+)\](.*)/;
15
15
  export function parseLabel(input) {
16
- var matched = input.match(ICON_LABEL_PATTERN);
16
+ var matched = ICON_LABEL_PATTERN.exec(input);
17
17
  if (matched) {
18
18
  var _matched = _slicedToArray(matched, 3),
19
19
  // eslint-disable-next-line no-unused-vars