@atlaskit/editor-core 180.1.0 → 181.0.0

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 (404) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/cjs/actions/index.js +25 -10
  3. package/dist/cjs/analytics-api/attach-payload-into-transaction.js +1 -1
  4. package/dist/cjs/create-editor/ReactEditorView.js +0 -5
  5. package/dist/cjs/create-editor/ReactEditorViewInternal.js +73 -103
  6. package/dist/cjs/create-editor/create-plugins-list.js +30 -3
  7. package/dist/cjs/create-editor/preset-utils.js +27 -0
  8. package/dist/cjs/editor-next/editor-internal.js +2 -2
  9. package/dist/cjs/editor-next/editor-migration-component.js +18 -2
  10. package/dist/cjs/editor-next/hooks/useProviderFactory.js +4 -3
  11. package/dist/cjs/editor-next/index.js +13 -9
  12. package/dist/cjs/editor-next/utils/getProvidersFromEditorProps.js +41 -0
  13. package/dist/cjs/editor-next/utils/handleProviders.js +17 -22
  14. package/dist/cjs/editor.js +20 -13
  15. package/dist/cjs/keymaps/consts.js +1 -16
  16. package/dist/cjs/labs/next/presets/cxhtml.js +56 -55
  17. package/dist/cjs/labs/next/presets/default.js +15 -42
  18. package/dist/cjs/labs/next/presets/mobile.js +76 -89
  19. package/dist/cjs/labs/next/presets/universal.js +330 -257
  20. package/dist/cjs/labs/next/presets/useUniversalPreset.js +36 -0
  21. package/dist/cjs/plugins/analytics/plugin.js +6 -0
  22. package/dist/cjs/plugins/annotation/utils.js +2 -36
  23. package/dist/cjs/plugins/base/pm-plugins/react-nodeview.js +2 -7
  24. package/dist/cjs/plugins/block-type/pm-plugins/input-rule.js +0 -10
  25. package/dist/cjs/plugins/caption/index.js +0 -7
  26. package/dist/cjs/plugins/card/nodeviews/blockCard.js +9 -4
  27. package/dist/cjs/plugins/card/nodeviews/inlineCard.js +6 -2
  28. package/dist/cjs/plugins/card/pm-plugins/main.js +6 -3
  29. package/dist/cjs/plugins/card/pm-plugins/util/resolve.js +4 -0
  30. package/dist/cjs/plugins/code-block/pm-plugins/main-state.js +2 -14
  31. package/dist/cjs/plugins/collab-edit/provider/index.js +1 -8
  32. package/dist/cjs/plugins/collab-edit/provider/types.js +1 -12
  33. package/dist/cjs/plugins/context-panel/index.js +1 -6
  34. package/dist/cjs/plugins/data-consumer/index.js +0 -8
  35. package/dist/cjs/plugins/date/utils/internal.js +0 -4
  36. package/dist/cjs/plugins/extension/commands.js +1 -8
  37. package/dist/cjs/plugins/extension/ui/Extension/Extension/index.js +9 -2
  38. package/dist/cjs/plugins/extension/ui/Extension/Extension/styles.js +2 -2
  39. package/dist/cjs/plugins/extension/ui/Extension/Lozenge.js +1 -0
  40. package/dist/cjs/plugins/feedback-dialog/index.js +1 -4
  41. package/dist/cjs/plugins/floating-toolbar/ui/Button.js +7 -3
  42. package/dist/cjs/plugins/floating-toolbar/ui/Dropdown.js +10 -5
  43. package/dist/cjs/plugins/floating-toolbar/ui/EmojiPickerButton.js +2 -9
  44. package/dist/cjs/plugins/floating-toolbar/ui/ExtensionsPlaceholder.js +1 -0
  45. package/dist/cjs/plugins/floating-toolbar/ui/Toolbar.js +24 -8
  46. package/dist/cjs/plugins/floating-toolbar/utils.js +0 -12
  47. package/dist/cjs/plugins/fragment/index.js +0 -8
  48. package/dist/cjs/plugins/help-dialog/commands.js +2 -6
  49. package/dist/cjs/plugins/image-upload/pm-plugins/main.js +50 -12
  50. package/dist/cjs/plugins/layout/styles.js +10 -1
  51. package/dist/cjs/plugins/list/utils/find.js +0 -28
  52. package/dist/cjs/plugins/list/utils/indentation.js +1 -25
  53. package/dist/cjs/plugins/list/utils/node.js +0 -5
  54. package/dist/cjs/plugins/list/utils/selection.js +2 -15
  55. package/dist/cjs/plugins/media/utils/media-common.js +1 -20
  56. package/dist/cjs/plugins/mentions/nodeviews/mention.js +100 -16
  57. package/dist/cjs/plugins/mentions/type-ahead/index.js +1 -18
  58. package/dist/cjs/plugins/mentions/ui/InviteItem/index.js +1 -3
  59. package/dist/cjs/plugins/mobile-dimensions/index.js +1 -4
  60. package/dist/cjs/plugins/paste/index.js +1 -2
  61. package/dist/cjs/plugins/paste/pm-plugins/analytics.js +123 -87
  62. package/dist/cjs/plugins/paste/util/index.js +0 -46
  63. package/dist/cjs/plugins/quick-insert/assets/index.js +1 -27
  64. package/dist/cjs/plugins/selection/gap-cursor/actions.js +49 -44
  65. package/dist/cjs/plugins/status/utils.js +1 -15
  66. package/dist/cjs/plugins/text-color/pm-plugins/main.js +0 -1
  67. package/dist/cjs/plugins/text-color/ui/ToolbarTextColor/index.js +7 -5
  68. package/dist/cjs/plugins/text-formatting/pm-plugins/smart-input-rule.js +8 -2
  69. package/dist/cjs/plugins/text-formatting/utils.js +1 -26
  70. package/dist/cjs/plugins/type-ahead/constants.js +1 -7
  71. package/dist/cjs/plugins/type-ahead/pm-plugins/decorations.js +2 -35
  72. package/dist/cjs/plugins/type-ahead/utils.js +3 -22
  73. package/dist/cjs/test-utils.js +4 -12
  74. package/dist/cjs/ui/Appearance/Comment/Toolbar.js +43 -8
  75. package/dist/cjs/ui/ColorPalette/index.js +18 -0
  76. package/dist/cjs/ui/ColorPickerButton/index.js +6 -2
  77. package/dist/cjs/ui/ConfigPanel/Fields/Expand.js +1 -0
  78. package/dist/cjs/ui/ConfigPanel/utils.js +4 -17
  79. package/dist/cjs/ui/ContentStyles/index.js +1 -1
  80. package/dist/cjs/ui/ElementBrowser/ModalElementBrowser.js +1 -1
  81. package/dist/cjs/ui/ElementBrowser/constants.js +1 -3
  82. package/dist/cjs/ui/Resizer/utils.js +1 -3
  83. package/dist/cjs/ui/styles.js +3 -7
  84. package/dist/cjs/utils/get-editor-plugins.js +1 -3
  85. package/dist/cjs/utils/index.js +9 -269
  86. package/dist/cjs/utils/input-rules.js +1 -15
  87. package/dist/cjs/version-wrapper.js +1 -1
  88. package/dist/cjs/version.json +1 -1
  89. package/dist/es2019/actions/index.js +23 -9
  90. package/dist/es2019/analytics-api/attach-payload-into-transaction.js +1 -1
  91. package/dist/es2019/create-editor/ReactEditorView.js +0 -5
  92. package/dist/es2019/create-editor/ReactEditorViewInternal.js +67 -82
  93. package/dist/es2019/create-editor/create-plugins-list.js +25 -3
  94. package/dist/es2019/create-editor/preset-utils.js +15 -0
  95. package/dist/es2019/editor-next/editor-internal.js +2 -2
  96. package/dist/es2019/editor-next/editor-migration-component.js +19 -2
  97. package/dist/es2019/editor-next/hooks/useProviderFactory.js +4 -3
  98. package/dist/es2019/editor-next/index.js +13 -7
  99. package/dist/es2019/editor-next/utils/getProvidersFromEditorProps.js +36 -0
  100. package/dist/es2019/editor-next/utils/handleProviders.js +18 -24
  101. package/dist/es2019/editor.js +20 -11
  102. package/dist/es2019/keymaps/consts.js +7 -11
  103. package/dist/es2019/labs/next/presets/cxhtml.js +56 -53
  104. package/dist/es2019/labs/next/presets/default.js +18 -38
  105. package/dist/es2019/labs/next/presets/mobile.js +88 -88
  106. package/dist/es2019/labs/next/presets/universal.js +338 -265
  107. package/dist/es2019/labs/next/presets/useUniversalPreset.js +25 -0
  108. package/dist/es2019/plugins/analytics/plugin.js +7 -0
  109. package/dist/es2019/plugins/annotation/utils.js +2 -30
  110. package/dist/es2019/plugins/base/pm-plugins/react-nodeview.js +1 -3
  111. package/dist/es2019/plugins/block-type/pm-plugins/input-rule.js +3 -9
  112. package/dist/es2019/plugins/caption/index.js +0 -2
  113. package/dist/es2019/plugins/card/nodeviews/blockCard.js +8 -4
  114. package/dist/es2019/plugins/card/nodeviews/inlineCard.js +6 -2
  115. package/dist/es2019/plugins/card/pm-plugins/main.js +6 -3
  116. package/dist/es2019/plugins/card/pm-plugins/util/resolve.js +4 -0
  117. package/dist/es2019/plugins/code-block/pm-plugins/main-state.js +1 -9
  118. package/dist/es2019/plugins/collab-edit/provider/index.js +1 -1
  119. package/dist/es2019/plugins/collab-edit/provider/types.js +1 -10
  120. package/dist/es2019/plugins/context-panel/index.js +0 -3
  121. package/dist/es2019/plugins/data-consumer/index.js +0 -7
  122. package/dist/es2019/plugins/date/utils/internal.js +0 -3
  123. package/dist/es2019/plugins/extension/commands.js +0 -6
  124. package/dist/es2019/plugins/extension/ui/Extension/Extension/index.js +12 -2
  125. package/dist/es2019/plugins/extension/ui/Extension/Extension/styles.js +3 -0
  126. package/dist/es2019/plugins/extension/ui/Extension/Lozenge.js +1 -0
  127. package/dist/es2019/plugins/feedback-dialog/index.js +0 -2
  128. package/dist/es2019/plugins/floating-toolbar/ui/Button.js +7 -3
  129. package/dist/es2019/plugins/floating-toolbar/ui/Dropdown.js +10 -5
  130. package/dist/es2019/plugins/floating-toolbar/ui/EmojiPickerButton.js +1 -11
  131. package/dist/es2019/plugins/floating-toolbar/ui/ExtensionsPlaceholder.js +1 -0
  132. package/dist/es2019/plugins/floating-toolbar/ui/Toolbar.js +21 -4
  133. package/dist/es2019/plugins/floating-toolbar/utils.js +0 -10
  134. package/dist/es2019/plugins/fragment/index.js +0 -7
  135. package/dist/es2019/plugins/help-dialog/commands.js +1 -2
  136. package/dist/es2019/plugins/image-upload/pm-plugins/main.js +47 -5
  137. package/dist/es2019/plugins/layout/styles.js +12 -4
  138. package/dist/es2019/plugins/list/utils/find.js +0 -27
  139. package/dist/es2019/plugins/list/utils/indentation.js +0 -23
  140. package/dist/es2019/plugins/list/utils/node.js +1 -4
  141. package/dist/es2019/plugins/list/utils/selection.js +2 -15
  142. package/dist/es2019/plugins/media/utils/media-common.js +1 -19
  143. package/dist/es2019/plugins/mentions/nodeviews/mention.js +64 -16
  144. package/dist/es2019/plugins/mentions/type-ahead/index.js +1 -14
  145. package/dist/es2019/plugins/mentions/ui/InviteItem/index.js +1 -2
  146. package/dist/es2019/plugins/mobile-dimensions/index.js +0 -3
  147. package/dist/es2019/plugins/paste/index.js +1 -2
  148. package/dist/es2019/plugins/paste/pm-plugins/analytics.js +126 -94
  149. package/dist/es2019/plugins/paste/util/index.js +5 -45
  150. package/dist/es2019/plugins/quick-insert/assets/index.js +0 -8
  151. package/dist/es2019/plugins/selection/gap-cursor/actions.js +56 -56
  152. package/dist/es2019/plugins/status/utils.js +1 -11
  153. package/dist/es2019/plugins/text-color/pm-plugins/main.js +1 -1
  154. package/dist/es2019/plugins/text-color/ui/ToolbarTextColor/index.js +7 -5
  155. package/dist/es2019/plugins/text-formatting/pm-plugins/smart-input-rule.js +8 -2
  156. package/dist/es2019/plugins/text-formatting/utils.js +0 -19
  157. package/dist/es2019/plugins/type-ahead/constants.js +0 -5
  158. package/dist/es2019/plugins/type-ahead/pm-plugins/decorations.js +0 -35
  159. package/dist/es2019/plugins/type-ahead/utils.js +0 -23
  160. package/dist/es2019/test-utils.js +4 -7
  161. package/dist/es2019/ui/Appearance/Comment/Toolbar.js +40 -6
  162. package/dist/es2019/ui/ColorPalette/index.js +2 -1
  163. package/dist/es2019/ui/ColorPickerButton/index.js +6 -2
  164. package/dist/es2019/ui/ConfigPanel/Fields/Expand.js +1 -0
  165. package/dist/es2019/ui/ConfigPanel/utils.js +0 -6
  166. package/dist/es2019/ui/ContentStyles/index.js +1 -1
  167. package/dist/es2019/ui/ElementBrowser/ModalElementBrowser.js +1 -1
  168. package/dist/es2019/ui/ElementBrowser/constants.js +0 -1
  169. package/dist/es2019/ui/Resizer/utils.js +0 -1
  170. package/dist/es2019/ui/styles.js +0 -6
  171. package/dist/es2019/utils/get-editor-plugins.js +1 -3
  172. package/dist/es2019/utils/index.js +13 -199
  173. package/dist/es2019/utils/input-rules.js +0 -14
  174. package/dist/es2019/version-wrapper.js +1 -1
  175. package/dist/es2019/version.json +1 -1
  176. package/dist/esm/actions/index.js +23 -9
  177. package/dist/esm/analytics-api/attach-payload-into-transaction.js +1 -1
  178. package/dist/esm/create-editor/ReactEditorView.js +0 -5
  179. package/dist/esm/create-editor/ReactEditorViewInternal.js +73 -102
  180. package/dist/esm/create-editor/create-plugins-list.js +29 -3
  181. package/dist/esm/create-editor/preset-utils.js +21 -0
  182. package/dist/esm/editor-next/editor-internal.js +2 -2
  183. package/dist/esm/editor-next/editor-migration-component.js +18 -2
  184. package/dist/esm/editor-next/hooks/useProviderFactory.js +4 -3
  185. package/dist/esm/editor-next/index.js +13 -9
  186. package/dist/esm/editor-next/utils/getProvidersFromEditorProps.js +35 -0
  187. package/dist/esm/editor-next/utils/handleProviders.js +17 -22
  188. package/dist/esm/editor.js +20 -13
  189. package/dist/esm/keymaps/consts.js +7 -11
  190. package/dist/esm/labs/next/presets/cxhtml.js +56 -55
  191. package/dist/esm/labs/next/presets/default.js +18 -41
  192. package/dist/esm/labs/next/presets/mobile.js +88 -90
  193. package/dist/esm/labs/next/presets/universal.js +330 -257
  194. package/dist/esm/labs/next/presets/useUniversalPreset.js +29 -0
  195. package/dist/esm/plugins/analytics/plugin.js +6 -0
  196. package/dist/esm/plugins/annotation/utils.js +2 -32
  197. package/dist/esm/plugins/base/pm-plugins/react-nodeview.js +1 -5
  198. package/dist/esm/plugins/block-type/pm-plugins/input-rule.js +3 -9
  199. package/dist/esm/plugins/caption/index.js +0 -2
  200. package/dist/esm/plugins/card/nodeviews/blockCard.js +9 -4
  201. package/dist/esm/plugins/card/nodeviews/inlineCard.js +6 -2
  202. package/dist/esm/plugins/card/pm-plugins/main.js +6 -3
  203. package/dist/esm/plugins/card/pm-plugins/util/resolve.js +4 -0
  204. package/dist/esm/plugins/code-block/pm-plugins/main-state.js +0 -10
  205. package/dist/esm/plugins/collab-edit/provider/index.js +1 -1
  206. package/dist/esm/plugins/collab-edit/provider/types.js +1 -10
  207. package/dist/esm/plugins/context-panel/index.js +0 -3
  208. package/dist/esm/plugins/data-consumer/index.js +0 -7
  209. package/dist/esm/plugins/date/utils/internal.js +0 -3
  210. package/dist/esm/plugins/extension/commands.js +0 -6
  211. package/dist/esm/plugins/extension/ui/Extension/Extension/index.js +9 -2
  212. package/dist/esm/plugins/extension/ui/Extension/Extension/styles.js +2 -2
  213. package/dist/esm/plugins/extension/ui/Extension/Lozenge.js +1 -0
  214. package/dist/esm/plugins/feedback-dialog/index.js +0 -2
  215. package/dist/esm/plugins/floating-toolbar/ui/Button.js +7 -3
  216. package/dist/esm/plugins/floating-toolbar/ui/Dropdown.js +10 -5
  217. package/dist/esm/plugins/floating-toolbar/ui/EmojiPickerButton.js +2 -9
  218. package/dist/esm/plugins/floating-toolbar/ui/ExtensionsPlaceholder.js +1 -0
  219. package/dist/esm/plugins/floating-toolbar/ui/Toolbar.js +24 -8
  220. package/dist/esm/plugins/floating-toolbar/utils.js +0 -10
  221. package/dist/esm/plugins/fragment/index.js +0 -7
  222. package/dist/esm/plugins/help-dialog/commands.js +0 -3
  223. package/dist/esm/plugins/image-upload/pm-plugins/main.js +51 -12
  224. package/dist/esm/plugins/layout/styles.js +11 -2
  225. package/dist/esm/plugins/list/utils/find.js +0 -27
  226. package/dist/esm/plugins/list/utils/indentation.js +0 -23
  227. package/dist/esm/plugins/list/utils/node.js +1 -4
  228. package/dist/esm/plugins/list/utils/selection.js +2 -12
  229. package/dist/esm/plugins/media/utils/media-common.js +1 -17
  230. package/dist/esm/plugins/mentions/nodeviews/mention.js +97 -16
  231. package/dist/esm/plugins/mentions/type-ahead/index.js +1 -18
  232. package/dist/esm/plugins/mentions/ui/InviteItem/index.js +1 -2
  233. package/dist/esm/plugins/mobile-dimensions/index.js +0 -3
  234. package/dist/esm/plugins/paste/index.js +1 -2
  235. package/dist/esm/plugins/paste/pm-plugins/analytics.js +122 -86
  236. package/dist/esm/plugins/paste/util/index.js +5 -45
  237. package/dist/esm/plugins/quick-insert/assets/index.js +0 -20
  238. package/dist/esm/plugins/selection/gap-cursor/actions.js +52 -45
  239. package/dist/esm/plugins/status/utils.js +1 -13
  240. package/dist/esm/plugins/text-color/pm-plugins/main.js +1 -1
  241. package/dist/esm/plugins/text-color/ui/ToolbarTextColor/index.js +7 -5
  242. package/dist/esm/plugins/text-formatting/pm-plugins/smart-input-rule.js +8 -2
  243. package/dist/esm/plugins/text-formatting/utils.js +0 -21
  244. package/dist/esm/plugins/type-ahead/constants.js +0 -5
  245. package/dist/esm/plugins/type-ahead/pm-plugins/decorations.js +0 -31
  246. package/dist/esm/plugins/type-ahead/utils.js +2 -20
  247. package/dist/esm/test-utils.js +4 -7
  248. package/dist/esm/ui/Appearance/Comment/Toolbar.js +41 -6
  249. package/dist/esm/ui/ColorPalette/index.js +2 -1
  250. package/dist/esm/ui/ColorPickerButton/index.js +6 -2
  251. package/dist/esm/ui/ConfigPanel/Fields/Expand.js +1 -0
  252. package/dist/esm/ui/ConfigPanel/utils.js +3 -14
  253. package/dist/esm/ui/ContentStyles/index.js +1 -1
  254. package/dist/esm/ui/ElementBrowser/ModalElementBrowser.js +1 -1
  255. package/dist/esm/ui/ElementBrowser/constants.js +0 -1
  256. package/dist/esm/ui/Resizer/utils.js +0 -1
  257. package/dist/esm/ui/styles.js +2 -5
  258. package/dist/esm/utils/get-editor-plugins.js +1 -3
  259. package/dist/esm/utils/index.js +13 -196
  260. package/dist/esm/utils/input-rules.js +0 -13
  261. package/dist/esm/version-wrapper.js +1 -1
  262. package/dist/esm/version.json +1 -1
  263. package/dist/types/actions/index.d.ts +4 -4
  264. package/dist/types/create-editor/ReactEditorView.d.ts +0 -3
  265. package/dist/types/create-editor/ReactEditorViewInternal.d.ts +9 -7
  266. package/dist/types/create-editor/ReactEditorViewNext.d.ts +3 -4
  267. package/dist/types/create-editor/create-plugins-list.d.ts +3 -5
  268. package/dist/types/create-editor/preset-utils.d.ts +2 -0
  269. package/dist/types/editor-next/editor-internal.d.ts +9 -9
  270. package/dist/types/editor-next/hooks/useMeasureEditorMountTime.d.ts +2 -2
  271. package/dist/types/editor-next/hooks/useProviderFactory.d.ts +2 -2
  272. package/dist/types/editor-next/index.d.ts +6 -6
  273. package/dist/types/editor-next/utils/deprecationWarnings.d.ts +2 -2
  274. package/dist/types/editor-next/utils/editorPropTypes.d.ts +1 -1
  275. package/dist/types/editor-next/utils/getProvidersFromEditorProps.d.ts +9 -0
  276. package/dist/types/editor-next/utils/handleProviders.d.ts +2 -2
  277. package/dist/types/editor-next/utils/onEditorCreated.d.ts +2 -2
  278. package/dist/types/editor-next/utils/sendDurationAnalytics.d.ts +1 -1
  279. package/dist/types/editor.d.ts +7 -4
  280. package/dist/types/keymaps/consts.d.ts +0 -11
  281. package/dist/types/labs/next/presets/cxhtml.d.ts +33 -1
  282. package/dist/types/labs/next/presets/default.d.ts +67 -10
  283. package/dist/types/labs/next/presets/mobile.d.ts +33 -1
  284. package/dist/types/labs/next/presets/universal.d.ts +5 -13
  285. package/dist/types/labs/next/presets/useUniversalPreset.d.ts +7 -0
  286. package/dist/types/nodeviews/context-adapter.d.ts +0 -1
  287. package/dist/types/nodeviews/index.d.ts +0 -1
  288. package/dist/types/plugins/alignment/pm-plugins/types.d.ts +0 -11
  289. package/dist/types/plugins/annotation/utils.d.ts +0 -17
  290. package/dist/types/plugins/base/pm-plugins/react-nodeview.d.ts +2 -3
  291. package/dist/types/plugins/block-type/pm-plugins/input-rule.d.ts +2 -6
  292. package/dist/types/plugins/caption/index.d.ts +0 -2
  293. package/dist/types/plugins/card/nodeviews/blockCard.d.ts +2 -10
  294. package/dist/types/plugins/card/nodeviews/genericCard.d.ts +1 -0
  295. package/dist/types/plugins/card/nodeviews/inlineCard.d.ts +1 -1
  296. package/dist/types/plugins/code-block/actions.d.ts +0 -4
  297. package/dist/types/plugins/code-block/pm-plugins/main-state.d.ts +0 -3
  298. package/dist/types/plugins/collab-edit/provider/index.d.ts +1 -2
  299. package/dist/types/plugins/collab-edit/provider/types.d.ts +1 -36
  300. package/dist/types/plugins/context-panel/index.d.ts +2 -3
  301. package/dist/types/plugins/data-consumer/index.d.ts +0 -2
  302. package/dist/types/plugins/date/utils/internal.d.ts +0 -1
  303. package/dist/types/plugins/extension/commands.d.ts +0 -1
  304. package/dist/types/plugins/extension/nodeviews/extension.d.ts +0 -5
  305. package/dist/types/plugins/feedback-dialog/index.d.ts +0 -2
  306. package/dist/types/plugins/floating-toolbar/ui/Button.d.ts +3 -1
  307. package/dist/types/plugins/floating-toolbar/ui/Dropdown.d.ts +1 -0
  308. package/dist/types/plugins/floating-toolbar/utils.d.ts +0 -2
  309. package/dist/types/plugins/fragment/index.d.ts +0 -2
  310. package/dist/types/plugins/help-dialog/commands.d.ts +0 -1
  311. package/dist/types/plugins/history/actions.d.ts +1 -2
  312. package/dist/types/plugins/layout/styles.d.ts +2 -1
  313. package/dist/types/plugins/list/utils/find.d.ts +0 -1
  314. package/dist/types/plugins/list/utils/indentation.d.ts +0 -1
  315. package/dist/types/plugins/list/utils/node.d.ts +0 -2
  316. package/dist/types/plugins/list/utils/selection.d.ts +0 -3
  317. package/dist/types/plugins/media/utils/media-common.d.ts +0 -5
  318. package/dist/types/plugins/mentions/types.d.ts +1 -2
  319. package/dist/types/plugins/mentions/ui/InviteItem/index.d.ts +2 -3
  320. package/dist/types/plugins/mentions/ui/InviteItem/styles.d.ts +0 -6
  321. package/dist/types/plugins/mentions/ui/ToolbarMention/index.d.ts +1 -4
  322. package/dist/types/plugins/mobile-dimensions/index.d.ts +0 -1
  323. package/dist/types/plugins/paste/index.d.ts +0 -1
  324. package/dist/types/plugins/paste/pm-plugins/analytics.d.ts +6 -3
  325. package/dist/types/plugins/paste/util/index.d.ts +0 -6
  326. package/dist/types/plugins/quick-insert/assets/index.d.ts +0 -2
  327. package/dist/types/plugins/status/utils.d.ts +0 -3
  328. package/dist/types/plugins/tasks-and-decisions/pm-plugins/main.d.ts +0 -6
  329. package/dist/types/plugins/text-color/pm-plugins/main.d.ts +2 -12
  330. package/dist/types/plugins/text-formatting/pm-plugins/clear-formatting.d.ts +0 -1
  331. package/dist/types/plugins/text-formatting/utils.d.ts +0 -4
  332. package/dist/types/plugins/type-ahead/constants.d.ts +0 -4
  333. package/dist/types/plugins/type-ahead/pm-plugins/decorations.d.ts +0 -10
  334. package/dist/types/plugins/type-ahead/utils.d.ts +1 -2
  335. package/dist/types/test-utils.d.ts +4 -5
  336. package/dist/types/types/editor-appearance-component.d.ts +2 -2
  337. package/dist/types/types/editor-props.d.ts +55 -42
  338. package/dist/types/ui/Appearance/Chromeless.d.ts +0 -5
  339. package/dist/types/ui/Appearance/Comment/Comment.d.ts +0 -7
  340. package/dist/types/ui/Appearance/Comment/Toolbar.d.ts +3 -2
  341. package/dist/types/ui/Appearance/FullPage/MainToolbar.d.ts +0 -4
  342. package/dist/types/ui/Appearance/FullPage/StyledComponents.d.ts +3 -3
  343. package/dist/types/ui/AppearanceComponents/Mobile.d.ts +2 -5
  344. package/dist/types/ui/ColorPalette/Palettes/index.d.ts +1 -1
  345. package/dist/types/ui/ColorPalette/Palettes/type.d.ts +1 -1
  346. package/dist/types/ui/ColorPalette/index.d.ts +2 -1
  347. package/dist/types/ui/ColorPickerButton/index.d.ts +4 -2
  348. package/dist/types/ui/ConfigPanel/types.d.ts +0 -3
  349. package/dist/types/ui/ConfigPanel/utils.d.ts +2 -3
  350. package/dist/types/ui/ContentStyles/index.d.ts +2 -2
  351. package/dist/types/ui/ElementBrowser/ModalElementBrowser.d.ts +0 -3
  352. package/dist/types/ui/ElementBrowser/constants.d.ts +0 -1
  353. package/dist/types/ui/ElementBrowser/types.d.ts +0 -5
  354. package/dist/types/ui/Resizer/utils.d.ts +0 -1
  355. package/dist/types/ui/styles.d.ts +0 -1
  356. package/dist/types/utils/index.d.ts +6 -65
  357. package/dist/types/utils/input-rules.d.ts +1 -2
  358. package/dist/types/utils/table.d.ts +0 -1
  359. package/package.json +23 -24
  360. package/report.api.md +155 -146
  361. package/dist/cjs/labs/next/presets/preset.js +0 -101
  362. package/dist/cjs/plugins/analytics/types/type-ahead.js +0 -5
  363. package/dist/cjs/plugins/collab-edit/provider/channel.js +0 -313
  364. package/dist/cjs/plugins/collab-edit/provider/logger.js +0 -17
  365. package/dist/cjs/plugins/collab-edit/provider/mock-users.js +0 -19
  366. package/dist/cjs/plugins/data-consumer/plugin-key.js +0 -9
  367. package/dist/cjs/plugins/media/toolbar/toolbar-messages.js +0 -15
  368. package/dist/cjs/profiler/render-count.js +0 -60
  369. package/dist/cjs/ui/ColorPalette/Color/index.js +0 -9
  370. package/dist/cjs/ui/ConfigPanel/FieldDescription.js +0 -19
  371. package/dist/cjs/ui/WithPluginState/types.js +0 -5
  372. package/dist/es2019/labs/next/presets/preset.js +0 -68
  373. package/dist/es2019/plugins/analytics/types/type-ahead.js +0 -1
  374. package/dist/es2019/plugins/collab-edit/provider/channel.js +0 -179
  375. package/dist/es2019/plugins/collab-edit/provider/logger.js +0 -8
  376. package/dist/es2019/plugins/collab-edit/provider/mock-users.js +0 -12
  377. package/dist/es2019/plugins/data-consumer/plugin-key.js +0 -2
  378. package/dist/es2019/plugins/media/toolbar/toolbar-messages.js +0 -8
  379. package/dist/es2019/profiler/render-count.js +0 -53
  380. package/dist/es2019/ui/ColorPalette/Color/index.js +0 -2
  381. package/dist/es2019/ui/ConfigPanel/FieldDescription.js +0 -12
  382. package/dist/es2019/ui/WithPluginState/types.js +0 -1
  383. package/dist/esm/labs/next/presets/preset.js +0 -93
  384. package/dist/esm/plugins/analytics/types/type-ahead.js +0 -1
  385. package/dist/esm/plugins/collab-edit/provider/channel.js +0 -305
  386. package/dist/esm/plugins/collab-edit/provider/logger.js +0 -10
  387. package/dist/esm/plugins/collab-edit/provider/mock-users.js +0 -12
  388. package/dist/esm/plugins/data-consumer/plugin-key.js +0 -2
  389. package/dist/esm/plugins/media/toolbar/toolbar-messages.js +0 -8
  390. package/dist/esm/profiler/render-count.js +0 -49
  391. package/dist/esm/ui/ColorPalette/Color/index.js +0 -2
  392. package/dist/esm/ui/ConfigPanel/FieldDescription.js +0 -11
  393. package/dist/esm/ui/WithPluginState/types.js +0 -1
  394. package/dist/types/labs/next/presets/preset.d.ts +0 -46
  395. package/dist/types/plugins/analytics/types/type-ahead.d.ts +0 -1
  396. package/dist/types/plugins/collab-edit/provider/channel.d.ts +0 -48
  397. package/dist/types/plugins/collab-edit/provider/logger.d.ts +0 -1
  398. package/dist/types/plugins/collab-edit/provider/mock-users.d.ts +0 -6
  399. package/dist/types/plugins/data-consumer/plugin-key.d.ts +0 -2
  400. package/dist/types/plugins/media/toolbar/toolbar-messages.d.ts +0 -7
  401. package/dist/types/profiler/render-count.d.ts +0 -14
  402. package/dist/types/ui/ColorPalette/Color/index.d.ts +0 -2
  403. package/dist/types/ui/ConfigPanel/FieldDescription.d.ts +0 -6
  404. package/dist/types/ui/WithPluginState/types.d.ts +0 -10
@@ -1,7 +1,6 @@
1
1
  import { ACTION, INPUT_METHOD, EVENT_TYPE, ACTION_SUBJECT, ACTION_SUBJECT_ID, addAnalytics, PasteTypes, PasteContents, withAnalytics } from '../../analytics';
2
2
  import { getPasteSource } from '../util';
3
3
  import { handlePasteAsPlainText, handlePasteIntoTaskOrDecisionOrPanel, handleCodeBlock, handleMediaSingle, handlePastePreservingMarks, handleMarkdown, handleRichText, handleExpandPasteInTable, handleSelectedTable, handlePasteLinkOnSelectedText, handlePasteIntoCaption, handlePastePanelOrDecisionContentIntoList, handlePasteNonNestableBlockNodesIntoList } from '../handlers';
4
- import { pipe } from '../../../utils';
5
4
  import { findParentNode } from 'prosemirror-utils';
6
5
  import { mapSlice } from '../../../utils/slice';
7
6
  import { getLinkDomain } from '../../hyperlink/utils';
@@ -50,17 +49,18 @@ const nodeToActionSubjectId = {
50
49
  tableRow: ACTION_SUBJECT_ID.PASTE_TABLE_ROW,
51
50
  taskList: ACTION_SUBJECT_ID.PASTE_TASK_LIST
52
51
  };
53
- export function getContent(state, slice) {
52
+ export function getContent({
53
+ schema,
54
+ slice
55
+ }) {
54
56
  const {
55
- schema: {
56
- nodes: {
57
- paragraph
58
- },
59
- marks: {
60
- link
61
- }
57
+ nodes: {
58
+ paragraph
59
+ },
60
+ marks: {
61
+ link
62
62
  }
63
- } = state;
63
+ } = schema;
64
64
  const nodeOrMarkName = new Set();
65
65
  slice.content.forEach(node => {
66
66
  if (node.type === paragraph && node.content.size === 0) {
@@ -99,20 +99,18 @@ export function getMediaTraceId(slice) {
99
99
  });
100
100
  return traceId;
101
101
  }
102
- function getActionSubjectId(view) {
102
+ function getActionSubjectId({
103
+ selection,
104
+ schema
105
+ }) {
103
106
  const {
104
- state: {
105
- selection,
106
- schema: {
107
- nodes: {
108
- paragraph,
109
- listItem,
110
- taskItem,
111
- decisionItem
112
- }
113
- }
107
+ nodes: {
108
+ paragraph,
109
+ listItem,
110
+ taskItem,
111
+ decisionItem
114
112
  }
115
- } = view;
113
+ } = schema;
116
114
  const parent = findParentNode(node => {
117
115
  if (node.type !== paragraph && node.type !== listItem && node.type !== taskItem && node.type !== decisionItem) {
118
116
  return true;
@@ -156,51 +154,62 @@ function createPastePayload(actionSubjectId, attributes, linkDomain) {
156
154
  } : {})
157
155
  };
158
156
  }
159
- export function createPasteAnalyticsPayload(view, event, slice, pasteContext) {
160
- const text = event.clipboardData ? event.clipboardData.getData('text/plain') || event.clipboardData.getData('text/uri-list') : '';
161
- const actionSubjectId = getActionSubjectId(view);
162
- const pasteSize = slice.size;
163
- const content = getContent(view.state, slice);
164
- const linkUrls = [];
165
- const mediaTraceId = getMediaTraceId(slice);
166
-
167
- // If we have a link among the pasted content, grab the
168
- // domain and send it up with the analytics event
169
- if (content === PasteContents.url || content === PasteContents.mixed) {
170
- mapSlice(slice, node => {
171
- const linkMark = node.marks.find(mark => mark.type.name === 'link');
172
- if (linkMark) {
173
- linkUrls.push(linkMark.attrs.href);
174
- }
175
- return node;
157
+ function createPasteAnalyticsPayloadBySelection(event, slice, pasteContext) {
158
+ return selection => {
159
+ const text = event.clipboardData ? event.clipboardData.getData('text/plain') || event.clipboardData.getData('text/uri-list') : '';
160
+ const actionSubjectId = getActionSubjectId({
161
+ selection: selection,
162
+ schema: selection.$from.doc.type.schema
176
163
  });
177
- }
178
- if (pasteContext.asPlain) {
179
- return createPasteAsPlainPayload(actionSubjectId, text, linkUrls.length);
180
- }
181
- const source = getPasteSource(event);
182
- if (pasteContext.type === PasteTypes.plain) {
164
+ const pasteSize = slice.size;
165
+ const content = getContent({
166
+ schema: selection.$from.doc.type.schema,
167
+ slice
168
+ });
169
+ const linkUrls = [];
170
+ const mediaTraceId = getMediaTraceId(slice);
171
+
172
+ // If we have a link among the pasted content, grab the
173
+ // domain and send it up with the analytics event
174
+ if (content === PasteContents.url || content === PasteContents.mixed) {
175
+ mapSlice(slice, node => {
176
+ const linkMark = node.marks.find(mark => mark.type.name === 'link');
177
+ if (linkMark) {
178
+ linkUrls.push(linkMark.attrs.href);
179
+ }
180
+ return node;
181
+ });
182
+ }
183
+ if (pasteContext.asPlain) {
184
+ return createPasteAsPlainPayload(actionSubjectId, text, linkUrls.length);
185
+ }
186
+ const source = getPasteSource(event);
187
+ if (pasteContext.type === PasteTypes.plain) {
188
+ return createPastePayload(actionSubjectId, {
189
+ pasteSize: text.length,
190
+ type: pasteContext.type,
191
+ content: PasteContents.text,
192
+ source,
193
+ hyperlinkPasteOnText: false,
194
+ linksInPasteCount: linkUrls.length,
195
+ pasteSplitList: pasteContext.pasteSplitList
196
+ });
197
+ }
198
+ const linkDomains = linkUrls.map(getLinkDomain);
183
199
  return createPastePayload(actionSubjectId, {
184
- pasteSize: text.length,
185
200
  type: pasteContext.type,
186
- content: PasteContents.text,
201
+ pasteSize,
202
+ content,
187
203
  source,
188
- hyperlinkPasteOnText: false,
204
+ hyperlinkPasteOnText: !!pasteContext.hyperlinkPasteOnText,
189
205
  linksInPasteCount: linkUrls.length,
206
+ mediaTraceId,
190
207
  pasteSplitList: pasteContext.pasteSplitList
191
- });
192
- }
193
- const linkDomains = linkUrls.map(getLinkDomain);
194
- return createPastePayload(actionSubjectId, {
195
- type: pasteContext.type,
196
- pasteSize,
197
- content,
198
- source,
199
- hyperlinkPasteOnText: !!pasteContext.hyperlinkPasteOnText,
200
- linksInPasteCount: linkUrls.length,
201
- mediaTraceId,
202
- pasteSplitList: pasteContext.pasteSplitList
203
- }, linkDomains);
208
+ }, linkDomains);
209
+ };
210
+ }
211
+ export function createPasteAnalyticsPayload(view, event, slice, pasteContext) {
212
+ return createPasteAnalyticsPayloadBySelection(event, slice, pasteContext)(view.state.selection);
204
213
  }
205
214
 
206
215
  // TODO: ED-6612 We should not dispatch only analytics, it's preferred to wrap each command with his own analytics.
@@ -213,57 +222,80 @@ export function sendPasteAnalyticsEvent(view, event, slice, pasteContext) {
213
222
  export function pasteCommandWithAnalytics(view, event, slice, pasteContext) {
214
223
  return withAnalytics(() => createPasteAnalyticsPayload(view, event, slice, pasteContext));
215
224
  }
216
- export const handlePasteAsPlainTextWithAnalytics = (view, event, slice) => pipe(handlePasteAsPlainText, pasteCommandWithAnalytics(view, event, slice, {
225
+ export const handlePasteAsPlainTextWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
217
226
  type: PasteTypes.plain,
218
227
  asPlain: true
219
- }))(slice, event);
220
- export const handlePasteIntoTaskAndDecisionWithAnalytics = (view, event, slice, type) => pipe(handlePasteIntoTaskOrDecisionOrPanel, pasteCommandWithAnalytics(view, event, slice, {
221
- type: type
222
- }))(slice);
223
- export const handlePasteIntoCaptionWithAnalytics = (view, event, slice, type) => pipe(handlePasteIntoCaption, pasteCommandWithAnalytics(view, event, slice, {
224
- type: type
225
- }))(slice);
226
- export const handleCodeBlockWithAnalytics = (view, event, slice, text) => pipe(handleCodeBlock, pasteCommandWithAnalytics(view, event, slice, {
228
+ }))(handlePasteAsPlainText(slice, event));
229
+ export const handlePasteIntoTaskAndDecisionWithAnalytics = (view, event, slice, type) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
230
+ type
231
+ }))(handlePasteIntoTaskOrDecisionOrPanel(slice));
232
+ export const handlePasteIntoCaptionWithAnalytics = (view, event, slice, type) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
233
+ type
234
+ }))(handlePasteIntoCaption(slice));
235
+ export const handleCodeBlockWithAnalytics = (view, event, slice, text) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
227
236
  type: PasteTypes.plain
228
- }))(text);
229
- export const handleMediaSingleWithAnalytics = (view, event, slice, type) => pipe(handleMediaSingle(INPUT_METHOD.CLIPBOARD), pasteCommandWithAnalytics(view, event, slice, {
237
+ }))(handleCodeBlock(text));
238
+ export const handleMediaSingleWithAnalytics = (view, event, slice, type) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
230
239
  type
231
- }))(slice);
232
- export const handlePastePreservingMarksWithAnalytics = (view, event, slice, type) => {
233
- return pipe(handlePastePreservingMarks, pasteCommandWithAnalytics(view, event, slice, {
234
- type
235
- }))(slice);
236
- };
237
- export const handleMarkdownWithAnalytics = (view, event, slice) => pipe(handleMarkdown, pasteCommandWithAnalytics(view, event, slice, {
240
+ }))(handleMediaSingle(INPUT_METHOD.CLIPBOARD)(slice));
241
+ export const handlePastePreservingMarksWithAnalytics = (view, event, slice, type) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
242
+ type
243
+ }))(handlePastePreservingMarks(slice));
244
+ export const handleMarkdownWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
238
245
  type: PasteTypes.markdown
239
- }))(slice);
240
- export const handleRichTextWithAnalytics = (view, event, slice) => pipe(handleRichText, pasteCommandWithAnalytics(view, event, slice, {
246
+ }))(handleMarkdown(slice));
247
+ export const handleRichTextWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
241
248
  type: PasteTypes.richText
242
- }))(slice);
243
- export const handlePastePanelOrDecisionIntoListWithAnalytics = (view, event, slice) => pipe(handlePastePanelOrDecisionContentIntoList, pasteCommandWithAnalytics(view, event, slice, {
249
+ }))(handleRichText(slice));
250
+ function injectAnalyticsPayloadBeforeCommand(createPayloadByTransaction) {
251
+ return mainCommand => {
252
+ return (state, dispatch, view) => {
253
+ let originalTransaction = state.tr;
254
+ const fakeDispatch = tr => {
255
+ originalTransaction = tr;
256
+ };
257
+ const result = mainCommand(state, fakeDispatch, view);
258
+ if (!result) {
259
+ return false;
260
+ }
261
+ if (dispatch && originalTransaction.docChanged) {
262
+ // it needs to know the selection before the changes
263
+ const payload = createPayloadByTransaction(state.selection);
264
+ addAnalytics(state, originalTransaction, payload);
265
+ dispatch(originalTransaction);
266
+ }
267
+ return true;
268
+ };
269
+ };
270
+ }
271
+ export const handlePastePanelOrDecisionIntoListWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
244
272
  type: PasteTypes.richText
245
- }))(slice);
246
- export const handlePasteNonNestableBlockNodesIntoListWithAnalytics = (view, event, slice) => pipe(handlePasteNonNestableBlockNodesIntoList, pasteCommandWithAnalytics(view, event, slice, {
273
+ }))(handlePastePanelOrDecisionContentIntoList(slice));
274
+ export const handlePasteNonNestableBlockNodesIntoListWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
247
275
  type: PasteTypes.richText,
248
276
  pasteSplitList: true
249
- }))(slice);
250
- export const handleExpandWithAnalytics = (view, event, slice) => pipe(handleExpandPasteInTable, pasteCommandWithAnalytics(view, event, slice, {
251
- type: PasteTypes.richText
252
- }))(slice);
253
- export const handleSelectedTableWithAnalytics = (view, event, slice) => pipe(handleSelectedTable, pasteCommandWithAnalytics(view, event, slice, {
277
+ }))(handlePasteNonNestableBlockNodesIntoList(slice));
278
+ export const handleExpandWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
279
+ type: PasteTypes.richText,
280
+ pasteSplitList: true
281
+ }))(handleExpandPasteInTable(slice));
282
+ export const handleSelectedTableWithAnalytics = (view, event, slice) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
254
283
  type: PasteTypes.richText
255
- }))(slice);
256
- export const handlePasteLinkOnSelectedTextWithAnalytics = (view, event, slice, type) => pipe(handlePasteLinkOnSelectedText, pasteCommandWithAnalytics(view, event, slice, {
284
+ }))(handleSelectedTable(slice));
285
+ export const handlePasteLinkOnSelectedTextWithAnalytics = (view, event, slice, type) => injectAnalyticsPayloadBeforeCommand(createPasteAnalyticsPayloadBySelection(event, slice, {
257
286
  type,
258
287
  hyperlinkPasteOnText: true
259
- }))(slice);
288
+ }))(handlePasteLinkOnSelectedText(slice));
260
289
  export const createPasteMeasurePayload = ({
261
290
  view,
262
291
  duration,
263
292
  content,
264
293
  distortedDuration
265
294
  }) => {
266
- const pasteIntoNode = getActionSubjectId(view);
295
+ const pasteIntoNode = getActionSubjectId({
296
+ selection: view.state.selection,
297
+ schema: view.state.schema
298
+ });
267
299
  return {
268
300
  action: ACTION.PASTED_TIMED,
269
301
  actionSubject: ACTION_SUBJECT.EDITOR,
@@ -10,19 +10,19 @@ export function isPastedFromWord(html) {
10
10
  export function isPastedFromExcel(html) {
11
11
  return !!html && html.indexOf('urn:schemas-microsoft-com:office:excel') >= 0;
12
12
  }
13
- export function isPastedFromDropboxPaper(html) {
13
+ function isPastedFromDropboxPaper(html) {
14
14
  return !!html && !!html.match(/class=\"\s?author-d-.+"/gim);
15
15
  }
16
- export function isPastedFromGoogleDocs(html) {
16
+ function isPastedFromGoogleDocs(html) {
17
17
  return !!html && !!html.match(/id=\"docs-internal-guid-.+"/gim);
18
18
  }
19
- export function isPastedFromGoogleSpreadSheets(html) {
19
+ function isPastedFromGoogleSpreadSheets(html) {
20
20
  return !!html && !!html.match(/data-sheets-.+=/gim);
21
21
  }
22
- export function isPastedFromPages(html) {
22
+ function isPastedFromPages(html) {
23
23
  return !!html && html.indexOf('content="Cocoa HTML Writer"') >= 0;
24
24
  }
25
- export function isPastedFromFabricEditor(html) {
25
+ function isPastedFromFabricEditor(html) {
26
26
  return !!html && html.indexOf('data-pm-slice="') >= 0;
27
27
  }
28
28
  export const isSingleLine = text => {
@@ -51,46 +51,6 @@ export function getPasteSource(event) {
51
51
  return 'uncategorized';
52
52
  }
53
53
 
54
- // TODO: Write JEST tests for this part
55
- export function isCode(str) {
56
- const lines = str.split(/\r?\n|\r/);
57
- if (3 > lines.length) {
58
- return false;
59
- }
60
- let weight = 0;
61
- lines.forEach(line => {
62
- // Ends with : or ;
63
- if (/[:;]$/.test(line)) {
64
- weight++;
65
- }
66
- // Contains second and third braces
67
- if (/[{}\[\]]/.test(line)) {
68
- weight++;
69
- }
70
- // Contains <tag> or </
71
- if (/<\w+>/.test(line) || /<\//.test(line)) {
72
- weight++;
73
- }
74
- // Contains () <- function calls
75
- if (/\(\)/.test(line)) {
76
- weight++;
77
- }
78
- // Contains a link
79
- if (/(^|[^!])\[(.*?)\]\((\S+)\)$/.test(line)) {
80
- weight--;
81
- }
82
- // New line starts with less than two chars. e.g- if, {, <, etc
83
- const token = /^(\s+)[a-zA-Z<{]{2,}/.exec(line);
84
- if (token && 2 <= token[1].length) {
85
- weight++;
86
- }
87
- if (/&&/.test(line)) {
88
- weight++;
89
- }
90
- });
91
- return 4 <= weight && weight >= 0.5 * lines.length;
92
- }
93
-
94
54
  // @see https://product-fabric.atlassian.net/browse/ED-3159
95
55
  // @see https://github.com/markdown-it/markdown-it/issues/38
96
56
  export function escapeLinks(text) {
@@ -68,10 +68,6 @@ export const IconPanel = Loadable({
68
68
  loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-panel" */'./panel').then(module => module.default),
69
69
  loading: () => null
70
70
  });
71
- export const IconCustomPanel = Loadable({
72
- loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-custon-panel" */'./custom-panel').then(module => module.default),
73
- loading: () => null
74
- });
75
71
  export const IconQuote = Loadable({
76
72
  loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-quote" */'./quote').then(module => module.default),
77
73
  loading: () => null
@@ -80,10 +76,6 @@ export const IconStatus = Loadable({
80
76
  loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-status" */'./status').then(module => module.default),
81
77
  loading: () => null
82
78
  });
83
- export const IconFallback = Loadable({
84
- loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-fallback" */'./fallback').then(module => module.default),
85
- loading: () => null
86
- });
87
79
  function importHeading(level) {
88
80
  switch (level) {
89
81
  case 1:
@@ -1,63 +1,16 @@
1
1
  import { NodeSelection, Selection, TextSelection } from 'prosemirror-state';
2
- import { findDomRefAtPos, removeNodeBefore } from 'prosemirror-utils';
2
+ import { findDomRefAtPos, findPositionOfNodeBefore, removeNodeBefore } from 'prosemirror-utils';
3
3
  import { ZERO_WIDTH_SPACE } from '@atlaskit/editor-common/utils';
4
4
  import { Direction, isBackward, isForward } from './direction';
5
5
  import { GapCursorSelection, Side } from './selection';
6
- import { getMediaNearPos, isTextBlockNearPos } from './utils';
6
+ import { isTextBlockNearPos } from './utils';
7
7
  import { isValidTargetNode } from './utils/is-valid-target-node';
8
8
  import { atTheBeginningOfDoc, atTheEndOfDoc } from '../../../utils/prosemirror/position';
9
9
  import { gapCursorPluginKey } from '../pm-plugins/gap-cursor-plugin-key';
10
10
  import { isPositionNearTableRow } from '../../../utils/table';
11
- const mapDirection = {
12
- [Direction.LEFT]: -1,
13
- [Direction.RIGHT]: 1,
14
- [Direction.UP]: -1,
15
- [Direction.DOWN]: 1,
16
- [Direction.BACKWARD]: -1,
17
- [Direction.FORWARD]: 1
18
- };
19
- function shouldHandleMediaGapCursor(dir, state) {
20
- const {
21
- doc,
22
- schema,
23
- selection
24
- } = state;
25
- let $pos = isBackward(dir) ? selection.$from : selection.$to;
26
- if (selection instanceof TextSelection) {
27
- // Should not use gap cursor if I am moving from a text selection into a media node
28
- if (dir === Direction.UP && !atTheBeginningOfDoc(state) || dir === Direction.DOWN && !atTheEndOfDoc(state)) {
29
- const media = getMediaNearPos(doc, $pos, schema, mapDirection[dir]);
30
- if (media) {
31
- return false;
32
- }
33
- }
34
-
35
- // Should not use gap cursor if I am moving from a text selection into a media node with layout wrap-right or wrap-left
36
- if (dir === Direction.LEFT || dir === Direction.RIGHT) {
37
- const media = getMediaNearPos(doc, $pos, schema, mapDirection[dir]);
38
- const {
39
- mediaSingle
40
- } = schema.nodes;
41
- if (media && media.type === mediaSingle && (media.attrs.layout === 'wrap-right' || media.attrs.layout === 'wrap-left')) {
42
- return false;
43
- }
44
- }
45
- }
46
- if (selection instanceof NodeSelection) {
47
- // Should not use gap cursor if I am moving left/right from media node with layout wrap right or wrap-left
48
- if (dir === Direction.LEFT || dir === Direction.RIGHT) {
49
- const maybeMedia = doc.nodeAt(selection.$from.pos);
50
- const {
51
- mediaSingle
52
- } = schema.nodes;
53
- if (maybeMedia && maybeMedia.type === mediaSingle && (maybeMedia.attrs.layout === 'wrap-right' || maybeMedia.attrs.layout === 'wrap-left')) {
54
- return false;
55
- }
56
- }
57
- }
58
- return true;
59
- }
11
+ import { isMediaNode, isNodeBeforeMediaNode } from '@atlaskit/editor-common/utils';
60
12
  export const shouldSkipGapCursor = (direction, state, $pos) => {
13
+ var _$pos$nodeBefore;
61
14
  const {
62
15
  doc,
63
16
  schema
@@ -67,13 +20,52 @@ export const shouldSkipGapCursor = (direction, state, $pos) => {
67
20
  if (atTheBeginningOfDoc(state)) {
68
21
  return false;
69
22
  }
70
- return isPositionNearTableRow($pos, schema, 'before') || isTextBlockNearPos(doc, schema, $pos, -1);
23
+ return isPositionNearTableRow($pos, schema, 'before') || isTextBlockNearPos(doc, schema, $pos, -1) || isNodeBeforeMediaNode($pos, state);
71
24
  case Direction.DOWN:
72
- return atTheEndOfDoc(state) || isTextBlockNearPos(doc, schema, $pos, 1) || isPositionNearTableRow($pos, schema, 'after');
25
+ return atTheEndOfDoc(state) || isTextBlockNearPos(doc, schema, $pos, 1) || isPositionNearTableRow($pos, schema, 'after') || ((_$pos$nodeBefore = $pos.nodeBefore) === null || _$pos$nodeBefore === void 0 ? void 0 : _$pos$nodeBefore.type.name) === 'text' && !$pos.nodeAfter // end of a paragraph
26
+ ;
27
+
73
28
  default:
74
29
  return false;
75
30
  }
76
31
  };
32
+
33
+ // These cases should be handled using the handleMediaGapCursor function
34
+ function shouldHandleMediaGapCursor(dir, state) {
35
+ var _selection$$from$node;
36
+ const {
37
+ selection
38
+ } = state;
39
+ const upArrowFromGapCursorIntoMedia = selection instanceof GapCursorSelection && dir === Direction.UP && selection.$from.nodeBefore && isMediaNode(selection.$from.nodeBefore);
40
+ const downArrowFromGapCursorIntoMediaGroup = selection instanceof GapCursorSelection && dir === Direction.DOWN && ((_selection$$from$node = selection.$from.nodeAfter) === null || _selection$$from$node === void 0 ? void 0 : _selection$$from$node.type.name) === 'mediaGroup';
41
+ return upArrowFromGapCursorIntoMedia || downArrowFromGapCursorIntoMediaGroup;
42
+ }
43
+
44
+ // Handle media gap cursor for up/down arrow into media nodes
45
+ // Should check this case by using shouldHandleMediaGapCursor first
46
+ function handleMediaGapCursor(dir, state) {
47
+ const {
48
+ selection,
49
+ tr
50
+ } = state;
51
+ let $pos = isBackward(dir) ? selection.$from : selection.$to;
52
+ if (dir === Direction.UP && selection.$from.nodeBefore && isMediaNode(selection.$from.nodeBefore)) {
53
+ var _tr$doc$nodeAt;
54
+ const nodeBeforePos = findPositionOfNodeBefore(tr.selection);
55
+ if (nodeBeforePos && selection.side === 'right' && ((_tr$doc$nodeAt = tr.doc.nodeAt(nodeBeforePos)) === null || _tr$doc$nodeAt === void 0 ? void 0 : _tr$doc$nodeAt.type.name) === 'mediaSingle') {
56
+ tr.setSelection(new NodeSelection(tr.doc.resolve(nodeBeforePos))).scrollIntoView();
57
+ } else if (nodeBeforePos || nodeBeforePos === 0) {
58
+ tr.setSelection(new GapCursorSelection(tr.doc.resolve(nodeBeforePos), Side.LEFT)).scrollIntoView();
59
+ }
60
+ }
61
+ if (dir === Direction.DOWN && selection.$from.nodeAfter) {
62
+ const nodeAfterPos = selection.side === 'right' ? $pos.pos : $pos.pos + selection.$from.nodeAfter.nodeSize;
63
+ if (nodeAfterPos) {
64
+ tr.setSelection(new GapCursorSelection(tr.doc.resolve(nodeAfterPos), Side.LEFT)).scrollIntoView();
65
+ }
66
+ }
67
+ return tr;
68
+ }
77
69
  export const arrow = (dir, endOfTextblock) => (state, dispatch, view) => {
78
70
  const {
79
71
  doc,
@@ -103,13 +95,21 @@ export const arrow = (dir, endOfTextblock) => (state, dispatch, view) => {
103
95
  if (selection.node.isInline) {
104
96
  return false;
105
97
  }
106
- if (dir === Direction.UP || dir === Direction.DOWN) {
98
+ if (dir === Direction.UP && !atTheBeginningOfDoc(state) && !isNodeBeforeMediaNode($pos, state) || dir === Direction.DOWN) {
107
99
  // We dont add gap cursor on node selections going up and down
100
+ // Except we do if we're going up for a block node which is the
101
+ // first node in the document OR the node before is a media node
108
102
  return false;
109
103
  }
110
104
  }
111
- if (!shouldHandleMediaGapCursor(dir, state)) {
112
- return false;
105
+
106
+ // Handle media gap cursor for up/down arrow into media nodes
107
+ if (shouldHandleMediaGapCursor(dir, state)) {
108
+ const updatedTr = handleMediaGapCursor(dir, state);
109
+ if (dispatch) {
110
+ dispatch(updatedTr);
111
+ }
112
+ return true;
113
113
  }
114
114
 
115
115
  // when jumping between block nodes at the same depth, we need to reverse cursor without changing ProseMirror position
@@ -1,4 +1,4 @@
1
- import { NodeSelection, Selection } from 'prosemirror-state';
1
+ import { NodeSelection } from 'prosemirror-state';
2
2
  export const mayGetStatusAtSelection = selection => {
3
3
  if (selection && selection instanceof NodeSelection) {
4
4
  const nodeSelection = selection;
@@ -8,15 +8,5 @@ export const mayGetStatusAtSelection = selection => {
8
8
  }
9
9
  return null;
10
10
  };
11
- export const mayGetStatusAtPos = (pos, doc) => {
12
- if (pos) {
13
- const node = doc.nodeAt(pos);
14
- if (node && node.type.name === 'status') {
15
- return node.attrs;
16
- }
17
- }
18
- return null;
19
- };
20
11
  export const isEmptyStatus = node => node && (node.text && node.text.trim().length === 0 || node.text === '');
21
- export const setSelectionNearPos = (tr, pos) => tr.setSelection(Selection.near(tr.doc.resolve(tr.mapping.map(pos))));
22
12
  export const setNodeSelectionNearPos = (tr, pos) => tr.setSelection(NodeSelection.create(tr.doc, tr.mapping.map(pos)));
@@ -5,7 +5,7 @@ import { DEFAULT_BORDER_COLOR } from '../../../ui/ColorPalette/Palettes/common';
5
5
  import { DEFAULT_COLOR, getActiveColor } from '../utils/color';
6
6
  import { getDisabledState } from '../utils/disabled';
7
7
  export { DEFAULT_COLOR } from '../utils/color';
8
- export function createInitialPluginState(editorState, pluginConfig) {
8
+ function createInitialPluginState(editorState, pluginConfig) {
9
9
  const defaultColor = (pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig.defaultColor) || DEFAULT_COLOR;
10
10
  const palette = [{
11
11
  value: defaultColor.color,
@@ -8,7 +8,7 @@ import { ArrowKeyNavigationType } from '@atlaskit/editor-common/ui-menu';
8
8
  import { hexToEditorTextPaletteColor } from '@atlaskit/editor-palette';
9
9
  import { akEditorMenuZIndex } from '@atlaskit/editor-shared-styles';
10
10
  import ExpandIcon from '@atlaskit/icon/glyph/chevron-down';
11
- import ColorPalette from '../../../../ui/ColorPalette';
11
+ import ColorPalette, { textPaletteTooltipMessages } from '../../../../ui/ColorPalette';
12
12
  import Dropdown from '../../../../ui/Dropdown';
13
13
  import { expandIconWrapperStyle, wrapperStyle, separatorStyles, triggerWrapperStyles } from '../../../../ui/styles';
14
14
  import ToolbarButton, { TOOLBAR_BUTTON } from '../../../../ui/ToolbarButton';
@@ -210,12 +210,14 @@ export class ToolbarTextColor extends React.Component {
210
210
  }, jsx("div", {
211
211
  "data-testid": "text-color-palette"
212
212
  }, jsx(ColorPalette, {
213
- palette: palette,
214
213
  onClick: color => this.changeTextColor(color, pluginState.disabled),
215
214
  selectedColor: pluginState.color,
216
- textPalette: true,
217
- hexToPaletteColor: hexToEditorTextPaletteColor,
218
- useSomewhatSemanticTextColorNames: useSomewhatSemanticTextColorNames
215
+ paletteOptions: {
216
+ palette,
217
+ hexToPaletteColor: hexToEditorTextPaletteColor,
218
+ paletteColorTooltipMessages: textPaletteTooltipMessages,
219
+ showSomewhatSemanticTooltips: useSomewhatSemanticTextColorNames
220
+ }
219
221
  }))), jsx("span", {
220
222
  css: separatorStyles
221
223
  }));
@@ -12,14 +12,19 @@ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, PUNC, SYMBOL } f
12
12
  function replaceTextUsingCaptureGroup(text) {
13
13
  return (state, match, start, end) => {
14
14
  const [, prefix,, suffix] = match;
15
- const replacement = (prefix || '') + text + (suffix || '');
15
+ const replacement = text + (suffix || '');
16
16
  let {
17
17
  tr,
18
18
  selection: {
19
19
  $to
20
20
  }
21
21
  } = state;
22
- tr.replaceWith(start, end, state.schema.text(replacement, $to.marks()));
22
+ const startPos = start + (prefix || '').length;
23
+ const safePos = Math.min(
24
+ // I know it is almost impossible to have a negative value at this point.
25
+ // But, this is JS #trustnoone
26
+ Math.max(startPos, 0), end);
27
+ tr.replaceWith(safePos, end, state.schema.text(replacement, $to.marks()));
23
28
  tr.setSelection(Selection.near(tr.doc.resolve(tr.selection.to)));
24
29
  return tr;
25
30
  };
@@ -67,6 +72,7 @@ function createSingleQuotesRules() {
67
72
  // apostrophe
68
73
  createReplacementRule('’', /(\w+)(')(\w+)$/)];
69
74
  }
75
+
70
76
  /**
71
77
  * Get replacement rules related to product
72
78
  */
@@ -1,24 +1,5 @@
1
1
  import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
2
2
  import { FORMATTING_MARK_TYPES, FORMATTING_NODE_TYPES } from './commands/clear-formatting';
3
- export const nodeLen = node => {
4
- return node.nodeType === 3 && node.nodeValue ? node.nodeValue.length : node.childNodes.length;
5
- };
6
- export const isIgnorable = dom => dom.pmViewDesc && dom.pmViewDesc.size === 0;
7
- export const isBlockNode = dom => {
8
- const desc = dom.pmViewDesc;
9
- return desc && desc.node && desc.node.isBlock;
10
- };
11
- export const domIndex = function (node) {
12
- if (node) {
13
- for (let index = 0;; index++) {
14
- node = node.previousSibling;
15
- if (!node) {
16
- return index;
17
- }
18
- }
19
- }
20
- return;
21
- };
22
3
  export const hasCode = (state, pos) => {
23
4
  const {
24
5
  code
@@ -2,11 +2,6 @@ export const TYPE_AHEAD_DECORATION_KEY = 'typeahead_decoration_key';
2
2
  export const TYPE_AHEAD_DECORATION_DATA_ATTRIBUTE = 'typeaheadDecoration';
3
3
  export const TYPE_AHEAD_POPUP_CONTENT_CLASS = 'fabric-editor-typeahead';
4
4
  export const TYPE_AHEAD_DECORATION_ELEMENT_ID = 'typeahaed_decoration_element_id';
5
- export let NavigationDirection;
6
- (function (NavigationDirection) {
7
- NavigationDirection[NavigationDirection["LEFT"] = -1] = "LEFT";
8
- NavigationDirection[NavigationDirection["RIGHT"] = 1] = "RIGHT";
9
- })(NavigationDirection || (NavigationDirection = {}));
10
5
  export let CloseSelectionOptions;
11
6
  (function (CloseSelectionOptions) {
12
7
  CloseSelectionOptions["BEFORE_TEXT_INSERTED"] = "BEFORE_TEXT_INSERTED";