@atlaskit/editor-core 151.2.0 → 152.0.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 (311) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/cjs/create-editor/ReactEditorView.js +22 -8
  3. package/dist/cjs/create-editor/create-plugins-list.js +25 -9
  4. package/dist/cjs/labs/next/presets/cxhtml.js +1 -2
  5. package/dist/cjs/nodeviews/ReactNodeView.js +2 -2
  6. package/dist/cjs/nodeviews/SelectionBasedNodeView.js +6 -0
  7. package/dist/cjs/plugins/analytics/types/enums.js +1 -0
  8. package/dist/cjs/plugins/annotation/utils.js +19 -8
  9. package/dist/cjs/plugins/avatar-group/index.js +2 -1
  10. package/dist/cjs/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
  11. package/dist/cjs/plugins/before-primaryToolbar/index.js +26 -0
  12. package/dist/cjs/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +28 -0
  13. package/dist/cjs/plugins/extension/extension-api.js +10 -2
  14. package/dist/cjs/plugins/extension/ui/styles.js +1 -1
  15. package/dist/cjs/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  16. package/dist/cjs/plugins/find-replace/FindReplaceToolbarButtonWithState.js +172 -0
  17. package/dist/cjs/plugins/find-replace/index.js +14 -137
  18. package/dist/cjs/plugins/find-replace/ui/Find.js +16 -9
  19. package/dist/cjs/plugins/find-replace/ui/FindReplace.js +9 -2
  20. package/dist/cjs/plugins/find-replace/ui/Replace.js +11 -3
  21. package/dist/cjs/plugins/find-replace/ui/styles.js +44 -35
  22. package/dist/cjs/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -4
  23. package/dist/cjs/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  24. package/dist/cjs/plugins/fragment/index.js +34 -0
  25. package/dist/cjs/plugins/fragment/plugin-key.js +11 -0
  26. package/dist/cjs/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +1 -1
  27. package/dist/cjs/plugins/index.js +16 -0
  28. package/dist/cjs/plugins/list/actions/conversions.js +39 -71
  29. package/dist/cjs/plugins/list/transforms.js +7 -1
  30. package/dist/cjs/plugins/media/index.js +2 -3
  31. package/dist/cjs/plugins/media/nodeviews/mediaGroup.js +3 -1
  32. package/dist/cjs/plugins/media/nodeviews/mediaInline.js +12 -5
  33. package/dist/cjs/plugins/media/nodeviews/mediaSingle.js +6 -4
  34. package/dist/cjs/plugins/media/nodeviews/styles.js +6 -1
  35. package/dist/cjs/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  36. package/dist/cjs/plugins/media/pm-plugins/main.js +49 -15
  37. package/dist/cjs/plugins/media/toolbar/commands.js +59 -0
  38. package/dist/cjs/plugins/media/toolbar/filePreviewItem.js +7 -2
  39. package/dist/cjs/plugins/media/toolbar/index.js +90 -3
  40. package/dist/cjs/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
  41. package/dist/cjs/plugins/media/utils/media-common.js +1 -1
  42. package/dist/cjs/plugins/media/utils/media-files.js +5 -1
  43. package/dist/cjs/plugins/panel/actions.js +2 -2
  44. package/dist/cjs/plugins/panel/index.js +3 -3
  45. package/dist/cjs/plugins/panel/nodeviews/panel.js +2 -2
  46. package/dist/cjs/plugins/panel/toolbar.js +10 -5
  47. package/dist/cjs/plugins/panel/utils.js +15 -0
  48. package/dist/cjs/plugins/rank.js +3 -2
  49. package/dist/cjs/plugins/selection/pm-plugins/selection-main.js +49 -1
  50. package/dist/cjs/plugins/status/ui/statusPicker.js +4 -2
  51. package/dist/cjs/plugins/table/commands/insert.js +1 -0
  52. package/dist/cjs/plugins/table/index.js +3 -2
  53. package/dist/cjs/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -3
  54. package/dist/cjs/plugins/table/pm-plugins/main.js +26 -3
  55. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  56. package/dist/cjs/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  57. package/dist/cjs/plugins/table/transforms/column-width.js +14 -5
  58. package/dist/cjs/plugins/table/transforms/fix-tables.js +43 -6
  59. package/dist/cjs/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  60. package/dist/cjs/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  61. package/dist/cjs/plugins/table/ui/common-styles.css.js +1 -1
  62. package/dist/cjs/plugins/table/ui/consts.js +1 -1
  63. package/dist/cjs/plugins/table/ui/messages.js +1 -1
  64. package/dist/cjs/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  65. package/dist/cjs/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  66. package/dist/cjs/plugins/tasks-and-decisions/pm-plugins/main.js +2 -2
  67. package/dist/cjs/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  68. package/dist/cjs/plugins/text-formatting/index.js +2 -1
  69. package/dist/cjs/plugins/type-ahead/ui/TypeAheadList.js +1 -0
  70. package/dist/cjs/ui/Appearance/FullPage/FullPageToolbar.js +77 -26
  71. package/dist/cjs/ui/Appearance/FullPage/MainToolbar.js +32 -9
  72. package/dist/cjs/ui/ColorPalette/Color/index.js +8 -18
  73. package/dist/cjs/ui/ColorPalette/index.js +7 -4
  74. package/dist/cjs/ui/ColorPickerButton/index.js +1 -1
  75. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +114 -61
  76. package/dist/cjs/ui/ConfigPanel/FormContent.js +39 -26
  77. package/dist/cjs/ui/ConfigPanel/transformers.js +490 -248
  78. package/dist/cjs/ui/ConfigPanel/utils.js +2 -10
  79. package/dist/cjs/ui/DropdownMenu/index.js +3 -1
  80. package/dist/cjs/ui/LinkSearch/LinkSearchListItem.js +1 -1
  81. package/dist/cjs/ui/Resizer/index.js +9 -1
  82. package/dist/cjs/version-wrapper.js +1 -1
  83. package/dist/cjs/version.json +1 -1
  84. package/dist/es2019/create-editor/ReactEditorView.js +19 -8
  85. package/dist/es2019/create-editor/create-plugins-list.js +26 -10
  86. package/dist/es2019/labs/next/presets/cxhtml.js +1 -2
  87. package/dist/es2019/nodeviews/ReactNodeView.js +1 -1
  88. package/dist/es2019/nodeviews/SelectionBasedNodeView.js +11 -0
  89. package/dist/es2019/plugins/analytics/types/enums.js +1 -0
  90. package/dist/es2019/plugins/annotation/utils.js +18 -7
  91. package/dist/es2019/plugins/avatar-group/index.js +2 -1
  92. package/dist/es2019/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +3 -2
  93. package/dist/es2019/plugins/before-primaryToolbar/index.js +15 -0
  94. package/dist/es2019/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
  95. package/dist/es2019/plugins/extension/extension-api.js +9 -2
  96. package/dist/es2019/plugins/extension/ui/styles.js +6 -0
  97. package/dist/es2019/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  98. package/dist/es2019/plugins/find-replace/FindReplaceToolbarButtonWithState.js +152 -0
  99. package/dist/es2019/plugins/find-replace/index.js +15 -128
  100. package/dist/es2019/plugins/find-replace/ui/Find.js +18 -10
  101. package/dist/es2019/plugins/find-replace/ui/FindReplace.js +11 -3
  102. package/dist/es2019/plugins/find-replace/ui/Replace.js +12 -4
  103. package/dist/es2019/plugins/find-replace/ui/styles.js +37 -47
  104. package/dist/es2019/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  105. package/dist/es2019/plugins/floating-toolbar/ui/EmojiPickerButton.js +10 -2
  106. package/dist/es2019/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  107. package/dist/es2019/plugins/fragment/index.js +22 -0
  108. package/dist/es2019/plugins/fragment/plugin-key.js +2 -0
  109. package/dist/es2019/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
  110. package/dist/es2019/plugins/index.js +2 -0
  111. package/dist/es2019/plugins/list/actions/conversions.js +38 -69
  112. package/dist/es2019/plugins/list/transforms.js +5 -1
  113. package/dist/es2019/plugins/media/index.js +2 -2
  114. package/dist/es2019/plugins/media/nodeviews/mediaGroup.js +2 -1
  115. package/dist/es2019/plugins/media/nodeviews/mediaInline.js +8 -4
  116. package/dist/es2019/plugins/media/nodeviews/mediaSingle.js +7 -5
  117. package/dist/es2019/plugins/media/nodeviews/styles.js +2 -0
  118. package/dist/es2019/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  119. package/dist/es2019/plugins/media/pm-plugins/main.js +32 -17
  120. package/dist/es2019/plugins/media/toolbar/commands.js +47 -0
  121. package/dist/es2019/plugins/media/toolbar/filePreviewItem.js +6 -2
  122. package/dist/es2019/plugins/media/toolbar/index.js +90 -3
  123. package/dist/es2019/plugins/media/ui/ResizableMediaSingle/index.js +7 -1
  124. package/dist/es2019/plugins/media/utils/media-common.js +1 -1
  125. package/dist/es2019/plugins/media/utils/media-files.js +6 -1
  126. package/dist/es2019/plugins/panel/actions.js +2 -2
  127. package/dist/es2019/plugins/panel/index.js +5 -5
  128. package/dist/es2019/plugins/panel/nodeviews/panel.js +2 -2
  129. package/dist/es2019/plugins/panel/toolbar.js +10 -5
  130. package/dist/es2019/plugins/panel/utils.js +8 -1
  131. package/dist/es2019/plugins/rank.js +3 -2
  132. package/dist/es2019/plugins/selection/pm-plugins/selection-main.js +48 -1
  133. package/dist/es2019/plugins/status/ui/statusPicker.js +4 -2
  134. package/dist/es2019/plugins/table/commands/insert.js +1 -2
  135. package/dist/es2019/plugins/table/index.js +2 -1
  136. package/dist/es2019/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
  137. package/dist/es2019/plugins/table/pm-plugins/main.js +25 -4
  138. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  139. package/dist/es2019/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  140. package/dist/es2019/plugins/table/transforms/column-width.js +13 -3
  141. package/dist/es2019/plugins/table/transforms/fix-tables.js +43 -5
  142. package/dist/es2019/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  143. package/dist/es2019/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  144. package/dist/es2019/plugins/table/ui/common-styles.css.js +5 -1
  145. package/dist/es2019/plugins/table/ui/consts.js +2 -2
  146. package/dist/es2019/plugins/table/ui/messages.js +1 -1
  147. package/dist/es2019/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  148. package/dist/es2019/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  149. package/dist/es2019/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
  150. package/dist/es2019/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  151. package/dist/es2019/plugins/text-formatting/index.js +3 -2
  152. package/dist/es2019/plugins/type-ahead/ui/TypeAheadList.js +2 -1
  153. package/dist/es2019/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
  154. package/dist/es2019/ui/Appearance/FullPage/FullPageToolbar.js +60 -27
  155. package/dist/es2019/ui/Appearance/FullPage/MainToolbar.js +51 -7
  156. package/dist/es2019/ui/ColorPalette/Color/index.js +9 -18
  157. package/dist/es2019/ui/ColorPalette/index.js +7 -4
  158. package/dist/es2019/ui/ColorPickerButton/index.js +1 -1
  159. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +101 -49
  160. package/dist/es2019/ui/ConfigPanel/FormContent.js +35 -26
  161. package/dist/es2019/ui/ConfigPanel/transformers.js +243 -72
  162. package/dist/es2019/ui/ConfigPanel/utils.js +1 -2
  163. package/dist/es2019/ui/Dropdown/index.js +2 -1
  164. package/dist/es2019/ui/DropdownMenu/index.js +7 -3
  165. package/dist/es2019/ui/ElementBrowser/InsertMenu.js +1 -0
  166. package/dist/es2019/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
  167. package/dist/es2019/ui/LinkSearch/LinkSearchListItem.js +2 -2
  168. package/dist/es2019/ui/Resizer/index.js +9 -1
  169. package/dist/es2019/version-wrapper.js +1 -1
  170. package/dist/es2019/version.json +1 -1
  171. package/dist/esm/create-editor/ReactEditorView.js +22 -8
  172. package/dist/esm/create-editor/create-plugins-list.js +26 -10
  173. package/dist/esm/labs/next/presets/cxhtml.js +1 -2
  174. package/dist/esm/nodeviews/ReactNodeView.js +2 -2
  175. package/dist/esm/nodeviews/SelectionBasedNodeView.js +7 -0
  176. package/dist/esm/plugins/analytics/types/enums.js +1 -0
  177. package/dist/esm/plugins/annotation/utils.js +18 -7
  178. package/dist/esm/plugins/avatar-group/index.js +2 -1
  179. package/dist/esm/plugins/avatar-group/ui/AvatarGroupPluginWrapper.js +5 -2
  180. package/dist/esm/plugins/before-primaryToolbar/index.js +15 -0
  181. package/dist/esm/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.js +12 -0
  182. package/dist/esm/plugins/extension/extension-api.js +9 -2
  183. package/dist/esm/plugins/extension/ui/styles.js +1 -1
  184. package/dist/esm/plugins/feature-flags-context/feature-flags-from-props.js +4 -2
  185. package/dist/esm/plugins/find-replace/FindReplaceToolbarButtonWithState.js +155 -0
  186. package/dist/esm/plugins/find-replace/index.js +14 -131
  187. package/dist/esm/plugins/find-replace/ui/Find.js +17 -10
  188. package/dist/esm/plugins/find-replace/ui/FindReplace.js +10 -3
  189. package/dist/esm/plugins/find-replace/ui/Replace.js +11 -4
  190. package/dist/esm/plugins/find-replace/ui/styles.js +39 -18
  191. package/dist/esm/plugins/floating-toolbar/ui/DropdownMenu.js +2 -1
  192. package/dist/esm/plugins/floating-toolbar/ui/EmojiPickerButton.js +9 -4
  193. package/dist/esm/plugins/floating-toolbar/ui/Toolbar.js +1 -1
  194. package/dist/esm/plugins/fragment/index.js +22 -0
  195. package/dist/esm/plugins/fragment/plugin-key.js +2 -0
  196. package/dist/esm/plugins/hyperlink/ui/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -2
  197. package/dist/esm/plugins/index.js +2 -0
  198. package/dist/esm/plugins/list/actions/conversions.js +38 -71
  199. package/dist/esm/plugins/list/transforms.js +7 -1
  200. package/dist/esm/plugins/media/index.js +2 -3
  201. package/dist/esm/plugins/media/nodeviews/mediaGroup.js +2 -1
  202. package/dist/esm/plugins/media/nodeviews/mediaInline.js +11 -6
  203. package/dist/esm/plugins/media/nodeviews/mediaSingle.js +7 -5
  204. package/dist/esm/plugins/media/nodeviews/styles.js +2 -0
  205. package/dist/esm/plugins/media/pm-plugins/alt-text/ui/AltTextEdit.js +5 -1
  206. package/dist/esm/plugins/media/pm-plugins/main.js +47 -16
  207. package/dist/esm/plugins/media/toolbar/commands.js +45 -0
  208. package/dist/esm/plugins/media/toolbar/filePreviewItem.js +6 -2
  209. package/dist/esm/plugins/media/toolbar/index.js +88 -3
  210. package/dist/esm/plugins/media/ui/ResizableMediaSingle/index.js +9 -1
  211. package/dist/esm/plugins/media/utils/media-common.js +1 -1
  212. package/dist/esm/plugins/media/utils/media-files.js +6 -1
  213. package/dist/esm/plugins/panel/actions.js +2 -2
  214. package/dist/esm/plugins/panel/index.js +5 -5
  215. package/dist/esm/plugins/panel/nodeviews/panel.js +2 -2
  216. package/dist/esm/plugins/panel/toolbar.js +9 -4
  217. package/dist/esm/plugins/panel/utils.js +13 -0
  218. package/dist/esm/plugins/rank.js +3 -2
  219. package/dist/esm/plugins/selection/pm-plugins/selection-main.js +50 -1
  220. package/dist/esm/plugins/status/ui/statusPicker.js +4 -2
  221. package/dist/esm/plugins/table/commands/insert.js +1 -2
  222. package/dist/esm/plugins/table/index.js +3 -2
  223. package/dist/esm/plugins/table/nodeviews/OverflowShadowsObserver.js +1 -2
  224. package/dist/esm/plugins/table/pm-plugins/main.js +27 -4
  225. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/colgroup.js +2 -2
  226. package/dist/esm/plugins/table/pm-plugins/table-resizing/utils/resize-state.js +2 -0
  227. package/dist/esm/plugins/table/transforms/column-width.js +13 -3
  228. package/dist/esm/plugins/table/transforms/fix-tables.js +42 -4
  229. package/dist/esm/plugins/table/ui/FloatingContextualButton/index.js +3 -2
  230. package/dist/esm/plugins/table/ui/FloatingContextualMenu/ContextualMenu.js +1 -0
  231. package/dist/esm/plugins/table/ui/common-styles.css.js +1 -1
  232. package/dist/esm/plugins/table/ui/consts.js +2 -2
  233. package/dist/esm/plugins/table/ui/messages.js +1 -1
  234. package/dist/esm/plugins/tasks-and-decisions/nodeviews/decisionItem.js +1 -1
  235. package/dist/esm/plugins/tasks-and-decisions/nodeviews/taskItem.js +1 -1
  236. package/dist/esm/plugins/tasks-and-decisions/pm-plugins/main.js +3 -3
  237. package/dist/esm/plugins/text-color/ui/ToolbarTextColor/index.js +2 -1
  238. package/dist/esm/plugins/text-formatting/index.js +3 -2
  239. package/dist/esm/plugins/type-ahead/ui/TypeAheadList.js +2 -1
  240. package/dist/esm/plugins/type-ahead/ui/TypeAheadListItem.js +2 -1
  241. package/dist/esm/ui/Appearance/FullPage/FullPageToolbar.js +67 -27
  242. package/dist/esm/ui/Appearance/FullPage/MainToolbar.js +20 -7
  243. package/dist/esm/ui/ColorPalette/Color/index.js +9 -16
  244. package/dist/esm/ui/ColorPalette/index.js +7 -4
  245. package/dist/esm/ui/ColorPickerButton/index.js +1 -1
  246. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +113 -62
  247. package/dist/esm/ui/ConfigPanel/FormContent.js +39 -26
  248. package/dist/esm/ui/ConfigPanel/transformers.js +488 -248
  249. package/dist/esm/ui/ConfigPanel/utils.js +1 -6
  250. package/dist/esm/ui/Dropdown/index.js +2 -1
  251. package/dist/esm/ui/DropdownMenu/index.js +7 -3
  252. package/dist/esm/ui/ElementBrowser/InsertMenu.js +1 -0
  253. package/dist/esm/ui/ElementBrowser/components/ElementList/ElementList.js +1 -0
  254. package/dist/esm/ui/LinkSearch/LinkSearchListItem.js +2 -2
  255. package/dist/esm/ui/Resizer/index.js +9 -1
  256. package/dist/esm/version-wrapper.js +1 -1
  257. package/dist/esm/version.json +1 -1
  258. package/dist/types/labs/next/full-page.d.ts +1 -1
  259. package/dist/types/nodeviews/ReactNodeView.d.ts +1 -1
  260. package/dist/types/nodeviews/SelectionBasedNodeView.d.ts +1 -0
  261. package/dist/types/plugins/analytics/types/enums.d.ts +1 -0
  262. package/dist/types/plugins/analytics/types/events.d.ts +7 -1
  263. package/dist/types/plugins/annotation/utils.d.ts +1 -1
  264. package/dist/types/plugins/avatar-group/index.d.ts +1 -0
  265. package/dist/types/plugins/avatar-group/ui/AvatarGroupPluginWrapper.d.ts +1 -0
  266. package/dist/types/plugins/before-primaryToolbar/index.d.ts +5 -0
  267. package/dist/types/plugins/before-primaryToolbar/ui/BeforePrimaryToolbarWrapper.d.ts +5 -0
  268. package/dist/types/plugins/code-block/types.d.ts +1 -1
  269. package/dist/types/plugins/feature-flags-context/get-enabled-feature-flag-keys.d.ts +1 -1
  270. package/dist/types/plugins/find-replace/FindReplaceToolbarButtonWithState.d.ts +15 -0
  271. package/dist/types/plugins/find-replace/index.d.ts +1 -0
  272. package/dist/types/plugins/find-replace/ui/Find.d.ts +1 -0
  273. package/dist/types/plugins/find-replace/ui/FindReplace.d.ts +1 -0
  274. package/dist/types/plugins/find-replace/ui/Replace.d.ts +1 -0
  275. package/dist/types/plugins/find-replace/ui/styles.d.ts +5 -14
  276. package/dist/types/plugins/floating-toolbar/ui/EmojiPickerButton.d.ts +1 -1
  277. package/dist/types/plugins/fragment/index.d.ts +5 -0
  278. package/dist/types/plugins/fragment/plugin-key.d.ts +2 -0
  279. package/dist/types/plugins/index.d.ts +2 -0
  280. package/dist/types/plugins/media/nodeviews/mediaInline.d.ts +3 -2
  281. package/dist/types/plugins/media/nodeviews/mediaSingle.d.ts +1 -1
  282. package/dist/types/plugins/media/nodeviews/styles.d.ts +2 -0
  283. package/dist/types/plugins/media/toolbar/commands.d.ts +3 -0
  284. package/dist/types/plugins/media/toolbar/filePreviewItem.d.ts +2 -0
  285. package/dist/types/plugins/media/types.d.ts +0 -1
  286. package/dist/types/plugins/panel/actions.d.ts +1 -1
  287. package/dist/types/plugins/panel/types.d.ts +8 -2
  288. package/dist/types/plugins/quick-insert/index.d.ts +2 -1
  289. package/dist/types/plugins/table/commands/insert.d.ts +3 -0
  290. package/dist/types/plugins/table/pm-plugins/main.d.ts +2 -1
  291. package/dist/types/plugins/table/pm-plugins/table-resizing/utils/types.d.ts +1 -0
  292. package/dist/types/plugins/table/transforms/column-width.d.ts +4 -1
  293. package/dist/types/plugins/table/transforms/fix-tables.d.ts +3 -2
  294. package/dist/types/plugins/table/types.d.ts +8 -0
  295. package/dist/types/plugins/table/ui/consts.d.ts +1 -1
  296. package/dist/types/types/editor-appearance-component.d.ts +2 -2
  297. package/dist/types/types/editor-props.d.ts +11 -1
  298. package/dist/types/types/feature-flags.d.ts +13 -0
  299. package/dist/types/types/index.d.ts +1 -1
  300. package/dist/types/ui/Appearance/FullPage/FullPageToolbar.d.ts +2 -2
  301. package/dist/types/ui/Appearance/FullPage/MainToolbar.d.ts +10 -1
  302. package/dist/types/ui/ColorPalette/Color/index.d.ts +8 -5
  303. package/dist/types/ui/ColorPalette/index.d.ts +1 -0
  304. package/dist/types/ui/ConfigPanel/transformers.d.ts +7 -1
  305. package/dist/types/ui/ConfigPanel/utils.d.ts +0 -1
  306. package/dist/types/ui/Resizer/index.d.ts +1 -0
  307. package/package.json +33 -29
  308. package/dist/cjs/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -38
  309. package/dist/es2019/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
  310. package/dist/esm/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.js +0 -28
  311. package/dist/types/plugins/floating-toolbar/ui/EditorRemoveEmojiIcon.d.ts +0 -1
@@ -31,10 +31,10 @@ const mediaPlugin = options => ({
31
31
  const {
32
32
  allowMediaGroup = true,
33
33
  allowMediaSingle = false,
34
- allowMediaInline = false,
35
34
  featureFlags
36
35
  } = options || {};
37
36
  const captions = getMediaFeatureFlag('captions', featureFlags);
37
+ const allowMediaInline = getMediaFeatureFlag('mediaInline', featureFlags);
38
38
  const mediaSingleNode = captions ? mediaSingleWithCaption : mediaSingle;
39
39
  return [{
40
40
  name: 'mediaGroup',
@@ -221,7 +221,7 @@ const mediaPlugin = options => ({
221
221
  }],
222
222
  floatingToolbar: (state, intl, providerFactory) => floatingToolbar(state, intl, {
223
223
  providerFactory,
224
- allowMediaInline: options && options.allowMediaInline,
224
+ allowMediaInline: options && getMediaFeatureFlag('mediaInline', options.featureFlags),
225
225
  allowResizing: options && options.allowResizing,
226
226
  allowResizingInTables: options && options.allowResizingInTables,
227
227
  allowAnnotation: options && options.allowAnnotation,
@@ -11,6 +11,7 @@ import { isNodeSelectedOrInRange, SelectedState } from '../../../utils/nodes';
11
11
  import { pluginKey as editorDisabledPluginKey } from '../../editor-disabled';
12
12
  import { stateKey as mediaStateKey } from '../pm-plugins/plugin-key';
13
13
  import { MediaNodeUpdater } from './mediaNodeUpdater';
14
+ import { getMediaFeatureFlag } from '@atlaskit/media-common';
14
15
 
15
16
  const isMediaGroupSelectedFromProps = props => {
16
17
  return isNodeSelectedOrInRange(props.anchorPos, props.headPos, props.getPos(), props.node.nodeSize);
@@ -135,7 +136,7 @@ export default class MediaGroup extends React.Component {
135
136
  onClick: () => {
136
137
  setNodeSelection(this.props.view, getNodePos());
137
138
  },
138
- ...mediaInlineOptions(mediaOptions.allowMediaInline)
139
+ ...mediaInlineOptions(getMediaFeatureFlag('mediaInline', mediaOptions.featureFlags))
139
140
  };
140
141
  });
141
142
  return /*#__PURE__*/React.createElement(Filmstrip, {
@@ -1,7 +1,8 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { ReactNodeView } from '../../../nodeviews/';
2
+ import { SelectionBasedNodeView } from '../../../nodeviews/';
3
3
  import { MediaInlineCard } from '@atlaskit/media-card';
4
4
  import { WithProviders } from '@atlaskit/editor-common';
5
+ import { MediaInlineNodeSelector } from './styles';
5
6
  export const MediaInline = props => {
6
7
  const [viewMediaClientConfig, setViewMediaClientConfig] = useState({});
7
8
  useEffect(() => {
@@ -27,14 +28,16 @@ export const MediaInline = props => {
27
28
  collectionName: collection
28
29
  };
29
30
  return /*#__PURE__*/React.createElement(MediaInlineCard, {
31
+ isSelected: props.isSelected,
30
32
  identifier: identifier,
31
33
  mediaClientConfig: viewMediaClientConfig
32
34
  });
33
35
  };
34
- export class MediaInlineNodeView extends ReactNodeView {
36
+ export class MediaInlineNodeView extends SelectionBasedNodeView {
35
37
  createDomRef() {
36
38
  const domRef = document.createElement('span');
37
39
  domRef.contentEditable = 'false';
40
+ domRef.classList.add(MediaInlineNodeSelector);
38
41
  return domRef;
39
42
  }
40
43
 
@@ -54,7 +57,7 @@ export class MediaInlineNodeView extends ReactNodeView {
54
57
  return true;
55
58
  }
56
59
 
57
- return false;
60
+ return super.viewShouldUpdate(nextNode);
58
61
  }
59
62
 
60
63
  render(props) {
@@ -74,7 +77,8 @@ export class MediaInlineNodeView extends ReactNodeView {
74
77
  return /*#__PURE__*/React.createElement(MediaInline, {
75
78
  identifier: this.node.attrs.id,
76
79
  mediaProvider: mediaProvider,
77
- node: this.node
80
+ node: this.node,
81
+ isSelected: this.nodeInsideSelection()
78
82
  });
79
83
  }
80
84
  });
@@ -13,7 +13,7 @@ import { stateKey as mediaPluginKey } from '../pm-plugins/main';
13
13
  import { MediaNodeUpdater } from './mediaNodeUpdater';
14
14
  import { findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';
15
15
  import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
16
- import { FigureWrapper } from './styles';
16
+ import { FigureWrapper, MediaSingleNodeSelector } from './styles';
17
17
  import { floatingLayouts, isRichMediaInsideOfBlockNode } from '../../../utils/rich-media-utils';
18
18
  import { getAttrsFromUrl } from '@atlaskit/media-client';
19
19
  import { isMediaBlobUrlFromAttrs } from '../utils/media-common';
@@ -289,7 +289,9 @@ export default class MediaSingleNode extends Component {
289
289
  const lineLength = this.getLineLength(view, getPos()) || this.props.lineLength;
290
290
  const isSelected = selected();
291
291
  const shouldShowPlaceholder = getMediaFeatureFlag('captions', mediaOptions.featureFlags) && node.childCount !== 2 && isSelected && state.selection instanceof NodeSelection;
292
- const MediaChildren = /*#__PURE__*/React.createElement(FigureWrapper, null, /*#__PURE__*/React.createElement("div", {
292
+ const MediaChildren = /*#__PURE__*/React.createElement(FigureWrapper, {
293
+ className: MediaSingleNodeSelector
294
+ }, /*#__PURE__*/React.createElement("div", {
293
295
  ref: this.props.forwardRef
294
296
  }), shouldShowPlaceholder && /*#__PURE__*/React.createElement(CaptionPlaceholder, {
295
297
  onClick: this.clickPlaceholder
@@ -391,12 +393,12 @@ class MediaSingleNodeView extends ReactNodeView {
391
393
  return undefined;
392
394
  }
393
395
 
394
- update(node, decorations, isValidUpdate) {
396
+ update(node, decorations, _innerDecorations, isValidUpdate) {
395
397
  if (!isValidUpdate) {
396
398
  isValidUpdate = (currentNode, newNode) => this.getNodeMediaId(currentNode) === this.getNodeMediaId(newNode);
397
399
  }
398
400
 
399
- return super.update(node, decorations, isValidUpdate);
401
+ return super.update(node, decorations, _innerDecorations, isValidUpdate);
400
402
  }
401
403
 
402
404
  render(props, forwardRef) {
@@ -456,7 +458,7 @@ class MediaSingleNodeView extends ReactNodeView {
456
458
  if (offsetLeft !== this.lastOffsetLeft) {
457
459
  this.lastOffsetLeft = offsetLeft;
458
460
  this.forceViewUpdate = true;
459
- this.update(this.node, [], () => true);
461
+ this.update(this.node, [], [], () => true);
460
462
  }
461
463
  }
462
464
 
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
  import styled from 'styled-components';
3
+ export const MediaInlineNodeSelector = 'media-inline-node';
4
+ export const MediaSingleNodeSelector = 'media-single-node';
3
5
  export const FigureWrapper = styled.figure`
4
6
  margin: 0;
5
7
  `;
@@ -186,6 +186,8 @@ export class AltTextEditComponent extends React.Component {
186
186
  onClick: this.closeMediaAltTextMenu
187
187
  })), /*#__PURE__*/React.createElement(PanelTextInput, {
188
188
  testId: "alt-text-input",
189
+ ariaLabel: formatMessage(messages.placeholder),
190
+ describedById: "support-text",
189
191
  placeholder: formatMessage(messages.placeholder),
190
192
  defaultValue: this.state.lastValue,
191
193
  onCancel: this.dispatchCancelEvent,
@@ -202,7 +204,9 @@ export class AltTextEditComponent extends React.Component {
202
204
  })),
203
205
  tooltipContent: formatMessage(messages.clear),
204
206
  onClick: this.handleClearText
205
- }))), !!errorsList.length && /*#__PURE__*/React.createElement(ValidationWrapper, null, errorsList), /*#__PURE__*/React.createElement(SupportText, null, formatMessage(messages.supportText)));
207
+ }))), !!errorsList.length && /*#__PURE__*/React.createElement(ValidationWrapper, null, errorsList), /*#__PURE__*/React.createElement(SupportText, {
208
+ id: "support-text"
209
+ }, formatMessage(messages.supportText)));
206
210
  }
207
211
 
208
212
  fireAnalytics(actionType) {
@@ -4,7 +4,7 @@ import ReactDOM from 'react-dom';
4
4
  import { NodeSelection, Plugin } from 'prosemirror-state';
5
5
  import { insertPoint } from 'prosemirror-transform';
6
6
  import { Decoration, DecorationSet } from 'prosemirror-view';
7
- import { ErrorReporter } from '@atlaskit/editor-common';
7
+ import { ErrorReporter, browser } from '@atlaskit/editor-common';
8
8
  import assert from 'assert';
9
9
  import { findDomRefAtPos, isNodeSelection } from 'prosemirror-utils';
10
10
  import { insertMediaSingleNode, isMediaSingle } from '../utils/media-single';
@@ -18,6 +18,9 @@ import PickerFacade from '../picker-facade';
18
18
  import { INPUT_METHOD } from '../../analytics/types';
19
19
  import { isImage } from '../utils/is-image';
20
20
  import { isInEmptyLine } from '../../../utils/document';
21
+ import { getMediaFeatureFlag } from '@atlaskit/media-common';
22
+ import { isInListItem } from '../../../utils';
23
+ import { CAPTION_PLACEHOLDER_ID } from '../ui/CaptionPlaceholder';
21
24
  export { stateKey } from './plugin-key';
22
25
 
23
26
  const createDropPlaceholder = allowDropLine => {
@@ -157,7 +160,7 @@ export class MediaPluginStateImplementation {
157
160
  media
158
161
  } = this.view.state.schema.nodes;
159
162
 
160
- if ((_this$mediaOptions = this.mediaOptions) !== null && _this$mediaOptions !== void 0 && _this$mediaOptions.allowMediaInline) {
163
+ if (getMediaFeatureFlag('mediaInline', (_this$mediaOptions = this.mediaOptions) === null || _this$mediaOptions === void 0 ? void 0 : _this$mediaOptions.featureFlags)) {
161
164
  return type === mediaSingle || type === media || type === mediaInline;
162
165
  }
163
166
 
@@ -194,7 +197,7 @@ export class MediaPluginStateImplementation {
194
197
 
195
198
  if (isMediaSingle(state.schema, mediaStateWithContext.fileMimeType)) {
196
199
  insertMediaSingleNode(this.view, mediaStateWithContext, this.getInputMethod(pickerType), collection, this.mediaOptions && this.mediaOptions.alignLeftOnInsert);
197
- } else if ((_this$mediaOptions2 = this.mediaOptions) !== null && _this$mediaOptions2 !== void 0 && _this$mediaOptions2.allowMediaInline && !isInEmptyLine(state) && !isInsidePotentialEmptyParagraph(state) && canInsertMediaInline(state)) {
200
+ } else if (getMediaFeatureFlag('mediaInline', (_this$mediaOptions2 = this.mediaOptions) === null || _this$mediaOptions2 === void 0 ? void 0 : _this$mediaOptions2.featureFlags) && !isInEmptyLine(state) && (!isInsidePotentialEmptyParagraph(state) || isInListItem(state)) && canInsertMediaInline(state)) {
198
201
  insertMediaInlineNode(this.view, mediaStateWithContext, collection, this.getInputMethod(pickerType));
199
202
  } else {
200
203
  insertMediaGroupNode(this.view, [mediaStateWithContext], collection, this.getInputMethod(pickerType));
@@ -491,8 +494,6 @@ export class MediaPluginStateImplementation {
491
494
  }
492
495
 
493
496
  getDomElement(domAtPos) {
494
- var _this$mediaOptions3;
495
-
496
497
  const {
497
498
  selection
498
499
  } = this.view.state;
@@ -505,16 +506,14 @@ export class MediaPluginStateImplementation {
505
506
  return;
506
507
  }
507
508
 
508
- const position = (_this$mediaOptions3 = this.mediaOptions) !== null && _this$mediaOptions3 !== void 0 && _this$mediaOptions3.allowMediaInline ? selection.from + 1 : selection.from;
509
- const node = findDomRefAtPos(position, domAtPos);
509
+ const node = findDomRefAtPos(selection.from, domAtPos);
510
510
 
511
511
  if (node) {
512
512
  if (!node.childNodes.length) {
513
513
  return node.parentNode;
514
514
  }
515
515
 
516
- const target = node.querySelector('figure') || node;
517
- return target;
516
+ return node;
518
517
  }
519
518
 
520
519
  return;
@@ -648,13 +647,21 @@ export const createPlugin = (_schema, options, reactContext, dispatch, mediaOpti
648
647
 
649
648
  },
650
649
 
651
- filterTransaction(transaction, state) {
652
- // Media node inside mediaSingle should not be selected
653
- // We are relying on plugins/media/nodeviews/mediaNodeView/media.tsx#selectMediaSingleFromCard
654
- // to set selection on correct mediaSingle node,
655
- // We don't use 'appendTransaction' because we would like to avoid have additional transactions
656
- // http://product-fabric.atlassian.net/browse/ED-10091
657
- return !(transaction.selectionSet && isNodeSelection(transaction.selection) && transaction.selection.node.type === state.schema.nodes.media && transaction.selection.$anchor.parent.type === state.schema.nodes.mediaSingle);
650
+ appendTransaction(transactions, _oldState, newState) {
651
+ for (const transaction of transactions) {
652
+ const isSelectionOnMediaInsideMediaSingle = transaction.selectionSet && isNodeSelection(transaction.selection) && transaction.selection.node.type === newState.schema.nodes.media && transaction.selection.$anchor.parent.type === newState.schema.nodes.mediaSingle; // Note: this causes an additional transaction when selecting a media node
653
+ // through clicking on it with the cursor.
654
+
655
+ if (isSelectionOnMediaInsideMediaSingle) {
656
+ // If a selection has been placed on a media inside a media single,
657
+ // we shift it to the media single parent as other code is opinionated about
658
+ // the selection landing there. In particular the caption insertion and selection
659
+ // action.
660
+ return newState.tr.setSelection(NodeSelection.create(newState.doc, transaction.selection.$from.pos - 1));
661
+ }
662
+ }
663
+
664
+ return;
658
665
  },
659
666
 
660
667
  key: stateKey,
@@ -716,8 +723,16 @@ export const createPlugin = (_schema, options, reactContext, dispatch, mediaOpti
716
723
  handleTextInput(view) {
717
724
  getMediaPluginState(view.state).splitMediaGroup();
718
725
  return false;
719
- }
726
+ },
720
727
 
728
+ handleClick: (_editorView, _pos, event) => {
729
+ var _parentElement;
730
+
731
+ // Workaround for Chrome given a regression introduced in prosemirror-view@1.18.6
732
+ // Returning true prevents that updateSelection() is getting called in the commit below:
733
+ // @see https://github.com/ProseMirror/prosemirror-view/compare/1.18.5...1.18.6
734
+ return Boolean((browser.chrome || browser.safari) && event.target && CAPTION_PLACEHOLDER_ID === ((_parentElement = event.target.parentElement) === null || _parentElement === void 0 ? void 0 : _parentElement.dataset.id));
735
+ }
721
736
  }
722
737
  });
723
738
  };
@@ -0,0 +1,47 @@
1
+ import { NodeSelection } from 'prosemirror-state';
2
+ import { isNodeSelection, removeSelectedNode, safeInsert } from 'prosemirror-utils';
3
+ export const changeInlineToMediaCard = (state, dispatch) => {
4
+ const {
5
+ media,
6
+ mediaInline,
7
+ mediaGroup
8
+ } = state.schema.nodes;
9
+ const selectedNode = state.selection instanceof NodeSelection && state.selection.node.type === mediaInline && state.selection.node;
10
+
11
+ if (!selectedNode) {
12
+ return false;
13
+ }
14
+
15
+ const {
16
+ id,
17
+ type,
18
+ collection
19
+ } = selectedNode.attrs;
20
+ const mediaNode = media.createChecked({
21
+ id,
22
+ type,
23
+ collection
24
+ });
25
+ const group = mediaGroup.createChecked({}, mediaNode);
26
+ const nodePos = state.tr.doc.resolve(state.selection.from).end();
27
+ let tr = state.tr;
28
+ tr = removeSelectedNode(tr);
29
+ tr = safeInsert(group, nodePos, true)(tr);
30
+
31
+ if (dispatch) {
32
+ dispatch(tr);
33
+ }
34
+
35
+ return true;
36
+ };
37
+ export const removeInlineCard = (state, dispatch) => {
38
+ if (isNodeSelection(state.selection)) {
39
+ if (dispatch) {
40
+ dispatch(removeSelectedNode(state.tr));
41
+ }
42
+
43
+ return true;
44
+ }
45
+
46
+ return false;
47
+ };
@@ -1,11 +1,13 @@
1
1
  import React, { useState } from 'react';
2
2
  import ReactDOM from 'react-dom';
3
3
  import { MediaViewer } from '@atlaskit/media-viewer';
4
+ import { messages } from '@atlaskit/media-ui';
4
5
  import FilePreviewIcon from '@atlaskit/icon/glyph/editor/file-preview';
5
6
  import ToolbarButton from '../../floating-toolbar/ui/Button';
6
7
  import { getSelectedMediaContainerNodeAttrs } from './utils';
7
8
  export const FilePreviewItem = ({
8
- mediaPluginState
9
+ mediaPluginState,
10
+ intl
9
11
  }) => {
10
12
  const [isMediaViewerVisible, setMediaViewerVisible] = useState(false);
11
13
 
@@ -48,12 +50,14 @@ export const FilePreviewItem = ({
48
50
  };
49
51
 
50
52
  const mediaViewer = renderMediaViewer();
53
+ const tooltipContent = intl.formatMessage(messages.preview);
51
54
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ToolbarButton, {
52
55
  testId: "file-preview-toolbar-button",
53
56
  key: "editor.media.card.preview",
54
57
  onClick: openMediaViewer,
55
58
  icon: /*#__PURE__*/React.createElement(FilePreviewIcon, {
56
59
  label: "file preview"
57
- })
60
+ }),
61
+ tooltipContent: tooltipContent
58
62
  }), mediaViewer);
59
63
  };
@@ -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);