@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
@@ -4,6 +4,12 @@ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
4
  import _createClass from "@babel/runtime/helpers/createClass";
5
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
6
6
 
7
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
8
+
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12
+
7
13
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
8
14
 
9
15
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -13,7 +19,7 @@ import ReactDOM from 'react-dom';
13
19
  import { NodeSelection, Plugin } from 'prosemirror-state';
14
20
  import { insertPoint } from 'prosemirror-transform';
15
21
  import { Decoration, DecorationSet } from 'prosemirror-view';
16
- import { ErrorReporter } from '@atlaskit/editor-common';
22
+ import { ErrorReporter, browser } from '@atlaskit/editor-common';
17
23
  import assert from 'assert';
18
24
  import { findDomRefAtPos, isNodeSelection } from 'prosemirror-utils';
19
25
  import { insertMediaSingleNode, isMediaSingle } from '../utils/media-single';
@@ -27,6 +33,9 @@ import PickerFacade from '../picker-facade';
27
33
  import { INPUT_METHOD } from '../../analytics/types';
28
34
  import { isImage } from '../utils/is-image';
29
35
  import { isInEmptyLine } from '../../../utils/document';
36
+ import { getMediaFeatureFlag } from '@atlaskit/media-common';
37
+ import { isInListItem } from '../../../utils';
38
+ import { CAPTION_PLACEHOLDER_ID } from '../ui/CaptionPlaceholder';
30
39
  export { stateKey } from './plugin-key';
31
40
 
32
41
  var createDropPlaceholder = function createDropPlaceholder(allowDropLine) {
@@ -243,7 +252,7 @@ export var MediaPluginStateImplementation = /*#__PURE__*/function () {
243
252
  mediaSingle = _this$view$state$sche.mediaSingle,
244
253
  media = _this$view$state$sche.media;
245
254
 
246
- if ((_this$mediaOptions = _this.mediaOptions) !== null && _this$mediaOptions !== void 0 && _this$mediaOptions.allowMediaInline) {
255
+ if (getMediaFeatureFlag('mediaInline', (_this$mediaOptions = _this.mediaOptions) === null || _this$mediaOptions === void 0 ? void 0 : _this$mediaOptions.featureFlags)) {
247
256
  return type === mediaSingle || type === media || type === mediaInline;
248
257
  }
249
258
 
@@ -282,7 +291,7 @@ export var MediaPluginStateImplementation = /*#__PURE__*/function () {
282
291
 
283
292
  if (isMediaSingle(state.schema, mediaStateWithContext.fileMimeType)) {
284
293
  insertMediaSingleNode(_this.view, mediaStateWithContext, _this.getInputMethod(pickerType), collection, _this.mediaOptions && _this.mediaOptions.alignLeftOnInsert);
285
- } else if ((_this$mediaOptions2 = _this.mediaOptions) !== null && _this$mediaOptions2 !== void 0 && _this$mediaOptions2.allowMediaInline && !isInEmptyLine(state) && !isInsidePotentialEmptyParagraph(state) && canInsertMediaInline(state)) {
294
+ } 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)) {
286
295
  insertMediaInlineNode(_this.view, mediaStateWithContext, collection, _this.getInputMethod(pickerType));
287
296
  } else {
288
297
  insertMediaGroupNode(_this.view, [mediaStateWithContext], collection, _this.getInputMethod(pickerType));
@@ -590,8 +599,6 @@ export var MediaPluginStateImplementation = /*#__PURE__*/function () {
590
599
  }, {
591
600
  key: "getDomElement",
592
601
  value: function getDomElement(domAtPos) {
593
- var _this$mediaOptions3;
594
-
595
602
  var selection = this.view.state.selection;
596
603
 
597
604
  if (!(selection instanceof NodeSelection)) {
@@ -602,16 +609,14 @@ export var MediaPluginStateImplementation = /*#__PURE__*/function () {
602
609
  return;
603
610
  }
604
611
 
605
- var position = (_this$mediaOptions3 = this.mediaOptions) !== null && _this$mediaOptions3 !== void 0 && _this$mediaOptions3.allowMediaInline ? selection.from + 1 : selection.from;
606
- var node = findDomRefAtPos(position, domAtPos);
612
+ var node = findDomRefAtPos(selection.from, domAtPos);
607
613
 
608
614
  if (node) {
609
615
  if (!node.childNodes.length) {
610
616
  return node.parentNode;
611
617
  }
612
618
 
613
- var target = node.querySelector('figure') || node;
614
- return target;
619
+ return node;
615
620
  }
616
621
 
617
622
  return;
@@ -804,13 +809,31 @@ export var createPlugin = function createPlugin(_schema, options, reactContext,
804
809
  return pluginState;
805
810
  }
806
811
  },
807
- filterTransaction: function filterTransaction(transaction, state) {
808
- // Media node inside mediaSingle should not be selected
809
- // We are relying on plugins/media/nodeviews/mediaNodeView/media.tsx#selectMediaSingleFromCard
810
- // to set selection on correct mediaSingle node,
811
- // We don't use 'appendTransaction' because we would like to avoid have additional transactions
812
- // http://product-fabric.atlassian.net/browse/ED-10091
813
- return !(transaction.selectionSet && isNodeSelection(transaction.selection) && transaction.selection.node.type === state.schema.nodes.media && transaction.selection.$anchor.parent.type === state.schema.nodes.mediaSingle);
812
+ appendTransaction: function appendTransaction(transactions, _oldState, newState) {
813
+ var _iterator = _createForOfIteratorHelper(transactions),
814
+ _step;
815
+
816
+ try {
817
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
818
+ var transaction = _step.value;
819
+ var 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
820
+ // through clicking on it with the cursor.
821
+
822
+ if (isSelectionOnMediaInsideMediaSingle) {
823
+ // If a selection has been placed on a media inside a media single,
824
+ // we shift it to the media single parent as other code is opinionated about
825
+ // the selection landing there. In particular the caption insertion and selection
826
+ // action.
827
+ return newState.tr.setSelection(NodeSelection.create(newState.doc, transaction.selection.$from.pos - 1));
828
+ }
829
+ }
830
+ } catch (err) {
831
+ _iterator.e(err);
832
+ } finally {
833
+ _iterator.f();
834
+ }
835
+
836
+ return;
814
837
  },
815
838
  key: stateKey,
816
839
  view: function view(_view) {
@@ -866,6 +889,14 @@ export var createPlugin = function createPlugin(_schema, options, reactContext,
866
889
  handleTextInput: function handleTextInput(view) {
867
890
  getMediaPluginState(view.state).splitMediaGroup();
868
891
  return false;
892
+ },
893
+ handleClick: function handleClick(_editorView, _pos, event) {
894
+ var _parentElement;
895
+
896
+ // Workaround for Chrome given a regression introduced in prosemirror-view@1.18.6
897
+ // Returning true prevents that updateSelection() is getting called in the commit below:
898
+ // @see https://github.com/ProseMirror/prosemirror-view/compare/1.18.5...1.18.6
899
+ return Boolean((browser.chrome || browser.safari) && event.target && CAPTION_PLACEHOLDER_ID === ((_parentElement = event.target.parentElement) === null || _parentElement === void 0 ? void 0 : _parentElement.dataset.id));
869
900
  }
870
901
  }
871
902
  });
@@ -0,0 +1,45 @@
1
+ import { NodeSelection } from 'prosemirror-state';
2
+ import { isNodeSelection, removeSelectedNode, safeInsert } from 'prosemirror-utils';
3
+ export var changeInlineToMediaCard = function changeInlineToMediaCard(state, dispatch) {
4
+ var _state$schema$nodes = state.schema.nodes,
5
+ media = _state$schema$nodes.media,
6
+ mediaInline = _state$schema$nodes.mediaInline,
7
+ mediaGroup = _state$schema$nodes.mediaGroup;
8
+ var selectedNode = state.selection instanceof NodeSelection && state.selection.node.type === mediaInline && state.selection.node;
9
+
10
+ if (!selectedNode) {
11
+ return false;
12
+ }
13
+
14
+ var _selectedNode$attrs = selectedNode.attrs,
15
+ id = _selectedNode$attrs.id,
16
+ type = _selectedNode$attrs.type,
17
+ collection = _selectedNode$attrs.collection;
18
+ var mediaNode = media.createChecked({
19
+ id: id,
20
+ type: type,
21
+ collection: collection
22
+ });
23
+ var group = mediaGroup.createChecked({}, mediaNode);
24
+ var nodePos = state.tr.doc.resolve(state.selection.from).end();
25
+ var tr = state.tr;
26
+ tr = removeSelectedNode(tr);
27
+ tr = safeInsert(group, nodePos, true)(tr);
28
+
29
+ if (dispatch) {
30
+ dispatch(tr);
31
+ }
32
+
33
+ return true;
34
+ };
35
+ export var removeInlineCard = function removeInlineCard(state, dispatch) {
36
+ if (isNodeSelection(state.selection)) {
37
+ if (dispatch) {
38
+ dispatch(removeSelectedNode(state.tr));
39
+ }
40
+
41
+ return true;
42
+ }
43
+
44
+ return false;
45
+ };
@@ -2,11 +2,13 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import React, { useState } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import { MediaViewer } from '@atlaskit/media-viewer';
5
+ import { messages } from '@atlaskit/media-ui';
5
6
  import FilePreviewIcon from '@atlaskit/icon/glyph/editor/file-preview';
6
7
  import ToolbarButton from '../../floating-toolbar/ui/Button';
7
8
  import { getSelectedMediaContainerNodeAttrs } from './utils';
8
9
  export var FilePreviewItem = function FilePreviewItem(_ref) {
9
- var mediaPluginState = _ref.mediaPluginState;
10
+ var mediaPluginState = _ref.mediaPluginState,
11
+ intl = _ref.intl;
10
12
 
11
13
  var _useState = useState(false),
12
14
  _useState2 = _slicedToArray(_useState, 2),
@@ -51,12 +53,14 @@ export var FilePreviewItem = function FilePreviewItem(_ref) {
51
53
  };
52
54
 
53
55
  var mediaViewer = renderMediaViewer();
56
+ var tooltipContent = intl.formatMessage(messages.preview);
54
57
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ToolbarButton, {
55
58
  testId: "file-preview-toolbar-button",
56
59
  key: "editor.media.card.preview",
57
60
  onClick: openMediaViewer,
58
61
  icon: /*#__PURE__*/React.createElement(FilePreviewIcon, {
59
62
  label: "file preview"
60
- })
63
+ }),
64
+ tooltipContent: tooltipContent
61
65
  }), mediaViewer);
62
66
  };
@@ -28,6 +28,8 @@ import { messages as cardMessages } from '../../card/messages';
28
28
  import { FilePreviewItem } from './filePreviewItem';
29
29
  import { downloadMedia, removeMediaGroupNode } from './utils';
30
30
  import { Fragment } from 'prosemirror-model';
31
+ import { changeInlineToMediaCard, removeInlineCard } from './commands';
32
+ import { MediaInlineNodeSelector, MediaSingleNodeSelector } from '../nodeviews/styles';
31
33
 
32
34
  var remove = function remove(state, dispatch) {
33
35
  if (dispatch) {
@@ -79,6 +81,7 @@ var changeMediaCardToInline = function changeMediaCardToInline(state, dispatch)
79
81
  var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar(state, intl, mediaPluginState) {
80
82
  var mediaGroup = state.schema.nodes.mediaGroup;
81
83
  var items = [{
84
+ id: 'editor.media.view.switcher',
82
85
  type: 'dropdown',
83
86
  title: intl.formatMessage(messages.displayThumbnail),
84
87
  options: [{
@@ -102,7 +105,8 @@ var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar
102
105
  render: function render() {
103
106
  return /*#__PURE__*/React.createElement(FilePreviewItem, {
104
107
  key: "editor.media.card.preview",
105
- mediaPluginState: mediaPluginState
108
+ mediaPluginState: mediaPluginState,
109
+ intl: intl
106
110
  });
107
111
  }
108
112
  }, {
@@ -134,6 +138,66 @@ var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar
134
138
  return items;
135
139
  };
136
140
 
141
+ var generateMediaInlineFloatingToolbar = function generateMediaInlineFloatingToolbar(state, intl, mediaPluginState) {
142
+ var mediaInline = state.schema.nodes.mediaInline;
143
+ var items = [{
144
+ id: 'editor.media.view.switcher',
145
+ type: 'dropdown',
146
+ title: intl.formatMessage(cardMessages.inline),
147
+ options: [{
148
+ title: intl.formatMessage(cardMessages.inline),
149
+ selected: true,
150
+ onClick: function onClick() {
151
+ return true;
152
+ },
153
+ testId: 'inline-appearance'
154
+ }, {
155
+ title: intl.formatMessage(messages.displayThumbnail),
156
+ selected: false,
157
+ onClick: changeInlineToMediaCard,
158
+ testId: 'thumbnail-appearance'
159
+ }]
160
+ }, {
161
+ type: 'separator'
162
+ }, {
163
+ type: 'custom',
164
+ fallback: [],
165
+ render: function render() {
166
+ return /*#__PURE__*/React.createElement(FilePreviewItem, {
167
+ key: "editor.media.card.preview",
168
+ mediaPluginState: mediaPluginState,
169
+ intl: intl
170
+ });
171
+ }
172
+ }, {
173
+ type: 'separator'
174
+ }, {
175
+ id: 'editor.media.card.download',
176
+ type: 'button',
177
+ icon: DownloadIcon,
178
+ onClick: function onClick() {
179
+ downloadMedia(mediaPluginState);
180
+ return true;
181
+ },
182
+ title: intl.formatMessage(messages.download)
183
+ }, {
184
+ type: 'separator'
185
+ }, {
186
+ id: 'editor.media.delete',
187
+ type: 'button',
188
+ appearance: 'danger',
189
+ icon: RemoveIcon,
190
+ onMouseEnter: hoverDecoration(mediaInline, true),
191
+ onMouseLeave: hoverDecoration(mediaInline, false),
192
+ onFocus: hoverDecoration(mediaInline, true),
193
+ onBlur: hoverDecoration(mediaInline, false),
194
+ title: intl.formatMessage(commonMessages.remove),
195
+ onClick: removeInlineCard,
196
+ testId: 'media-toolbar-remove-button'
197
+ }];
198
+ return items;
199
+ };
200
+
137
201
  var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToolbar(state, intl, options, pluginState, mediaLinkingState) {
138
202
  var mediaSingle = state.schema.nodes.mediaSingle;
139
203
  var allowResizing = options.allowResizing,
@@ -278,9 +342,14 @@ export var floatingToolbar = function floatingToolbar(state, intl) {
278
342
  }
279
343
 
280
344
  var items = [];
281
- var parentNode = findParentNodeOfType(mediaGroup)(state.selection);
345
+ var parentMediaGroupNode = findParentNodeOfType(mediaGroup)(state.selection);
346
+ var selectedNodeType;
282
347
 
283
- if (allowMediaInline && parentNode && parentNode.node.type === mediaGroup) {
348
+ if (state.selection instanceof NodeSelection) {
349
+ selectedNodeType = state.selection.node.type;
350
+ }
351
+
352
+ if (allowMediaInline && (parentMediaGroupNode === null || parentMediaGroupNode === void 0 ? void 0 : parentMediaGroupNode.node.type) === mediaGroup) {
284
353
  var mediaOffset = state.selection.$from.parentOffset + 1;
285
354
 
286
355
  baseToolbar.getDomRef = function () {
@@ -291,7 +360,23 @@ export var floatingToolbar = function floatingToolbar(state, intl) {
291
360
  };
292
361
 
293
362
  items = generateMediaCardFloatingToolbar(state, intl, mediaPluginState);
363
+ } else if (allowMediaInline && selectedNodeType && selectedNodeType === mediaInline) {
364
+ baseToolbar.getDomRef = function () {
365
+ var _mediaPluginState$ele2;
366
+
367
+ var element = (_mediaPluginState$ele2 = mediaPluginState.element) === null || _mediaPluginState$ele2 === void 0 ? void 0 : _mediaPluginState$ele2.querySelector(".".concat(MediaInlineNodeSelector));
368
+ return element || mediaPluginState.element;
369
+ };
370
+
371
+ items = generateMediaInlineFloatingToolbar(state, intl, mediaPluginState);
294
372
  } else {
373
+ baseToolbar.getDomRef = function () {
374
+ var _mediaPluginState$ele3;
375
+
376
+ var element = (_mediaPluginState$ele3 = mediaPluginState.element) === null || _mediaPluginState$ele3 === void 0 ? void 0 : _mediaPluginState$ele3.querySelector(".".concat(MediaSingleNodeSelector));
377
+ return element || mediaPluginState.element;
378
+ };
379
+
295
380
  items = generateMediaSingleFloatingToolbar(state, intl, options, mediaPluginState, mediaLinkingState);
296
381
  }
297
382
 
@@ -427,7 +427,15 @@ var ResizableMediaSingle = /*#__PURE__*/function (_React$Component) {
427
427
  return columResizingPluginState ? !columResizingPluginState.dragging : true;
428
428
  },
429
429
  nodeType: "media",
430
- dispatchAnalyticsEvent: this.props.dispatchAnalyticsEvent
430
+ dispatchAnalyticsEvent: this.props.dispatchAnalyticsEvent // when cursor is located below a media with caption,
431
+ // press “Up“ key will result cursor focus on an invalid position, (on the resize handler)
432
+ // This workaround adds an empty div inside the resize handler to prevent the issue.
433
+ ,
434
+ handleComponentFunc: function handleComponentFunc() {
435
+ return /*#__PURE__*/React.createElement("div", {
436
+ contentEditable: false
437
+ });
438
+ }
431
439
  }), children));
432
440
  }
433
441
  }]);
@@ -279,7 +279,7 @@ export var unwrapNestedMediaElements = function unwrapNestedMediaElements(html)
279
279
  // ProseMirror should handle this case properly.
280
280
 
281
281
 
282
- if (mediaParent instanceof HTMLDivElement) {
282
+ if (mediaParent instanceof HTMLDivElement || mediaParent instanceof HTMLSpanElement && mediaParent.closest('[class*="emoji-common"]')) {
283
283
  return;
284
284
  } // Find the top most element that the parent has a valid container for the image.
285
285
  // Stop just before found the wrapper
@@ -95,7 +95,12 @@ export var insertMediaInlineNode = function insertMediaInlineNode(view, mediaSta
95
95
  collection: collection
96
96
  });
97
97
  var space = state.schema.text(' ');
98
- var pos = state.selection.$to.pos;
98
+ var pos = state.selection.$to.pos; // If the selection is inside an empty list item set pos inside paragraph
99
+
100
+ if (isInListItem(state) && isInsidePotentialEmptyParagraph(state)) {
101
+ pos = pos + 1;
102
+ }
103
+
99
104
  var content = Fragment.from([mediaInlineNode, space]); // Delete the selection if a selection is made
100
105
 
101
106
  var deleteRange = findDeleteRange(state);
@@ -42,7 +42,7 @@ export var removePanel = function removePanel() {
42
42
  };
43
43
  export var changePanelType = function changePanelType(panelType) {
44
44
  var panelOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
- var UNSAFE_allowCustomPanel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
45
+ var allowCustomPanel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
46
46
  return function (state, dispatch) {
47
47
  var nodes = state.schema.nodes,
48
48
  tr = state.tr;
@@ -56,7 +56,7 @@ export var changePanelType = function changePanelType(panelType) {
56
56
  var previousType = panelNode.node.attrs.panelType;
57
57
  var newTr;
58
58
 
59
- if (UNSAFE_allowCustomPanel) {
59
+ if (allowCustomPanel) {
60
60
  var previousColor = panelNode.node.attrs.panelColor || getPanelTypeBackground(previousType);
61
61
  var previousIcon = panelNode.node.attrs.panelIcon;
62
62
 
@@ -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
  var insertPanelTypeWithAnalytics = function insertPanelTypeWithAnalytics(panelAttributes, state, insert) {
13
13
  var tr = insert(insertPanelType(panelAttributes, state));
@@ -37,7 +37,7 @@ var panelPlugin = function panelPlugin() {
37
37
  return {
38
38
  name: 'panel',
39
39
  nodes: function nodes() {
40
- var panelNode = customPanel(!!options.UNSAFE_allowCustomPanel);
40
+ var panelNode = panel(!!options.allowCustomPanel);
41
41
  return [{
42
42
  name: 'panel',
43
43
  node: panelNode
@@ -130,7 +130,7 @@ var panelPlugin = function panelPlugin() {
130
130
  }
131
131
  }];
132
132
 
133
- if (options.UNSAFE_allowCustomPanelEdit && options.UNSAFE_allowCustomPanel) {
133
+ if (options.allowCustomPanel && options.allowCustomPanelEdit) {
134
134
  quickInsertOptions.push({
135
135
  id: 'custompanel',
136
136
  title: formatMessage(messages.customPanel),
@@ -143,7 +143,7 @@ var panelPlugin = function panelPlugin() {
143
143
  return insertPanelTypeWithAnalytics({
144
144
  panelType: PanelType.CUSTOM,
145
145
  panelIcon: ':rainbow:',
146
- panelColor: T75
146
+ panelColor: T50
147
147
  }, state, insert);
148
148
  }
149
149
  });
@@ -55,7 +55,7 @@ var PanelNodeView = /*#__PURE__*/function () {
55
55
  this.view = view;
56
56
  this.node = node;
57
57
 
58
- var _DOMSerializer$render = DOMSerializer.renderSpec(document, panelAttrsToDom(node.attrs, pluginOptions.UNSAFE_allowCustomPanel || false)),
58
+ var _DOMSerializer$render = DOMSerializer.renderSpec(document, panelAttrsToDom(node.attrs, pluginOptions.allowCustomPanel || false)),
59
59
  dom = _DOMSerializer$render.dom,
60
60
  contentDOM = _DOMSerializer$render.contentDOM;
61
61
 
@@ -71,7 +71,7 @@ var PanelNodeView = /*#__PURE__*/function () {
71
71
 
72
72
  this.icon.contentEditable = 'false';
73
73
  ReactDOM.render( /*#__PURE__*/React.createElement(PanelIcon, {
74
- allowCustomPanel: pluginOptions.UNSAFE_allowCustomPanel,
74
+ allowCustomPanel: pluginOptions.allowCustomPanel,
75
75
  panelAttributes: node.attrs,
76
76
  providerFactory: this.providerFactory
77
77
  }), this.icon);
@@ -12,7 +12,7 @@ import NoteIcon from '@atlaskit/icon/glyph/editor/note';
12
12
  import RemoveIcon from '@atlaskit/icon/glyph/editor/remove';
13
13
  import WarningIcon from '@atlaskit/icon/glyph/editor/warning';
14
14
  import ErrorIcon from '@atlaskit/icon/glyph/editor/error';
15
- import RemoveEmojiIcon from '../floating-toolbar/ui/EditorRemoveEmojiIcon';
15
+ import RemoveEmojiIcon from '@atlaskit/icon/glyph/editor/remove-emoji';
16
16
  import commonMessages from '../../messages';
17
17
  import { removePanel, changePanelType } from './actions';
18
18
  import { hoverDecoration } from '../base/pm-plugins/decoration';
@@ -24,7 +24,7 @@ import { DEFAULT_BORDER_COLOR } from '../../ui/ColorPalette/Palettes';
24
24
  import { PanelType } from '@atlaskit/adf-schema';
25
25
  import { ACTION, ACTION_SUBJECT, EVENT_TYPE, ACTION_SUBJECT_ID, withAnalytics } from '../analytics';
26
26
  import { messages } from './message';
27
- export var panelIconMap = (_panelIconMap = {}, _defineProperty(_panelIconMap, PanelType.INFO, ':info:'), _defineProperty(_panelIconMap, PanelType.NOTE, ':note:'), _defineProperty(_panelIconMap, PanelType.WARNING, ':warning:'), _defineProperty(_panelIconMap, PanelType.ERROR, ':error:'), _defineProperty(_panelIconMap, PanelType.SUCCESS, ':success:'), _defineProperty(_panelIconMap, PanelType.TIP, ':tip:'), _panelIconMap);
27
+ export var panelIconMap = (_panelIconMap = {}, _defineProperty(_panelIconMap, PanelType.INFO, ':info:'), _defineProperty(_panelIconMap, PanelType.NOTE, ':note:'), _defineProperty(_panelIconMap, PanelType.WARNING, ':warning:'), _defineProperty(_panelIconMap, PanelType.ERROR, ':cross_mark:'), _defineProperty(_panelIconMap, PanelType.SUCCESS, ':check_mark:'), _defineProperty(_panelIconMap, PanelType.TIP, ':tip:'), _panelIconMap);
28
28
  export var getToolbarItems = function getToolbarItems(formatMessage, panelNodeType, isCustomPanelEnabled, isCustomPanelEditable, providerFactory, activePanelType, activePanelColor, activePanelIcon) {
29
29
  var items = [{
30
30
  id: 'editor.panel.info',
@@ -238,9 +238,14 @@ export var getToolbarConfig = function getToolbarConfig(state, intl) {
238
238
  var _panelObject$node$att = panelObject.node.attrs,
239
239
  panelType = _panelObject$node$att.panelType,
240
240
  panelColor = _panelObject$node$att.panelColor,
241
- panelIcon = _panelObject$node$att.panelIcon; // force toolbar to be turned on
241
+ panelIcon = _panelObject$node$att.panelIcon;
242
242
 
243
- var 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);
243
+ var isStandardPanel = function isStandardPanel(panelType) {
244
+ return panelType !== PanelType.CUSTOM ? panelType : undefined;
245
+ }; // force toolbar to be turned on
246
+
247
+
248
+ var items = getToolbarItems(formatMessage, nodeType, options.allowCustomPanel || false, options.allowCustomPanel && options.allowCustomPanelEdit || false, providerFactory, panelType, options.allowCustomPanel ? panelColor : undefined, options.allowCustomPanel ? panelIcon || isStandardPanel(panelType) : undefined);
244
249
 
245
250
  var getDomRef = function getDomRef(editorView) {
246
251
  var domAtPos = editorView.domAtPos.bind(editorView);
@@ -1,3 +1,9 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+
1
7
  import { findSelectedNodeOfType, findParentNodeOfType } from 'prosemirror-utils';
2
8
  import { PanelType } from '@atlaskit/adf-schema';
3
9
  import { PanelSharedCssClassName } from '@atlaskit/editor-common';
@@ -17,6 +23,13 @@ export var panelAttrsToDom = function panelAttrsToDom(attrs, allowCustomPanel) {
17
23
  'data-panel-type': panelType || PanelType.INFO,
18
24
  style: style
19
25
  };
26
+
27
+ if (panelColor && isCustomPanel) {
28
+ panelAttrs = _objectSpread(_objectSpread({}, panelAttrs), {}, {
29
+ 'data-panel-color': panelColor
30
+ });
31
+ }
32
+
20
33
  var iconDiv = ['div', {
21
34
  class: PanelSharedCssClassName.icon
22
35
  }];
@@ -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']
@@ -10,6 +10,29 @@ export var getInitialState = function getInitialState(state) {
10
10
  selection: state.selection
11
11
  };
12
12
  };
13
+
14
+ var toggleContentEditable = function toggleContentEditable(node) {
15
+ var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
16
+
17
+ if (root || node.getAttribute('contenteditable') === 'true') {
18
+ var wasTrue = node.getAttribute('contenteditable') === 'true';
19
+ node.setAttribute('contenteditable', 'false');
20
+ requestAnimationFrame(function () {
21
+ if (wasTrue) {
22
+ node.setAttribute('contenteditable', 'true');
23
+ } else {
24
+ node.removeAttribute('contenteditable');
25
+ }
26
+ });
27
+ } // any children with contenteditable = true block selection from proceeding
28
+
29
+
30
+ var children = Array.from(node.children);
31
+ children.forEach(function (child) {
32
+ return toggleContentEditable(child);
33
+ });
34
+ };
35
+
13
36
  export var createPlugin = function createPlugin(dispatch, dispatchAnalyticsEvent) {
14
37
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
15
38
  return new Plugin({
@@ -92,10 +115,11 @@ export var createPlugin = function createPlugin(dispatch, dispatchAnalyticsEvent
92
115
  return false;
93
116
  },
94
117
  keydown: function keydown(editorView, event) {
95
- // Firefox bugfix to bypass issue with editing text adjacent to a DOM node with
118
+ var state = editorView.state; // Firefox bugfix to bypass issue with editing text adjacent to a DOM node with
96
119
  // contenteditable="false". (See https://product-fabric.atlassian.net/browse/ED-9452)
97
120
  // On keypress, if the head of cursor selection touches a node with contenteditable="false",
98
121
  // we temporarily remove the attribute, wait one tick, then restore it with its original value.
122
+
99
123
  if (browser.gecko) {
100
124
  var node = editorView.nodeDOM(editorView.state.selection.head);
101
125
 
@@ -105,6 +129,31 @@ export var createPlugin = function createPlugin(dispatch, dispatchAnalyticsEvent
105
129
  node.setAttribute('contenteditable', 'false');
106
130
  });
107
131
  }
132
+ } // Bugfix for block ReactNodeViews like table and extension
133
+ // They could not be selected with Shift + ArrowDown/ArrowUp
134
+ // Fixed when contenteditable = false, but then you couldn't edit their contents
135
+ // Therefore, briefly set contenteditable=false to allow the selection through, then set it back to true
136
+
137
+
138
+ if (event instanceof KeyboardEvent && event.shiftKey && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
139
+ var pos;
140
+
141
+ if (event.key === 'ArrowDown') {
142
+ pos = state.selection.$head.after();
143
+ } else {
144
+ pos = state.selection.$head.before() - 1; // block extensions only take up one position, dont need to get before()
145
+
146
+ if (!editorView.nodeDOM(pos)) {
147
+ pos = state.doc.resolve(pos).before();
148
+ }
149
+ }
150
+
151
+ var _node = editorView.nodeDOM(pos);
152
+
153
+ if (_node instanceof HTMLDivElement && _node.className.includes('View-content-wrap') // class added by ReactNodeView
154
+ ) {
155
+ toggleContentEditable(_node, true);
156
+ }
108
157
  }
109
158
 
110
159
  return false;
@@ -227,7 +227,8 @@ export var StatusPickerWithoutAnalytcs = /*#__PURE__*/function (_React$Component
227
227
  target = _this$props.target;
228
228
  var _this$state3 = this.state,
229
229
  color = _this$state3.color,
230
- text = _this$state3.text;
230
+ text = _this$state3.text,
231
+ localId = _this$state3.localId;
231
232
  return target && /*#__PURE__*/React.createElement(PopupWithListeners, {
232
233
  target: target,
233
234
  offset: [0, 8],
@@ -244,7 +245,8 @@ export var StatusPickerWithoutAnalytcs = /*#__PURE__*/function (_React$Component
244
245
  onColorClick: this.onColorClick,
245
246
  onColorHover: this.onColorHover,
246
247
  onTextChanged: this.onTextChanged,
247
- onEnter: this.onEnter
248
+ onEnter: this.onEnter,
249
+ localId: localId
248
250
  })));
249
251
  }
250
252
  }]);