@wordpress/block-editor 9.8.1-next.957ca95e4c.0 → 10.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 (511) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +13 -1
  3. package/build/components/alignment-control/ui.js +6 -5
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/autocomplete/index.js +2 -2
  6. package/build/components/autocomplete/index.js.map +1 -1
  7. package/build/components/block-actions/index.js +5 -9
  8. package/build/components/block-actions/index.js.map +1 -1
  9. package/build/components/block-alignment-control/ui.js +5 -5
  10. package/build/components/block-alignment-control/ui.js.map +1 -1
  11. package/build/components/block-content-overlay/index.js +2 -4
  12. package/build/components/block-content-overlay/index.js.map +1 -1
  13. package/build/components/block-draggable/draggable-chip.js +2 -1
  14. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  15. package/build/components/block-edit/edit.js +1 -1
  16. package/build/components/block-edit/edit.js.map +1 -1
  17. package/build/components/block-inspector/index.js +125 -17
  18. package/build/components/block-inspector/index.js.map +1 -1
  19. package/build/components/block-list/block-list-compact.native.js +2 -1
  20. package/build/components/block-list/block-list-compact.native.js.map +1 -1
  21. package/build/components/block-list/block.js +40 -9
  22. package/build/components/block-list/block.js.map +1 -1
  23. package/build/components/block-list/index.js +4 -4
  24. package/build/components/block-list/index.js.map +1 -1
  25. package/build/components/block-list/use-block-props/index.js +14 -11
  26. package/build/components/block-list/use-block-props/index.js.map +1 -1
  27. package/build/components/block-list/use-block-props/use-block-class-names.js +3 -2
  28. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  29. package/build/components/block-list/use-block-props/use-focus-first-element.js +3 -9
  30. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  31. package/build/components/block-list/use-block-props/use-is-hovered.js +1 -2
  32. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  33. package/build/components/block-list/use-in-between-inserter.js +7 -12
  34. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  35. package/build/components/block-list-appender/index.js +20 -21
  36. package/build/components/block-list-appender/index.js.map +1 -1
  37. package/build/components/block-list-appender/index.native.js +1 -7
  38. package/build/components/block-list-appender/index.native.js.map +1 -1
  39. package/build/components/block-lock/use-block-lock.js +3 -1
  40. package/build/components/block-lock/use-block-lock.js.map +1 -1
  41. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +20 -10
  42. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  43. package/build/components/block-mover/button.js +4 -6
  44. package/build/components/block-mover/button.js.map +1 -1
  45. package/build/components/block-mover/index.js +4 -6
  46. package/build/components/block-mover/index.js.map +1 -1
  47. package/build/components/block-mover/index.native.js +24 -8
  48. package/build/components/block-mover/index.native.js.map +1 -1
  49. package/build/components/block-popover/inbetween.js +82 -52
  50. package/build/components/block-popover/inbetween.js.map +1 -1
  51. package/build/components/block-popover/index.js +31 -7
  52. package/build/components/block-popover/index.js.map +1 -1
  53. package/build/components/block-preview/auto.js +4 -2
  54. package/build/components/block-preview/auto.js.map +1 -1
  55. package/build/components/block-settings-menu/block-settings-dropdown.js +3 -1
  56. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  57. package/build/components/block-settings-menu-controls/index.js +3 -1
  58. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  59. package/build/components/block-styles/preview-panel.js +7 -1
  60. package/build/components/block-styles/preview-panel.js.map +1 -1
  61. package/build/components/block-switcher/block-transformations-menu.js +114 -25
  62. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  63. package/build/components/block-toolbar/index.js +9 -8
  64. package/build/components/block-toolbar/index.js.map +1 -1
  65. package/build/components/block-tools/block-contextual-toolbar.js +3 -2
  66. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  67. package/build/components/block-tools/block-selection-button.js +13 -5
  68. package/build/components/block-tools/block-selection-button.js.map +1 -1
  69. package/build/components/block-tools/index.js +33 -15
  70. package/build/components/block-tools/index.js.map +1 -1
  71. package/build/components/block-tools/insertion-point.js +4 -9
  72. package/build/components/block-tools/insertion-point.js.map +1 -1
  73. package/build/components/block-tools/selected-block-popover.js +9 -8
  74. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  75. package/build/components/block-tools/use-block-toolbar-popover-props.js +13 -8
  76. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  77. package/build/components/block-tools/zoom-out-mode-inserters.js +71 -0
  78. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -0
  79. package/build/components/block-vertical-alignment-control/ui.js +5 -2
  80. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  81. package/build/components/border-radius-control/linked-button.js +5 -6
  82. package/build/components/border-radius-control/linked-button.js.map +1 -1
  83. package/build/components/colors-gradients/dropdown.js +1 -1
  84. package/build/components/colors-gradients/dropdown.js.map +1 -1
  85. package/build/components/convert-to-group-buttons/toolbar.js +8 -3
  86. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
  87. package/build/components/iframe/index.js +31 -4
  88. package/build/components/iframe/index.js.map +1 -1
  89. package/build/components/inner-blocks/default-block-appender.js +1 -7
  90. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  91. package/build/components/inner-blocks/index.js +9 -3
  92. package/build/components/inner-blocks/index.js.map +1 -1
  93. package/build/components/inner-blocks/use-inner-block-template-sync.js +28 -17
  94. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  95. package/build/components/inner-blocks/use-nested-settings-update.js +28 -4
  96. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  97. package/build/components/inserter/index.js +3 -6
  98. package/build/components/inserter/index.js.map +1 -1
  99. package/build/components/inserter/library.js +14 -3
  100. package/build/components/inserter/library.js.map +1 -1
  101. package/build/components/inserter/menu.js +21 -8
  102. package/build/components/inserter/menu.js.map +1 -1
  103. package/build/components/inserter/preview-panel.js +1 -1
  104. package/build/components/inserter/preview-panel.js.map +1 -1
  105. package/build/components/inserter/tabs.js +11 -4
  106. package/build/components/inserter/tabs.js.map +1 -1
  107. package/build/components/link-control/link-preview.js +1 -1
  108. package/build/components/link-control/link-preview.js.map +1 -1
  109. package/build/components/link-control/search-input.js +6 -3
  110. package/build/components/link-control/search-input.js.map +1 -1
  111. package/build/components/link-control/search-item.js +36 -5
  112. package/build/components/link-control/search-item.js.map +1 -1
  113. package/build/components/list-view/block.js +23 -11
  114. package/build/components/list-view/block.js.map +1 -1
  115. package/build/components/list-view/branch.js +19 -2
  116. package/build/components/list-view/branch.js.map +1 -1
  117. package/build/components/list-view/drop-indicator.js +30 -28
  118. package/build/components/list-view/drop-indicator.js.map +1 -1
  119. package/build/components/list-view/index.js +8 -4
  120. package/build/components/list-view/index.js.map +1 -1
  121. package/build/components/list-view/use-block-selection.js +0 -1
  122. package/build/components/list-view/use-block-selection.js.map +1 -1
  123. package/build/components/provider/use-block-sync.js +1 -7
  124. package/build/components/provider/use-block-sync.js.map +1 -1
  125. package/build/components/publish-date-time-picker/index.js +1 -1
  126. package/build/components/publish-date-time-picker/index.js.map +1 -1
  127. package/build/components/rich-text/format-toolbar-container.js +9 -9
  128. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  129. package/build/components/rich-text/index.js +31 -21
  130. package/build/components/rich-text/index.js.map +1 -1
  131. package/build/components/rich-text/index.native.js +11 -20
  132. package/build/components/rich-text/index.native.js.map +1 -1
  133. package/build/components/spacing-sizes-control/linked-button.js +2 -3
  134. package/build/components/spacing-sizes-control/linked-button.js.map +1 -1
  135. package/build/components/spacing-sizes-control/utils.js +1 -4
  136. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  137. package/build/components/text-decoration-control/index.js +19 -15
  138. package/build/components/text-decoration-control/index.js.map +1 -1
  139. package/build/components/text-transform-control/index.js +25 -17
  140. package/build/components/text-transform-control/index.js.map +1 -1
  141. package/build/components/tool-selector/index.js +6 -11
  142. package/build/components/tool-selector/index.js.map +1 -1
  143. package/build/components/url-popover/image-url-input-ui.js +6 -4
  144. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  145. package/build/components/url-popover/index.js +1 -1
  146. package/build/components/url-popover/index.js.map +1 -1
  147. package/build/components/use-block-drop-zone/index.js +7 -4
  148. package/build/components/use-block-drop-zone/index.js.map +1 -1
  149. package/build/components/use-moving-animation/index.js +9 -28
  150. package/build/components/use-moving-animation/index.js.map +1 -1
  151. package/build/components/writing-flow/use-select-all.js +1 -7
  152. package/build/components/writing-flow/use-select-all.js.map +1 -1
  153. package/build/hooks/align.js +14 -2
  154. package/build/hooks/align.js.map +1 -1
  155. package/build/hooks/color-panel.js +2 -1
  156. package/build/hooks/color-panel.js.map +1 -1
  157. package/build/hooks/content-lock-ui.js +145 -0
  158. package/build/hooks/content-lock-ui.js.map +1 -0
  159. package/build/hooks/duotone.js +8 -1
  160. package/build/hooks/duotone.js.map +1 -1
  161. package/build/hooks/index.js +14 -0
  162. package/build/hooks/index.js.map +1 -1
  163. package/build/hooks/layout.js +11 -9
  164. package/build/hooks/layout.js.map +1 -1
  165. package/build/hooks/metadata-name.js +55 -0
  166. package/build/hooks/metadata-name.js.map +1 -0
  167. package/build/hooks/metadata.js +65 -0
  168. package/build/hooks/metadata.js.map +1 -0
  169. package/build/hooks/typography.js +10 -11
  170. package/build/hooks/typography.js.map +1 -1
  171. package/build/hooks/use-typography-props.js +51 -0
  172. package/build/hooks/use-typography-props.js.map +1 -0
  173. package/build/hooks/utils.js +3 -1
  174. package/build/hooks/utils.js.map +1 -1
  175. package/build/index.js +7 -0
  176. package/build/index.js.map +1 -1
  177. package/build/layouts/constrained.js +59 -20
  178. package/build/layouts/constrained.js.map +1 -1
  179. package/build/store/actions.js +65 -21
  180. package/build/store/actions.js.map +1 -1
  181. package/build/store/reducer.js +43 -19
  182. package/build/store/reducer.js.map +1 -1
  183. package/build/store/selectors.js +96 -10
  184. package/build/store/selectors.js.map +1 -1
  185. package/build/utils/parse-css-unit-to-px.js +1 -1
  186. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  187. package/build-module/components/alignment-control/ui.js +6 -5
  188. package/build-module/components/alignment-control/ui.js.map +1 -1
  189. package/build-module/components/autocomplete/index.js +2 -2
  190. package/build-module/components/autocomplete/index.js.map +1 -1
  191. package/build-module/components/block-actions/index.js +5 -8
  192. package/build-module/components/block-actions/index.js.map +1 -1
  193. package/build-module/components/block-alignment-control/ui.js +5 -5
  194. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  195. package/build-module/components/block-content-overlay/index.js +2 -4
  196. package/build-module/components/block-content-overlay/index.js.map +1 -1
  197. package/build-module/components/block-draggable/draggable-chip.js +2 -1
  198. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  199. package/build-module/components/block-edit/edit.js +1 -1
  200. package/build-module/components/block-edit/edit.js.map +1 -1
  201. package/build-module/components/block-inspector/index.js +127 -19
  202. package/build-module/components/block-inspector/index.js.map +1 -1
  203. package/build-module/components/block-list/block-list-compact.native.js +2 -1
  204. package/build-module/components/block-list/block-list-compact.native.js.map +1 -1
  205. package/build-module/components/block-list/block.js +41 -9
  206. package/build-module/components/block-list/block.js.map +1 -1
  207. package/build-module/components/block-list/index.js +4 -4
  208. package/build-module/components/block-list/index.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/index.js +13 -11
  210. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  211. package/build-module/components/block-list/use-block-props/use-block-class-names.js +3 -2
  212. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  213. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +3 -8
  214. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  215. package/build-module/components/block-list/use-block-props/use-is-hovered.js +1 -2
  216. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  217. package/build-module/components/block-list/use-in-between-inserter.js +7 -12
  218. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  219. package/build-module/components/block-list-appender/index.js +20 -20
  220. package/build-module/components/block-list-appender/index.js.map +1 -1
  221. package/build-module/components/block-list-appender/index.native.js +1 -6
  222. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  223. package/build-module/components/block-lock/use-block-lock.js +3 -1
  224. package/build-module/components/block-lock/use-block-lock.js.map +1 -1
  225. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +20 -9
  226. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  227. package/build-module/components/block-mover/button.js +4 -5
  228. package/build-module/components/block-mover/button.js.map +1 -1
  229. package/build-module/components/block-mover/index.js +4 -5
  230. package/build-module/components/block-mover/index.js.map +1 -1
  231. package/build-module/components/block-mover/index.native.js +24 -7
  232. package/build-module/components/block-mover/index.native.js.map +1 -1
  233. package/build-module/components/block-popover/inbetween.js +83 -53
  234. package/build-module/components/block-popover/inbetween.js.map +1 -1
  235. package/build-module/components/block-popover/index.js +31 -7
  236. package/build-module/components/block-popover/index.js.map +1 -1
  237. package/build-module/components/block-preview/auto.js +4 -2
  238. package/build-module/components/block-preview/auto.js.map +1 -1
  239. package/build-module/components/block-settings-menu/block-settings-dropdown.js +3 -1
  240. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  241. package/build-module/components/block-settings-menu-controls/index.js +3 -1
  242. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  243. package/build-module/components/block-styles/preview-panel.js +6 -1
  244. package/build-module/components/block-styles/preview-panel.js.map +1 -1
  245. package/build-module/components/block-switcher/block-transformations-menu.js +115 -27
  246. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  247. package/build-module/components/block-toolbar/index.js +9 -8
  248. package/build-module/components/block-toolbar/index.js.map +1 -1
  249. package/build-module/components/block-tools/block-contextual-toolbar.js +3 -2
  250. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  251. package/build-module/components/block-tools/block-selection-button.js +12 -5
  252. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  253. package/build-module/components/block-tools/index.js +30 -15
  254. package/build-module/components/block-tools/index.js.map +1 -1
  255. package/build-module/components/block-tools/insertion-point.js +4 -9
  256. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  257. package/build-module/components/block-tools/selected-block-popover.js +9 -8
  258. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  259. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +13 -8
  260. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  261. package/build-module/components/block-tools/zoom-out-mode-inserters.js +59 -0
  262. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -0
  263. package/build-module/components/block-vertical-alignment-control/ui.js +5 -2
  264. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  265. package/build-module/components/border-radius-control/linked-button.js +5 -6
  266. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  267. package/build-module/components/colors-gradients/dropdown.js +1 -1
  268. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  269. package/build-module/components/convert-to-group-buttons/toolbar.js +8 -3
  270. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
  271. package/build-module/components/iframe/index.js +32 -5
  272. package/build-module/components/iframe/index.js.map +1 -1
  273. package/build-module/components/inner-blocks/default-block-appender.js +1 -6
  274. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  275. package/build-module/components/inner-blocks/index.js +9 -3
  276. package/build-module/components/inner-blocks/index.js.map +1 -1
  277. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +28 -17
  278. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  279. package/build-module/components/inner-blocks/use-nested-settings-update.js +28 -4
  280. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  281. package/build-module/components/inserter/index.js +3 -6
  282. package/build-module/components/inserter/index.js.map +1 -1
  283. package/build-module/components/inserter/library.js +14 -3
  284. package/build-module/components/inserter/library.js.map +1 -1
  285. package/build-module/components/inserter/menu.js +20 -8
  286. package/build-module/components/inserter/menu.js.map +1 -1
  287. package/build-module/components/inserter/preview-panel.js +1 -1
  288. package/build-module/components/inserter/preview-panel.js.map +1 -1
  289. package/build-module/components/inserter/tabs.js +11 -4
  290. package/build-module/components/inserter/tabs.js.map +1 -1
  291. package/build-module/components/link-control/link-preview.js +1 -1
  292. package/build-module/components/link-control/link-preview.js.map +1 -1
  293. package/build-module/components/link-control/search-input.js +6 -2
  294. package/build-module/components/link-control/search-input.js.map +1 -1
  295. package/build-module/components/link-control/search-item.js +37 -6
  296. package/build-module/components/link-control/search-item.js.map +1 -1
  297. package/build-module/components/list-view/block.js +23 -11
  298. package/build-module/components/list-view/block.js.map +1 -1
  299. package/build-module/components/list-view/branch.js +19 -3
  300. package/build-module/components/list-view/branch.js.map +1 -1
  301. package/build-module/components/list-view/drop-indicator.js +30 -28
  302. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  303. package/build-module/components/list-view/index.js +8 -4
  304. package/build-module/components/list-view/index.js.map +1 -1
  305. package/build-module/components/list-view/use-block-selection.js +0 -1
  306. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  307. package/build-module/components/provider/use-block-sync.js +1 -6
  308. package/build-module/components/provider/use-block-sync.js.map +1 -1
  309. package/build-module/components/publish-date-time-picker/index.js +1 -1
  310. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  311. package/build-module/components/rich-text/format-toolbar-container.js +10 -10
  312. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  313. package/build-module/components/rich-text/index.js +31 -20
  314. package/build-module/components/rich-text/index.js.map +1 -1
  315. package/build-module/components/rich-text/index.native.js +11 -18
  316. package/build-module/components/rich-text/index.native.js.map +1 -1
  317. package/build-module/components/spacing-sizes-control/linked-button.js +2 -3
  318. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -1
  319. package/build-module/components/spacing-sizes-control/utils.js +1 -4
  320. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  321. package/build-module/components/text-decoration-control/index.js +21 -16
  322. package/build-module/components/text-decoration-control/index.js.map +1 -1
  323. package/build-module/components/text-transform-control/index.js +28 -20
  324. package/build-module/components/text-transform-control/index.js.map +1 -1
  325. package/build-module/components/tool-selector/index.js +6 -11
  326. package/build-module/components/tool-selector/index.js.map +1 -1
  327. package/build-module/components/url-popover/image-url-input-ui.js +6 -4
  328. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  329. package/build-module/components/url-popover/index.js +1 -1
  330. package/build-module/components/url-popover/index.js.map +1 -1
  331. package/build-module/components/use-block-drop-zone/index.js +7 -4
  332. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  333. package/build-module/components/use-moving-animation/index.js +9 -28
  334. package/build-module/components/use-moving-animation/index.js.map +1 -1
  335. package/build-module/components/writing-flow/use-select-all.js +1 -6
  336. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  337. package/build-module/hooks/align.js +12 -2
  338. package/build-module/hooks/align.js.map +1 -1
  339. package/build-module/hooks/color-panel.js +2 -1
  340. package/build-module/hooks/color-panel.js.map +1 -1
  341. package/build-module/hooks/content-lock-ui.js +128 -0
  342. package/build-module/hooks/content-lock-ui.js.map +1 -0
  343. package/build-module/hooks/duotone.js +6 -1
  344. package/build-module/hooks/duotone.js.map +1 -1
  345. package/build-module/hooks/index.js +4 -0
  346. package/build-module/hooks/index.js.map +1 -1
  347. package/build-module/hooks/layout.js +11 -9
  348. package/build-module/hooks/layout.js.map +1 -1
  349. package/build-module/hooks/metadata-name.js +45 -0
  350. package/build-module/hooks/metadata-name.js.map +1 -0
  351. package/build-module/hooks/metadata.js +50 -0
  352. package/build-module/hooks/metadata.js.map +1 -0
  353. package/build-module/hooks/typography.js +10 -11
  354. package/build-module/hooks/typography.js.map +1 -1
  355. package/build-module/hooks/use-typography-props.js +38 -0
  356. package/build-module/hooks/use-typography-props.js.map +1 -0
  357. package/build-module/hooks/utils.js +4 -2
  358. package/build-module/hooks/utils.js.map +1 -1
  359. package/build-module/index.js +1 -1
  360. package/build-module/index.js.map +1 -1
  361. package/build-module/layouts/constrained.js +61 -22
  362. package/build-module/layouts/constrained.js.map +1 -1
  363. package/build-module/store/actions.js +58 -20
  364. package/build-module/store/actions.js.map +1 -1
  365. package/build-module/store/reducer.js +41 -19
  366. package/build-module/store/reducer.js.map +1 -1
  367. package/build-module/store/selectors.js +81 -10
  368. package/build-module/store/selectors.js.map +1 -1
  369. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  370. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  371. package/build-style/style-rtl.css +142 -46
  372. package/build-style/style.css +142 -46
  373. package/package.json +28 -28
  374. package/src/components/alignment-control/test/__snapshots__/index.js.snap +137 -108
  375. package/src/components/alignment-control/test/index.js +124 -33
  376. package/src/components/alignment-control/ui.js +8 -3
  377. package/src/components/autocomplete/index.js +2 -5
  378. package/src/components/block-actions/index.js +9 -8
  379. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +108 -65
  380. package/src/components/block-alignment-control/test/index.js +95 -31
  381. package/src/components/block-alignment-control/ui.js +2 -2
  382. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +28 -26
  383. package/src/components/block-compare/test/block-view.js +3 -3
  384. package/src/components/block-content-overlay/index.js +2 -6
  385. package/src/components/block-content-overlay/style.scss +24 -3
  386. package/src/components/block-draggable/draggable-chip.js +4 -1
  387. package/src/components/block-edit/edit.js +5 -1
  388. package/src/components/block-edit/test/edit.js +23 -21
  389. package/src/components/block-icon/test/__snapshots__/index.js.snap +22 -0
  390. package/src/components/block-icon/test/index.js +31 -16
  391. package/src/components/block-inspector/index.js +126 -12
  392. package/src/components/block-inspector/style.scss +7 -1
  393. package/src/components/block-list/block-list-compact.native.js +1 -1
  394. package/src/components/block-list/block.js +53 -13
  395. package/src/components/block-list/index.js +4 -4
  396. package/src/components/block-list/style.scss +57 -11
  397. package/src/components/block-list/test/block-list-context.native.js +11 -13
  398. package/src/components/block-list/use-block-props/index.js +10 -10
  399. package/src/components/block-list/use-block-props/use-block-class-names.js +4 -1
  400. package/src/components/block-list/use-block-props/use-focus-first-element.js +3 -8
  401. package/src/components/block-list/use-block-props/use-is-hovered.js +2 -2
  402. package/src/components/block-list/use-in-between-inserter.js +11 -13
  403. package/src/components/block-list-appender/index.js +27 -18
  404. package/src/components/block-list-appender/index.native.js +3 -6
  405. package/src/components/block-lock/use-block-lock.js +2 -0
  406. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +15 -9
  407. package/src/components/block-mover/button.js +6 -5
  408. package/src/components/block-mover/index.js +8 -7
  409. package/src/components/block-mover/index.native.js +20 -13
  410. package/src/components/block-popover/inbetween.js +124 -62
  411. package/src/components/block-popover/index.js +47 -8
  412. package/src/components/block-popover/style.scss +3 -4
  413. package/src/components/block-preview/auto.js +4 -2
  414. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -0
  415. package/src/components/block-settings-menu-controls/README.md +9 -0
  416. package/src/components/block-settings-menu-controls/index.js +13 -2
  417. package/src/components/block-styles/preview-panel.js +3 -0
  418. package/src/components/block-switcher/block-transformations-menu.js +127 -33
  419. package/src/components/block-switcher/style.scss +4 -2
  420. package/src/components/block-title/test/index.js +28 -25
  421. package/src/components/block-toolbar/index.js +27 -17
  422. package/src/components/block-tools/block-contextual-toolbar.js +10 -3
  423. package/src/components/block-tools/block-selection-button.js +35 -16
  424. package/src/components/block-tools/index.js +40 -24
  425. package/src/components/block-tools/insertion-point.js +3 -7
  426. package/src/components/block-tools/selected-block-popover.js +9 -7
  427. package/src/components/block-tools/style.scss +5 -0
  428. package/src/components/block-tools/use-block-toolbar-popover-props.js +19 -6
  429. package/src/components/block-tools/zoom-out-mode-inserters.js +57 -0
  430. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +91 -51
  431. package/src/components/block-vertical-alignment-control/test/index.js +92 -23
  432. package/src/components/block-vertical-alignment-control/ui.js +3 -2
  433. package/src/components/border-radius-control/linked-button.js +12 -11
  434. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -12
  435. package/src/components/colors/test/with-colors.js +37 -12
  436. package/src/components/colors-gradients/dropdown.js +1 -1
  437. package/src/components/contrast-checker/test/index.js +135 -116
  438. package/src/components/convert-to-group-buttons/toolbar.js +6 -2
  439. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +39 -57
  440. package/src/components/default-block-appender/test/index.js +32 -18
  441. package/src/components/font-sizes/README.MD +9 -0
  442. package/src/components/iframe/index.js +64 -5
  443. package/src/components/inner-blocks/README.md +2 -1
  444. package/src/components/inner-blocks/default-block-appender.js +1 -6
  445. package/src/components/inner-blocks/index.js +10 -2
  446. package/src/components/inner-blocks/use-inner-block-template-sync.js +40 -25
  447. package/src/components/inner-blocks/use-nested-settings-update.js +32 -3
  448. package/src/components/inserter/index.js +2 -8
  449. package/src/components/inserter/library.js +11 -5
  450. package/src/components/inserter/menu.js +42 -29
  451. package/src/components/inserter/preview-panel.js +1 -1
  452. package/src/components/inserter/stories/fixtures.js +44 -0
  453. package/src/components/inserter/stories/index.js +90 -0
  454. package/src/components/inserter/style.scss +21 -27
  455. package/src/components/inserter/tabs.js +8 -4
  456. package/src/components/link-control/link-preview.js +5 -3
  457. package/src/components/link-control/search-input.js +2 -2
  458. package/src/components/link-control/search-item.js +39 -7
  459. package/src/components/list-view/block.js +29 -10
  460. package/src/components/list-view/branch.js +27 -4
  461. package/src/components/list-view/drop-indicator.js +33 -32
  462. package/src/components/list-view/index.js +8 -3
  463. package/src/components/list-view/use-block-selection.js +0 -1
  464. package/src/components/media-placeholder/test/index.js +2 -2
  465. package/src/components/media-replace-flow/README.md +1 -1
  466. package/src/components/provider/use-block-sync.js +3 -6
  467. package/src/components/publish-date-time-picker/index.js +1 -1
  468. package/src/components/rich-text/format-toolbar-container.js +18 -10
  469. package/src/components/rich-text/index.js +26 -37
  470. package/src/components/rich-text/index.native.js +8 -21
  471. package/src/components/spacing-sizes-control/linked-button.js +2 -3
  472. package/src/components/spacing-sizes-control/style.scss +4 -1
  473. package/src/components/spacing-sizes-control/utils.js +1 -8
  474. package/src/components/text-decoration-control/index.js +31 -23
  475. package/src/components/text-decoration-control/style.scss +18 -0
  476. package/src/components/text-transform-control/index.js +42 -26
  477. package/src/components/text-transform-control/style.scss +18 -0
  478. package/src/components/tool-selector/index.js +9 -11
  479. package/src/components/url-input/test/button.js +145 -71
  480. package/src/components/url-popover/image-url-input-ui.js +5 -3
  481. package/src/components/url-popover/index.js +1 -1
  482. package/src/components/url-popover/test/__snapshots__/index.js.snap +108 -80
  483. package/src/components/url-popover/test/index.js +14 -12
  484. package/src/components/use-block-drop-zone/index.js +15 -4
  485. package/src/components/use-moving-animation/index.js +9 -24
  486. package/src/components/warning/test/__snapshots__/index.js.snap +11 -14
  487. package/src/components/warning/test/index.js +32 -29
  488. package/src/components/writing-flow/use-select-all.js +4 -6
  489. package/src/hooks/align.js +22 -13
  490. package/src/hooks/color-panel.js +2 -1
  491. package/src/hooks/content-lock-ui.js +161 -0
  492. package/src/hooks/duotone.js +13 -1
  493. package/src/hooks/index.js +4 -0
  494. package/src/hooks/layout.js +25 -19
  495. package/src/hooks/layout.scss +7 -1
  496. package/src/hooks/metadata-name.js +48 -0
  497. package/src/hooks/metadata.js +64 -0
  498. package/src/hooks/test/use-typography-props.js +28 -0
  499. package/src/hooks/typography.js +13 -14
  500. package/src/hooks/use-typography-props.js +41 -0
  501. package/src/hooks/utils.js +2 -11
  502. package/src/index.js +1 -0
  503. package/src/layouts/constrained.js +73 -24
  504. package/src/store/actions.js +45 -4
  505. package/src/store/reducer.js +36 -21
  506. package/src/store/selectors.js +99 -20
  507. package/src/store/test/reducer.js +8 -5
  508. package/src/store/test/selectors.js +4 -4
  509. package/src/style.scss +2 -0
  510. package/src/utils/parse-css-unit-to-px.js +1 -1
  511. package/src/components/colors/test/__snapshots__/with-colors.js.snap +0 -23
@@ -7,7 +7,12 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { useSelect } from '@wordpress/data';
10
- import { useCallback, useMemo, createContext } from '@wordpress/element';
10
+ import {
11
+ useMemo,
12
+ createContext,
13
+ useReducer,
14
+ useLayoutEffect,
15
+ } from '@wordpress/element';
11
16
  import { Popover } from '@wordpress/components';
12
17
  import { isRTL } from '@wordpress/i18n';
13
18
 
@@ -28,6 +33,12 @@ function BlockPopoverInbetween( {
28
33
  __unstableContentRef,
29
34
  ...props
30
35
  } ) {
36
+ // This is a temporary hack to get the inbetween inserter to recompute properly.
37
+ const [ positionRecompute, forceRecompute ] = useReducer(
38
+ ( s ) => s + 1,
39
+ 0
40
+ );
41
+
31
42
  const { orientation, rootClientId, isVisible } = useSelect(
32
43
  ( select ) => {
33
44
  const {
@@ -36,7 +47,9 @@ function BlockPopoverInbetween( {
36
47
  isBlockVisible,
37
48
  } = select( blockEditorStore );
38
49
 
39
- const _rootClientId = getBlockRootClientId( previousClientId );
50
+ const _rootClientId = getBlockRootClientId(
51
+ previousClientId ?? nextClientId
52
+ );
40
53
  return {
41
54
  orientation:
42
55
  getBlockListSettings( _rootClientId )?.orientation ||
@@ -47,7 +60,7 @@ function BlockPopoverInbetween( {
47
60
  isBlockVisible( nextClientId ),
48
61
  };
49
62
  },
50
- [ previousClientId ]
63
+ [ previousClientId, nextClientId ]
51
64
  );
52
65
  const previousElement = useBlockElement( previousClientId );
53
66
  const nextElement = useBlockElement( nextClientId );
@@ -66,9 +79,7 @@ function BlockPopoverInbetween( {
66
79
 
67
80
  if ( isVertical ) {
68
81
  return {
69
- width: previousElement
70
- ? previousElement.offsetWidth
71
- : nextElement.offsetWidth,
82
+ width: previousRect ? previousRect.width : nextRect.width,
72
83
  height:
73
84
  nextRect && previousRect
74
85
  ? nextRect.top - previousRect.bottom
@@ -85,74 +96,118 @@ function BlockPopoverInbetween( {
85
96
 
86
97
  return {
87
98
  width,
88
- height: previousElement
89
- ? previousElement.offsetHeight
90
- : nextElement.offsetHeight,
99
+ height: previousRect ? previousRect.height : nextRect.height,
91
100
  };
92
- }, [ previousElement, nextElement, isVertical ] );
101
+ }, [
102
+ previousElement,
103
+ nextElement,
104
+ isVertical,
105
+ positionRecompute,
106
+ isVisible,
107
+ ] );
93
108
 
94
- const getAnchorRect = useCallback( () => {
109
+ const popoverAnchor = useMemo( () => {
95
110
  if ( ( ! previousElement && ! nextElement ) || ! isVisible ) {
96
- return {};
111
+ return undefined;
97
112
  }
98
113
 
99
114
  const { ownerDocument } = previousElement || nextElement;
100
115
 
101
- const previousRect = previousElement
102
- ? previousElement.getBoundingClientRect()
103
- : null;
104
- const nextRect = nextElement
105
- ? nextElement.getBoundingClientRect()
106
- : null;
116
+ return {
117
+ ownerDocument,
118
+ getBoundingClientRect() {
119
+ const previousRect = previousElement
120
+ ? previousElement.getBoundingClientRect()
121
+ : null;
122
+ const nextRect = nextElement
123
+ ? nextElement.getBoundingClientRect()
124
+ : null;
107
125
 
108
- if ( isVertical ) {
109
- if ( isRTL() ) {
110
- return {
111
- top: previousRect ? previousRect.bottom : nextRect.top,
112
- left: previousRect ? previousRect.right : nextRect.right,
113
- right: previousRect ? previousRect.left : nextRect.left,
114
- bottom: nextRect ? nextRect.top : previousRect.bottom,
115
- height: 0,
116
- width: 0,
117
- ownerDocument,
118
- };
119
- }
126
+ let left = 0;
127
+ let top = 0;
120
128
 
121
- return {
122
- top: previousRect ? previousRect.bottom : nextRect.top,
123
- left: previousRect ? previousRect.left : nextRect.left,
124
- right: previousRect ? previousRect.right : nextRect.right,
125
- bottom: nextRect ? nextRect.top : previousRect.bottom,
126
- height: 0,
127
- width: 0,
128
- ownerDocument,
129
- };
129
+ if ( isVertical ) {
130
+ // vertical
131
+ top = previousRect ? previousRect.bottom : nextRect.top;
132
+
133
+ if ( isRTL() ) {
134
+ // vertical, rtl
135
+ left = previousRect
136
+ ? previousRect.right
137
+ : nextRect.right;
138
+ } else {
139
+ // vertical, ltr
140
+ left = previousRect ? previousRect.left : nextRect.left;
141
+ }
142
+ } else {
143
+ top = previousRect ? previousRect.top : nextRect.top;
144
+
145
+ if ( isRTL() ) {
146
+ // non vertical, rtl
147
+ left = previousRect
148
+ ? previousRect.left
149
+ : nextRect.right;
150
+ } else {
151
+ // non vertical, ltr
152
+ left = previousRect
153
+ ? previousRect.right
154
+ : nextRect.left;
155
+ }
156
+ }
157
+
158
+ return new window.DOMRect( left, top, 0, 0 );
159
+ },
160
+ };
161
+ }, [
162
+ previousElement,
163
+ nextElement,
164
+ positionRecompute,
165
+ isVertical,
166
+ isVisible,
167
+ ] );
168
+
169
+ const popoverScrollRef = usePopoverScroll( __unstableContentRef );
170
+
171
+ // This is only needed for a smooth transition when moving blocks.
172
+ useLayoutEffect( () => {
173
+ if ( ! previousElement ) {
174
+ return;
130
175
  }
176
+ const observer = new window.MutationObserver( forceRecompute );
177
+ observer.observe( previousElement, { attributes: true } );
131
178
 
132
- if ( isRTL() ) {
133
- return {
134
- top: previousRect ? previousRect.top : nextRect.top,
135
- left: previousRect ? previousRect.left : nextRect.right,
136
- right: nextRect ? nextRect.right : previousRect.left,
137
- bottom: previousRect ? previousRect.bottom : nextRect.bottom,
138
- height: 0,
139
- width: 0,
140
- ownerDocument,
141
- };
179
+ return () => {
180
+ observer.disconnect();
181
+ };
182
+ }, [ previousElement ] );
183
+
184
+ useLayoutEffect( () => {
185
+ if ( ! nextElement ) {
186
+ return;
142
187
  }
188
+ const observer = new window.MutationObserver( forceRecompute );
189
+ observer.observe( nextElement, { attributes: true } );
143
190
 
144
- return {
145
- top: previousRect ? previousRect.top : nextRect.top,
146
- left: previousRect ? previousRect.right : nextRect.left,
147
- right: nextRect ? nextRect.left : previousRect.right,
148
- bottom: previousRect ? previousRect.bottom : nextRect.bottom,
149
- height: 0,
150
- width: 0,
151
- ownerDocument,
191
+ return () => {
192
+ observer.disconnect();
152
193
  };
153
- }, [ previousElement, nextElement ] );
194
+ }, [ nextElement ] );
154
195
 
155
- const popoverScrollRef = usePopoverScroll( __unstableContentRef );
196
+ useLayoutEffect( () => {
197
+ if ( ! previousElement ) {
198
+ return;
199
+ }
200
+ previousElement.ownerDocument.defaultView.addEventListener(
201
+ 'resize',
202
+ forceRecompute
203
+ );
204
+ return () => {
205
+ previousElement.ownerDocument.defaultView.removeEventListener(
206
+ 'resize',
207
+ forceRecompute
208
+ );
209
+ };
210
+ }, [ previousElement ] );
156
211
 
157
212
  // If there's either a previous or a next element, show the inbetween popover.
158
213
  // Note that drag and drop uses the inbetween popover to show the drop indicator
@@ -172,7 +227,7 @@ function BlockPopoverInbetween( {
172
227
  <Popover
173
228
  ref={ popoverScrollRef }
174
229
  animate={ false }
175
- getAnchorRect={ getAnchorRect }
230
+ anchor={ popoverAnchor }
176
231
  focusOnMount={ false }
177
232
  // Render in the old slot if needed for backward compatibility,
178
233
  // otherwise render in place (not in the default popover slot).
@@ -186,9 +241,16 @@ function BlockPopoverInbetween( {
186
241
  'block-editor-block-popover__inbetween',
187
242
  props.className
188
243
  ) }
189
- __unstableForcePosition
244
+ resize={ false }
245
+ flip={ false }
246
+ placement="bottom-start"
190
247
  >
191
- <div style={ style }>{ children }</div>
248
+ <div
249
+ className="block-editor-block-popover__inbetween-container"
250
+ style={ style }
251
+ >
252
+ { children }
253
+ </div>
192
254
  </Popover>
193
255
  );
194
256
  /* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
@@ -47,27 +47,66 @@ function BlockPopover(
47
47
  };
48
48
  }, [ selectedElement, lastSelectedElement, __unstableRefreshSize ] );
49
49
 
50
+ const popoverAnchor = useMemo( () => {
51
+ if (
52
+ ! selectedElement ||
53
+ ( bottomClientId && ! lastSelectedElement )
54
+ ) {
55
+ return undefined;
56
+ }
57
+
58
+ return {
59
+ getBoundingClientRect() {
60
+ const selectedBCR = selectedElement.getBoundingClientRect();
61
+ const lastSelectedBCR =
62
+ lastSelectedElement?.getBoundingClientRect();
63
+
64
+ // Get the biggest rectangle that encompasses completely the currently
65
+ // selected element and the last selected element:
66
+ // - for top/left coordinates, use the smaller numbers
67
+ // - for the bottom/right coordinates, use the largest numbers
68
+ const left = Math.min(
69
+ selectedBCR.left,
70
+ lastSelectedBCR?.left ?? Infinity
71
+ );
72
+ const top = Math.min(
73
+ selectedBCR.top,
74
+ lastSelectedBCR?.top ?? Infinity
75
+ );
76
+ const right = Math.max(
77
+ selectedBCR.right,
78
+ lastSelectedBCR.right ?? -Infinity
79
+ );
80
+ const bottom = Math.max(
81
+ selectedBCR.bottom,
82
+ lastSelectedBCR.bottom ?? -Infinity
83
+ );
84
+ const width = right - left;
85
+ const height = bottom - top;
86
+
87
+ return new window.DOMRect( left, top, width, height );
88
+ },
89
+ ownerDocument: selectedElement.ownerDocument,
90
+ };
91
+ }, [ bottomClientId, lastSelectedElement, selectedElement ] );
92
+
50
93
  if ( ! selectedElement || ( bottomClientId && ! lastSelectedElement ) ) {
51
94
  return null;
52
95
  }
53
96
 
54
- const anchorRef = {
55
- top: selectedElement,
56
- bottom: lastSelectedElement,
57
- };
58
-
59
97
  return (
60
98
  <Popover
61
99
  ref={ mergedRefs }
62
100
  animate={ false }
63
101
  position="top right left"
64
102
  focusOnMount={ false }
65
- anchorRef={ anchorRef }
103
+ anchor={ popoverAnchor }
66
104
  // Render in the old slot if needed for backward compatibility,
67
105
  // otherwise render in place (not in the default popover slot).
68
106
  __unstableSlotName={ __unstablePopoverSlot || null }
69
- __unstableForcePosition
70
- __unstableShift
107
+ resize={ false }
108
+ flip={ false }
109
+ shift
71
110
  { ...props }
72
111
  className={ classnames(
73
112
  'block-editor-block-popover',
@@ -6,6 +6,9 @@
6
6
  // like the popover is impacted by the block gap margin.
7
7
  margin: 0 !important;
8
8
 
9
+ // Allow clicking through the toolbar holder.
10
+ pointer-events: none;
11
+
9
12
  .components-popover__content {
10
13
  margin: 0 !important;
11
14
  min-width: auto;
@@ -15,9 +18,6 @@
15
18
  outline: none;
16
19
  box-shadow: none;
17
20
  overflow-y: visible;
18
-
19
- // Allow clicking through the toolbar holder.
20
- pointer-events: none;
21
21
  }
22
22
 
23
23
  // Enable pointer events for the toolbar's content.
@@ -39,7 +39,6 @@
39
39
  }
40
40
 
41
41
  // Re-enable pointer events when the inbetween inserter has a '+' button.
42
- //
43
42
  // Needs specificity, do not simplify.
44
43
  .is-with-inserter {
45
44
  pointer-events: all;
@@ -91,8 +91,10 @@ function AutoBlockPreview( {
91
91
  bodyElement.style.padding =
92
92
  __experimentalPadding + 'px';
93
93
 
94
- // necessary for contentResizeListener to work.
95
- bodyElement.style.position = 'relative';
94
+ // Necessary for contentResizeListener to work.
95
+ bodyElement.style.boxSizing = 'border-box';
96
+ bodyElement.style.position = 'absolute';
97
+ bodyElement.style.width = '100%';
96
98
  }, [] ) }
97
99
  aria-hidden
98
100
  tabIndex={ -1 }
@@ -51,6 +51,7 @@ export function BlockSettingsDropdown( {
51
51
  clientIds,
52
52
  __experimentalSelectBlock,
53
53
  children,
54
+ __unstableDisplayLocation,
54
55
  ...props
55
56
  } ) {
56
57
  const blockClientIds = castArray( clientIds );
@@ -289,6 +290,9 @@ export function BlockSettingsDropdown( {
289
290
  <BlockSettingsMenuControls.Slot
290
291
  fillProps={ { onClose } }
291
292
  clientIds={ clientIds }
293
+ __unstableDisplayLocation={
294
+ __unstableDisplayLocation
295
+ }
292
296
  />
293
297
  { typeof children === 'function'
294
298
  ? children( { onClose } )
@@ -16,3 +16,12 @@ function ReusableBlocksMenuItems() {
16
16
  );
17
17
  }
18
18
  ```
19
+
20
+ ## Props
21
+
22
+ ### `__unstableDisplayLocation`
23
+
24
+ - **Type:** `String`
25
+ - **Default:** `undefined`
26
+
27
+ A string representing the location where the component is being displayed within the UI. This can be used to conditionalize certain behaviors including the display of associated components. This behaviour will likely be refactored to a React.Context implementation.
@@ -25,7 +25,11 @@ import { store as blockEditorStore } from '../../store';
25
25
 
26
26
  const { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );
27
27
 
28
- const BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {
28
+ const BlockSettingsMenuControlsSlot = ( {
29
+ fillProps,
30
+ clientIds = null,
31
+ __unstableDisplayLocation,
32
+ } ) => {
29
33
  const { selectedBlocks, selectedClientIds, canRemove } = useSelect(
30
34
  ( select ) => {
31
35
  const {
@@ -58,7 +62,14 @@ const BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {
58
62
  ( isGroupable || isUngroupable ) && canRemove;
59
63
 
60
64
  return (
61
- <Slot fillProps={ { ...fillProps, selectedBlocks, selectedClientIds } }>
65
+ <Slot
66
+ fillProps={ {
67
+ ...fillProps,
68
+ __unstableDisplayLocation,
69
+ selectedBlocks,
70
+ selectedClientIds,
71
+ } }
72
+ >
62
73
  { ( fills ) => {
63
74
  if (
64
75
  ! fills?.length > 0 &&
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
+ import { getBlockType } from '@wordpress/blocks';
4
5
  import { useMemo } from '@wordpress/element';
5
6
 
6
7
  /**
@@ -15,6 +16,7 @@ export default function BlockStylesPreviewPanel( {
15
16
  className,
16
17
  activeStyle,
17
18
  } ) {
19
+ const example = getBlockType( genericPreviewBlock.name )?.example;
18
20
  const styleClassName = replaceActiveStyle( className, activeStyle, style );
19
21
  const previewBlocks = useMemo( () => {
20
22
  return {
@@ -27,6 +29,7 @@ export default function BlockStylesPreviewPanel( {
27
29
  styleClassName +
28
30
  ' block-editor-block-styles__block-preview-container',
29
31
  },
32
+ example,
30
33
  };
31
34
  }, [ genericPreviewBlock, styleClassName ] );
32
35
 
@@ -7,7 +7,7 @@ import {
7
7
  getBlockMenuDefaultClassName,
8
8
  switchToBlockType,
9
9
  } from '@wordpress/blocks';
10
- import { useState } from '@wordpress/element';
10
+ import { useState, useMemo } from '@wordpress/element';
11
11
 
12
12
  /**
13
13
  * Internal dependencies
@@ -15,6 +15,53 @@ import { useState } from '@wordpress/element';
15
15
  import BlockIcon from '../block-icon';
16
16
  import PreviewBlockPopover from './preview-block-popover';
17
17
 
18
+ /**
19
+ * Helper hook to group transformations to display them in a specific order in the UI.
20
+ * For now we group only priority content driven transformations(ex. paragraph -> heading).
21
+ *
22
+ * Later on we could also group 'layout' transformations(ex. paragraph -> group) and
23
+ * display them in different sections.
24
+ *
25
+ * @param {Object[]} possibleBlockTransformations The available block transformations.
26
+ * @return {Record<string, Object[]>} The grouped block transformations.
27
+ */
28
+ function useGroupedTransforms( possibleBlockTransformations ) {
29
+ const priorityContentTranformationBlocks = {
30
+ 'core/paragraph': 1,
31
+ 'core/heading': 2,
32
+ 'core/list': 3,
33
+ 'core/quote': 4,
34
+ };
35
+ const transformations = useMemo( () => {
36
+ const priorityTextTranformsNames = Object.keys(
37
+ priorityContentTranformationBlocks
38
+ );
39
+ return possibleBlockTransformations.reduce(
40
+ ( accumulator, item ) => {
41
+ const { name } = item;
42
+ if ( priorityTextTranformsNames.includes( name ) ) {
43
+ accumulator.priorityTextTransformations.push( item );
44
+ } else {
45
+ accumulator.restTransformations.push( item );
46
+ }
47
+ return accumulator;
48
+ },
49
+ { priorityTextTransformations: [], restTransformations: [] }
50
+ );
51
+ }, [ possibleBlockTransformations ] );
52
+
53
+ // Order the priority text transformations.
54
+ transformations.priorityTextTransformations.sort(
55
+ ( { name: currentName }, { name: nextName } ) => {
56
+ return priorityContentTranformationBlocks[ currentName ] <
57
+ priorityContentTranformationBlocks[ nextName ]
58
+ ? -1
59
+ : 1;
60
+ }
61
+ );
62
+ return transformations;
63
+ }
64
+
18
65
  const BlockTransformationsMenu = ( {
19
66
  className,
20
67
  possibleBlockTransformations,
@@ -23,41 +70,88 @@ const BlockTransformationsMenu = ( {
23
70
  } ) => {
24
71
  const [ hoveredTransformItemName, setHoveredTransformItemName ] =
25
72
  useState();
73
+
74
+ const { priorityTextTransformations, restTransformations } =
75
+ useGroupedTransforms( possibleBlockTransformations );
76
+ // We have to check if both content transformations(priority and rest) are set
77
+ // in order to create a separate MenuGroup for them.
78
+ const hasBothContentTransformations =
79
+ priorityTextTransformations.length && restTransformations.length;
80
+ const restTransformItems = !! restTransformations.length && (
81
+ <RestTransformationItems
82
+ restTransformations={ restTransformations }
83
+ onSelect={ onSelect }
84
+ setHoveredTransformItemName={ setHoveredTransformItemName }
85
+ />
86
+ );
26
87
  return (
27
- <MenuGroup label={ __( 'Transform to' ) } className={ className }>
28
- { hoveredTransformItemName && (
29
- <PreviewBlockPopover
30
- blocks={ switchToBlockType(
31
- blocks,
32
- hoveredTransformItemName
33
- ) }
34
- />
35
- ) }
36
- { possibleBlockTransformations.map( ( item ) => {
37
- const { name, icon, title, isDisabled } = item;
38
- return (
39
- <MenuItem
40
- key={ name }
41
- className={ getBlockMenuDefaultClassName( name ) }
42
- onClick={ ( event ) => {
43
- event.preventDefault();
44
- onSelect( name );
45
- } }
46
- disabled={ isDisabled }
47
- onMouseLeave={ () =>
48
- setHoveredTransformItemName( null )
88
+ <>
89
+ <MenuGroup label={ __( 'Transform to' ) } className={ className }>
90
+ { hoveredTransformItemName && (
91
+ <PreviewBlockPopover
92
+ blocks={ switchToBlockType(
93
+ blocks,
94
+ hoveredTransformItemName
95
+ ) }
96
+ />
97
+ ) }
98
+ { priorityTextTransformations.map( ( item ) => (
99
+ <BlockTranformationItem
100
+ key={ item.name }
101
+ item={ item }
102
+ onSelect={ onSelect }
103
+ setHoveredTransformItemName={
104
+ setHoveredTransformItemName
49
105
  }
50
- onMouseEnter={ () =>
51
- setHoveredTransformItemName( name )
52
- }
53
- >
54
- <BlockIcon icon={ icon } showColors />
55
- { title }
56
- </MenuItem>
57
- );
58
- } ) }
59
- </MenuGroup>
106
+ />
107
+ ) ) }
108
+ { ! hasBothContentTransformations && restTransformItems }
109
+ </MenuGroup>
110
+ { !! hasBothContentTransformations && (
111
+ <MenuGroup className={ className }>
112
+ { restTransformItems }
113
+ </MenuGroup>
114
+ ) }
115
+ </>
60
116
  );
61
117
  };
62
118
 
119
+ function RestTransformationItems( {
120
+ restTransformations,
121
+ onSelect,
122
+ setHoveredTransformItemName,
123
+ } ) {
124
+ return restTransformations.map( ( item ) => (
125
+ <BlockTranformationItem
126
+ key={ item.name }
127
+ item={ item }
128
+ onSelect={ onSelect }
129
+ setHoveredTransformItemName={ setHoveredTransformItemName }
130
+ />
131
+ ) );
132
+ }
133
+
134
+ function BlockTranformationItem( {
135
+ item,
136
+ onSelect,
137
+ setHoveredTransformItemName,
138
+ } ) {
139
+ const { name, icon, title, isDisabled } = item;
140
+ return (
141
+ <MenuItem
142
+ className={ getBlockMenuDefaultClassName( name ) }
143
+ onClick={ ( event ) => {
144
+ event.preventDefault();
145
+ onSelect( name );
146
+ } }
147
+ disabled={ isDisabled }
148
+ onMouseLeave={ () => setHoveredTransformItemName( null ) }
149
+ onMouseEnter={ () => setHoveredTransformItemName( name ) }
150
+ >
151
+ <BlockIcon icon={ icon } showColors />
152
+ { title }
153
+ </MenuItem>
154
+ );
155
+ }
156
+
63
157
  export default BlockTransformationsMenu;
@@ -119,8 +119,10 @@
119
119
  .block-editor-block-switcher__preview {
120
120
  width: 300px;
121
121
  height: auto;
122
- max-height: 500px;
123
- padding: $grid-unit-20;
122
+ // Subtract margin from max-height.
123
+ max-height: calc(500px - #{$grid-unit-40});
124
+ margin: $grid-unit-20;
125
+ overflow: hidden;
124
126
  }
125
127
  }
126
128