@wordpress/block-editor 11.5.0 → 11.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -0
  3. package/build/components/block-list/block-html.js +1 -3
  4. package/build/components/block-list/block-html.js.map +1 -1
  5. package/build/components/block-list/block-invalid-warning.js +63 -80
  6. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  7. package/build/components/block-preview/auto.js +6 -23
  8. package/build/components/block-preview/auto.js.map +1 -1
  9. package/build/components/block-settings-menu-controls/index.js +1 -1
  10. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  11. package/build/components/block-switcher/block-transformations-menu.native.js +1 -0
  12. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  13. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  14. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  15. package/build/components/editor-styles/index.js +20 -2
  16. package/build/components/editor-styles/index.js.map +1 -1
  17. package/build/components/global-styles/border-panel.js +306 -0
  18. package/build/components/global-styles/border-panel.js.map +1 -0
  19. package/build/components/global-styles/color-panel.js +583 -0
  20. package/build/components/global-styles/color-panel.js.map +1 -0
  21. package/build/components/global-styles/dimensions-panel.js +8 -30
  22. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  23. package/build/components/global-styles/get-block-css-selector.js +129 -0
  24. package/build/components/global-styles/get-block-css-selector.js.map +1 -0
  25. package/build/components/global-styles/hooks.js +109 -3
  26. package/build/components/global-styles/hooks.js.map +1 -1
  27. package/build/components/global-styles/index.js +36 -0
  28. package/build/components/global-styles/index.js.map +1 -1
  29. package/build/components/global-styles/typography-panel.js +66 -45
  30. package/build/components/global-styles/typography-panel.js.map +1 -1
  31. package/build/components/global-styles/use-global-styles-output.js +180 -99
  32. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  33. package/build/components/global-styles/utils.js +2 -1
  34. package/build/components/global-styles/utils.js.map +1 -1
  35. package/build/components/image-size-control/index.js +8 -5
  36. package/build/components/image-size-control/index.js.map +1 -1
  37. package/build/components/inserter/index.js +29 -17
  38. package/build/components/inserter/index.js.map +1 -1
  39. package/build/components/inserter/menu.js +1 -1
  40. package/build/components/inserter/menu.js.map +1 -1
  41. package/build/components/inserter/quick-inserter.js +4 -2
  42. package/build/components/inserter/quick-inserter.js.map +1 -1
  43. package/build/components/inserter/search-results.js +10 -3
  44. package/build/components/inserter/search-results.js.map +1 -1
  45. package/build/components/inserter/tabs.js +1 -1
  46. package/build/components/inserter/tabs.js.map +1 -1
  47. package/build/components/inspector-controls-tabs/position-controls-panel.js +43 -7
  48. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  49. package/build/components/line-height-control/index.js +15 -1
  50. package/build/components/line-height-control/index.js.map +1 -1
  51. package/build/components/link-control/index.js +1 -1
  52. package/build/components/link-control/index.js.map +1 -1
  53. package/build/components/link-control/search-item.js +5 -2
  54. package/build/components/link-control/search-item.js.map +1 -1
  55. package/build/components/list-view/appender.js +105 -0
  56. package/build/components/list-view/appender.js.map +1 -0
  57. package/build/components/list-view/block.js +5 -5
  58. package/build/components/list-view/block.js.map +1 -1
  59. package/build/components/list-view/branch.js +25 -5
  60. package/build/components/list-view/branch.js.map +1 -1
  61. package/build/components/list-view/index.js +37 -13
  62. package/build/components/list-view/index.js.map +1 -1
  63. package/build/components/list-view/use-block-selection.js +1 -2
  64. package/build/components/list-view/use-block-selection.js.map +1 -1
  65. package/build/components/media-replace-flow/index.js +13 -4
  66. package/build/components/media-replace-flow/index.js.map +1 -1
  67. package/build/components/off-canvas-editor/appender.js +28 -3
  68. package/build/components/off-canvas-editor/appender.js.map +1 -1
  69. package/build/components/off-canvas-editor/branch.js +5 -3
  70. package/build/components/off-canvas-editor/branch.js.map +1 -1
  71. package/build/components/off-canvas-editor/index.js +9 -7
  72. package/build/components/off-canvas-editor/index.js.map +1 -1
  73. package/build/components/off-canvas-editor/link-ui.js +0 -1
  74. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  75. package/build/components/provider/use-block-sync.js +17 -3
  76. package/build/components/provider/use-block-sync.js.map +1 -1
  77. package/build/components/rich-text/format-edit.js +2 -30
  78. package/build/components/rich-text/format-edit.js.map +1 -1
  79. package/build/components/rich-text/format-toolbar-container.js +0 -3
  80. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  81. package/build/components/writing-flow/use-input.js +4 -8
  82. package/build/components/writing-flow/use-input.js.map +1 -1
  83. package/build/hooks/border.js +90 -240
  84. package/build/hooks/border.js.map +1 -1
  85. package/build/hooks/color.js +92 -229
  86. package/build/hooks/color.js.map +1 -1
  87. package/build/hooks/content-lock-ui.js +4 -2
  88. package/build/hooks/content-lock-ui.js.map +1 -1
  89. package/build/hooks/{color-panel.js → contrast-checker.js} +11 -49
  90. package/build/hooks/contrast-checker.js.map +1 -0
  91. package/build/hooks/custom-class-name.js +4 -4
  92. package/build/hooks/custom-class-name.js.map +1 -1
  93. package/build/hooks/custom-class-name.native.js +3 -4
  94. package/build/hooks/custom-class-name.native.js.map +1 -1
  95. package/build/hooks/dimensions.js +0 -1
  96. package/build/hooks/dimensions.js.map +1 -1
  97. package/build/hooks/duotone.js +3 -1
  98. package/build/hooks/duotone.js.map +1 -1
  99. package/build/hooks/layout.js +19 -22
  100. package/build/hooks/layout.js.map +1 -1
  101. package/build/hooks/position.js +2 -2
  102. package/build/hooks/position.js.map +1 -1
  103. package/build/hooks/style.js +23 -26
  104. package/build/hooks/style.js.map +1 -1
  105. package/build/hooks/supports.js +7 -1
  106. package/build/hooks/supports.js.map +1 -1
  107. package/build/hooks/typography.js +2 -2
  108. package/build/hooks/typography.js.map +1 -1
  109. package/build/hooks/utils.js +50 -75
  110. package/build/hooks/utils.js.map +1 -1
  111. package/build/layouts/constrained.js +6 -2
  112. package/build/layouts/constrained.js.map +1 -1
  113. package/build/layouts/grid.js +165 -0
  114. package/build/layouts/grid.js.map +1 -0
  115. package/build/layouts/index.js +3 -1
  116. package/build/layouts/index.js.map +1 -1
  117. package/build/private-apis.js +7 -1
  118. package/build/private-apis.js.map +1 -1
  119. package/build/store/actions.js +10 -8
  120. package/build/store/actions.js.map +1 -1
  121. package/build/store/selectors.js +19 -3
  122. package/build/store/selectors.js.map +1 -1
  123. package/build/utils/object.js +76 -0
  124. package/build/utils/object.js.map +1 -0
  125. package/build/utils/parse-css-unit-to-px.js +15 -9
  126. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  127. package/build-module/components/block-list/block-html.js +1 -3
  128. package/build-module/components/block-list/block-html.js.map +1 -1
  129. package/build-module/components/block-list/block-invalid-warning.js +66 -78
  130. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  131. package/build-module/components/block-preview/auto.js +6 -22
  132. package/build-module/components/block-preview/auto.js.map +1 -1
  133. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  134. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  135. package/build-module/components/block-switcher/block-transformations-menu.native.js +1 -0
  136. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  137. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  138. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  139. package/build-module/components/editor-styles/index.js +19 -2
  140. package/build-module/components/editor-styles/index.js.map +1 -1
  141. package/build-module/components/global-styles/border-panel.js +291 -0
  142. package/build-module/components/global-styles/border-panel.js.map +1 -0
  143. package/build-module/components/global-styles/color-panel.js +554 -0
  144. package/build-module/components/global-styles/color-panel.js.map +1 -0
  145. package/build-module/components/global-styles/dimensions-panel.js +7 -30
  146. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  147. package/build-module/components/global-styles/get-block-css-selector.js +120 -0
  148. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -0
  149. package/build-module/components/global-styles/hooks.js +104 -3
  150. package/build-module/components/global-styles/hooks.js.map +1 -1
  151. package/build-module/components/global-styles/index.js +3 -0
  152. package/build-module/components/global-styles/index.js.map +1 -1
  153. package/build-module/components/global-styles/typography-panel.js +65 -46
  154. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  155. package/build-module/components/global-styles/use-global-styles-output.js +181 -100
  156. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  157. package/build-module/components/global-styles/utils.js +2 -1
  158. package/build-module/components/global-styles/utils.js.map +1 -1
  159. package/build-module/components/image-size-control/index.js +8 -5
  160. package/build-module/components/image-size-control/index.js.map +1 -1
  161. package/build-module/components/inserter/index.js +28 -16
  162. package/build-module/components/inserter/index.js.map +1 -1
  163. package/build-module/components/inserter/menu.js +1 -1
  164. package/build-module/components/inserter/menu.js.map +1 -1
  165. package/build-module/components/inserter/quick-inserter.js +4 -2
  166. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  167. package/build-module/components/inserter/search-results.js +10 -3
  168. package/build-module/components/inserter/search-results.js.map +1 -1
  169. package/build-module/components/inserter/tabs.js +1 -1
  170. package/build-module/components/inserter/tabs.js.map +1 -1
  171. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +42 -7
  172. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  173. package/build-module/components/line-height-control/index.js +15 -1
  174. package/build-module/components/line-height-control/index.js.map +1 -1
  175. package/build-module/components/link-control/index.js +1 -1
  176. package/build-module/components/link-control/index.js.map +1 -1
  177. package/build-module/components/link-control/search-item.js +4 -2
  178. package/build-module/components/link-control/search-item.js.map +1 -1
  179. package/build-module/components/list-view/appender.js +88 -0
  180. package/build-module/components/list-view/appender.js.map +1 -0
  181. package/build-module/components/list-view/block.js +5 -4
  182. package/build-module/components/list-view/block.js.map +1 -1
  183. package/build-module/components/list-view/branch.js +22 -5
  184. package/build-module/components/list-view/branch.js.map +1 -1
  185. package/build-module/components/list-view/index.js +32 -12
  186. package/build-module/components/list-view/index.js.map +1 -1
  187. package/build-module/components/list-view/use-block-selection.js +1 -2
  188. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  189. package/build-module/components/media-replace-flow/index.js +12 -4
  190. package/build-module/components/media-replace-flow/index.js.map +1 -1
  191. package/build-module/components/off-canvas-editor/appender.js +28 -4
  192. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  193. package/build-module/components/off-canvas-editor/branch.js +5 -3
  194. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  195. package/build-module/components/off-canvas-editor/index.js +9 -7
  196. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  197. package/build-module/components/off-canvas-editor/link-ui.js +0 -1
  198. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  199. package/build-module/components/provider/use-block-sync.js +17 -3
  200. package/build-module/components/provider/use-block-sync.js.map +1 -1
  201. package/build-module/components/rich-text/format-edit.js +3 -31
  202. package/build-module/components/rich-text/format-edit.js.map +1 -1
  203. package/build-module/components/rich-text/format-toolbar-container.js +0 -3
  204. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  205. package/build-module/components/writing-flow/use-input.js +4 -8
  206. package/build-module/components/writing-flow/use-input.js.map +1 -1
  207. package/build-module/hooks/border.js +92 -240
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color.js +90 -232
  210. package/build-module/hooks/color.js.map +1 -1
  211. package/build-module/hooks/content-lock-ui.js +4 -2
  212. package/build-module/hooks/content-lock-ui.js.map +1 -1
  213. package/build-module/hooks/{color-panel.js → contrast-checker.js} +10 -44
  214. package/build-module/hooks/contrast-checker.js.map +1 -0
  215. package/build-module/hooks/custom-class-name.js +4 -4
  216. package/build-module/hooks/custom-class-name.js.map +1 -1
  217. package/build-module/hooks/custom-class-name.native.js +3 -4
  218. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  219. package/build-module/hooks/dimensions.js +0 -1
  220. package/build-module/hooks/dimensions.js.map +1 -1
  221. package/build-module/hooks/duotone.js +4 -2
  222. package/build-module/hooks/duotone.js.map +1 -1
  223. package/build-module/hooks/layout.js +19 -22
  224. package/build-module/hooks/layout.js.map +1 -1
  225. package/build-module/hooks/position.js +3 -3
  226. package/build-module/hooks/position.js.map +1 -1
  227. package/build-module/hooks/style.js +23 -26
  228. package/build-module/hooks/style.js.map +1 -1
  229. package/build-module/hooks/supports.js +7 -1
  230. package/build-module/hooks/supports.js.map +1 -1
  231. package/build-module/hooks/typography.js +2 -2
  232. package/build-module/hooks/typography.js.map +1 -1
  233. package/build-module/hooks/utils.js +48 -72
  234. package/build-module/hooks/utils.js.map +1 -1
  235. package/build-module/layouts/constrained.js +6 -2
  236. package/build-module/layouts/constrained.js.map +1 -1
  237. package/build-module/layouts/grid.js +151 -0
  238. package/build-module/layouts/grid.js.map +1 -0
  239. package/build-module/layouts/index.js +2 -1
  240. package/build-module/layouts/index.js.map +1 -1
  241. package/build-module/private-apis.js +5 -1
  242. package/build-module/private-apis.js.map +1 -1
  243. package/build-module/store/actions.js +10 -8
  244. package/build-module/store/actions.js.map +1 -1
  245. package/build-module/store/selectors.js +17 -3
  246. package/build-module/store/selectors.js.map +1 -1
  247. package/build-module/utils/object.js +69 -0
  248. package/build-module/utils/object.js.map +1 -0
  249. package/build-module/utils/parse-css-unit-to-px.js +15 -9
  250. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  251. package/build-style/style-rtl.css +32 -12
  252. package/build-style/style.css +32 -12
  253. package/package.json +31 -31
  254. package/src/components/block-draggable/content.scss +1 -1
  255. package/src/components/block-inspector/style.scss +3 -0
  256. package/src/components/block-list/block-html.js +1 -1
  257. package/src/components/block-list/block-invalid-warning.js +72 -64
  258. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +20 -2
  259. package/src/components/block-preview/auto.js +2 -17
  260. package/src/components/block-preview/test/index.js +0 -2
  261. package/src/components/block-settings-menu-controls/index.js +2 -1
  262. package/src/components/block-styles/style.scss +2 -2
  263. package/src/components/block-switcher/block-transformations-menu.native.js +1 -0
  264. package/src/components/color-palette/test/__snapshots__/control.js.snap +16 -14
  265. package/src/components/colors-gradients/style.scss +8 -8
  266. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +48 -38
  267. package/src/components/editor-styles/index.js +29 -1
  268. package/src/components/global-styles/border-panel.js +285 -0
  269. package/src/components/global-styles/color-panel.js +706 -0
  270. package/src/components/global-styles/dimensions-panel.js +13 -42
  271. package/src/components/global-styles/get-block-css-selector.js +129 -0
  272. package/src/components/global-styles/hooks.js +154 -1
  273. package/src/components/global-styles/index.js +3 -0
  274. package/src/components/global-styles/test/use-global-styles-output.js +31 -2
  275. package/src/components/global-styles/typography-panel.js +67 -45
  276. package/src/components/global-styles/use-global-styles-output.js +176 -93
  277. package/src/components/global-styles/utils.js +3 -0
  278. package/src/components/image-size-control/index.js +4 -3
  279. package/src/components/image-size-control/test/index.js +2 -2
  280. package/src/components/inner-blocks/README.md +1 -1
  281. package/src/components/inserter/index.js +30 -11
  282. package/src/components/inserter/menu.js +0 -1
  283. package/src/components/inserter/quick-inserter.js +2 -0
  284. package/src/components/inserter/search-results.js +7 -1
  285. package/src/components/inserter/style.scss +3 -0
  286. package/src/components/inserter/tabs.js +1 -9
  287. package/src/components/inspector-controls-tabs/position-controls-panel.js +40 -9
  288. package/src/components/line-height-control/index.js +10 -1
  289. package/src/components/link-control/index.js +1 -1
  290. package/src/components/link-control/search-item.js +3 -1
  291. package/src/components/link-control/style.scss +0 -4
  292. package/src/components/link-control/test/index.js +0 -2
  293. package/src/components/list-view/appender.js +101 -0
  294. package/src/components/list-view/block.js +5 -4
  295. package/src/components/list-view/branch.js +30 -1
  296. package/src/components/list-view/index.js +43 -10
  297. package/src/components/list-view/style.scss +19 -0
  298. package/src/components/list-view/use-block-selection.js +0 -2
  299. package/src/components/media-replace-flow/index.js +36 -24
  300. package/src/components/media-replace-flow/style.scss +5 -2
  301. package/src/components/off-canvas-editor/appender.js +31 -5
  302. package/src/components/off-canvas-editor/branch.js +3 -1
  303. package/src/components/off-canvas-editor/index.js +7 -7
  304. package/src/components/off-canvas-editor/link-ui.js +0 -1
  305. package/src/components/provider/use-block-sync.js +21 -4
  306. package/src/components/rich-text/format-edit.js +2 -32
  307. package/src/components/rich-text/format-toolbar-container.js +1 -7
  308. package/src/components/url-popover/test/index.js +0 -2
  309. package/src/components/writing-flow/use-input.js +4 -5
  310. package/src/hooks/border.js +93 -225
  311. package/src/hooks/color.js +120 -296
  312. package/src/hooks/content-lock-ui.js +6 -2
  313. package/src/hooks/{color-panel.js → contrast-checker.js} +10 -46
  314. package/src/hooks/custom-class-name.js +4 -4
  315. package/src/hooks/custom-class-name.native.js +3 -4
  316. package/src/hooks/dimensions.js +0 -1
  317. package/src/hooks/duotone.js +8 -5
  318. package/src/hooks/layout.js +19 -16
  319. package/src/hooks/position.js +3 -3
  320. package/src/hooks/style.js +29 -28
  321. package/src/hooks/supports.js +6 -0
  322. package/src/hooks/test/style.js +2 -1
  323. package/src/hooks/test/use-typography-props.js +2 -0
  324. package/src/hooks/test/utils.js +0 -104
  325. package/src/hooks/typography.js +2 -1
  326. package/src/hooks/utils.js +63 -70
  327. package/src/layouts/constrained.js +23 -17
  328. package/src/layouts/grid.js +172 -0
  329. package/src/layouts/index.js +2 -1
  330. package/src/layouts/test/grid.js +21 -0
  331. package/src/private-apis.js +4 -0
  332. package/src/store/actions.js +10 -8
  333. package/src/store/selectors.js +20 -3
  334. package/src/utils/object.js +69 -0
  335. package/src/utils/parse-css-unit-to-px.js +14 -9
  336. package/src/utils/test/object.js +107 -0
  337. package/src/utils/test/parse-css-unit-to-px.js +1 -2
  338. package/tsconfig.tsbuildinfo +1 -1
  339. package/build/hooks/border-radius.js +0 -100
  340. package/build/hooks/border-radius.js.map +0 -1
  341. package/build/hooks/color-panel.js.map +0 -1
  342. package/build-module/hooks/border-radius.js +0 -84
  343. package/build-module/hooks/border-radius.js.map +0 -1
  344. package/build-module/hooks/color-panel.js.map +0 -1
  345. package/src/hooks/border-radius.js +0 -70
@@ -1,3 +1,8 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
@@ -58,6 +63,7 @@ const MediaReplaceFlow = ( {
58
63
  const mediaUpload = useSelect( ( select ) => {
59
64
  return select( blockEditorStore ).getSettings().mediaUpload;
60
65
  }, [] );
66
+ const canUpload = !! mediaUpload;
61
67
  const editMediaButtonRef = useRef();
62
68
  const errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;
63
69
 
@@ -152,7 +158,7 @@ const MediaReplaceFlow = ( {
152
158
  renderContent={ ( { onClose } ) => (
153
159
  <>
154
160
  <NavigableMenu className="block-editor-media-replace-flow__media-upload-menu">
155
- <>
161
+ <MediaUploadCheck>
156
162
  <MediaUpload
157
163
  gallery={ gallery }
158
164
  addToGallery={ addToGallery }
@@ -171,28 +177,26 @@ const MediaReplaceFlow = ( {
171
177
  </MenuItem>
172
178
  ) }
173
179
  />
174
- <MediaUploadCheck>
175
- <FormFileUpload
176
- onChange={ ( event ) => {
177
- uploadFiles( event, onClose );
178
- } }
179
- accept={ accept }
180
- multiple={ multiple }
181
- render={ ( { openFileDialog } ) => {
182
- return (
183
- <MenuItem
184
- icon={ upload }
185
- onClick={ () => {
186
- openFileDialog();
187
- } }
188
- >
189
- { __( 'Upload' ) }
190
- </MenuItem>
191
- );
192
- } }
193
- />
194
- </MediaUploadCheck>
195
- </>
180
+ <FormFileUpload
181
+ onChange={ ( event ) => {
182
+ uploadFiles( event, onClose );
183
+ } }
184
+ accept={ accept }
185
+ multiple={ multiple }
186
+ render={ ( { openFileDialog } ) => {
187
+ return (
188
+ <MenuItem
189
+ icon={ upload }
190
+ onClick={ () => {
191
+ openFileDialog();
192
+ } }
193
+ >
194
+ { __( 'Upload' ) }
195
+ </MenuItem>
196
+ );
197
+ } }
198
+ />
199
+ </MediaUploadCheck>
196
200
  { onToggleFeaturedImage && (
197
201
  <MenuItem
198
202
  icon={ postFeaturedImage }
@@ -206,7 +210,15 @@ const MediaReplaceFlow = ( {
206
210
  </NavigableMenu>
207
211
  { onSelectURL && (
208
212
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
209
- <form className="block-editor-media-flow__url-input">
213
+ <form
214
+ className={ classnames(
215
+ 'block-editor-media-flow__url-input',
216
+ {
217
+ 'has-siblings':
218
+ canUpload || onToggleFeaturedImage,
219
+ }
220
+ ) }
221
+ >
210
222
  <span className="block-editor-media-replace-flow__image-url-label">
211
223
  { __( 'Current media URL:' ) }
212
224
  </span>
@@ -10,12 +10,15 @@
10
10
  }
11
11
 
12
12
  .block-editor-media-flow__url-input {
13
- border-top: $border-width solid $gray-900;
14
- margin-top: $grid-unit-10;
15
13
  margin-right: -$grid-unit-10;
16
14
  margin-left: -$grid-unit-10;
17
15
  padding: $grid-unit-20;
18
16
 
17
+ &.has-siblings {
18
+ border-top: $border-width solid $gray-900;
19
+ margin-top: $grid-unit-10;
20
+ }
21
+
19
22
  .block-editor-media-replace-flow__image-url-label {
20
23
  display: block;
21
24
  top: $grid-unit-20;
@@ -4,7 +4,12 @@
4
4
  import { useInstanceId } from '@wordpress/compose';
5
5
  import { speak } from '@wordpress/a11y';
6
6
  import { useSelect } from '@wordpress/data';
7
- import { forwardRef, useState, useEffect } from '@wordpress/element';
7
+ import {
8
+ forwardRef,
9
+ useState,
10
+ useEffect,
11
+ useCallback,
12
+ } from '@wordpress/element';
8
13
  import { __, sprintf } from '@wordpress/i18n';
9
14
 
10
15
  /**
@@ -12,7 +17,14 @@ import { __, sprintf } from '@wordpress/i18n';
12
17
  */
13
18
  import { store as blockEditorStore } from '../../store';
14
19
  import useBlockDisplayTitle from '../block-title/use-block-display-title';
15
- import Inserter from '../inserter';
20
+
21
+ import { unlock } from '../../lock-unlock';
22
+ import { privateApis as blockEditorPrivateApis } from '../../private-apis';
23
+
24
+ const prioritizedInserterBlocks = [
25
+ 'core/navigation-link/page',
26
+ 'core/navigation-link',
27
+ ];
16
28
 
17
29
  export const Appender = forwardRef(
18
30
  ( { nestingLevel, blockCount, clientId, ...props }, ref ) => {
@@ -58,10 +70,23 @@ export const Appender = forwardRef(
58
70
  );
59
71
  }, [ insertedBlockTitle ] );
60
72
 
73
+ const orderInitialBlockItems = useCallback( ( items ) => {
74
+ items.sort( ( { id: aName }, { id: bName } ) => {
75
+ // Sort block items according to `prioritizedInserterBlocks`.
76
+ let aIndex = prioritizedInserterBlocks.indexOf( aName );
77
+ let bIndex = prioritizedInserterBlocks.indexOf( bName );
78
+ // All other block items should come after that.
79
+ if ( aIndex < 0 ) aIndex = prioritizedInserterBlocks.length;
80
+ if ( bIndex < 0 ) bIndex = prioritizedInserterBlocks.length;
81
+ return aIndex - bIndex;
82
+ } );
83
+ return items;
84
+ }, [] );
85
+
61
86
  if ( hideInserter ) {
62
87
  return null;
63
88
  }
64
-
89
+ const { PrivateInserter } = unlock( blockEditorPrivateApis );
65
90
  const descriptionId = `off-canvas-editor-appender__${ instanceId }`;
66
91
  const description = sprintf(
67
92
  /* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */
@@ -73,11 +98,11 @@ export const Appender = forwardRef(
73
98
 
74
99
  return (
75
100
  <div className="offcanvas-editor-appender">
76
- <Inserter
101
+ <PrivateInserter
77
102
  ref={ ref }
78
103
  rootClientId={ clientId }
79
104
  position="bottom right"
80
- isAppender={ true }
105
+ isAppender
81
106
  selectBlockOnInsert={ false }
82
107
  shouldDirectInsert={ false }
83
108
  __experimentalIsQuick
@@ -88,6 +113,7 @@ export const Appender = forwardRef(
88
113
  setInsertedBlock( maybeInsertedBlock );
89
114
  }
90
115
  } }
116
+ orderInitialBlockItems={ orderInitialBlockItems }
91
117
  />
92
118
  <div
93
119
  className="offcanvas-editor-appender__description"
@@ -97,6 +97,7 @@ function ListViewBranch( props ) {
97
97
  isExpanded,
98
98
  parentId,
99
99
  shouldShowInnerBlocks = true,
100
+ showAppender: showAppenderProp = true,
100
101
  } = props;
101
102
 
102
103
  const isContentLocked = useSelect(
@@ -117,7 +118,7 @@ function ListViewBranch( props ) {
117
118
  }
118
119
 
119
120
  // Only show the appender at the first level.
120
- const showAppender = level === 1;
121
+ const showAppender = showAppenderProp && level === 1;
121
122
 
122
123
  const filteredBlocks = blocks.filter( Boolean );
123
124
  const blockCount = filteredBlocks.length;
@@ -205,6 +206,7 @@ function ListViewBranch( props ) {
205
206
  isBranchSelected={ isSelectedBranch }
206
207
  selectedClientIds={ selectedClientIds }
207
208
  isExpanded={ isExpanded }
209
+ showAppender={ showAppenderProp }
208
210
  />
209
211
  ) }
210
212
  </AsyncModeProvider>
@@ -56,20 +56,24 @@ export const BLOCK_LIST_ITEM_HEIGHT = 36;
56
56
  *
57
57
  * @param {Object} props Components props.
58
58
  * @param {string} props.id An HTML element id for the root element of ListView.
59
+ * @param {string} props.parentClientId The client id of the parent block.
59
60
  * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
60
61
  * @param {boolean} props.showBlockMovers Flag to enable block movers
61
62
  * @param {boolean} props.isExpanded Flag to determine whether nested levels are expanded by default.
62
63
  * @param {Object} props.LeafMoreMenu Optional more menu substitution.
63
64
  * @param {string} props.description Optional accessible description for the tree grid component.
64
65
  * @param {string} props.onSelect Optional callback to be invoked when a block is selected.
66
+ * @param {string} props.showAppender Flag to show or hide the block appender.
65
67
  * @param {Object} ref Forwarded ref
66
68
  */
67
69
  function OffCanvasEditor(
68
70
  {
69
71
  id,
72
+ parentClientId,
70
73
  blocks,
71
74
  showBlockMovers = false,
72
75
  isExpanded = false,
76
+ showAppender = true,
73
77
  LeafMoreMenu,
74
78
  description = __( 'Block navigation structure' ),
75
79
  onSelect,
@@ -80,10 +84,9 @@ function OffCanvasEditor(
80
84
  const { clientIdsTree, draggedClientIds, selectedClientIds } =
81
85
  useListViewClientIds( blocks );
82
86
 
83
- const { visibleBlockCount, shouldShowInnerBlocks, parentId } = useSelect(
87
+ const { visibleBlockCount, shouldShowInnerBlocks } = useSelect(
84
88
  ( select ) => {
85
89
  const {
86
- getBlockRootClientId,
87
90
  getGlobalBlockCount,
88
91
  getClientIdsOfDescendants,
89
92
  __unstableGetEditorMode,
@@ -95,10 +98,6 @@ function OffCanvasEditor(
95
98
  return {
96
99
  visibleBlockCount: getGlobalBlockCount() - draggedBlockCount,
97
100
  shouldShowInnerBlocks: __unstableGetEditorMode() !== 'zoom-out',
98
- parentId:
99
- blocks.length > 0
100
- ? getBlockRootClientId( blocks[ 0 ].clientId )
101
- : undefined,
102
101
  };
103
102
  },
104
103
  [ draggedClientIds, blocks ]
@@ -232,7 +231,7 @@ function OffCanvasEditor(
232
231
  >
233
232
  <ListViewContext.Provider value={ contextValue }>
234
233
  <ListViewBranch
235
- parentId={ parentId }
234
+ parentId={ parentClientId }
236
235
  blocks={ clientIdsTree }
237
236
  selectBlock={ selectEditorBlock }
238
237
  showBlockMovers={ showBlockMovers }
@@ -240,6 +239,7 @@ function OffCanvasEditor(
240
239
  selectedClientIds={ selectedClientIds }
241
240
  isExpanded={ isExpanded }
242
241
  shouldShowInnerBlocks={ shouldShowInnerBlocks }
242
+ showAppender={ showAppender }
243
243
  />
244
244
  <TreeGridRow
245
245
  level={ 1 }
@@ -137,7 +137,6 @@ export function LinkUI( props ) {
137
137
  placement="bottom"
138
138
  onClose={ props.onClose }
139
139
  anchor={ props.anchor }
140
- __unstableSlotName={ '__unstable-block-tools-after' }
141
140
  shift
142
141
  >
143
142
  <LinkControl
@@ -76,10 +76,18 @@ export default function useBlockSync( {
76
76
  resetBlocks,
77
77
  resetSelection,
78
78
  replaceInnerBlocks,
79
+ selectBlock,
79
80
  setHasControlledInnerBlocks,
80
81
  __unstableMarkNextChangeAsNotPersistent,
81
82
  } = registry.dispatch( blockEditorStore );
82
- const { getBlockName, getBlocks } = registry.select( blockEditorStore );
83
+ const {
84
+ hasSelectedBlock,
85
+ getBlockName,
86
+ getBlocks,
87
+ getSelectionStart,
88
+ getSelectionEnd,
89
+ getBlock,
90
+ } = registry.select( blockEditorStore );
83
91
  const isControlled = useSelect(
84
92
  ( select ) => {
85
93
  return (
@@ -159,6 +167,9 @@ export default function useBlockSync( {
159
167
  // bound sync, unset the outbound value to avoid considering it in
160
168
  // subsequent renders.
161
169
  pendingChanges.current.outgoing = [];
170
+ const hadSelecton = hasSelectedBlock();
171
+ const selectionAnchor = getSelectionStart();
172
+ const selectionFocus = getSelectionEnd();
162
173
  setControlledBlocks();
163
174
 
164
175
  if ( controlledSelection ) {
@@ -167,6 +178,15 @@ export default function useBlockSync( {
167
178
  controlledSelection.selectionEnd,
168
179
  controlledSelection.initialPosition
169
180
  );
181
+ } else {
182
+ const selectionStillExists = getBlock(
183
+ selectionAnchor.clientId
184
+ );
185
+ if ( hadSelecton && ! selectionStillExists ) {
186
+ selectBlock( clientId );
187
+ } else {
188
+ resetSelection( selectionAnchor, selectionFocus );
189
+ }
170
190
  }
171
191
  }
172
192
  }, [ controlledBlocks, clientId ] );
@@ -182,8 +202,6 @@ export default function useBlockSync( {
182
202
 
183
203
  useEffect( () => {
184
204
  const {
185
- getSelectionStart,
186
- getSelectionEnd,
187
205
  getSelectedBlocksInitialCaretPosition,
188
206
  isLastBlockChangePersistent,
189
207
  __unstableIsLastBlockChangeIgnored,
@@ -220,7 +238,6 @@ export default function useBlockSync( {
220
238
  const newBlocks = getBlocks( clientId );
221
239
  const areBlocksDifferent = newBlocks !== blocks;
222
240
  blocks = newBlocks;
223
-
224
241
  if (
225
242
  areBlocksDifferent &&
226
243
  ( pendingChanges.current.incoming ||
@@ -1,11 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- getActiveFormat,
6
- getActiveObject,
7
- isCollapsed,
8
- } from '@wordpress/rich-text';
4
+ import { getActiveFormat, getActiveObject } from '@wordpress/rich-text';
9
5
 
10
6
  export default function FormatEdit( {
11
7
  formatTypes,
@@ -22,37 +18,11 @@ export default function FormatEdit( {
22
18
  }
23
19
 
24
20
  const activeFormat = getActiveFormat( value, name );
25
- let isActive = activeFormat !== undefined;
21
+ const isActive = activeFormat !== undefined;
26
22
  const activeObject = getActiveObject( value );
27
23
  const isObjectActive =
28
24
  activeObject !== undefined && activeObject.type === name;
29
25
 
30
- // Edge case: un-collapsed link formats.
31
- // If there is a missing link format at either end of the selection
32
- // then we shouldn't show the Edit UI because the selection has exceeded
33
- // the bounds of the link format.
34
- // Also if the format objects don't match then we're dealing with two separate
35
- // links so we should not allow the link to be modified over the top.
36
- if ( name === 'core/link' && ! isCollapsed( value ) ) {
37
- const formats = value.formats;
38
-
39
- const linkFormatAtStart = formats[ value.start ]?.find(
40
- ( { type } ) => type === 'core/link'
41
- );
42
-
43
- const linkFormatAtEnd = formats[ value.end - 1 ]?.find(
44
- ( { type } ) => type === 'core/link'
45
- );
46
-
47
- if (
48
- ! linkFormatAtStart ||
49
- ! linkFormatAtEnd ||
50
- linkFormatAtStart !== linkFormatAtEnd
51
- ) {
52
- isActive = false;
53
- }
54
- }
55
-
56
26
  return (
57
27
  <Edit
58
28
  key={ name }
@@ -19,11 +19,7 @@ import FormatToolbar from './format-toolbar';
19
19
  import NavigableToolbar from '../navigable-toolbar';
20
20
  import { store as blockEditorStore } from '../../store';
21
21
 
22
- function InlineSelectionToolbar( {
23
- value,
24
- editableContentElement,
25
- activeFormats,
26
- } ) {
22
+ function InlineSelectionToolbar( { editableContentElement, activeFormats } ) {
27
23
  const lastFormat = activeFormats[ activeFormats.length - 1 ];
28
24
  const lastFormatType = lastFormat?.type;
29
25
  const settings = useSelect(
@@ -32,7 +28,6 @@ function InlineSelectionToolbar( {
32
28
  );
33
29
  const popoverAnchor = useAnchor( {
34
30
  editableContentElement,
35
- value,
36
31
  settings,
37
32
  } );
38
33
 
@@ -85,7 +80,6 @@ const FormatToolbarContainer = ( {
85
80
  return (
86
81
  <InlineSelectionToolbar
87
82
  editableContentElement={ editableContentElement }
88
- value={ value }
89
83
  activeFormats={ activeFormats }
90
84
  />
91
85
  );
@@ -9,8 +9,6 @@ import userEvent from '@testing-library/user-event';
9
9
  */
10
10
  import URLPopover from '../';
11
11
 
12
- jest.useRealTimers();
13
-
14
12
  /**
15
13
  * Returns the first found popover element up the DOM tree.
16
14
  *
@@ -31,11 +31,10 @@ export default function useInput() {
31
31
 
32
32
  return useRefEffect( ( node ) => {
33
33
  function onBeforeInput( event ) {
34
- if ( ! hasMultiSelection() ) {
35
- return;
36
- }
37
- // Prevent the browser to format something when we have multiselection.
38
- if ( event.inputType?.startsWith( 'format' ) ) {
34
+ // If writing flow is editable, NEVER allow the browser to alter the
35
+ // DOM. This will cause React errors (and the DOM should only be
36
+ // altered in a controlled fashion).
37
+ if ( node.contentEditable === 'true' ) {
39
38
  event.preventDefault();
40
39
  }
41
40
  }