@atlaskit/editor-core 151.1.2 → 151.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/create-editor/ReactEditorView.js +22 -8
  3. package/dist/cjs/create-editor/create-plugins-list.js +30 -11
  4. package/dist/cjs/labs/next/presets/cxhtml.js +1 -2
  5. package/dist/cjs/labs/next/presets/default.js +3 -1
  6. package/dist/cjs/nodeviews/ReactNodeView.js +2 -2
  7. package/dist/cjs/nodeviews/SelectionBasedNodeView.js +6 -0
  8. package/dist/cjs/plugins/analytics/types/enums.js +1 -0
  9. package/dist/cjs/plugins/annotation/utils.js +19 -8
  10. package/dist/cjs/plugins/avatar-group/index.js +2 -1
  11. package/dist/cjs/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
  12. package/dist/cjs/plugins/before-primaryToolbar/index.js +26 -0
  13. package/dist/cjs/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +28 -0
  14. package/dist/cjs/plugins/code-bidi-warning/index.js +5 -2
  15. package/dist/cjs/plugins/code-bidi-warning/pm-plugins/main.js +12 -3
  16. package/dist/cjs/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +15 -5
  17. package/dist/cjs/plugins/code-block/index.js +3 -3
  18. package/dist/cjs/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
  19. package/dist/cjs/plugins/code-block/pm-plugins/main.js +11 -3
  20. package/dist/cjs/plugins/extension/extension-api.js +10 -2
  21. package/dist/cjs/plugins/extension/ui/styles.js +1 -1
  22. package/dist/cjs/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  23. package/dist/cjs/plugins/find-replace/FindReplaceToolbarButtonWithState.js +172 -0
  24. package/dist/cjs/plugins/find-replace/index.js +14 -137
  25. package/dist/cjs/plugins/find-replace/ui/Find.js +16 -9
  26. package/dist/cjs/plugins/find-replace/ui/FindReplace.js +9 -2
  27. package/dist/cjs/plugins/find-replace/ui/Replace.js +11 -3
  28. package/dist/cjs/plugins/find-replace/ui/styles.js +44 -35
  29. package/dist/cjs/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -4
  30. package/dist/cjs/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  31. package/dist/cjs/plugins/fragment/index.js +34 -0
  32. package/dist/cjs/plugins/fragment/plugin-key.js +11 -0
  33. package/dist/cjs/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +1 -1
  34. package/dist/cjs/plugins/index.js +16 -0
  35. package/dist/cjs/plugins/list/actions/conversions.js +39 -71
  36. package/dist/cjs/plugins/list/transforms.js +7 -1
  37. package/dist/cjs/plugins/media/index.js +2 -3
  38. package/dist/cjs/plugins/media/nodeviews/mediaGroup.js +3 -1
  39. package/dist/cjs/plugins/media/nodeviews/mediaInline.js +12 -5
  40. package/dist/cjs/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
  41. package/dist/cjs/plugins/media/nodeviews/mediaSingle.js +6 -4
  42. package/dist/cjs/plugins/media/nodeviews/styles.js +6 -1
  43. package/dist/cjs/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  44. package/dist/cjs/plugins/media/pm-plugins/main.js +49 -15
  45. package/dist/cjs/plugins/media/toolbar/commands.js +59 -0
  46. package/dist/cjs/plugins/media/toolbar/filePreviewItem.js +7 -2
  47. package/dist/cjs/plugins/media/toolbar/index.js +90 -3
  48. package/dist/cjs/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
  49. package/dist/cjs/plugins/media/utils/media-common.js +1 -1
  50. package/dist/cjs/plugins/media/utils/media-files.js +5 -1
  51. package/dist/cjs/plugins/panel/actions.js +2 -2
  52. package/dist/cjs/plugins/panel/index.js +3 -3
  53. package/dist/cjs/plugins/panel/nodeviews/panel.js +2 -2
  54. package/dist/cjs/plugins/panel/toolbar.js +10 -5
  55. package/dist/cjs/plugins/panel/utils.js +15 -0
  56. package/dist/cjs/plugins/rank.js +3 -2
  57. package/dist/cjs/plugins/selection/pm-plugins/selection-main.js +49 -1
  58. package/dist/cjs/plugins/status/ui/statusPicker.js +4 -2
  59. package/dist/cjs/plugins/table/commands/insert.js +1 -0
  60. package/dist/cjs/plugins/table/index.js +3 -2
  61. package/dist/cjs/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -3
  62. package/dist/cjs/plugins/table/pm-plugins/main.js +26 -3
  63. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  64. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  65. package/dist/cjs/plugins/table/transforms/column-width.js +14 -5
  66. package/dist/cjs/plugins/table/transforms/fix-tables.js +43 -6
  67. package/dist/cjs/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  68. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  69. package/dist/cjs/plugins/table/ui/common-styles.css.js +1 -1
  70. package/dist/cjs/plugins/table/ui/consts.js +1 -1
  71. package/dist/cjs/plugins/table/ui/messages.js +1 -1
  72. package/dist/cjs/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  73. package/dist/cjs/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  74. package/dist/cjs/plugins/tasks-and-decisions/pm-plugins/main.js +2 -2
  75. package/dist/cjs/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  76. package/dist/cjs/plugins/text-formatting/index.js +2 -1
  77. package/dist/cjs/plugins/type-ahead/ui/TypeAheadList.js +1 -0
  78. package/dist/cjs/ui/Appearance/FullPage/FullPageToolbar.js +77 -26
  79. package/dist/cjs/ui/Appearance/FullPage/MainToolbar.js +32 -9
  80. package/dist/cjs/ui/ColorPalette/Color/index.js +8 -18
  81. package/dist/cjs/ui/ColorPalette/index.js +7 -4
  82. package/dist/cjs/ui/ColorPickerButton/index.js +1 -1
  83. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +114 -61
  84. package/dist/cjs/ui/ConfigPanel/FormContent.js +39 -26
  85. package/dist/cjs/ui/ConfigPanel/transformers.js +490 -248
  86. package/dist/cjs/ui/ConfigPanel/utils.js +2 -10
  87. package/dist/cjs/ui/DropdownMenu/index.js +3 -1
  88. package/dist/cjs/ui/LinkSearch/LinkSearchListItem.js +1 -1
  89. package/dist/cjs/ui/Resizer/index.js +9 -1
  90. package/dist/cjs/version-wrapper.js +1 -1
  91. package/dist/cjs/version.json +1 -1
  92. package/dist/es2019/create-editor/ReactEditorView.js +19 -8
  93. package/dist/es2019/create-editor/create-plugins-list.js +31 -12
  94. package/dist/es2019/labs/next/presets/cxhtml.js +1 -2
  95. package/dist/es2019/labs/next/presets/default.js +3 -1
  96. package/dist/es2019/nodeviews/ReactNodeView.js +1 -1
  97. package/dist/es2019/nodeviews/SelectionBasedNodeView.js +11 -0
  98. package/dist/es2019/plugins/analytics/types/enums.js +1 -0
  99. package/dist/es2019/plugins/annotation/utils.js +18 -7
  100. package/dist/es2019/plugins/avatar-group/index.js +2 -1
  101. package/dist/es2019/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +3 -2
  102. package/dist/es2019/plugins/before-primaryToolbar/index.js +15 -0
  103. package/dist/es2019/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
  104. package/dist/es2019/plugins/code-bidi-warning/index.js +8 -2
  105. package/dist/es2019/plugins/code-bidi-warning/pm-plugins/main.js +12 -2
  106. package/dist/es2019/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +16 -5
  107. package/dist/es2019/plugins/code-block/index.js +3 -2
  108. package/dist/es2019/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
  109. package/dist/es2019/plugins/code-block/pm-plugins/main.js +11 -3
  110. package/dist/es2019/plugins/extension/extension-api.js +9 -2
  111. package/dist/es2019/plugins/extension/ui/styles.js +6 -0
  112. package/dist/es2019/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  113. package/dist/es2019/plugins/find-replace/FindReplaceToolbarButtonWithState.js +152 -0
  114. package/dist/es2019/plugins/find-replace/index.js +15 -128
  115. package/dist/es2019/plugins/find-replace/ui/Find.js +18 -10
  116. package/dist/es2019/plugins/find-replace/ui/FindReplace.js +11 -3
  117. package/dist/es2019/plugins/find-replace/ui/Replace.js +12 -4
  118. package/dist/es2019/plugins/find-replace/ui/styles.js +37 -47
  119. package/dist/es2019/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  120. package/dist/es2019/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -2
  121. package/dist/es2019/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  122. package/dist/es2019/plugins/fragment/index.js +22 -0
  123. package/dist/es2019/plugins/fragment/plugin-key.js +2 -0
  124. package/dist/es2019/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
  125. package/dist/es2019/plugins/index.js +2 -0
  126. package/dist/es2019/plugins/list/actions/conversions.js +38 -69
  127. package/dist/es2019/plugins/list/transforms.js +5 -1
  128. package/dist/es2019/plugins/media/index.js +2 -2
  129. package/dist/es2019/plugins/media/nodeviews/mediaGroup.js +2 -1
  130. package/dist/es2019/plugins/media/nodeviews/mediaInline.js +8 -4
  131. package/dist/es2019/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
  132. package/dist/es2019/plugins/media/nodeviews/mediaSingle.js +7 -5
  133. package/dist/es2019/plugins/media/nodeviews/styles.js +2 -0
  134. package/dist/es2019/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  135. package/dist/es2019/plugins/media/pm-plugins/main.js +32 -17
  136. package/dist/es2019/plugins/media/toolbar/commands.js +47 -0
  137. package/dist/es2019/plugins/media/toolbar/filePreviewItem.js +6 -2
  138. package/dist/es2019/plugins/media/toolbar/index.js +90 -3
  139. package/dist/es2019/plugins/media/ui/ResizableMediaSingle/index.js +7 -1
  140. package/dist/es2019/plugins/media/utils/media-common.js +1 -1
  141. package/dist/es2019/plugins/media/utils/media-files.js +6 -1
  142. package/dist/es2019/plugins/panel/actions.js +2 -2
  143. package/dist/es2019/plugins/panel/index.js +5 -5
  144. package/dist/es2019/plugins/panel/nodeviews/panel.js +2 -2
  145. package/dist/es2019/plugins/panel/toolbar.js +10 -5
  146. package/dist/es2019/plugins/panel/utils.js +8 -1
  147. package/dist/es2019/plugins/rank.js +3 -2
  148. package/dist/es2019/plugins/selection/pm-plugins/selection-main.js +48 -1
  149. package/dist/es2019/plugins/status/ui/statusPicker.js +4 -2
  150. package/dist/es2019/plugins/table/commands/insert.js +1 -2
  151. package/dist/es2019/plugins/table/index.js +2 -1
  152. package/dist/es2019/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
  153. package/dist/es2019/plugins/table/pm-plugins/main.js +25 -4
  154. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  155. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  156. package/dist/es2019/plugins/table/transforms/column-width.js +13 -3
  157. package/dist/es2019/plugins/table/transforms/fix-tables.js +43 -5
  158. package/dist/es2019/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  159. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  160. package/dist/es2019/plugins/table/ui/common-styles.css.js +5 -1
  161. package/dist/es2019/plugins/table/ui/consts.js +2 -2
  162. package/dist/es2019/plugins/table/ui/messages.js +1 -1
  163. package/dist/es2019/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  164. package/dist/es2019/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  165. package/dist/es2019/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
  166. package/dist/es2019/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  167. package/dist/es2019/plugins/text-formatting/index.js +3 -2
  168. package/dist/es2019/plugins/type-ahead/ui/TypeAheadList.js +2 -1
  169. package/dist/es2019/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
  170. package/dist/es2019/ui/Appearance/FullPage/FullPageToolbar.js +60 -27
  171. package/dist/es2019/ui/Appearance/FullPage/MainToolbar.js +51 -7
  172. package/dist/es2019/ui/ColorPalette/Color/index.js +9 -18
  173. package/dist/es2019/ui/ColorPalette/index.js +7 -4
  174. package/dist/es2019/ui/ColorPickerButton/index.js +1 -1
  175. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +101 -49
  176. package/dist/es2019/ui/ConfigPanel/FormContent.js +35 -26
  177. package/dist/es2019/ui/ConfigPanel/transformers.js +243 -72
  178. package/dist/es2019/ui/ConfigPanel/utils.js +1 -2
  179. package/dist/es2019/ui/Dropdown/index.js +2 -1
  180. package/dist/es2019/ui/DropdownMenu/index.js +7 -3
  181. package/dist/es2019/ui/ElementBrowser/InsertMenu.js +1 -0
  182. package/dist/es2019/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
  183. package/dist/es2019/ui/LinkSearch/LinkSearchListItem.js +2 -2
  184. package/dist/es2019/ui/Resizer/index.js +9 -1
  185. package/dist/es2019/version-wrapper.js +1 -1
  186. package/dist/es2019/version.json +1 -1
  187. package/dist/esm/create-editor/ReactEditorView.js +22 -8
  188. package/dist/esm/create-editor/create-plugins-list.js +31 -12
  189. package/dist/esm/labs/next/presets/cxhtml.js +1 -2
  190. package/dist/esm/labs/next/presets/default.js +3 -1
  191. package/dist/esm/nodeviews/ReactNodeView.js +2 -2
  192. package/dist/esm/nodeviews/SelectionBasedNodeView.js +7 -0
  193. package/dist/esm/plugins/analytics/types/enums.js +1 -0
  194. package/dist/esm/plugins/annotation/utils.js +18 -7
  195. package/dist/esm/plugins/avatar-group/index.js +2 -1
  196. package/dist/esm/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
  197. package/dist/esm/plugins/before-primaryToolbar/index.js +15 -0
  198. package/dist/esm/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
  199. package/dist/esm/plugins/code-bidi-warning/index.js +5 -2
  200. package/dist/esm/plugins/code-bidi-warning/pm-plugins/main.js +12 -3
  201. package/dist/esm/plugins/code-bidi-warning/pm-plugins/plugin-factory.js +15 -5
  202. package/dist/esm/plugins/code-block/index.js +3 -3
  203. package/dist/esm/plugins/code-block/nodeviews/highlighting-code-block.js +6 -3
  204. package/dist/esm/plugins/code-block/pm-plugins/main.js +11 -3
  205. package/dist/esm/plugins/extension/extension-api.js +9 -2
  206. package/dist/esm/plugins/extension/ui/styles.js +1 -1
  207. package/dist/esm/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  208. package/dist/esm/plugins/find-replace/FindReplaceToolbarButtonWithState.js +155 -0
  209. package/dist/esm/plugins/find-replace/index.js +14 -131
  210. package/dist/esm/plugins/find-replace/ui/Find.js +17 -10
  211. package/dist/esm/plugins/find-replace/ui/FindReplace.js +10 -3
  212. package/dist/esm/plugins/find-replace/ui/Replace.js +11 -4
  213. package/dist/esm/plugins/find-replace/ui/styles.js +39 -18
  214. package/dist/esm/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  215. package/dist/esm/plugins/floating-toolbar/ui/EmojiPickerButton.js +9 -4
  216. package/dist/esm/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  217. package/dist/esm/plugins/fragment/index.js +22 -0
  218. package/dist/esm/plugins/fragment/plugin-key.js +2 -0
  219. package/dist/esm/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
  220. package/dist/esm/plugins/index.js +2 -0
  221. package/dist/esm/plugins/list/actions/conversions.js +38 -71
  222. package/dist/esm/plugins/list/transforms.js +7 -1
  223. package/dist/esm/plugins/media/index.js +2 -3
  224. package/dist/esm/plugins/media/nodeviews/mediaGroup.js +2 -1
  225. package/dist/esm/plugins/media/nodeviews/mediaInline.js +11 -6
  226. package/dist/esm/plugins/media/nodeviews/mediaNodeUpdater.js +3 -3
  227. package/dist/esm/plugins/media/nodeviews/mediaSingle.js +7 -5
  228. package/dist/esm/plugins/media/nodeviews/styles.js +2 -0
  229. package/dist/esm/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  230. package/dist/esm/plugins/media/pm-plugins/main.js +47 -16
  231. package/dist/esm/plugins/media/toolbar/commands.js +45 -0
  232. package/dist/esm/plugins/media/toolbar/filePreviewItem.js +6 -2
  233. package/dist/esm/plugins/media/toolbar/index.js +88 -3
  234. package/dist/esm/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
  235. package/dist/esm/plugins/media/utils/media-common.js +1 -1
  236. package/dist/esm/plugins/media/utils/media-files.js +6 -1
  237. package/dist/esm/plugins/panel/actions.js +2 -2
  238. package/dist/esm/plugins/panel/index.js +5 -5
  239. package/dist/esm/plugins/panel/nodeviews/panel.js +2 -2
  240. package/dist/esm/plugins/panel/toolbar.js +9 -4
  241. package/dist/esm/plugins/panel/utils.js +13 -0
  242. package/dist/esm/plugins/rank.js +3 -2
  243. package/dist/esm/plugins/selection/pm-plugins/selection-main.js +50 -1
  244. package/dist/esm/plugins/status/ui/statusPicker.js +4 -2
  245. package/dist/esm/plugins/table/commands/insert.js +1 -2
  246. package/dist/esm/plugins/table/index.js +3 -2
  247. package/dist/esm/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
  248. package/dist/esm/plugins/table/pm-plugins/main.js +27 -4
  249. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  250. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  251. package/dist/esm/plugins/table/transforms/column-width.js +13 -3
  252. package/dist/esm/plugins/table/transforms/fix-tables.js +42 -4
  253. package/dist/esm/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  254. package/dist/esm/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  255. package/dist/esm/plugins/table/ui/common-styles.css.js +1 -1
  256. package/dist/esm/plugins/table/ui/consts.js +2 -2
  257. package/dist/esm/plugins/table/ui/messages.js +1 -1
  258. package/dist/esm/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  259. package/dist/esm/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  260. package/dist/esm/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
  261. package/dist/esm/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  262. package/dist/esm/plugins/text-formatting/index.js +3 -2
  263. package/dist/esm/plugins/type-ahead/ui/TypeAheadList.js +2 -1
  264. package/dist/esm/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
  265. package/dist/esm/ui/Appearance/FullPage/FullPageToolbar.js +67 -27
  266. package/dist/esm/ui/Appearance/FullPage/MainToolbar.js +20 -7
  267. package/dist/esm/ui/ColorPalette/Color/index.js +9 -16
  268. package/dist/esm/ui/ColorPalette/index.js +7 -4
  269. package/dist/esm/ui/ColorPickerButton/index.js +1 -1
  270. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +113 -62
  271. package/dist/esm/ui/ConfigPanel/FormContent.js +39 -26
  272. package/dist/esm/ui/ConfigPanel/transformers.js +488 -248
  273. package/dist/esm/ui/ConfigPanel/utils.js +1 -6
  274. package/dist/esm/ui/Dropdown/index.js +2 -1
  275. package/dist/esm/ui/DropdownMenu/index.js +7 -3
  276. package/dist/esm/ui/ElementBrowser/InsertMenu.js +1 -0
  277. package/dist/esm/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
  278. package/dist/esm/ui/LinkSearch/LinkSearchListItem.js +2 -2
  279. package/dist/esm/ui/Resizer/index.js +9 -1
  280. package/dist/esm/version-wrapper.js +1 -1
  281. package/dist/esm/version.json +1 -1
  282. package/dist/types/labs/next/full-page.d.ts +1 -1
  283. package/dist/types/nodeviews/ReactNodeView.d.ts +1 -1
  284. package/dist/types/nodeviews/SelectionBasedNodeView.d.ts +1 -0
  285. package/dist/types/plugins/analytics/types/enums.d.ts +1 -0
  286. package/dist/types/plugins/analytics/types/events.d.ts +7 -1
  287. package/dist/types/plugins/annotation/utils.d.ts +1 -1
  288. package/dist/types/plugins/avatar-group/index.d.ts +1 -0
  289. package/dist/types/plugins/avatar-group/ui/AvatarGroupPluginWrapper.d.ts +1 -0
  290. package/dist/types/plugins/before-primaryToolbar/index.d.ts +5 -0
  291. package/dist/types/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.d.ts +5 -0
  292. package/dist/types/plugins/code-bidi-warning/index.d.ts +4 -2
  293. package/dist/types/plugins/code-bidi-warning/pm-plugins/main.d.ts +4 -2
  294. package/dist/types/plugins/code-bidi-warning/pm-plugins/plugin-factory.d.ts +2 -1
  295. package/dist/types/plugins/code-bidi-warning/pm-plugins/types.d.ts +1 -0
  296. package/dist/types/plugins/code-block/index.d.ts +1 -1
  297. package/dist/types/plugins/code-block/nodeviews/highlighting-code-block.d.ts +12 -1
  298. package/dist/types/plugins/code-block/pm-plugins/main.d.ts +3 -1
  299. package/dist/types/plugins/code-block/types.d.ts +2 -0
  300. package/dist/types/plugins/feature-flags-context/get-enabled-feature-flag-keys.d.ts +1 -1
  301. package/dist/types/plugins/find-replace/FindReplaceToolbarButtonWithState.d.ts +15 -0
  302. package/dist/types/plugins/find-replace/index.d.ts +1 -0
  303. package/dist/types/plugins/find-replace/ui/Find.d.ts +1 -0
  304. package/dist/types/plugins/find-replace/ui/FindReplace.d.ts +1 -0
  305. package/dist/types/plugins/find-replace/ui/Replace.d.ts +1 -0
  306. package/dist/types/plugins/find-replace/ui/styles.d.ts +5 -14
  307. package/dist/types/plugins/floating-toolbar/ui/EmojiPickerButton.d.ts +1 -1
  308. package/dist/types/plugins/fragment/index.d.ts +5 -0
  309. package/dist/types/plugins/fragment/plugin-key.d.ts +2 -0
  310. package/dist/types/plugins/index.d.ts +2 -0
  311. package/dist/types/plugins/media/nodeviews/mediaInline.d.ts +3 -2
  312. package/dist/types/plugins/media/nodeviews/mediaNodeUpdater.d.ts +2 -2
  313. package/dist/types/plugins/media/nodeviews/mediaSingle.d.ts +1 -1
  314. package/dist/types/plugins/media/nodeviews/styles.d.ts +2 -0
  315. package/dist/types/plugins/media/toolbar/commands.d.ts +3 -0
  316. package/dist/types/plugins/media/toolbar/filePreviewItem.d.ts +2 -0
  317. package/dist/types/plugins/media/types.d.ts +0 -1
  318. package/dist/types/plugins/panel/actions.d.ts +1 -1
  319. package/dist/types/plugins/panel/types.d.ts +8 -2
  320. package/dist/types/plugins/quick-insert/index.d.ts +2 -1
  321. package/dist/types/plugins/table/commands/insert.d.ts +3 -0
  322. package/dist/types/plugins/table/pm-plugins/main.d.ts +2 -1
  323. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/types.d.ts +1 -0
  324. package/dist/types/plugins/table/transforms/column-width.d.ts +4 -1
  325. package/dist/types/plugins/table/transforms/fix-tables.d.ts +3 -2
  326. package/dist/types/plugins/table/types.d.ts +8 -0
  327. package/dist/types/plugins/table/ui/consts.d.ts +1 -1
  328. package/dist/types/types/editor-appearance-component.d.ts +2 -2
  329. package/dist/types/types/editor-props.d.ts +11 -1
  330. package/dist/types/types/feature-flags.d.ts +13 -0
  331. package/dist/types/types/index.d.ts +1 -1
  332. package/dist/types/ui/Appearance/FullPage/FullPageToolbar.d.ts +2 -2
  333. package/dist/types/ui/Appearance/FullPage/MainToolbar.d.ts +10 -1
  334. package/dist/types/ui/ColorPalette/Color/index.d.ts +8 -5
  335. package/dist/types/ui/ColorPalette/index.d.ts +1 -0
  336. package/dist/types/ui/ConfigPanel/transformers.d.ts +7 -1
  337. package/dist/types/ui/ConfigPanel/utils.d.ts +0 -1
  338. package/dist/types/ui/Resizer/index.d.ts +1 -0
  339. package/package.json +14 -10
  340. package/dist/cjs/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -38
  341. package/dist/es2019/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
  342. package/dist/esm/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
  343. package/dist/types/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.d.ts +0 -1
@@ -21,6 +21,8 @@ import { messages as cardMessages } from '../../card/messages';
21
21
  import { FilePreviewItem } from './filePreviewItem';
22
22
  import { downloadMedia, removeMediaGroupNode } from './utils';
23
23
  import { Fragment } from 'prosemirror-model';
24
+ import { changeInlineToMediaCard, removeInlineCard } from './commands';
25
+ import { MediaInlineNodeSelector, MediaSingleNodeSelector } from '../nodeviews/styles';
24
26
 
25
27
  const remove = (state, dispatch) => {
26
28
  if (dispatch) {
@@ -75,6 +77,7 @@ const generateMediaCardFloatingToolbar = (state, intl, mediaPluginState) => {
75
77
  mediaGroup
76
78
  } = state.schema.nodes;
77
79
  const items = [{
80
+ id: 'editor.media.view.switcher',
78
81
  type: 'dropdown',
79
82
  title: intl.formatMessage(messages.displayThumbnail),
80
83
  options: [{
@@ -98,7 +101,8 @@ const generateMediaCardFloatingToolbar = (state, intl, mediaPluginState) => {
98
101
  render: () => {
99
102
  return /*#__PURE__*/React.createElement(FilePreviewItem, {
100
103
  key: "editor.media.card.preview",
101
- mediaPluginState: mediaPluginState
104
+ mediaPluginState: mediaPluginState,
105
+ intl: intl
102
106
  });
103
107
  }
104
108
  }, {
@@ -130,6 +134,68 @@ const generateMediaCardFloatingToolbar = (state, intl, mediaPluginState) => {
130
134
  return items;
131
135
  };
132
136
 
137
+ const generateMediaInlineFloatingToolbar = (state, intl, mediaPluginState) => {
138
+ const {
139
+ mediaInline
140
+ } = state.schema.nodes;
141
+ const items = [{
142
+ id: 'editor.media.view.switcher',
143
+ type: 'dropdown',
144
+ title: intl.formatMessage(cardMessages.inline),
145
+ options: [{
146
+ title: intl.formatMessage(cardMessages.inline),
147
+ selected: true,
148
+ onClick: () => {
149
+ return true;
150
+ },
151
+ testId: 'inline-appearance'
152
+ }, {
153
+ title: intl.formatMessage(messages.displayThumbnail),
154
+ selected: false,
155
+ onClick: changeInlineToMediaCard,
156
+ testId: 'thumbnail-appearance'
157
+ }]
158
+ }, {
159
+ type: 'separator'
160
+ }, {
161
+ type: 'custom',
162
+ fallback: [],
163
+ render: () => {
164
+ return /*#__PURE__*/React.createElement(FilePreviewItem, {
165
+ key: "editor.media.card.preview",
166
+ mediaPluginState: mediaPluginState,
167
+ intl: intl
168
+ });
169
+ }
170
+ }, {
171
+ type: 'separator'
172
+ }, {
173
+ id: 'editor.media.card.download',
174
+ type: 'button',
175
+ icon: DownloadIcon,
176
+ onClick: () => {
177
+ downloadMedia(mediaPluginState);
178
+ return true;
179
+ },
180
+ title: intl.formatMessage(messages.download)
181
+ }, {
182
+ type: 'separator'
183
+ }, {
184
+ id: 'editor.media.delete',
185
+ type: 'button',
186
+ appearance: 'danger',
187
+ icon: RemoveIcon,
188
+ onMouseEnter: hoverDecoration(mediaInline, true),
189
+ onMouseLeave: hoverDecoration(mediaInline, false),
190
+ onFocus: hoverDecoration(mediaInline, true),
191
+ onBlur: hoverDecoration(mediaInline, false),
192
+ title: intl.formatMessage(commonMessages.remove),
193
+ onClick: removeInlineCard,
194
+ testId: 'media-toolbar-remove-button'
195
+ }];
196
+ return items;
197
+ };
198
+
133
199
  const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, mediaLinkingState) => {
134
200
  const {
135
201
  mediaSingle
@@ -282,9 +348,14 @@ export const floatingToolbar = (state, intl, options = {}) => {
282
348
  }
283
349
 
284
350
  let items = [];
285
- const parentNode = findParentNodeOfType(mediaGroup)(state.selection);
351
+ const parentMediaGroupNode = findParentNodeOfType(mediaGroup)(state.selection);
352
+ let selectedNodeType;
353
+
354
+ if (state.selection instanceof NodeSelection) {
355
+ selectedNodeType = state.selection.node.type;
356
+ }
286
357
 
287
- if (allowMediaInline && parentNode && parentNode.node.type === mediaGroup) {
358
+ if (allowMediaInline && (parentMediaGroupNode === null || parentMediaGroupNode === void 0 ? void 0 : parentMediaGroupNode.node.type) === mediaGroup) {
288
359
  const mediaOffset = state.selection.$from.parentOffset + 1;
289
360
 
290
361
  baseToolbar.getDomRef = () => {
@@ -295,7 +366,23 @@ export const floatingToolbar = (state, intl, options = {}) => {
295
366
  };
296
367
 
297
368
  items = generateMediaCardFloatingToolbar(state, intl, mediaPluginState);
369
+ } else if (allowMediaInline && selectedNodeType && selectedNodeType === mediaInline) {
370
+ baseToolbar.getDomRef = () => {
371
+ var _mediaPluginState$ele2;
372
+
373
+ const element = (_mediaPluginState$ele2 = mediaPluginState.element) === null || _mediaPluginState$ele2 === void 0 ? void 0 : _mediaPluginState$ele2.querySelector(`.${MediaInlineNodeSelector}`);
374
+ return element || mediaPluginState.element;
375
+ };
376
+
377
+ items = generateMediaInlineFloatingToolbar(state, intl, mediaPluginState);
298
378
  } else {
379
+ baseToolbar.getDomRef = () => {
380
+ var _mediaPluginState$ele3;
381
+
382
+ const element = (_mediaPluginState$ele3 = mediaPluginState.element) === null || _mediaPluginState$ele3 === void 0 ? void 0 : _mediaPluginState$ele3.querySelector(`.${MediaSingleNodeSelector}`);
383
+ return element || mediaPluginState.element;
384
+ };
385
+
299
386
  items = generateMediaSingleFloatingToolbar(state, intl, options, mediaPluginState, mediaLinkingState);
300
387
  }
301
388
 
@@ -343,7 +343,13 @@ export default class ResizableMediaSingle extends React.Component {
343
343
  return columResizingPluginState ? !columResizingPluginState.dragging : true;
344
344
  },
345
345
  nodeType: "media",
346
- dispatchAnalyticsEvent: this.props.dispatchAnalyticsEvent
346
+ dispatchAnalyticsEvent: this.props.dispatchAnalyticsEvent // when cursor is located below a media with caption,
347
+ // press “Up“ key will result cursor focus on an invalid position, (on the resize handler)
348
+ // This workaround adds an empty div inside the resize handler to prevent the issue.
349
+ ,
350
+ handleComponentFunc: () => /*#__PURE__*/React.createElement("div", {
351
+ contentEditable: false
352
+ })
347
353
  }), children));
348
354
  }
349
355
 
@@ -296,7 +296,7 @@ export const unwrapNestedMediaElements = html => {
296
296
  // ProseMirror should handle this case properly.
297
297
 
298
298
 
299
- if (mediaParent instanceof HTMLDivElement) {
299
+ if (mediaParent instanceof HTMLDivElement || mediaParent instanceof HTMLSpanElement && mediaParent.closest('[class*="emoji-common"]')) {
300
300
  return;
301
301
  } // Find the top most element that the parent has a valid container for the image.
302
302
  // Stop just before found the wrapper
@@ -111,7 +111,12 @@ export const insertMediaInlineNode = (view, mediaState, collection, inputMethod)
111
111
  collection
112
112
  });
113
113
  const space = state.schema.text(' ');
114
- const pos = state.selection.$to.pos;
114
+ let pos = state.selection.$to.pos; // If the selection is inside an empty list item set pos inside paragraph
115
+
116
+ if (isInListItem(state) && isInsidePotentialEmptyParagraph(state)) {
117
+ pos = pos + 1;
118
+ }
119
+
115
120
  let content = Fragment.from([mediaInlineNode, space]); // Delete the selection if a selection is made
116
121
 
117
122
  const deleteRange = findDeleteRange(state);
@@ -36,7 +36,7 @@ export const removePanel = () => (state, dispatch) => {
36
36
 
37
37
  return true;
38
38
  };
39
- export const changePanelType = (panelType, panelOptions = {}, UNSAFE_allowCustomPanel = false) => (state, dispatch) => {
39
+ export const changePanelType = (panelType, panelOptions = {}, allowCustomPanel = false) => (state, dispatch) => {
40
40
  const {
41
41
  schema: {
42
42
  nodes
@@ -53,7 +53,7 @@ export const changePanelType = (panelType, panelOptions = {}, UNSAFE_allowCustom
53
53
  let previousType = panelNode.node.attrs.panelType;
54
54
  let newTr;
55
55
 
56
- if (UNSAFE_allowCustomPanel) {
56
+ if (allowCustomPanel) {
57
57
  let previousColor = panelNode.node.attrs.panelColor || getPanelTypeBackground(previousType);
58
58
  let previousIcon = panelNode.node.attrs.panelIcon;
59
59
  let newPanelOptions = {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { customPanel, PanelType } from '@atlaskit/adf-schema';
2
+ import { panel, PanelType } from '@atlaskit/adf-schema';
3
3
  import { createPlugin } from './pm-plugins/main';
4
4
  import { getToolbarConfig } from './toolbar';
5
5
  import keymap from './pm-plugins/keymaps';
@@ -7,7 +7,7 @@ import { addAnalytics, ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, INPUT_METHOD,
7
7
  import { IconPanel, IconPanelNote, IconPanelSuccess, IconPanelWarning, IconPanelError } from '../quick-insert/assets';
8
8
  import { messages } from '../block-type/messages';
9
9
  import IconCustomPanel from '../quick-insert/assets/custom-panel';
10
- import { T75 } from '@atlaskit/theme/colors';
10
+ import { T50 } from '@atlaskit/theme/colors';
11
11
 
12
12
  const insertPanelTypeWithAnalytics = (panelAttributes, state, insert) => {
13
13
  const tr = insert(insertPanelType(panelAttributes, state));
@@ -34,7 +34,7 @@ const panelPlugin = (options = {}) => ({
34
34
  name: 'panel',
35
35
 
36
36
  nodes() {
37
- const panelNode = customPanel(!!options.UNSAFE_allowCustomPanel);
37
+ const panelNode = panel(!!options.allowCustomPanel);
38
38
  return [{
39
39
  name: 'panel',
40
40
  node: panelNode
@@ -127,7 +127,7 @@ const panelPlugin = (options = {}) => ({
127
127
 
128
128
  }];
129
129
 
130
- if (options.UNSAFE_allowCustomPanelEdit && options.UNSAFE_allowCustomPanel) {
130
+ if (options.allowCustomPanel && options.allowCustomPanelEdit) {
131
131
  quickInsertOptions.push({
132
132
  id: 'custompanel',
133
133
  title: formatMessage(messages.customPanel),
@@ -139,7 +139,7 @@ const panelPlugin = (options = {}) => ({
139
139
  return insertPanelTypeWithAnalytics({
140
140
  panelType: PanelType.CUSTOM,
141
141
  panelIcon: ':rainbow:',
142
- panelColor: T75
142
+ panelColor: T50
143
143
  }, state, insert);
144
144
  }
145
145
 
@@ -56,7 +56,7 @@ class PanelNodeView {
56
56
  const {
57
57
  dom,
58
58
  contentDOM
59
- } = DOMSerializer.renderSpec(document, panelAttrsToDom(node.attrs, pluginOptions.UNSAFE_allowCustomPanel || false));
59
+ } = DOMSerializer.renderSpec(document, panelAttrsToDom(node.attrs, pluginOptions.allowCustomPanel || false));
60
60
  this.getPos = getPos;
61
61
  this.dom = dom;
62
62
  this.contentDOM = contentDOM;
@@ -69,7 +69,7 @@ class PanelNodeView {
69
69
 
70
70
  this.icon.contentEditable = 'false';
71
71
  ReactDOM.render( /*#__PURE__*/React.createElement(PanelIcon, {
72
- allowCustomPanel: pluginOptions.UNSAFE_allowCustomPanel,
72
+ allowCustomPanel: pluginOptions.allowCustomPanel,
73
73
  panelAttributes: node.attrs,
74
74
  providerFactory: this.providerFactory
75
75
  }), this.icon);
@@ -4,7 +4,7 @@ import NoteIcon from '@atlaskit/icon/glyph/editor/note';
4
4
  import RemoveIcon from '@atlaskit/icon/glyph/editor/remove';
5
5
  import WarningIcon from '@atlaskit/icon/glyph/editor/warning';
6
6
  import ErrorIcon from '@atlaskit/icon/glyph/editor/error';
7
- import RemoveEmojiIcon from '../floating-toolbar/ui/EditorRemoveEmojiIcon';
7
+ import RemoveEmojiIcon from '@atlaskit/icon/glyph/editor/remove-emoji';
8
8
  import commonMessages from '../../messages';
9
9
  import { removePanel, changePanelType } from './actions';
10
10
  import { hoverDecoration } from '../base/pm-plugins/decoration';
@@ -20,8 +20,8 @@ export const panelIconMap = {
20
20
  [PanelType.INFO]: ':info:',
21
21
  [PanelType.NOTE]: ':note:',
22
22
  [PanelType.WARNING]: ':warning:',
23
- [PanelType.ERROR]: ':error:',
24
- [PanelType.SUCCESS]: ':success:',
23
+ [PanelType.ERROR]: ':cross_mark:',
24
+ [PanelType.SUCCESS]: ':check_mark:',
25
25
  [PanelType.TIP]: ':tip:'
26
26
  };
27
27
  export const getToolbarItems = (formatMessage, panelNodeType, isCustomPanelEnabled, isCustomPanelEditable, providerFactory, activePanelType, activePanelColor, activePanelIcon) => {
@@ -228,9 +228,14 @@ export const getToolbarConfig = (state, intl, options = {}, providerFactory) =>
228
228
  panelType,
229
229
  panelColor,
230
230
  panelIcon
231
- } = panelObject.node.attrs; // force toolbar to be turned on
231
+ } = panelObject.node.attrs;
232
232
 
233
- const items = getToolbarItems(formatMessage, nodeType, options.UNSAFE_allowCustomPanel || false, options.UNSAFE_allowCustomPanel && options.UNSAFE_allowCustomPanelEdit || false, providerFactory, panelType, options.UNSAFE_allowCustomPanel ? panelColor : undefined, options.UNSAFE_allowCustomPanel ? panelIcon : undefined);
233
+ const isStandardPanel = panelType => {
234
+ return panelType !== PanelType.CUSTOM ? panelType : undefined;
235
+ }; // force toolbar to be turned on
236
+
237
+
238
+ const items = getToolbarItems(formatMessage, nodeType, options.allowCustomPanel || false, options.allowCustomPanel && options.allowCustomPanelEdit || false, providerFactory, panelType, options.allowCustomPanel ? panelColor : undefined, options.allowCustomPanel ? panelIcon || isStandardPanel(panelType) : undefined);
234
239
 
235
240
  const getDomRef = editorView => {
236
241
  const domAtPos = editorView.domAtPos.bind(editorView);
@@ -16,11 +16,18 @@ export const panelAttrsToDom = (attrs, allowCustomPanel) => {
16
16
  const isCustomPanel = panelType === PanelType.CUSTOM && allowCustomPanel;
17
17
  const style = panelColor && isCustomPanel ? `background-color: ${panelColor}` : '';
18
18
  const hasIcon = !isCustomPanel || !!panelIcon;
19
- const panelAttrs = {
19
+ let panelAttrs = {
20
20
  class: PanelSharedCssClassName.prefix,
21
21
  'data-panel-type': panelType || PanelType.INFO,
22
22
  style
23
23
  };
24
+
25
+ if (panelColor && isCustomPanel) {
26
+ panelAttrs = { ...panelAttrs,
27
+ 'data-panel-color': panelColor
28
+ };
29
+ }
30
+
24
31
  const iconDiv = ['div', {
25
32
  class: PanelSharedCssClassName.icon
26
33
  }];
@@ -6,9 +6,10 @@ export default {
6
6
  // https://product-fabric.atlassian.net/wiki/spaces/E/pages/1113098008/Selection+Guide#Special-Cases
7
7
  'expandKeymap', 'tableSelectionKeymap', 'tableKeymap', 'captionKeymap', // selection keymap needs to be above gap cursor keymap so it can set node selections from
8
8
  // left/right arrows
9
- 'selectionKeymap', 'gapCursorKeymap', 'gapCursor', 'syncUrlText', 'fakeCursorToolbarPlugin', 'hyperLink', 'table', 'tableDecorations', 'hyperlinkInputRule', 'tablePMColResizing', 'hyperlinkKeymap', 'tableColResizing', 'undoRedoKeyMap', 'blockTypeKeyMap', 'tableEditing', 'filterStepsPlugin', 'pmCollab', 'collab', 'ruleInputRule', 'ruleKeymap', 'panel', 'media', 'mediaKeymap', 'mediaSingleKeymap', 'mediaEditor', 'unsupportedContent', 'jiraIssue', 'fakeTextCursor', 'helpDialog', 'helpDialogKeymap', 'macro', 'expand', 'extension', 'layout', 'contextPanel', 'floatingToolbar', 'clearMarksOnChange', 'reactNodeView', 'history', 'undoRedoPlugin', 'codeBlockIndent', 'placeholder', 'width', 'maxContentSize', 'multilineContent', 'grid', 'mobileDimensions', 'scrollGutterPlugin', 'analytics', 'findReplace', 'selection', 'avatarGroup', 'viewUpdateSubscription', 'inlineCode'],
9
+ 'selectionKeymap', 'gapCursorKeymap', 'gapCursor', 'syncUrlText', 'fakeCursorToolbarPlugin', 'hyperLink', 'table', 'tableDecorations', 'hyperlinkInputRule', 'tablePMColResizing', 'hyperlinkKeymap', 'tableColResizing', 'undoRedoKeyMap', 'blockTypeKeyMap', 'tableEditing', 'filterStepsPlugin', 'pmCollab', 'collab', 'ruleInputRule', 'ruleKeymap', 'panel', 'media', 'mediaKeymap', 'mediaSingleKeymap', 'mediaEditor', 'unsupportedContent', 'jiraIssue', 'fakeTextCursor', 'helpDialog', 'helpDialogKeymap', 'macro', 'expand', 'extension', 'layout', 'contextPanel', 'floatingToolbar', 'clearMarksOnChange', 'reactNodeView', 'history', 'undoRedoPlugin', 'codeBlockIndent', 'placeholder', 'width', 'maxContentSize', 'multilineContent', 'grid', 'mobileDimensions', 'scrollGutterPlugin', 'analytics', 'findReplace', 'selection', 'avatarGroup', 'viewUpdateSubscription', 'beforePrimaryToolbar', 'inlineCode'],
10
10
  nodes: ['doc', 'paragraph', 'text', 'bulletList', 'orderedList', 'listItem', 'heading', 'blockquote', 'codeBlock', 'rule', 'panel', 'mention', 'confluenceUnsupportedBlock', 'confluenceUnsupportedInline', 'unsupportedBlock', 'unsupportedInline', 'confluenceJiraIssue', 'hardBreak', 'emoji', 'placeholder', 'mediaSingle', 'mediaGroup', 'table', 'expand', 'nestedExpand', 'media', 'tableHeader', 'decisionList', 'tableRow', 'decisionItem', 'tableCell', 'taskList', 'taskItem', 'extension', 'bodiedExtension', 'inlineExtension', 'layoutSection', 'layoutColumn', 'inlineCard', 'blockCard', 'embedCard'],
11
- marks: [// Inline marks
11
+ marks: [// Fragment mark is both for inline and block elements
12
+ 'fragment', // Inline marks
12
13
  'link', 'em', 'strong', 'textColor', 'strike', 'subsup', 'underline', 'code', 'typeAheadQuery', // Block marks
13
14
  'alignment', 'breakout', 'indentation', 'annotation', //Unsupported mark
14
15
  'unsupportedMark', 'unsupportedNodeAttribute']
@@ -8,6 +8,25 @@ export const getInitialState = state => ({
8
8
  decorationSet: getDecorations(state.tr),
9
9
  selection: state.selection
10
10
  });
11
+
12
+ const toggleContentEditable = (node, root = false) => {
13
+ if (root || node.getAttribute('contenteditable') === 'true') {
14
+ const wasTrue = node.getAttribute('contenteditable') === 'true';
15
+ node.setAttribute('contenteditable', 'false');
16
+ requestAnimationFrame(() => {
17
+ if (wasTrue) {
18
+ node.setAttribute('contenteditable', 'true');
19
+ } else {
20
+ node.removeAttribute('contenteditable');
21
+ }
22
+ });
23
+ } // any children with contenteditable = true block selection from proceeding
24
+
25
+
26
+ const children = Array.from(node.children);
27
+ children.forEach(child => toggleContentEditable(child));
28
+ };
29
+
11
30
  export const createPlugin = (dispatch, dispatchAnalyticsEvent, options = {}) => {
12
31
  return new Plugin({
13
32
  key: selectionPluginKey,
@@ -95,10 +114,13 @@ export const createPlugin = (dispatch, dispatchAnalyticsEvent, options = {}) =>
95
114
  return false;
96
115
  },
97
116
  keydown: (editorView, event) => {
98
- // Firefox bugfix to bypass issue with editing text adjacent to a DOM node with
117
+ const {
118
+ state
119
+ } = editorView; // Firefox bugfix to bypass issue with editing text adjacent to a DOM node with
99
120
  // contenteditable="false". (See https://product-fabric.atlassian.net/browse/ED-9452)
100
121
  // On keypress, if the head of cursor selection touches a node with contenteditable="false",
101
122
  // we temporarily remove the attribute, wait one tick, then restore it with its original value.
123
+
102
124
  if (browser.gecko) {
103
125
  const node = editorView.nodeDOM(editorView.state.selection.head);
104
126
 
@@ -108,6 +130,31 @@ export const createPlugin = (dispatch, dispatchAnalyticsEvent, options = {}) =>
108
130
  node.setAttribute('contenteditable', 'false');
109
131
  });
110
132
  }
133
+ } // Bugfix for block ReactNodeViews like table and extension
134
+ // They could not be selected with Shift + ArrowDown/ArrowUp
135
+ // Fixed when contenteditable = false, but then you couldn't edit their contents
136
+ // Therefore, briefly set contenteditable=false to allow the selection through, then set it back to true
137
+
138
+
139
+ if (event instanceof KeyboardEvent && event.shiftKey && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
140
+ let pos;
141
+
142
+ if (event.key === 'ArrowDown') {
143
+ pos = state.selection.$head.after();
144
+ } else {
145
+ pos = state.selection.$head.before() - 1; // block extensions only take up one position, dont need to get before()
146
+
147
+ if (!editorView.nodeDOM(pos)) {
148
+ pos = state.doc.resolve(pos).before();
149
+ }
150
+ }
151
+
152
+ const node = editorView.nodeDOM(pos);
153
+
154
+ if (node instanceof HTMLDivElement && node.className.includes('View-content-wrap') // class added by ReactNodeView
155
+ ) {
156
+ toggleContentEditable(node, true);
157
+ }
111
158
  }
112
159
 
113
160
  return false;
@@ -203,7 +203,8 @@ export class StatusPickerWithoutAnalytcs extends React.Component {
203
203
  } = this.props;
204
204
  const {
205
205
  color,
206
- text
206
+ text,
207
+ localId
207
208
  } = this.state;
208
209
  return target && /*#__PURE__*/React.createElement(PopupWithListeners, {
209
210
  target: target,
@@ -221,7 +222,8 @@ export class StatusPickerWithoutAnalytcs extends React.Component {
221
222
  onColorClick: this.onColorClick,
222
223
  onColorHover: this.onColorHover,
223
224
  onTextChanged: this.onTextChanged,
224
- onEnter: this.onEnter
225
+ onEnter: this.onEnter,
226
+ localId: localId
225
227
  })));
226
228
  }
227
229
 
@@ -22,7 +22,7 @@ function addColumnAtCustomStep(column) {
22
22
  };
23
23
  }
24
24
 
25
- function addColumnAt(column, allowAddColumnCustomStep = false, view) {
25
+ export function addColumnAt(column, allowAddColumnCustomStep = false, view) {
26
26
  return tr => {
27
27
  let updatedTr = tr;
28
28
 
@@ -44,7 +44,6 @@ function addColumnAt(column, allowAddColumnCustomStep = false, view) {
44
44
  } // :: (EditorState, dispatch: ?(tr: Transaction)) → bool
45
45
  // Command to add a column before the column with the selection.
46
46
 
47
-
48
47
  export const addColumnBefore = (state, dispatch, view) => {
49
48
  const table = findTable(state.selection);
50
49
 
@@ -49,6 +49,7 @@ const tablesPlugin = options => ({
49
49
  return [{
50
50
  name: 'table',
51
51
  plugin: ({
52
+ dispatchAnalyticsEvent,
52
53
  dispatch,
53
54
  portalProviderAPI,
54
55
  eventDispatcher
@@ -60,7 +61,7 @@ const tablesPlugin = options => ({
60
61
  breakoutEnabled,
61
62
  tableOptions
62
63
  } = options || {};
63
- return createPlugin(dispatch, portalProviderAPI, eventDispatcher, pluginConfig(tableOptions), breakoutEnabled && dynamicSizingEnabled, breakoutEnabled, fullWidthEnabled, wasFullWidthEnabled);
64
+ return createPlugin(dispatchAnalyticsEvent, dispatch, portalProviderAPI, eventDispatcher, pluginConfig(tableOptions), breakoutEnabled && dynamicSizingEnabled, breakoutEnabled, fullWidthEnabled, wasFullWidthEnabled);
64
65
  }
65
66
  }, {
66
67
  name: 'tablePMColResizing',
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import { tableCellBorderWidth } from '@atlaskit/editor-common';
3
2
  import { ShadowEvent, TableCssClassName as ClassName } from '../types';
4
3
  import { tableInsertColumnButtonSize } from '../ui/consts';
5
4
  import { updateShadowListForStickyStyles } from './update-overflow-shadows';
@@ -54,7 +53,7 @@ export class OverflowShadowsObserver {
54
53
  }, {
55
54
  threshold: [0, 1],
56
55
  root: this.wrapper,
57
- rootMargin: `0px ${tableInsertColumnButtonSize / 2 - tableCellBorderWidth}px 0px 0px`
56
+ rootMargin: `0px ${tableInsertColumnButtonSize / 2}px 0px 0px`
58
57
  });
59
58
  return;
60
59
  }
@@ -10,7 +10,7 @@ import { pluginKey as decorationsPluginKey } from '../pm-plugins/decorations/plu
10
10
  import { fixTables, replaceSelectedTable } from '../transforms';
11
11
  import { TableCssClassName as ClassName } from '../types';
12
12
  import { findControlsHoverDecoration, updateResizeHandles } from '../utils';
13
- import { INPUT_METHOD } from '../../analytics';
13
+ import { ACTION, ACTION_SUBJECT, EVENT_TYPE, INPUT_METHOD } from '../../analytics';
14
14
  import { defaultTableSelection } from './default-table-selection';
15
15
  import { createPluginState, getPluginState, pluginKey } from './plugin-factory';
16
16
  import TableCellNodeView from '../nodeviews/tableCell';
@@ -18,7 +18,7 @@ let isBreakoutEnabled;
18
18
  let isDynamicTextSizingEnabled;
19
19
  let isFullWidthModeEnabled;
20
20
  let wasFullWidthModeEnabled;
21
- export const createPlugin = (dispatch, portalProviderAPI, eventDispatcher, pluginConfig, dynamicTextSizing, breakoutEnabled, fullWidthModeEnabled, previousFullWidthModeEnabled) => {
21
+ export const createPlugin = (dispatchAnalyticsEvent, dispatch, portalProviderAPI, eventDispatcher, pluginConfig, dynamicTextSizing, breakoutEnabled, fullWidthModeEnabled, previousFullWidthModeEnabled) => {
22
22
  var _window;
23
23
 
24
24
  isBreakoutEnabled = breakoutEnabled;
@@ -47,13 +47,34 @@ export const createPlugin = (dispatch, portalProviderAPI, eventDispatcher, plugi
47
47
  const tableCellNodeview = pluginConfig.tableCellOptimization ? {
48
48
  tableCell: (node, view, getPos) => new TableCellNodeView(node, view, getPos, observer),
49
49
  tableHeader: (node, view, getPos) => new TableCellNodeView(node, view, getPos, observer)
50
- } : {};
50
+ } : {}; // Used to prevent invalid table cell spans being reported more than once per editor/document
51
+
52
+ const invalidTableIds = [];
51
53
  return new Plugin({
52
54
  state: state,
53
55
  key: pluginKey,
54
56
  appendTransaction: (transactions, oldState, newState) => {
55
57
  const tr = transactions.find(tr => tr.getMeta('uiEvent') === 'cut');
56
58
 
59
+ function reportInvalidTableCellSpanAttrs(invalidNodeAttr) {
60
+ if (invalidTableIds.find(id => id === invalidNodeAttr.tableLocalId)) {
61
+ return;
62
+ }
63
+
64
+ invalidTableIds.push(invalidNodeAttr.tableLocalId);
65
+ dispatchAnalyticsEvent({
66
+ action: ACTION.INVALID_DOCUMENT_ENCOUNTERED,
67
+ actionSubject: ACTION_SUBJECT.EDITOR,
68
+ eventType: EVENT_TYPE.OPERATIONAL,
69
+ attributes: {
70
+ nodeType: invalidNodeAttr.nodeType,
71
+ reason: `${invalidNodeAttr.attribute}: ${invalidNodeAttr.reason}`,
72
+ tableLocalId: invalidNodeAttr.tableLocalId,
73
+ spanValue: invalidNodeAttr.spanValue
74
+ }
75
+ });
76
+ }
77
+
57
78
  if (tr) {
58
79
  // "fixTables" removes empty rows as we don't allow that in schema
59
80
  const updatedTr = handleCut(tr, oldState, newState);
@@ -61,7 +82,7 @@ export const createPlugin = (dispatch, portalProviderAPI, eventDispatcher, plugi
61
82
  }
62
83
 
63
84
  if (transactions.find(tr => tr.docChanged)) {
64
- return fixTables(newState.tr);
85
+ return fixTables(newState.tr, reportInvalidTableCellSpanAttrs);
65
86
  }
66
87
  },
67
88
  view: editorView => {
@@ -9,9 +9,9 @@ export const generateColgroup = table => {
9
9
  // We slice here to guard against our colwidth array having more entries
10
10
  // Than the we actually span. We'll patch the document at a later point.
11
11
  cell.attrs.colwidth.slice(0, colspan).forEach(width => {
12
- cols.push(['col', {
12
+ cols.push(['col', width ? {
13
13
  style: `width: ${width}px;`
14
- }]);
14
+ } : {}]);
15
15
  });
16
16
  } else {
17
17
  // When we have merged cells on the first row (firstChild),
@@ -25,6 +25,7 @@ export const getResizeState = ({
25
25
  cols,
26
26
  widths,
27
27
  maxSize,
28
+ tableWidth,
28
29
  overflow
29
30
  };
30
31
  } // Getting the resize state from DOM
@@ -42,6 +43,7 @@ export const getResizeState = ({
42
43
  cols,
43
44
  widths,
44
45
  maxSize,
46
+ tableWidth,
45
47
  overflow
46
48
  };
47
49
  }; // updates Colgroup DOM node with new widths
@@ -1,4 +1,5 @@
1
1
  import { TableMap } from '@atlaskit/editor-tables/table-map';
2
+ import { tableNewColumnMinWidth } from '@atlaskit/editor-common';
2
3
  import { hasTableBeenResized } from '../pm-plugins/table-resizing/utils';
3
4
  import { setMeta } from './metadata';
4
5
  import { getResizeState, normaliseTableLayout } from '../pm-plugins/table-resizing/utils/resize-state';
@@ -105,7 +106,10 @@ export const updateColumnWidths = (resizeState, table, start) => tr => {
105
106
  return tr.setSelection(selectionBookmark.resolve(tr.doc));
106
107
  };
107
108
  /**
108
- * This function is called when user inserts/deletes a column in a table to rescale all columns.
109
+ * This function is called when user inserts/deletes a column in a table to;
110
+ * - rescale all columns (if the table did not overflow before the insertion)
111
+ * - and update column widths.
112
+ *
109
113
  * This is done manually to avoid a multi-dispatch in TableComponent. See [ED-8288].
110
114
  * @param table
111
115
  * @param view
@@ -113,6 +117,8 @@ export const updateColumnWidths = (resizeState, table, start) => tr => {
113
117
  */
114
118
 
115
119
  export const rescaleColumns = (table, view) => tr => {
120
+ // If the table has been not been resized we skip updating the size
121
+ // of columns here.
116
122
  if (!view || !hasTableBeenResized(table.node)) {
117
123
  return tr;
118
124
  }
@@ -128,7 +134,8 @@ export const rescaleColumns = (table, view) => tr => {
128
134
  return tr;
129
135
  }
130
136
 
131
- const layout = normaliseTableLayout(tableRef === null || tableRef === void 0 ? void 0 : tableRef.dataset.layout);
137
+ const layout = normaliseTableLayout(tableRef === null || tableRef === void 0 ? void 0 : tableRef.dataset.layout); // The is the width the table can reach before overflowing
138
+
132
139
  const maxSize = getTableMaxWidth({
133
140
  table: table.node,
134
141
  tableStart: table.start,
@@ -144,8 +151,11 @@ export const rescaleColumns = (table, view) => tr => {
144
151
  domAtPos,
145
152
  maxSize
146
153
  });
154
+ const previousTableWidth = resizeState.tableWidth - tableNewColumnMinWidth;
155
+ const tableDidntPreviouslyOverflow = previousTableWidth <= maxSize; // If the new table width will result in the table going into an overflow state
156
+ // we resize the cells to avoid the overflow occuring
147
157
 
148
- if (resizeState.overflow) {
158
+ if (tableDidntPreviouslyOverflow && resizeState.overflow) {
149
159
  resizeState = scaleTableTo(resizeState, maxSize);
150
160
  }
151
161