@atlaskit/editor-core 166.0.4 → 167.0.2

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 (498) hide show
  1. package/.eslintrc.js +46 -1
  2. package/CHANGELOG.md +99 -0
  3. package/dist/cjs/actions/index.js +26 -2
  4. package/dist/cjs/create-editor/ReactEditorView.js +2 -0
  5. package/dist/cjs/create-editor/create-plugins-list.js +1 -2
  6. package/dist/cjs/editor.js +5 -2
  7. package/dist/cjs/keymaps/index.js +5 -1
  8. package/dist/cjs/labs/next/ContentComponents.js +8 -4
  9. package/dist/cjs/labs/next/full-page.js +14 -8
  10. package/dist/cjs/nodeviews/getInlineNodeViewProducer.js +7 -3
  11. package/dist/cjs/nodeviews/getInlineNodeViewProducer.styles.js +3 -1
  12. package/dist/cjs/plugins/alignment/ui/ToolbarAlignment/styles.js +3 -1
  13. package/dist/cjs/plugins/analytics/types/enums.js +3 -0
  14. package/dist/cjs/plugins/base/index.js +8 -17
  15. package/dist/cjs/plugins/base/pm-plugins/better-type-history.js +3 -12
  16. package/dist/cjs/plugins/base/pm-plugins/inline-cursor-target.js +71 -16
  17. package/dist/cjs/plugins/block-type/commands/block-type.js +32 -22
  18. package/dist/cjs/plugins/block-type/ui/ToolbarBlockType/styled.js +4 -2
  19. package/dist/cjs/plugins/breakout/ui/LayoutButton.js +4 -11
  20. package/dist/cjs/plugins/card/styles.js +1 -1
  21. package/dist/cjs/plugins/card/ui/LinkToolbarIconDropdown.js +2 -2
  22. package/dist/cjs/plugins/code-block/actions.js +36 -2
  23. package/dist/cjs/plugins/code-block/nodeviews/code-block.js +70 -1
  24. package/dist/cjs/plugins/code-block/pm-plugins/actions.js +2 -1
  25. package/dist/cjs/plugins/code-block/pm-plugins/main.js +46 -8
  26. package/dist/cjs/plugins/code-block/styles.js +28 -24
  27. package/dist/cjs/plugins/collab-edit/styles.js +4 -2
  28. package/dist/cjs/plugins/collab-edit/ui/styles.js +4 -2
  29. package/dist/cjs/plugins/collab-edit/utils.js +1 -0
  30. package/dist/cjs/plugins/date/ui/DatePicker/index.js +3 -1
  31. package/dist/cjs/plugins/expand/ui/styles.js +16 -14
  32. package/dist/cjs/plugins/extension/commands.js +3 -2
  33. package/dist/cjs/plugins/extension/context-panel.js +21 -7
  34. package/dist/cjs/plugins/extension/ui/Extension/Extension/styles.js +6 -4
  35. package/dist/cjs/plugins/extension/ui/Extension/InlineExtension/styles.js +3 -1
  36. package/dist/cjs/plugins/extension/ui/Extension/styles.js +7 -5
  37. package/dist/cjs/plugins/extension/ui/SaveIndicator/SaveIndicator.js +4 -2
  38. package/dist/cjs/plugins/fake-text-cursor/styles.js +3 -1
  39. package/dist/cjs/plugins/feature-flags-context/feature-flags-from-props.js +3 -2
  40. package/dist/cjs/plugins/find-replace/styles.js +2 -6
  41. package/dist/cjs/plugins/find-replace/ui/styles.js +4 -2
  42. package/dist/cjs/plugins/floating-toolbar/ui/DropdownMenu.js +3 -1
  43. package/dist/cjs/plugins/floating-toolbar/ui/EditorEmojiAddIcon.js +3 -1
  44. package/dist/cjs/plugins/floating-toolbar/ui/Separator.js +3 -1
  45. package/dist/cjs/plugins/floating-toolbar/ui/Toolbar.js +6 -4
  46. package/dist/cjs/plugins/floating-toolbar/ui/styles.js +12 -10
  47. package/dist/cjs/plugins/grid/styles.js +3 -1
  48. package/dist/cjs/plugins/help-dialog/ui/styles.js +9 -7
  49. package/dist/cjs/plugins/hyperlink/pm-plugins/input-rule.js +23 -1
  50. package/dist/cjs/plugins/hyperlink/pm-plugins/keymap.js +10 -1
  51. package/dist/cjs/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +5 -3
  52. package/dist/cjs/plugins/hyperlink/utils.js +53 -2
  53. package/dist/cjs/plugins/insert-block/index.js +1 -1
  54. package/dist/cjs/plugins/jira-issue/nodeviews/jira-issue.js +4 -2
  55. package/dist/cjs/plugins/layout/styles.js +1 -1
  56. package/dist/cjs/plugins/media/commands/helpers.js +10 -9
  57. package/dist/cjs/plugins/media/nodeviews/mediaInline.js +23 -4
  58. package/dist/cjs/plugins/media/nodeviews/mediaNodeView/media.js +6 -0
  59. package/dist/cjs/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -3
  60. package/dist/cjs/plugins/media/pm-plugins/main.js +1 -0
  61. package/dist/cjs/plugins/media/styles.js +1 -1
  62. package/dist/cjs/plugins/media/ui/CaptionPlaceholder/index.js +3 -1
  63. package/dist/cjs/plugins/media/ui/Media/DropPlaceholder.js +4 -2
  64. package/dist/cjs/plugins/media/ui/MediaLinkingToolbar.js +3 -1
  65. package/dist/cjs/plugins/mentions/styles.js +3 -1
  66. package/dist/cjs/plugins/mentions/ui/InviteItem/index.js +3 -1
  67. package/dist/cjs/plugins/mentions/ui/InviteItem/styles.js +4 -2
  68. package/dist/cjs/plugins/panel/index.js +1 -0
  69. package/dist/cjs/plugins/panel/nodeviews/panel.js +4 -1
  70. package/dist/cjs/plugins/panel/pm-plugins/keymaps.js +21 -3
  71. package/dist/cjs/plugins/paste/handlers.js +23 -0
  72. package/dist/cjs/plugins/paste/linkify-md-plugin.js +7 -0
  73. package/dist/cjs/plugins/paste/pm-plugins/analytics.js +9 -1
  74. package/dist/cjs/plugins/paste/pm-plugins/main.js +27 -1
  75. package/dist/cjs/plugins/placeholder/index.js +15 -3
  76. package/dist/cjs/plugins/placeholder/styles.js +3 -1
  77. package/dist/cjs/plugins/placeholder-text/styles.js +3 -1
  78. package/dist/cjs/plugins/quick-insert/search.js +3 -1
  79. package/dist/cjs/plugins/selection/gap-cursor/styles.js +1 -1
  80. package/dist/cjs/plugins/selection/pm-plugins/gap-cursor-main.js +2 -2
  81. package/dist/cjs/plugins/status/ui/statusPicker.js +3 -3
  82. package/dist/cjs/plugins/table/index.js +14 -4
  83. package/dist/cjs/plugins/table/nodeviews/TableComponent.js +6 -6
  84. package/dist/cjs/plugins/table/nodeviews/table.js +9 -4
  85. package/dist/cjs/plugins/table/pm-plugins/main.js +1 -4
  86. package/dist/cjs/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +118 -0
  87. package/dist/cjs/plugins/table/pm-plugins/table-resizing/event-handlers.js +2 -4
  88. package/dist/cjs/plugins/table/pm-plugins/table-resizing/plugin.js +2 -5
  89. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/misc.js +4 -8
  90. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -3
  91. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +0 -3
  92. package/dist/cjs/plugins/table/transforms/column-width.js +1 -2
  93. package/dist/cjs/plugins/table/transforms/fix-tables.js +1 -3
  94. package/dist/cjs/plugins/table/ui/FloatingContextualButton/styles.js +4 -1
  95. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/styles.js +3 -1
  96. package/dist/cjs/plugins/table/ui/common-styles.js +4 -2
  97. package/dist/cjs/plugins/table/ui/consts.js +14 -11
  98. package/dist/cjs/plugins/table/ui/ui-styles.js +17 -10
  99. package/dist/cjs/plugins/table/utils/decoration.js +3 -4
  100. package/dist/cjs/plugins/table/utils/paste.js +9 -9
  101. package/dist/cjs/plugins/text-formatting/pm-plugins/input-rule.js +1 -1
  102. package/dist/cjs/plugins/type-ahead/index.js +4 -3
  103. package/dist/cjs/plugins/type-ahead/pm-plugins/decorations.js +3 -1
  104. package/dist/cjs/plugins/type-ahead/ui/TypeAheadList.js +4 -4
  105. package/dist/cjs/plugins/type-ahead/ui/TypeAheadListItem.js +11 -9
  106. package/dist/cjs/plugins/type-ahead/ui/TypeAheadPopup.js +73 -3
  107. package/dist/cjs/plugins/unsupported-content/styles.js +1 -1
  108. package/dist/cjs/ui/Addon/Dropdown/styles.js +3 -1
  109. package/dist/cjs/ui/Addon/DropdownItem/styles.js +3 -1
  110. package/dist/cjs/ui/Appearance/Chromeless.js +2 -1
  111. package/dist/cjs/ui/Appearance/Comment/Comment.js +10 -3
  112. package/dist/cjs/ui/Appearance/Comment/Toolbar.js +4 -2
  113. package/dist/cjs/ui/Appearance/FullPage/FullPage.js +5 -2
  114. package/dist/cjs/ui/Appearance/FullPage/FullPageContentArea.js +2 -1
  115. package/dist/cjs/ui/Appearance/FullPage/FullPageToolbar.js +12 -11
  116. package/dist/cjs/ui/Appearance/FullPage/MainToolbar.js +6 -3
  117. package/dist/cjs/ui/ChromeCollapsed/styles.js +1 -1
  118. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +21 -14
  119. package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +2 -0
  120. package/dist/cjs/ui/ConfigPanel/Fields/CheckboxGroup.js +3 -1
  121. package/dist/cjs/ui/ConfigPanel/Fields/Expand.js +3 -1
  122. package/dist/cjs/ui/ConfigPanel/Fields/Fieldset.js +3 -1
  123. package/dist/cjs/ui/ConfigPanel/Fields/common/RequiredIndicator.js +3 -1
  124. package/dist/cjs/ui/ConfigPanel/Header.js +4 -2
  125. package/dist/cjs/ui/ConfigPanel/NestedForms/RemovableField.js +4 -8
  126. package/dist/cjs/ui/ContentStyles/index.js +4 -2
  127. package/dist/cjs/ui/ContextPanel/index.js +3 -1
  128. package/dist/cjs/ui/DropdownMenu/index.js +5 -0
  129. package/dist/cjs/ui/ElementBrowser/InsertMenu.js +6 -4
  130. package/dist/cjs/ui/ElementBrowser/ModalElementBrowser.js +4 -2
  131. package/dist/cjs/ui/ElementBrowser/components/CategoryList.js +4 -2
  132. package/dist/cjs/ui/ElementBrowser/components/ElementList/ElementList.js +12 -5
  133. package/dist/cjs/ui/ElementBrowser/components/ElementList/EmptyState.js +3 -1
  134. package/dist/cjs/ui/ElementBrowser/components/ElementSearch.js +3 -1
  135. package/dist/cjs/ui/ElementBrowser/constants.js +3 -1
  136. package/dist/cjs/ui/FloatingToolbar/styles.js +2 -2
  137. package/dist/cjs/ui/LinkSearch/LinkSearchListItem.js +5 -3
  138. package/dist/cjs/ui/PanelTextInput/styles.js +3 -1
  139. package/dist/cjs/ui/PluginSlot/index.js +7 -4
  140. package/dist/cjs/ui/Toolbar/ToolbarInner.js +2 -1
  141. package/dist/cjs/ui/Toolbar/ToolbarWithSizeDetector.js +5 -2
  142. package/dist/cjs/ui/ToolbarFeedback/styles.js +5 -3
  143. package/dist/cjs/ui/WithFlash/index.js +4 -2
  144. package/dist/cjs/ui/styles.js +6 -4
  145. package/dist/cjs/utils/document.js +62 -6
  146. package/dist/cjs/utils/filter/privacy-filter.js +2 -2
  147. package/dist/cjs/utils/step.js +17 -1
  148. package/dist/cjs/version-wrapper.js +1 -1
  149. package/dist/cjs/version.json +1 -1
  150. package/dist/es2019/actions/index.js +25 -1
  151. package/dist/es2019/create-editor/ReactEditorView.js +2 -0
  152. package/dist/es2019/create-editor/create-plugins-list.js +1 -2
  153. package/dist/es2019/editor.js +5 -2
  154. package/dist/es2019/keymaps/index.js +5 -1
  155. package/dist/es2019/labs/next/ContentComponents.js +7 -2
  156. package/dist/es2019/labs/next/full-page.js +11 -8
  157. package/dist/es2019/nodeviews/getInlineNodeViewProducer.js +4 -3
  158. package/dist/es2019/nodeviews/getInlineNodeViewProducer.styles.js +16 -4
  159. package/dist/es2019/plugins/alignment/ui/ToolbarAlignment/styles.js +2 -1
  160. package/dist/es2019/plugins/analytics/types/enums.js +3 -0
  161. package/dist/es2019/plugins/base/index.js +6 -15
  162. package/dist/es2019/plugins/base/pm-plugins/better-type-history.js +1 -11
  163. package/dist/es2019/plugins/base/pm-plugins/inline-cursor-target.js +72 -17
  164. package/dist/es2019/plugins/block-type/commands/block-type.js +25 -16
  165. package/dist/es2019/plugins/block-type/ui/ToolbarBlockType/styled.js +3 -2
  166. package/dist/es2019/plugins/breakout/ui/LayoutButton.js +6 -10
  167. package/dist/es2019/plugins/card/styles.js +1 -1
  168. package/dist/es2019/plugins/card/ui/LinkToolbarIconDropdown.js +2 -2
  169. package/dist/es2019/plugins/code-block/actions.js +32 -0
  170. package/dist/es2019/plugins/code-block/nodeviews/code-block.js +61 -1
  171. package/dist/es2019/plugins/code-block/pm-plugins/actions.js +2 -1
  172. package/dist/es2019/plugins/code-block/pm-plugins/main.js +37 -3
  173. package/dist/es2019/plugins/code-block/styles.js +30 -27
  174. package/dist/es2019/plugins/collab-edit/styles.js +3 -2
  175. package/dist/es2019/plugins/collab-edit/ui/styles.js +4 -3
  176. package/dist/es2019/plugins/collab-edit/utils.js +1 -0
  177. package/dist/es2019/plugins/date/ui/DatePicker/index.js +3 -2
  178. package/dist/es2019/plugins/expand/ui/styles.js +15 -14
  179. package/dist/es2019/plugins/extension/commands.js +3 -2
  180. package/dist/es2019/plugins/extension/context-panel.js +11 -3
  181. package/dist/es2019/plugins/extension/ui/Extension/Extension/styles.js +5 -4
  182. package/dist/es2019/plugins/extension/ui/Extension/InlineExtension/styles.js +2 -1
  183. package/dist/es2019/plugins/extension/ui/Extension/styles.js +7 -6
  184. package/dist/es2019/plugins/extension/ui/SaveIndicator/SaveIndicator.js +4 -4
  185. package/dist/es2019/plugins/fake-text-cursor/styles.js +3 -2
  186. package/dist/es2019/plugins/feature-flags-context/feature-flags-from-props.js +3 -2
  187. package/dist/es2019/plugins/find-replace/styles.js +4 -4
  188. package/dist/es2019/plugins/find-replace/ui/styles.js +3 -2
  189. package/dist/es2019/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  190. package/dist/es2019/plugins/floating-toolbar/ui/EditorEmojiAddIcon.js +2 -1
  191. package/dist/es2019/plugins/floating-toolbar/ui/Separator.js +2 -1
  192. package/dist/es2019/plugins/floating-toolbar/ui/Toolbar.js +4 -4
  193. package/dist/es2019/plugins/floating-toolbar/ui/styles.js +11 -10
  194. package/dist/es2019/plugins/grid/styles.js +4 -2
  195. package/dist/es2019/plugins/help-dialog/ui/styles.js +10 -9
  196. package/dist/es2019/plugins/hyperlink/pm-plugins/input-rule.js +24 -2
  197. package/dist/es2019/plugins/hyperlink/pm-plugins/keymap.js +9 -1
  198. package/dist/es2019/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +5 -4
  199. package/dist/es2019/plugins/hyperlink/utils.js +43 -2
  200. package/dist/es2019/plugins/insert-block/index.js +1 -1
  201. package/dist/es2019/plugins/jira-issue/nodeviews/jira-issue.js +6 -5
  202. package/dist/es2019/plugins/layout/styles.js +10 -7
  203. package/dist/es2019/plugins/media/commands/helpers.js +6 -8
  204. package/dist/es2019/plugins/media/nodeviews/mediaInline.js +21 -5
  205. package/dist/es2019/plugins/media/nodeviews/mediaNodeView/media.js +7 -0
  206. package/dist/es2019/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -4
  207. package/dist/es2019/plugins/media/pm-plugins/main.js +2 -0
  208. package/dist/es2019/plugins/media/styles.js +3 -3
  209. package/dist/es2019/plugins/media/ui/CaptionPlaceholder/index.js +2 -1
  210. package/dist/es2019/plugins/media/ui/Media/DropPlaceholder.js +4 -3
  211. package/dist/es2019/plugins/media/ui/MediaLinkingToolbar.js +2 -1
  212. package/dist/es2019/plugins/mentions/styles.js +5 -4
  213. package/dist/es2019/plugins/mentions/ui/InviteItem/index.js +2 -1
  214. package/dist/es2019/plugins/mentions/ui/InviteItem/styles.js +3 -2
  215. package/dist/es2019/plugins/panel/index.js +1 -0
  216. package/dist/es2019/plugins/panel/nodeviews/panel.js +4 -1
  217. package/dist/es2019/plugins/panel/pm-plugins/keymaps.js +22 -4
  218. package/dist/es2019/plugins/paste/handlers.js +23 -0
  219. package/dist/es2019/plugins/paste/linkify-md-plugin.js +7 -1
  220. package/dist/es2019/plugins/paste/pm-plugins/analytics.js +4 -1
  221. package/dist/es2019/plugins/paste/pm-plugins/main.js +27 -2
  222. package/dist/es2019/plugins/placeholder/index.js +12 -1
  223. package/dist/es2019/plugins/placeholder/styles.js +3 -1
  224. package/dist/es2019/plugins/placeholder-text/styles.js +5 -4
  225. package/dist/es2019/plugins/quick-insert/search.js +1 -1
  226. package/dist/es2019/plugins/selection/gap-cursor/styles.js +9 -9
  227. package/dist/es2019/plugins/selection/pm-plugins/gap-cursor-main.js +2 -2
  228. package/dist/es2019/plugins/status/ui/statusPicker.js +3 -3
  229. package/dist/es2019/plugins/table/index.js +13 -4
  230. package/dist/es2019/plugins/table/nodeviews/TableComponent.js +6 -6
  231. package/dist/es2019/plugins/table/nodeviews/table.js +6 -2
  232. package/dist/es2019/plugins/table/pm-plugins/main.js +1 -4
  233. package/dist/es2019/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +106 -0
  234. package/dist/es2019/plugins/table/pm-plugins/table-resizing/event-handlers.js +2 -4
  235. package/dist/es2019/plugins/table/pm-plugins/table-resizing/plugin.js +2 -4
  236. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/misc.js +3 -7
  237. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -3
  238. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +0 -3
  239. package/dist/es2019/plugins/table/transforms/column-width.js +1 -2
  240. package/dist/es2019/plugins/table/transforms/fix-tables.js +1 -3
  241. package/dist/es2019/plugins/table/ui/FloatingContextualButton/styles.js +4 -2
  242. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/styles.js +4 -3
  243. package/dist/es2019/plugins/table/ui/common-styles.js +29 -27
  244. package/dist/es2019/plugins/table/ui/consts.js +15 -12
  245. package/dist/es2019/plugins/table/ui/ui-styles.js +28 -23
  246. package/dist/es2019/plugins/table/utils/decoration.js +1 -4
  247. package/dist/es2019/plugins/table/utils/paste.js +9 -9
  248. package/dist/es2019/plugins/text-formatting/pm-plugins/input-rule.js +1 -1
  249. package/dist/es2019/plugins/type-ahead/index.js +4 -3
  250. package/dist/es2019/plugins/type-ahead/pm-plugins/decorations.js +2 -1
  251. package/dist/es2019/plugins/type-ahead/ui/TypeAheadList.js +4 -4
  252. package/dist/es2019/plugins/type-ahead/ui/TypeAheadListItem.js +10 -9
  253. package/dist/es2019/plugins/type-ahead/ui/TypeAheadPopup.js +64 -6
  254. package/dist/es2019/plugins/unsupported-content/styles.js +1 -1
  255. package/dist/es2019/ui/Addon/Dropdown/styles.js +3 -2
  256. package/dist/es2019/ui/Addon/DropdownItem/styles.js +3 -2
  257. package/dist/es2019/ui/Appearance/Chromeless.js +2 -1
  258. package/dist/es2019/ui/Appearance/Comment/Comment.js +9 -4
  259. package/dist/es2019/ui/Appearance/Comment/Toolbar.js +4 -2
  260. package/dist/es2019/ui/Appearance/FullPage/FullPage.js +6 -2
  261. package/dist/es2019/ui/Appearance/FullPage/FullPageContentArea.js +2 -1
  262. package/dist/es2019/ui/Appearance/FullPage/FullPageToolbar.js +12 -11
  263. package/dist/es2019/ui/Appearance/FullPage/MainToolbar.js +7 -3
  264. package/dist/es2019/ui/ChromeCollapsed/styles.js +4 -3
  265. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +10 -2
  266. package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +2 -0
  267. package/dist/es2019/ui/ConfigPanel/ErrorMessage/ErrorImage.js +3 -0
  268. package/dist/es2019/ui/ConfigPanel/Fields/CheckboxGroup.js +2 -1
  269. package/dist/es2019/ui/ConfigPanel/Fields/Expand.js +2 -1
  270. package/dist/es2019/ui/ConfigPanel/Fields/Fieldset.js +2 -1
  271. package/dist/es2019/ui/ConfigPanel/Fields/common/RequiredIndicator.js +2 -1
  272. package/dist/es2019/ui/ConfigPanel/Header.js +3 -2
  273. package/dist/es2019/ui/ConfigPanel/NestedForms/RemovableField.js +4 -3
  274. package/dist/es2019/ui/ContentStyles/index.js +3 -2
  275. package/dist/es2019/ui/ContextPanel/index.js +2 -1
  276. package/dist/es2019/ui/DropdownMenu/index.js +5 -0
  277. package/dist/es2019/ui/ElementBrowser/InsertMenu.js +6 -3
  278. package/dist/es2019/ui/ElementBrowser/ModalElementBrowser.js +3 -2
  279. package/dist/es2019/ui/ElementBrowser/components/CategoryList.js +3 -2
  280. package/dist/es2019/ui/ElementBrowser/components/ElementList/ElementList.js +12 -5
  281. package/dist/es2019/ui/ElementBrowser/components/ElementList/EmptyState.js +2 -1
  282. package/dist/es2019/ui/ElementBrowser/components/ElementList/NotFoundIllustration.js +3 -0
  283. package/dist/es2019/ui/ElementBrowser/components/ElementSearch.js +2 -1
  284. package/dist/es2019/ui/ElementBrowser/constants.js +3 -1
  285. package/dist/es2019/ui/FloatingToolbar/styles.js +4 -4
  286. package/dist/es2019/ui/LinkSearch/LinkSearchListItem.js +4 -3
  287. package/dist/es2019/ui/PanelTextInput/styles.js +5 -5
  288. package/dist/es2019/ui/PluginSlot/index.js +7 -4
  289. package/dist/es2019/ui/Toolbar/ToolbarInner.js +2 -1
  290. package/dist/es2019/ui/Toolbar/ToolbarWithSizeDetector.js +4 -2
  291. package/dist/es2019/ui/ToolbarFeedback/styles.js +5 -4
  292. package/dist/es2019/ui/WithFlash/index.js +4 -3
  293. package/dist/es2019/ui/styles.js +10 -9
  294. package/dist/es2019/utils/document.js +58 -5
  295. package/dist/es2019/utils/filter/privacy-filter.js +1 -1
  296. package/dist/es2019/utils/step.js +12 -1
  297. package/dist/es2019/version-wrapper.js +1 -1
  298. package/dist/es2019/version.json +1 -1
  299. package/dist/esm/actions/index.js +26 -1
  300. package/dist/esm/create-editor/ReactEditorView.js +2 -0
  301. package/dist/esm/create-editor/create-plugins-list.js +1 -2
  302. package/dist/esm/editor.js +5 -2
  303. package/dist/esm/keymaps/index.js +5 -1
  304. package/dist/esm/labs/next/ContentComponents.js +8 -4
  305. package/dist/esm/labs/next/full-page.js +11 -8
  306. package/dist/esm/nodeviews/getInlineNodeViewProducer.js +4 -3
  307. package/dist/esm/nodeviews/getInlineNodeViewProducer.styles.js +3 -2
  308. package/dist/esm/plugins/alignment/ui/ToolbarAlignment/styles.js +2 -1
  309. package/dist/esm/plugins/analytics/types/enums.js +3 -0
  310. package/dist/esm/plugins/base/index.js +8 -17
  311. package/dist/esm/plugins/base/pm-plugins/better-type-history.js +1 -11
  312. package/dist/esm/plugins/base/pm-plugins/inline-cursor-target.js +72 -17
  313. package/dist/esm/plugins/block-type/commands/block-type.js +31 -22
  314. package/dist/esm/plugins/block-type/ui/ToolbarBlockType/styled.js +3 -2
  315. package/dist/esm/plugins/breakout/ui/LayoutButton.js +3 -5
  316. package/dist/esm/plugins/card/styles.js +1 -1
  317. package/dist/esm/plugins/card/ui/LinkToolbarIconDropdown.js +2 -2
  318. package/dist/esm/plugins/code-block/actions.js +28 -0
  319. package/dist/esm/plugins/code-block/nodeviews/code-block.js +67 -1
  320. package/dist/esm/plugins/code-block/pm-plugins/actions.js +2 -1
  321. package/dist/esm/plugins/code-block/pm-plugins/main.js +39 -3
  322. package/dist/esm/plugins/code-block/styles.js +27 -23
  323. package/dist/esm/plugins/collab-edit/styles.js +3 -2
  324. package/dist/esm/plugins/collab-edit/ui/styles.js +3 -2
  325. package/dist/esm/plugins/collab-edit/utils.js +2 -0
  326. package/dist/esm/plugins/date/ui/DatePicker/index.js +2 -1
  327. package/dist/esm/plugins/expand/ui/styles.js +15 -14
  328. package/dist/esm/plugins/extension/commands.js +3 -2
  329. package/dist/esm/plugins/extension/context-panel.js +21 -7
  330. package/dist/esm/plugins/extension/ui/Extension/Extension/styles.js +5 -4
  331. package/dist/esm/plugins/extension/ui/Extension/InlineExtension/styles.js +2 -1
  332. package/dist/esm/plugins/extension/ui/Extension/styles.js +6 -5
  333. package/dist/esm/plugins/extension/ui/SaveIndicator/SaveIndicator.js +3 -2
  334. package/dist/esm/plugins/fake-text-cursor/styles.js +2 -1
  335. package/dist/esm/plugins/feature-flags-context/feature-flags-from-props.js +3 -2
  336. package/dist/esm/plugins/find-replace/styles.js +3 -3
  337. package/dist/esm/plugins/find-replace/ui/styles.js +3 -2
  338. package/dist/esm/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  339. package/dist/esm/plugins/floating-toolbar/ui/EditorEmojiAddIcon.js +2 -1
  340. package/dist/esm/plugins/floating-toolbar/ui/Separator.js +2 -1
  341. package/dist/esm/plugins/floating-toolbar/ui/Toolbar.js +5 -4
  342. package/dist/esm/plugins/floating-toolbar/ui/styles.js +11 -10
  343. package/dist/esm/plugins/grid/styles.js +2 -1
  344. package/dist/esm/plugins/help-dialog/ui/styles.js +8 -7
  345. package/dist/esm/plugins/hyperlink/pm-plugins/input-rule.js +24 -2
  346. package/dist/esm/plugins/hyperlink/pm-plugins/keymap.js +9 -1
  347. package/dist/esm/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +4 -3
  348. package/dist/esm/plugins/hyperlink/utils.js +44 -2
  349. package/dist/esm/plugins/insert-block/index.js +1 -1
  350. package/dist/esm/plugins/jira-issue/nodeviews/jira-issue.js +3 -2
  351. package/dist/esm/plugins/layout/styles.js +1 -1
  352. package/dist/esm/plugins/media/commands/helpers.js +6 -8
  353. package/dist/esm/plugins/media/nodeviews/mediaInline.js +22 -4
  354. package/dist/esm/plugins/media/nodeviews/mediaNodeView/media.js +7 -0
  355. package/dist/esm/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +4 -3
  356. package/dist/esm/plugins/media/pm-plugins/main.js +2 -0
  357. package/dist/esm/plugins/media/styles.js +1 -1
  358. package/dist/esm/plugins/media/ui/CaptionPlaceholder/index.js +2 -1
  359. package/dist/esm/plugins/media/ui/Media/DropPlaceholder.js +3 -2
  360. package/dist/esm/plugins/media/ui/MediaLinkingToolbar.js +2 -1
  361. package/dist/esm/plugins/mentions/styles.js +2 -1
  362. package/dist/esm/plugins/mentions/ui/InviteItem/index.js +2 -1
  363. package/dist/esm/plugins/mentions/ui/InviteItem/styles.js +3 -2
  364. package/dist/esm/plugins/panel/index.js +1 -0
  365. package/dist/esm/plugins/panel/nodeviews/panel.js +4 -1
  366. package/dist/esm/plugins/panel/pm-plugins/keymaps.js +22 -4
  367. package/dist/esm/plugins/paste/handlers.js +21 -0
  368. package/dist/esm/plugins/paste/linkify-md-plugin.js +7 -1
  369. package/dist/esm/plugins/paste/pm-plugins/analytics.js +6 -1
  370. package/dist/esm/plugins/paste/pm-plugins/main.js +27 -2
  371. package/dist/esm/plugins/placeholder/index.js +12 -1
  372. package/dist/esm/plugins/placeholder/styles.js +2 -1
  373. package/dist/esm/plugins/placeholder-text/styles.js +2 -1
  374. package/dist/esm/plugins/quick-insert/search.js +3 -1
  375. package/dist/esm/plugins/selection/gap-cursor/styles.js +1 -1
  376. package/dist/esm/plugins/selection/pm-plugins/gap-cursor-main.js +2 -2
  377. package/dist/esm/plugins/status/ui/statusPicker.js +2 -2
  378. package/dist/esm/plugins/table/index.js +13 -4
  379. package/dist/esm/plugins/table/nodeviews/TableComponent.js +6 -6
  380. package/dist/esm/plugins/table/nodeviews/table.js +6 -2
  381. package/dist/esm/plugins/table/pm-plugins/main.js +1 -4
  382. package/dist/esm/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.js +102 -0
  383. package/dist/esm/plugins/table/pm-plugins/table-resizing/event-handlers.js +2 -4
  384. package/dist/esm/plugins/table/pm-plugins/table-resizing/plugin.js +2 -5
  385. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/misc.js +4 -8
  386. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -3
  387. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/scale-table.js +0 -3
  388. package/dist/esm/plugins/table/transforms/column-width.js +1 -2
  389. package/dist/esm/plugins/table/transforms/fix-tables.js +1 -3
  390. package/dist/esm/plugins/table/ui/FloatingContextualButton/styles.js +3 -1
  391. package/dist/esm/plugins/table/ui/FloatingContextualMenu/styles.js +2 -1
  392. package/dist/esm/plugins/table/ui/common-styles.js +4 -2
  393. package/dist/esm/plugins/table/ui/consts.js +15 -12
  394. package/dist/esm/plugins/table/ui/ui-styles.js +15 -10
  395. package/dist/esm/plugins/table/utils/decoration.js +3 -4
  396. package/dist/esm/plugins/table/utils/paste.js +9 -9
  397. package/dist/esm/plugins/text-formatting/pm-plugins/input-rule.js +1 -1
  398. package/dist/esm/plugins/type-ahead/index.js +4 -3
  399. package/dist/esm/plugins/type-ahead/pm-plugins/decorations.js +2 -1
  400. package/dist/esm/plugins/type-ahead/ui/TypeAheadList.js +4 -4
  401. package/dist/esm/plugins/type-ahead/ui/TypeAheadListItem.js +10 -9
  402. package/dist/esm/plugins/type-ahead/ui/TypeAheadPopup.js +71 -5
  403. package/dist/esm/plugins/unsupported-content/styles.js +1 -1
  404. package/dist/esm/ui/Addon/Dropdown/styles.js +2 -1
  405. package/dist/esm/ui/Addon/DropdownItem/styles.js +2 -1
  406. package/dist/esm/ui/Appearance/Chromeless.js +2 -1
  407. package/dist/esm/ui/Appearance/Comment/Comment.js +10 -3
  408. package/dist/esm/ui/Appearance/Comment/Toolbar.js +3 -2
  409. package/dist/esm/ui/Appearance/FullPage/FullPage.js +6 -2
  410. package/dist/esm/ui/Appearance/FullPage/FullPageContentArea.js +2 -1
  411. package/dist/esm/ui/Appearance/FullPage/FullPageToolbar.js +12 -11
  412. package/dist/esm/ui/Appearance/FullPage/MainToolbar.js +5 -3
  413. package/dist/esm/ui/ChromeCollapsed/styles.js +1 -1
  414. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +21 -14
  415. package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +2 -0
  416. package/dist/esm/ui/ConfigPanel/ErrorMessage/ErrorImage.js +3 -0
  417. package/dist/esm/ui/ConfigPanel/Fields/CheckboxGroup.js +2 -1
  418. package/dist/esm/ui/ConfigPanel/Fields/Expand.js +2 -1
  419. package/dist/esm/ui/ConfigPanel/Fields/Fieldset.js +2 -1
  420. package/dist/esm/ui/ConfigPanel/Fields/common/RequiredIndicator.js +2 -1
  421. package/dist/esm/ui/ConfigPanel/Header.js +3 -2
  422. package/dist/esm/ui/ConfigPanel/NestedForms/RemovableField.js +3 -2
  423. package/dist/esm/ui/ContentStyles/index.js +3 -2
  424. package/dist/esm/ui/ContextPanel/index.js +2 -1
  425. package/dist/esm/ui/DropdownMenu/index.js +5 -0
  426. package/dist/esm/ui/ElementBrowser/InsertMenu.js +5 -4
  427. package/dist/esm/ui/ElementBrowser/ModalElementBrowser.js +3 -2
  428. package/dist/esm/ui/ElementBrowser/components/CategoryList.js +3 -2
  429. package/dist/esm/ui/ElementBrowser/components/ElementList/ElementList.js +11 -5
  430. package/dist/esm/ui/ElementBrowser/components/ElementList/EmptyState.js +2 -1
  431. package/dist/esm/ui/ElementBrowser/components/ElementList/NotFoundIllustration.js +3 -0
  432. package/dist/esm/ui/ElementBrowser/components/ElementSearch.js +2 -1
  433. package/dist/esm/ui/ElementBrowser/constants.js +3 -1
  434. package/dist/esm/ui/FloatingToolbar/styles.js +3 -3
  435. package/dist/esm/ui/LinkSearch/LinkSearchListItem.js +4 -3
  436. package/dist/esm/ui/PanelTextInput/styles.js +4 -3
  437. package/dist/esm/ui/PluginSlot/index.js +7 -4
  438. package/dist/esm/ui/Toolbar/ToolbarInner.js +2 -1
  439. package/dist/esm/ui/Toolbar/ToolbarWithSizeDetector.js +4 -2
  440. package/dist/esm/ui/ToolbarFeedback/styles.js +4 -3
  441. package/dist/esm/ui/WithFlash/index.js +3 -2
  442. package/dist/esm/ui/styles.js +5 -4
  443. package/dist/esm/utils/document.js +59 -5
  444. package/dist/esm/utils/filter/privacy-filter.js +1 -1
  445. package/dist/esm/utils/step.js +12 -1
  446. package/dist/esm/version-wrapper.js +1 -1
  447. package/dist/esm/version.json +1 -1
  448. package/dist/types/actions/index.d.ts +6 -0
  449. package/dist/types/labs/next/ContentComponents.d.ts +7 -1
  450. package/dist/types/nodeviews/getInlineNodeViewProducer.d.ts +1 -0
  451. package/dist/types/plugins/analytics/types/enums.d.ts +3 -0
  452. package/dist/types/plugins/analytics/types/general-events.d.ts +7 -1
  453. package/dist/types/plugins/base/pm-plugins/inline-cursor-target.d.ts +1 -1
  454. package/dist/types/plugins/code-block/actions.d.ts +2 -0
  455. package/dist/types/plugins/code-block/nodeviews/code-block.d.ts +2 -0
  456. package/dist/types/plugins/code-block/pm-plugins/actions.d.ts +1 -0
  457. package/dist/types/plugins/code-block/pm-plugins/main-state.d.ts +1 -0
  458. package/dist/types/plugins/extension/commands.d.ts +1 -1
  459. package/dist/types/plugins/extension/types.d.ts +1 -0
  460. package/dist/types/plugins/extension/ui/Extension/Extension/index.d.ts +6 -0
  461. package/dist/types/plugins/find-replace/styles.d.ts +0 -2
  462. package/dist/types/plugins/hyperlink/utils.d.ts +8 -0
  463. package/dist/types/plugins/media/commands/helpers.d.ts +2 -0
  464. package/dist/types/plugins/media/nodeviews/mediaNodeView/media.d.ts +1 -0
  465. package/dist/types/plugins/media/pm-plugins/main.d.ts +2 -1
  466. package/dist/types/plugins/media/pm-plugins/types.d.ts +2 -1
  467. package/dist/types/plugins/paste/handlers.d.ts +1 -0
  468. package/dist/types/plugins/paste/pm-plugins/analytics.d.ts +1 -0
  469. package/dist/types/plugins/table/commands/misc.d.ts +0 -1
  470. package/dist/types/plugins/table/index.d.ts +0 -1
  471. package/dist/types/plugins/table/nodeviews/TableComponent.d.ts +1 -0
  472. package/dist/types/plugins/table/nodeviews/types.d.ts +0 -1
  473. package/dist/types/plugins/table/pm-plugins/main.d.ts +1 -1
  474. package/dist/types/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.d.ts +15 -0
  475. package/dist/types/plugins/table/pm-plugins/table-resizing/event-handlers.d.ts +1 -1
  476. package/dist/types/plugins/table/pm-plugins/table-resizing/plugin.d.ts +1 -1
  477. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/misc.d.ts +1 -2
  478. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/resize-state.d.ts +1 -1
  479. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/scale-table.d.ts +0 -1
  480. package/dist/types/plugins/table/transforms/fix-tables.d.ts +0 -1
  481. package/dist/types/plugins/table/types.d.ts +0 -1
  482. package/dist/types/plugins/table/ui/consts.d.ts +9 -9
  483. package/dist/types/plugins/type-ahead/ui/TypeAheadList.d.ts +2 -0
  484. package/dist/types/plugins/type-ahead/ui/TypeAheadListItem.d.ts +4 -4
  485. package/dist/types/types/editor-appearance-component.d.ts +0 -1
  486. package/dist/types/types/editor-props.d.ts +4 -0
  487. package/dist/types/types/feature-flags.d.ts +8 -0
  488. package/dist/types/types/ui-components.d.ts +1 -0
  489. package/dist/types/ui/Appearance/FullPage/FullPage.d.ts +1 -0
  490. package/dist/types/ui/Appearance/FullPage/FullPageContentArea.d.ts +1 -0
  491. package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +3 -2
  492. package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +3 -2
  493. package/dist/types/ui/PluginSlot/index.d.ts +1 -0
  494. package/dist/types/ui/Toolbar/toolbar-types.d.ts +1 -0
  495. package/dist/types/utils/document.d.ts +1 -0
  496. package/dist/types/utils/step.d.ts +1 -0
  497. package/docs/0-intro.tsx +12 -4
  498. package/package.json +23 -23
@@ -1,5 +1,5 @@
1
1
  import { Node } from 'prosemirror-model';
2
- import { transformMediaLinkMarks, transformTextLinkCodeMarks } from '@atlaskit/adf-utils';
2
+ import { transformMediaLinkMarks, transformTextLinkCodeMarks, transformDedupeMarks, transformNodesMissingContent, transformIndentationMarks } from '@atlaskit/adf-utils/transforms';
3
3
  import { sanitizeNodeForPrivacy } from '../utils/filter/privacy-filter';
4
4
  import { validateADFEntity, findAndTrackUnsupportedContentNodes } from '@atlaskit/editor-common/utils';
5
5
  import { getBreakoutMode } from './node-width';
@@ -75,6 +75,9 @@ export function isEmptyDocument(node) {
75
75
  export function hasDocAsParent($anchor) {
76
76
  return $anchor.depth === 1;
77
77
  }
78
+ export function isProseMirrorSchemaCheckError(error) {
79
+ return error instanceof RangeError && (!!error.message.match(/^Invalid collection of marks for node/) || !!error.message.match(/^Invalid content for node/));
80
+ }
78
81
  export function isInEmptyLine(state) {
79
82
  const {
80
83
  selection
@@ -192,9 +195,10 @@ export function processRawValue(schema, value, providerFactory, sanitizePrivateC
192
195
  // and preserving code marks during content changes.
193
196
 
194
197
 
195
- const transformResult = transformTextLinkCodeMarks(node);
196
- transformedAdf = transformResult.transformedAdf;
197
- isTransformed = transformResult.isTransformed;
198
+ ({
199
+ transformedAdf,
200
+ isTransformed
201
+ } = transformTextLinkCodeMarks(transformedAdf));
198
202
 
199
203
  if (isTransformed && dispatchAnalyticsEvent) {
200
204
  dispatchAnalyticsEvent({
@@ -204,6 +208,50 @@ export function processRawValue(schema, value, providerFactory, sanitizePrivateC
204
208
  });
205
209
  }
206
210
 
211
+ let discardedMarks = [];
212
+ ({
213
+ transformedAdf,
214
+ isTransformed,
215
+ discardedMarks
216
+ } = transformDedupeMarks(transformedAdf));
217
+
218
+ if (isTransformed && dispatchAnalyticsEvent) {
219
+ dispatchAnalyticsEvent({
220
+ action: ACTION.DEDUPE_MARKS_TRANSFORMED,
221
+ actionSubject: ACTION_SUBJECT.EDITOR,
222
+ eventType: EVENT_TYPE.OPERATIONAL,
223
+ attributes: {
224
+ discardedMarks
225
+ }
226
+ });
227
+ }
228
+
229
+ ({
230
+ transformedAdf,
231
+ isTransformed
232
+ } = transformNodesMissingContent(transformedAdf));
233
+
234
+ if (isTransformed && dispatchAnalyticsEvent) {
235
+ dispatchAnalyticsEvent({
236
+ action: ACTION.NODES_MISSING_CONTENT_TRANSFORMED,
237
+ actionSubject: ACTION_SUBJECT.EDITOR,
238
+ eventType: EVENT_TYPE.OPERATIONAL
239
+ });
240
+ }
241
+
242
+ ({
243
+ transformedAdf,
244
+ isTransformed
245
+ } = transformIndentationMarks(transformedAdf));
246
+
247
+ if (isTransformed && dispatchAnalyticsEvent) {
248
+ dispatchAnalyticsEvent({
249
+ action: ACTION.INDENTATION_MARKS_TRANSFORMED,
250
+ actionSubject: ACTION_SUBJECT.EDITOR,
251
+ eventType: EVENT_TYPE.OPERATIONAL
252
+ });
253
+ }
254
+
207
255
  const entity = validateADFEntity(schema, transformedAdf || node, dispatchAnalyticsEvent);
208
256
  let newEntity = maySanitizePrivateContent(entity, providerFactory, sanitizePrivateContent);
209
257
  const parsedDoc = Node.fromJSON(schema, newEntity); // throws an error if the document is invalid
@@ -222,7 +270,7 @@ export function processRawValue(schema, value, providerFactory, sanitizePrivateC
222
270
  });
223
271
  }
224
272
 
225
- return;
273
+ throw err;
226
274
  }
227
275
 
228
276
  if (dispatchAnalyticsEvent) {
@@ -244,6 +292,11 @@ export function processRawValue(schema, value, providerFactory, sanitizePrivateC
244
292
 
245
293
 
246
294
  console.error(`Error processing document:\n${e.message}\n\n`, JSON.stringify(node));
295
+
296
+ if (isProseMirrorSchemaCheckError(e)) {
297
+ throw e;
298
+ }
299
+
247
300
  return;
248
301
  }
249
302
  }
@@ -1,4 +1,4 @@
1
- import { traverse } from '@atlaskit/adf-utils';
1
+ import { traverse } from '@atlaskit/adf-utils/traverse';
2
2
  import { isResolvingMentionProvider } from '@atlaskit/mention/resource';
3
3
 
4
4
  /**
@@ -1,3 +1,4 @@
1
+ import { ReplaceAroundStep, ReplaceStep } from 'prosemirror-transform';
1
2
  export const stepHasSlice = step => step && step.hasOwnProperty('slice');
2
3
  /**
3
4
  * Checks whether a given step is adding nodes of given nodeTypes
@@ -21,4 +22,14 @@ export function stepAddsOneOf(step, nodeTypes) {
21
22
  return !adds;
22
23
  });
23
24
  return adds;
24
- }
25
+ }
26
+ export const extractSliceFromStep = step => {
27
+ if (!(step instanceof ReplaceStep) && !(step instanceof ReplaceAroundStep)) {
28
+ return null;
29
+ } // @ts-ignore This is by design. Slice is a private property, but accesible, from ReplaceStep.
30
+ // However, we need to read it to found if the step was adding a newline
31
+
32
+
33
+ const slice = step.slice;
34
+ return slice;
35
+ };
@@ -1,5 +1,5 @@
1
1
  export const name = "@atlaskit/editor-core";
2
- export const version = "166.0.4";
2
+ export const version = "167.0.2";
3
3
  export const nextMajorVersion = () => {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-core",
3
- "version": "166.0.4",
3
+ "version": "167.0.2",
4
4
  "sideEffects": false
5
5
  }
@@ -4,7 +4,8 @@ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
4
  import _createClass from "@babel/runtime/helpers/createClass";
5
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
6
6
  import { Node } from 'prosemirror-model';
7
- import { TextSelection } from 'prosemirror-state';
7
+ import { TextSelection, NodeSelection } from 'prosemirror-state';
8
+ import { findParentNode } from 'prosemirror-utils';
8
9
  import { toJSON } from '../utils';
9
10
  import { processRawValue, isEmptyDocument } from '../utils/document';
10
11
  import { getEditorValueWithMedia, __temporaryFixForConfigPanel as _temporaryFixForConfigPanel } from '../utils/action';
@@ -285,6 +286,30 @@ var EditorActions = /*#__PURE__*/function () {
285
286
  return (_findNodePosWithLocal = findNodePosWithLocalId((_this$editorView2 = this.editorView) === null || _this$editorView2 === void 0 ? void 0 : _this$editorView2.state, id)) === null || _findNodePosWithLocal === void 0 ? void 0 : _findNodePosWithLocal.node;
286
287
  }
287
288
  }
289
+ /**
290
+ * This method will return the currently selected `Node` if the selection is a `Node`.
291
+ * Otherwise, if the selection is textual or a non-selectable `Node` within another selectable `Node`, the closest selectable parent `Node` will be returned.
292
+ */
293
+
294
+ }, {
295
+ key: "getSelectedNode",
296
+ value: function getSelectedNode() {
297
+ var _this$editorView3, _this$editorView3$sta;
298
+
299
+ if ((_this$editorView3 = this.editorView) !== null && _this$editorView3 !== void 0 && (_this$editorView3$sta = _this$editorView3.state) !== null && _this$editorView3$sta !== void 0 && _this$editorView3$sta.selection) {
300
+ var _findParentNode;
301
+
302
+ var selection = this.editorView.state.selection;
303
+
304
+ if (selection instanceof NodeSelection) {
305
+ return selection.node;
306
+ }
307
+
308
+ return (_findParentNode = findParentNode(function (node) {
309
+ return Boolean(node.type.spec.selectable);
310
+ })(selection)) === null || _findParentNode === void 0 ? void 0 : _findParentNode.node;
311
+ }
312
+ }
288
313
  }, {
289
314
  key: "isDocumentEmpty",
290
315
  value: function isDocumentEmpty() {
@@ -844,6 +844,8 @@ function getUAPrefix() {
844
844
  return 'ua-ie';
845
845
  } else if (browser.gecko) {
846
846
  return 'ua-firefox';
847
+ } else if (browser.safari) {
848
+ return 'ua-safari';
847
849
  }
848
850
 
849
851
  return '';
@@ -210,8 +210,7 @@ export default function createPluginsList(props, prevProps, createAnalyticsEvent
210
210
  breakoutEnabled: props.appearance === 'full-page',
211
211
  allowContextualMenu: !isMobile,
212
212
  fullWidthEnabled: props.appearance === 'full-width',
213
- wasFullWidthEnabled: prevProps && prevProps.appearance === 'full-width',
214
- dynamicSizingEnabled: props.allowDynamicTextSizing
213
+ wasFullWidthEnabled: prevProps && prevProps.appearance === 'full-width'
215
214
  }]);
216
215
  }
217
216
 
@@ -410,6 +410,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
410
410
  allowConfluenceInlineComment: {
411
411
  message: 'To integrate inline comments use experimental annotationProvider – <Editor annotationProviders={{ provider }} />',
412
412
  type: 'removed'
413
+ },
414
+ allowDynamicTextSizing: {
415
+ message: 'Dynamic text sizing has been unshipped since 2020. The prop is no longer needed.',
416
+ type: 'removed'
413
417
  }
414
418
  };
415
419
  Object.keys(deprecatedProperties).forEach(function (property) {
@@ -498,7 +502,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
498
502
  }, {
499
503
  key: "getBaseFontSize",
500
504
  value: function getBaseFontSize() {
501
- return !this.props.allowDynamicTextSizing && !['comment', 'chromeless', 'mobile'].includes(this.props.appearance) ? akEditorFullPageDefaultFontSize : undefined;
505
+ return !['comment', 'chromeless', 'mobile'].includes(this.props.appearance) ? akEditorFullPageDefaultFontSize : undefined;
502
506
  }
503
507
  }, {
504
508
  key: "render",
@@ -581,7 +585,6 @@ var Editor = /*#__PURE__*/function (_React$Component) {
581
585
  config = _ref3.config,
582
586
  dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent;
583
587
  return jsx(BaseTheme, {
584
- dynamicTextSizing: _this5.props.allowDynamicTextSizing && _this5.props.appearance !== 'full-width',
585
588
  baseFontSize: _this5.getBaseFontSize()
586
589
  }, jsx(Component, {
587
590
  appearance: _this5.props.appearance,
@@ -76,8 +76,12 @@ var arrowKeysMap = {
76
76
  ARROWRIGHT: "\u2192",
77
77
  ARROWUP: "\u2191",
78
78
  ARROWDOWN: "\u2193"
79
- };
79
+ }; // TOOD: https://product-fabric.atlassian.net/browse/DSP-4460
80
+
81
+ /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
82
+
80
83
  var tooltipShortcutStyle = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-radius: 2px;\n background-color: ", ";\n padding: 0 2px;\n /* TODO: fix in develop: https://atlassian.slack.com/archives/CFG3PSQ9E/p1647395052443259?thread_ts=1647394572.556029&cid=CFG3PSQ9E */\n /* stylelint-disable-next-line */\n label: tooltip-shortcut;\n"])), N400);
84
+ /* eslint-enable @atlaskit/design-system/ensure-design-token-usage */
81
85
 
82
86
  function formatShortcut(keymap) {
83
87
  var shortcut;
@@ -3,7 +3,10 @@ import { pluginKey as disabledPluginKey } from '../../plugins/editor-disabled';
3
3
  import WithPluginState from '../../ui/WithPluginState';
4
4
  import PluginSlot from '../../ui/PluginSlot';
5
5
  import { useEditorSharedConfig } from './Editor';
6
- export function ContentComponents(disabled) {
6
+ export function ContentComponents(_ref) {
7
+ var disabled = _ref.disabled,
8
+ wrapperElement = _ref.wrapperElement,
9
+ containerElement = _ref.containerElement;
7
10
  var config = useEditorSharedConfig();
8
11
 
9
12
  if (!config) {
@@ -14,10 +17,10 @@ export function ContentComponents(disabled) {
14
17
  plugins: {
15
18
  disabled: disabledPluginKey
16
19
  },
17
- render: function render(_ref) {
20
+ render: function render(_ref2) {
18
21
  var _disabled$editorDisab;
19
22
 
20
- var disabled = _ref.disabled;
23
+ var disabled = _ref2.disabled;
21
24
  return /*#__PURE__*/React.createElement(PluginSlot, {
22
25
  editorView: config.editorView,
23
26
  eventDispatcher: config.eventDispatcher,
@@ -26,8 +29,9 @@ export function ContentComponents(disabled) {
26
29
  popupsMountPoint: config.popupsMountPoint,
27
30
  popupsBoundariesElement: config.popupsBoundariesElement,
28
31
  popupsScrollableElement: config.popupsScrollableElement,
29
- containerElement: null // TODO: Figure out how to pass containerElement here ED-8448
32
+ containerElement: containerElement // TODO: Figure out how to pass containerElement here ED-8448
30
33
  ,
34
+ wrapperElement: wrapperElement,
31
35
  disabled: (_disabled$editorDisab = disabled === null || disabled === void 0 ? void 0 : disabled.editorDisabled) !== null && _disabled$editorDisab !== void 0 ? _disabled$editorDisab : false
32
36
  });
33
37
  }
@@ -9,6 +9,7 @@ import rafSchedule from 'raf-schd';
9
9
  import React from 'react';
10
10
  import { css, jsx } from '@emotion/react';
11
11
  import { N30 } from '@atlaskit/theme/colors';
12
+ import { token } from '@atlaskit/tokens';
12
13
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
13
14
  import { BaseTheme } from '@atlaskit/editor-common/ui';
14
15
  import { akEditorMenuZIndex, akEditorToolbarKeylineHeight } from '@atlaskit/editor-shared-styles';
@@ -35,8 +36,8 @@ var editorContentArea = function editorContentArea(theme) {
35
36
  return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n line-height: 24px;\n height: 100%;\n width: 100%;\n max-width: ", "px;\n padding-top: 50px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding-bottom: 55px;\n\n & .ProseMirror {\n flex-grow: 1;\n box-sizing: border-box;\n }\n\n && .ProseMirror {\n & > * {\n clear: both;\n }\n > p,\n > ul,\n > ol,\n > h1,\n > h2,\n > h3,\n > h4,\n > h5,\n > h6 {\n clear: none;\n }\n }\n ", ";\n"])), theme.layoutMaxWidth + GUTTER_PADDING * 2, tableFullPageEditorStyles);
36
37
  };
37
38
 
38
- var mainToolbar = css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n position: relative;\n align-items: center;\n box-shadow: 'none';\n\n transition: box-shadow 200ms;\n z-index: ", ";\n display: flex;\n height: 80px;\n flex-shrink: 0;\n background-color: white;\n\n & object {\n height: 0 !important;\n }\n"])), akEditorMenuZIndex);
39
- var mainToolbarWithKeyline = css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n ", "\n box-shadow: 0 ", "px 0 0 ", "\n"])), mainToolbar, akEditorToolbarKeylineHeight, N30);
39
+ var mainToolbar = css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n position: relative;\n align-items: center;\n box-shadow: 'none';\n\n transition: box-shadow 200ms;\n z-index: ", ";\n display: flex;\n height: 80px;\n flex-shrink: 0;\n background-color: ", ";\n\n & object {\n height: 0 !important;\n }\n"])), akEditorMenuZIndex, token('elevation.surface', 'white'));
40
+ var mainToolbarWithKeyline = css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n ", "\n box-shadow: 0 ", "px 0 0 ", "\n"])), mainToolbar, akEditorToolbarKeylineHeight, token('color.border', N30));
40
41
  var mainToolbarCustomComponentsSlot = css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: flex-end;\n flex-grow: 1;\n"])));
41
42
  var sidebarArea = css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n height: 100%;\n box-sizing: border-box;\n"])));
42
43
 
@@ -79,7 +80,6 @@ function useKeyline() {
79
80
  function FullPage(props) {
80
81
  var primaryToolbarComponents = props.primaryToolbarComponents,
81
82
  contentComponents = props.contentComponents,
82
- allowDynamicTextSizing = props.allowDynamicTextSizing,
83
83
  collabEdit = props.collabEdit,
84
84
  createAnalyticsEvent = props.createAnalyticsEvent,
85
85
  contextPanel = props.contextPanel;
@@ -91,13 +91,13 @@ function FullPage(props) {
91
91
  scrollContainerRef = _useKeyline2[1];
92
92
 
93
93
  var config = useEditorSharedConfig();
94
+ var wrapperElementRef = /*#__PURE__*/React.createRef();
94
95
  return jsx(ContextPanelWidthProvider, null, jsx(Editor, _extends({}, props, {
95
96
  onAnalyticsEvent: handleAnalyticsEvent
96
- }), jsx(BaseTheme, {
97
- dynamicTextSizing: allowDynamicTextSizing
98
- }, jsx("div", {
97
+ }), jsx(BaseTheme, null, jsx("div", {
99
98
  css: fullPageEditorWrapper,
100
- className: "akEditor"
99
+ className: "akEditor",
100
+ ref: wrapperElementRef
101
101
  }, jsx("div", {
102
102
  "data-testid": "ak-editor-main-toolbar",
103
103
  css: showKeyline ? mainToolbarWithKeyline : mainToolbar
@@ -123,7 +123,10 @@ function FullPage(props) {
123
123
  }, jsx("div", {
124
124
  style: GUTTER_STYLE,
125
125
  className: "ak-editor-content-area"
126
- }, contentComponents, jsx(EditorContent, null), jsx(ContentComponents, null))))), contextPanel && jsx("div", {
126
+ }, contentComponents, jsx(EditorContent, null), jsx(ContentComponents, {
127
+ wrapperElement: wrapperElementRef.current,
128
+ containerElement: scrollContainerRef.current
129
+ }))))), contextPanel && jsx("div", {
127
130
  css: sidebarArea
128
131
  }, contextPanel), jsx(WidthEmitter, {
129
132
  editorView: config === null || config === void 0 ? void 0 : config.editorView
@@ -5,6 +5,7 @@ import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '../plugins/analytics';
5
5
  import { analyticsEventKey } from '../plugins/analytics/consts';
6
6
  import { ErrorBoundary } from '../ui/ErrorBoundary';
7
7
  import { getPerformanceOptions, startMeasureReactNodeViewRendered, stopMeasureReactNodeViewRendered } from './getPerformanceOptions';
8
+ export var inlineNodeViewClassname = 'inlineNodeView';
8
9
 
9
10
  function createNodeView(_ref) {
10
11
  var nodeViewParams = _ref.nodeViewParams,
@@ -25,7 +26,7 @@ function createNodeView(_ref) {
25
26
  // nodeView if DOM structure has nested plain "div"s, it doesn't see the
26
27
  // difference between them and it kills the nodeView
27
28
 
28
- domRef.classList.add("".concat(nodeViewParams.node.type.name, "View-content-wrap"), "inlineNodeView"); // This util is shared for tracking rendering, and the ErrorBoundary that
29
+ domRef.classList.add("".concat(nodeViewParams.node.type.name, "View-content-wrap"), "".concat(inlineNodeViewClassname)); // This util is shared for tracking rendering, and the ErrorBoundary that
29
30
  // is setup to wrap the Component when rendering
30
31
  // NOTE: This is not a prosemirror dispatch
31
32
 
@@ -162,13 +163,13 @@ function getPortalChildren(_ref2) {
162
163
  componentId: (_currentNode$type$nam = currentNode === null || currentNode === void 0 ? void 0 : (_currentNode$type = currentNode.type) === null || _currentNode$type === void 0 ? void 0 : _currentNode$type.name) !== null && _currentNode$type$nam !== void 0 ? _currentNode$type$nam : ACTION_SUBJECT_ID.UNKNOWN_NODE,
163
164
  dispatchAnalyticsEvent: dispatchAnalyticsEvent
164
165
  }, /*#__PURE__*/React.createElement("span", {
165
- className: "inlineNodeViewAddZeroWidthSpace"
166
+ className: "".concat(inlineNodeViewClassname, "AddZeroWidthSpace")
166
167
  }), ZERO_WIDTH_SPACE, /*#__PURE__*/React.createElement(Component, _extends({
167
168
  view: nodeViewParams.view,
168
169
  getPos: nodeViewParams.getPos,
169
170
  node: currentNode
170
171
  }, extraComponentProps)), /*#__PURE__*/React.createElement("span", {
171
- className: "inlineNodeViewAddZeroWidthSpace"
172
+ className: "".concat(inlineNodeViewClassname, "AddZeroWidthSpace")
172
173
  }));
173
174
  };
174
175
  } // https://prosemirror.net/docs/ref/#view.EditorProps.nodeViews
@@ -3,7 +3,8 @@ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral
3
3
  var _templateObject;
4
4
 
5
5
  import { css } from '@emotion/react';
6
- import { ZERO_WIDTH_SPACE } from '@atlaskit/editor-common/utils'; // For reasoning behind styles, see comments in:
6
+ import { ZERO_WIDTH_SPACE } from '@atlaskit/editor-common/utils';
7
+ import { inlineNodeViewClassname } from './getInlineNodeViewProducer'; // For reasoning behind styles, see comments in:
7
8
  // ./getInlineNodeViewProducer -> portalChildren()
8
9
 
9
- export var InlineNodeViewSharedStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .inlineNodeView {\n display: inline;\n user-select: all;\n /* Collapses zero width spaces inside the inline node view\n to prevent the node from line breaking too early.\n */\n white-space: nowrap;\n /* Then reset to the Editor default so we don't interfere\n with any component styling. */\n & > * {\n white-space: pre-wrap;\n }\n }\n\n &.ua-chrome .inlineNodeView > span {\n user-select: none;\n }\n\n .inlineNodeViewAddZeroWidthSpace {\n ::after {\n content: '", "';\n }\n }\n"])), ZERO_WIDTH_SPACE);
10
+ export var InlineNodeViewSharedStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .", " {\n display: inline;\n user-select: all;\n /* Collapses zero width spaces inside the inline node view\n to prevent the node from line breaking too early.\n */\n white-space: nowrap;\n /* Then reset to the Editor default so we don't interfere\n with any component styling. */\n & > * {\n white-space: pre-wrap;\n }\n }\n /** Remove browser deafult selections style. This prevents\n unexpected visual artefacts in Safari when navigating\n with the keyboard or making range selections. */\n &.ua-safari {\n .", " {\n ::selection,\n *::selection {\n background: transparent;\n }\n }\n }\n\n &.ua-chrome .", " > span {\n user-select: none;\n }\n\n .", "AddZeroWidthSpace {\n ::after {\n content: '", "';\n }\n }\n"])), inlineNodeViewClassname, inlineNodeViewClassname, inlineNodeViewClassname, inlineNodeViewClassname, ZERO_WIDTH_SPACE);
@@ -4,7 +4,8 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
4
4
 
5
5
  import { css } from '@emotion/react';
6
6
  import { N30 } from '@atlaskit/theme/colors';
7
+ import { token } from '@atlaskit/tokens';
7
8
  export var triggerWrapper = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n"])));
8
- export var separator = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background: ", ";\n width: 1px;\n height: 24px;\n display: inline-block;\n margin: 0 8px;\n"])), N30);
9
+ export var separator = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background: ", ";\n width: 1px;\n height: 24px;\n display: inline-block;\n margin: 0 8px;\n"])), token('color.border', N30));
9
10
  export var wrapper = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n div {\n display: flex;\n }\n"])));
10
11
  export var expandIconWrapper = css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-left: -8px;\n"])));
@@ -84,6 +84,9 @@ export var ACTION;
84
84
  ACTION["SYNCHRONY_ENTITY_ERROR"] = "synchronyEntityError";
85
85
  ACTION["SYNCHRONY_ERROR"] = "synchronyError";
86
86
  ACTION["TEXT_LINK_MARK_TRANSFORMED"] = "textLinkMarkTransformed";
87
+ ACTION["DEDUPE_MARKS_TRANSFORMED"] = "dedupeMarksTransformed";
88
+ ACTION["NODES_MISSING_CONTENT_TRANSFORMED"] = "nodesMissingContentTransformed";
89
+ ACTION["INDENTATION_MARKS_TRANSFORMED"] = "indentationMarksTransformed";
87
90
  ACTION["TOGGLE_EXPAND"] = "toggleExpand";
88
91
  ACTION["TRANSACTION_DISPATCHED"] = "transactionDispatched";
89
92
  ACTION["TRANSACTION_MUTATED_AFTER_DISPATCH"] = "transactionMutatedAfterDispatched";
@@ -39,25 +39,16 @@ var basePlugin = function basePlugin(options) {
39
39
  // In Firefox, when the selection is placed between adjacent nodes which are not contenteditatble
40
40
  // no cursor is presented to users.
41
41
  // In Safari, when the selection is placed between adjacent nodes which are not contenteditatble
42
- // the cursor appears inside the adjacent nodes.
43
- // This plugin workarounds the issues with chrome and firefox by inserting decorations between
42
+ // it is not possible to navigate with arrow keys.
43
+ // This plugin works around the issues by inserting decorations between
44
44
  // inline nodes which are set as contenteditable, and have a zero width space.
45
- // At time of development, using this workaround in Safari caused additional issues;
46
- // - visual artifacts when moving across inline nodes (ie. using the arrow key to traverse a
47
- // series of inline nodes)
48
- // - blocking the right arrow key when at the start of a line from moving to the end of the
49
- // previous line.
50
- // As such we only apply the workaround for firefox and chrome.
51
-
52
- if (browser.chrome || browser.gecko) {
53
- plugins.push({
54
- name: 'inlineCursorTargetPlugin',
55
- plugin: function plugin() {
56
- return options && options.allowInlineCursorTarget ? inlineCursorTargetPlugin() : undefined;
57
- }
58
- });
59
- }
60
45
 
46
+ plugins.push({
47
+ name: 'inlineCursorTargetPlugin',
48
+ plugin: function plugin() {
49
+ return options && options.allowInlineCursorTarget ? inlineCursorTargetPlugin() : undefined;
50
+ }
51
+ });
61
52
  plugins.push({
62
53
  name: 'focusHandlerPlugin',
63
54
  plugin: function plugin(_ref2) {
@@ -4,6 +4,7 @@ import { Fragment } from 'prosemirror-model';
4
4
  import { closeHistory } from 'prosemirror-history';
5
5
  import { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform';
6
6
  import { PluginKey } from 'prosemirror-state';
7
+ import { extractSliceFromStep } from '../../../utils/step';
7
8
 
8
9
  var getEnterKeyboardActionStep = function getEnterKeyboardActionStep(trs) {
9
10
  var firstTr = trs.length === 1 && trs[0];
@@ -25,17 +26,6 @@ var getEnterKeyboardActionStep = function getEnterKeyboardActionStep(trs) {
25
26
  return replaceSteps[0];
26
27
  };
27
28
 
28
- var extractSliceFromStep = function extractSliceFromStep(step) {
29
- if (!(step instanceof ReplaceStep) && !(step instanceof ReplaceAroundStep)) {
30
- return null;
31
- } // @ts-ignore This is by design. Slice is a private property, but accesible, from ReplaceStep.
32
- // However, we need to read it to found if the step was adding a newline
33
-
34
-
35
- var slice = step.slice;
36
- return slice;
37
- };
38
-
39
29
  var isSliceSplittingBlockNode = function isSliceSplittingBlockNode(slice) {
40
30
  var hasOnlyTwoChildren = slice.size > 1 && slice.content.childCount === 2;
41
31
 
@@ -1,7 +1,7 @@
1
1
  import { DecorationSet, Decoration } from 'prosemirror-view';
2
2
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
3
3
  import { PluginKey } from 'prosemirror-state';
4
- import { ZERO_WIDTH_SPACE } from '@atlaskit/editor-common/utils';
4
+ import { ZERO_WIDTH_SPACE, browser } from '@atlaskit/editor-common/utils';
5
5
  import { isTextSelection } from '../../../utils';
6
6
  export var inlineCursorTargetStateKey = new PluginKey('inlineCursorTargetPlugin');
7
7
  export var isInlineNodeView = function isInlineNodeView(node) {
@@ -20,13 +20,35 @@ export default (function () {
20
20
  var selection = tr.selection,
21
21
  doc = tr.doc;
22
22
  var $from = selection.$from,
23
- $to = selection.$to;
24
-
25
- if (selection && isTextSelection(selection)) {
23
+ $to = selection.$to; // In Safari, if the cursor target is to the right of the cursor it will block selections
24
+ // made with shift + arrowRight and vice versa for shift + arrowLeft. This is due to a
25
+ // contenteditable bug in safari, where editable elements block the selection but we need
26
+ // the cursor target to be editable for the following:
27
+ // - Ability to navigate with down/up arrows when between inline nodes
28
+ // - Ability to navigate with down/up arrows when between the start of a paragraph & an inline node
29
+ // - Ability to click and drag to select an inline node if it is the first node
30
+ // To prevent blocking the selection, we check handleDOMEvents and add meta to
31
+ // the transaction to prevent the plugin from making cursor target decorations.
32
+
33
+ var safariShiftSelection = tr.getMeta(inlineCursorTargetStateKey);
34
+
35
+ if (selection && isTextSelection(selection) && !safariShiftSelection) {
26
36
  var hasInlineNodeViewAfter = isInlineNodeView($from.nodeAfter);
27
37
  var hasInlineNodeViewBefore = isInlineNodeView($from.nodeBefore);
28
- var isAtStart = $from.parentOffset === 0 && isInlineNodeView($from.nodeAfter);
29
- var isAtEnd = doc.resolve($from.pos).node().lastChild === $from.nodeBefore && isInlineNodeView($from.nodeBefore); // Create editable decoration widgets either side of the cursor to allow
38
+ var isAtStartAndInlineNodeViewAfter = $from.parentOffset === 0 && isInlineNodeView($from.nodeAfter);
39
+ var isAtEndAndInlineNodeViewBefore = doc.resolve($from.pos).node().lastChild === $from.nodeBefore && isInlineNodeView($from.nodeBefore);
40
+
41
+ var createWidget = function createWidget(side) {
42
+ var node = document.createElement('span');
43
+ node.contentEditable = 'true';
44
+ node.appendChild(document.createTextNode(ZERO_WIDTH_SPACE));
45
+ node.className = 'cursor-target';
46
+ return Decoration.widget(selection.from, node, {
47
+ raw: true,
48
+ side: side === 'left' ? -1 : 1,
49
+ key: 'inlineCursor'
50
+ });
51
+ }; // Create editable decoration widgets either side of the cursor to allow
30
52
  // text input.
31
53
  // We check beforeInput events below to prevent content
32
54
  // being added to the decorations.
@@ -37,18 +59,8 @@ export default (function () {
37
59
  // - positioned between the beginning of another node and an inline node (firefox)
38
60
  // - positioned between an inline node and the end of a node (chrome)
39
61
 
40
- if ((hasInlineNodeViewAfter || isAtEnd) && (hasInlineNodeViewBefore || isAtStart)) {
41
- var createWidget = function createWidget(side) {
42
- var node = document.createElement('span');
43
- node.contentEditable = 'true';
44
- node.appendChild(document.createTextNode(ZERO_WIDTH_SPACE));
45
- return Decoration.widget(selection.from, node, {
46
- raw: true,
47
- side: side === 'left' ? -1 : 1,
48
- key: 'inlineCursor'
49
- });
50
- };
51
62
 
63
+ if (!browser.safari && (hasInlineNodeViewAfter || isAtEndAndInlineNodeViewBefore) && (hasInlineNodeViewBefore || isAtStartAndInlineNodeViewAfter)) {
52
64
  return {
53
65
  cursorTarget: {
54
66
  decorations: [createWidget('left'), createWidget('right')],
@@ -58,6 +70,34 @@ export default (function () {
58
70
  }
59
71
  }
60
72
  };
73
+ } // Only create one widget on the left or right of the cursor in Safari.
74
+ // This is to prevent the left key from being blocked when at the start of a paragraph,
75
+ // and the right key from being blocked when at the end of a paragraph. This also
76
+ // improves click and drag selections, making it easier to select the first node.
77
+
78
+
79
+ if (browser.safari) {
80
+ if (isAtEndAndInlineNodeViewBefore || hasInlineNodeViewBefore && hasInlineNodeViewAfter) {
81
+ return {
82
+ cursorTarget: {
83
+ decorations: [createWidget('left')],
84
+ positions: {
85
+ from: $from.pos,
86
+ to: $to.pos
87
+ }
88
+ }
89
+ };
90
+ } else if (isAtStartAndInlineNodeViewAfter) {
91
+ return {
92
+ cursorTarget: {
93
+ decorations: [createWidget('right')],
94
+ positions: {
95
+ from: $from.pos,
96
+ to: $to.pos
97
+ }
98
+ }
99
+ };
100
+ }
61
101
  }
62
102
  }
63
103
 
@@ -80,6 +120,21 @@ export default (function () {
80
120
  return null;
81
121
  },
82
122
  handleDOMEvents: {
123
+ // Workaround to prevent the decorations created by the plugin from
124
+ // blocking shift + arrow left/right selections in safari. When
125
+ // a shift + arrow left/right event is detected, send meta data to the
126
+ // plugin to prevent it from creating decorations.
127
+ // TODO We may be able to remove this when playing the following ticket:
128
+ // https://product-fabric.atlassian.net/browse/ED-14938
129
+ keydown: function keydown(view, event) {
130
+ if (browser.safari && event instanceof KeyboardEvent && event.shiftKey && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {
131
+ view.dispatch(view.state.tr.setMeta(inlineCursorTargetStateKey, {
132
+ cursorTarget: undefined
133
+ }));
134
+ }
135
+
136
+ return false;
137
+ },
83
138
  // Check the DOM to see if there are inline cursor targets
84
139
  // after a composition event ends. If so, manually insert the
85
140
  // event data in order to prevent contents ending up inside