@wordpress/block-editor 13.2.0 → 13.4.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 (538) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +0 -5
  3. package/build/components/alignment-control/ui.js +2 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/ui.js +1 -1
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +1 -1
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -1
  9. package/build/components/block-breadcrumb/index.js +12 -1
  10. package/build/components/block-breadcrumb/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -3
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +3 -1
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-block-refs.js +9 -2
  16. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  17. package/build/components/block-list/use-block-props/use-is-hovered.js +25 -9
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-list/use-in-between-inserter.js +3 -2
  20. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  21. package/build/components/block-lock/modal.js +2 -0
  22. package/build/components/block-lock/modal.js.map +1 -1
  23. package/build/components/block-lock/toolbar.js +0 -1
  24. package/build/components/block-lock/toolbar.js.map +1 -1
  25. package/build/components/block-mover/button.js +1 -1
  26. package/build/components/block-mover/button.js.map +1 -1
  27. package/build/components/block-mover/index.js +1 -1
  28. package/build/components/block-mover/index.js.map +1 -1
  29. package/build/components/block-pattern-setup/setup-toolbar.js +2 -2
  30. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  31. package/build/components/block-patterns-paging/index.js +5 -7
  32. package/build/components/block-patterns-paging/index.js.map +1 -1
  33. package/build/components/block-quick-navigation/index.js +20 -17
  34. package/build/components/block-quick-navigation/index.js.map +1 -1
  35. package/build/components/block-removal-warning-modal/index.js +2 -0
  36. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  37. package/build/components/block-rename/modal.js +4 -12
  38. package/build/components/block-rename/modal.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-switcher/pattern-transformations-menu.js +11 -12
  42. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  43. package/build/components/block-switcher/preview-block-popover.js +20 -17
  44. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  45. package/build/components/block-toolbar/shuffle.js +6 -2
  46. package/build/components/block-toolbar/shuffle.js.map +1 -1
  47. package/build/components/block-tools/block-selection-button.js +7 -58
  48. package/build/components/block-tools/block-selection-button.js.map +1 -1
  49. package/build/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  50. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  51. package/build/components/block-tools/index.js +14 -1
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-tools/use-show-block-tools.js +9 -8
  54. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  55. package/build/components/block-tools/zoom-out-mode-inserter-button.js +45 -0
  56. package/build/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  57. package/build/components/block-tools/zoom-out-mode-inserters.js +29 -28
  58. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  59. package/build/components/block-tools/zoom-out-popover.js +58 -0
  60. package/build/components/block-tools/zoom-out-popover.js.map +1 -0
  61. package/build/components/block-tools/zoom-out-toolbar.js +138 -0
  62. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -0
  63. package/build/components/button-block-appender/index.js +3 -1
  64. package/build/components/button-block-appender/index.js.map +1 -1
  65. package/build/components/child-layout-control/index.js +26 -18
  66. package/build/components/child-layout-control/index.js.map +1 -1
  67. package/build/components/date-format-picker/index.js +1 -1
  68. package/build/components/date-format-picker/index.js.map +1 -1
  69. package/build/components/default-block-appender/index.js +7 -4
  70. package/build/components/default-block-appender/index.js.map +1 -1
  71. package/build/components/dimensions-tool/index.js +6 -4
  72. package/build/components/dimensions-tool/index.js.map +1 -1
  73. package/build/components/font-appearance-control/index.js +22 -62
  74. package/build/components/font-appearance-control/index.js.map +1 -1
  75. package/build/components/global-styles/background-panel.js +185 -116
  76. package/build/components/global-styles/background-panel.js.map +1 -1
  77. package/build/components/global-styles/border-panel.js +2 -1
  78. package/build/components/global-styles/border-panel.js.map +1 -1
  79. package/build/components/global-styles/color-panel.js +2 -1
  80. package/build/components/global-styles/color-panel.js.map +1 -1
  81. package/build/components/global-styles/dimensions-panel.js +2 -1
  82. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  83. package/build/components/global-styles/filters-panel.js +2 -1
  84. package/build/components/global-styles/filters-panel.js.map +1 -1
  85. package/build/components/global-styles/hooks.js +13 -1
  86. package/build/components/global-styles/hooks.js.map +1 -1
  87. package/build/components/global-styles/image-settings-panel.js +2 -1
  88. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  89. package/build/components/global-styles/typography-panel.js +45 -24
  90. package/build/components/global-styles/typography-panel.js.map +1 -1
  91. package/build/components/global-styles/typography-utils.js +121 -0
  92. package/build/components/global-styles/typography-utils.js.map +1 -1
  93. package/build/components/global-styles/use-global-styles-output.js +47 -13
  94. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  95. package/build/components/global-styles/utils.js +17 -7
  96. package/build/components/global-styles/utils.js.map +1 -1
  97. package/build/components/grid/grid-item-movers.js +90 -48
  98. package/build/components/grid/grid-item-movers.js.map +1 -1
  99. package/build/components/grid/grid-item-resizer.js +2 -2
  100. package/build/components/grid/grid-item-resizer.js.map +1 -1
  101. package/build/components/grid/grid-visualizer.js +117 -37
  102. package/build/components/grid/grid-visualizer.js.map +1 -1
  103. package/build/components/grid/use-grid-layout-sync.js +60 -41
  104. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  105. package/build/components/index.js +1 -9
  106. package/build/components/index.js.map +1 -1
  107. package/build/components/inner-blocks/index.js +2 -2
  108. package/build/components/inner-blocks/index.js.map +1 -1
  109. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  110. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  111. package/build/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  112. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-panel.js +1 -0
  114. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  115. package/build/components/inserter/menu.js +26 -4
  116. package/build/components/inserter/menu.js.map +1 -1
  117. package/build/components/inserter/preview-panel.js +20 -3
  118. package/build/components/inserter/preview-panel.js.map +1 -1
  119. package/build/components/inserter/quick-inserter.js +2 -1
  120. package/build/components/inserter/quick-inserter.js.map +1 -1
  121. package/build/components/inserter-draggable-blocks/index.js +10 -3
  122. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  123. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  124. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  125. package/build/components/inspector-controls-tabs/settings-tab.js +1 -2
  126. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  127. package/build/components/link-control/link-preview.js +1 -1
  128. package/build/components/link-control/link-preview.js.map +1 -1
  129. package/build/components/list-view/block-select-button.js +2 -6
  130. package/build/components/list-view/block-select-button.js.map +1 -1
  131. package/build/components/list-view/block.js +2 -2
  132. package/build/components/list-view/block.js.map +1 -1
  133. package/build/components/list-view/utils.js +3 -1
  134. package/build/components/list-view/utils.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +19 -23
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/navigable-toolbar/index.js +3 -1
  138. package/build/components/navigable-toolbar/index.js.map +1 -1
  139. package/build/components/rich-text/format-toolbar/index.js +1 -1
  140. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  141. package/build/components/rich-text/index.js +1 -1
  142. package/build/components/rich-text/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/tabbed-sidebar/index.js +66 -0
  146. package/build/components/tabbed-sidebar/index.js.map +1 -0
  147. package/build/components/url-popover/image-url-input-ui.js +3 -3
  148. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  149. package/build/components/url-popover/index.js +3 -0
  150. package/build/components/url-popover/index.js.map +1 -1
  151. package/build/hooks/background.js +26 -4
  152. package/build/hooks/background.js.map +1 -1
  153. package/build/hooks/block-hooks.js +11 -17
  154. package/build/hooks/block-hooks.js.map +1 -1
  155. package/build/hooks/block-style-variation.js +169 -4
  156. package/build/hooks/block-style-variation.js.map +1 -1
  157. package/build/hooks/duotone.js +16 -11
  158. package/build/hooks/duotone.js.map +1 -1
  159. package/build/hooks/grid-visualizer.js +62 -0
  160. package/build/hooks/grid-visualizer.js.map +1 -0
  161. package/build/hooks/index.js +15 -2
  162. package/build/hooks/index.js.map +1 -1
  163. package/build/hooks/layout-child.js +47 -23
  164. package/build/hooks/layout-child.js.map +1 -1
  165. package/build/hooks/position.js +4 -15
  166. package/build/hooks/position.js.map +1 -1
  167. package/build/hooks/use-bindings-attributes.js +96 -55
  168. package/build/hooks/use-bindings-attributes.js.map +1 -1
  169. package/build/hooks/utils.js +2 -0
  170. package/build/hooks/utils.js.map +1 -1
  171. package/build/layouts/constrained.js +50 -4
  172. package/build/layouts/constrained.js.map +1 -1
  173. package/build/layouts/grid.js +92 -51
  174. package/build/layouts/grid.js.map +1 -1
  175. package/build/private-apis.js +6 -4
  176. package/build/private-apis.js.map +1 -1
  177. package/build/store/actions.js +18 -1
  178. package/build/store/actions.js.map +1 -1
  179. package/build/store/defaults.js +0 -2
  180. package/build/store/defaults.js.map +1 -1
  181. package/build/store/defaults.native.js +0 -3
  182. package/build/store/defaults.native.js.map +1 -1
  183. package/build/store/private-keys.js +2 -1
  184. package/build/store/private-keys.js.map +1 -1
  185. package/build/store/reducer.js +19 -1
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +13 -1
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/format-font-style.js +45 -0
  190. package/build/utils/format-font-style.js.map +1 -0
  191. package/build/utils/format-font-weight.js +68 -0
  192. package/build/utils/format-font-weight.js.map +1 -0
  193. package/build/utils/get-editor-region.js +34 -0
  194. package/build/utils/get-editor-region.js.map +1 -0
  195. package/build/utils/get-font-styles-and-weights.js +167 -0
  196. package/build/utils/get-font-styles-and-weights.js.map +1 -0
  197. package/build/utils/pasting.js +5 -13
  198. package/build/utils/pasting.js.map +1 -1
  199. package/build-module/components/alignment-control/ui.js +2 -2
  200. package/build-module/components/alignment-control/ui.js.map +1 -1
  201. package/build-module/components/block-alignment-control/ui.js +1 -1
  202. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  203. package/build-module/components/block-alignment-control/ui.native.js +1 -1
  204. package/build-module/components/block-alignment-control/ui.native.js.map +1 -1
  205. package/build-module/components/block-breadcrumb/index.js +12 -1
  206. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  207. package/build-module/components/block-inspector/index.js +6 -3
  208. package/build-module/components/block-inspector/index.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/index.js +3 -1
  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-refs.js +11 -4
  212. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  213. package/build-module/components/block-list/use-block-props/use-is-hovered.js +26 -9
  214. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  215. package/build-module/components/block-list/use-in-between-inserter.js +3 -2
  216. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  217. package/build-module/components/block-lock/modal.js +2 -0
  218. package/build-module/components/block-lock/modal.js.map +1 -1
  219. package/build-module/components/block-lock/toolbar.js +0 -1
  220. package/build-module/components/block-lock/toolbar.js.map +1 -1
  221. package/build-module/components/block-mover/button.js +1 -1
  222. package/build-module/components/block-mover/button.js.map +1 -1
  223. package/build-module/components/block-mover/index.js +1 -1
  224. package/build-module/components/block-mover/index.js.map +1 -1
  225. package/build-module/components/block-pattern-setup/setup-toolbar.js +2 -2
  226. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  227. package/build-module/components/block-patterns-paging/index.js +5 -7
  228. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  229. package/build-module/components/block-quick-navigation/index.js +20 -17
  230. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  231. package/build-module/components/block-removal-warning-modal/index.js +2 -0
  232. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  233. package/build-module/components/block-rename/modal.js +5 -13
  234. package/build-module/components/block-rename/modal.js.map +1 -1
  235. package/build-module/components/block-switcher/index.js +1 -1
  236. package/build-module/components/block-switcher/index.js.map +1 -1
  237. package/build-module/components/block-switcher/pattern-transformations-menu.js +12 -13
  238. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  239. package/build-module/components/block-switcher/preview-block-popover.js +20 -17
  240. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  241. package/build-module/components/block-toolbar/shuffle.js +6 -2
  242. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  243. package/build-module/components/block-tools/block-selection-button.js +10 -61
  244. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  245. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  246. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  247. package/build-module/components/block-tools/index.js +14 -1
  248. package/build-module/components/block-tools/index.js.map +1 -1
  249. package/build-module/components/block-tools/use-show-block-tools.js +9 -8
  250. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  251. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js +37 -0
  252. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  253. package/build-module/components/block-tools/zoom-out-mode-inserters.js +30 -29
  254. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  255. package/build-module/components/block-tools/zoom-out-popover.js +49 -0
  256. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -0
  257. package/build-module/components/block-tools/zoom-out-toolbar.js +131 -0
  258. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -0
  259. package/build-module/components/button-block-appender/index.js +3 -1
  260. package/build-module/components/button-block-appender/index.js.map +1 -1
  261. package/build-module/components/child-layout-control/index.js +27 -19
  262. package/build-module/components/child-layout-control/index.js.map +1 -1
  263. package/build-module/components/date-format-picker/index.js +2 -2
  264. package/build-module/components/date-format-picker/index.js.map +1 -1
  265. package/build-module/components/default-block-appender/index.js +7 -4
  266. package/build-module/components/default-block-appender/index.js.map +1 -1
  267. package/build-module/components/dimensions-tool/index.js +6 -4
  268. package/build-module/components/dimensions-tool/index.js.map +1 -1
  269. package/build-module/components/font-appearance-control/index.js +24 -62
  270. package/build-module/components/font-appearance-control/index.js.map +1 -1
  271. package/build-module/components/global-styles/background-panel.js +188 -119
  272. package/build-module/components/global-styles/background-panel.js.map +1 -1
  273. package/build-module/components/global-styles/border-panel.js +3 -2
  274. package/build-module/components/global-styles/border-panel.js.map +1 -1
  275. package/build-module/components/global-styles/color-panel.js +3 -2
  276. package/build-module/components/global-styles/color-panel.js.map +1 -1
  277. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  278. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  279. package/build-module/components/global-styles/filters-panel.js +3 -2
  280. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  281. package/build-module/components/global-styles/hooks.js +13 -1
  282. package/build-module/components/global-styles/hooks.js.map +1 -1
  283. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  284. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  285. package/build-module/components/global-styles/typography-panel.js +47 -26
  286. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  287. package/build-module/components/global-styles/typography-utils.js +117 -0
  288. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  289. package/build-module/components/global-styles/use-global-styles-output.js +47 -13
  290. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  291. package/build-module/components/global-styles/utils.js +15 -6
  292. package/build-module/components/global-styles/utils.js.map +1 -1
  293. package/build-module/components/grid/grid-item-movers.js +93 -50
  294. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  295. package/build-module/components/grid/grid-item-resizer.js +2 -2
  296. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  297. package/build-module/components/grid/grid-visualizer.js +118 -38
  298. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  299. package/build-module/components/grid/use-grid-layout-sync.js +61 -42
  300. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  301. package/build-module/components/index.js +0 -5
  302. package/build-module/components/index.js.map +1 -1
  303. package/build-module/components/inner-blocks/index.js +2 -2
  304. package/build-module/components/inner-blocks/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  306. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  307. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  308. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  309. package/build-module/components/inserter/media-tab/media-panel.js +1 -0
  310. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  311. package/build-module/components/inserter/menu.js +26 -4
  312. package/build-module/components/inserter/menu.js.map +1 -1
  313. package/build-module/components/inserter/preview-panel.js +20 -3
  314. package/build-module/components/inserter/preview-panel.js.map +1 -1
  315. package/build-module/components/inserter/quick-inserter.js +2 -1
  316. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  317. package/build-module/components/inserter-draggable-blocks/index.js +10 -3
  318. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  319. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  320. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  321. package/build-module/components/inspector-controls-tabs/settings-tab.js +1 -2
  322. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  323. package/build-module/components/link-control/link-preview.js +1 -1
  324. package/build-module/components/link-control/link-preview.js.map +1 -1
  325. package/build-module/components/list-view/block-select-button.js +3 -7
  326. package/build-module/components/list-view/block-select-button.js.map +1 -1
  327. package/build-module/components/list-view/block.js +2 -2
  328. package/build-module/components/list-view/block.js.map +1 -1
  329. package/build-module/components/list-view/utils.js +3 -1
  330. package/build-module/components/list-view/utils.js.map +1 -1
  331. package/build-module/components/media-placeholder/index.js +19 -23
  332. package/build-module/components/media-placeholder/index.js.map +1 -1
  333. package/build-module/components/navigable-toolbar/index.js +3 -1
  334. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  335. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  336. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  337. package/build-module/components/rich-text/index.js +1 -1
  338. package/build-module/components/rich-text/index.js.map +1 -1
  339. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  340. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  341. package/build-module/components/tabbed-sidebar/index.js +60 -0
  342. package/build-module/components/tabbed-sidebar/index.js.map +1 -0
  343. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  344. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -0
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/hooks/background.js +26 -4
  348. package/build-module/hooks/background.js.map +1 -1
  349. package/build-module/hooks/block-hooks.js +11 -17
  350. package/build-module/hooks/block-hooks.js.map +1 -1
  351. package/build-module/hooks/block-style-variation.js +168 -4
  352. package/build-module/hooks/block-style-variation.js.map +1 -1
  353. package/build-module/hooks/duotone.js +16 -11
  354. package/build-module/hooks/duotone.js.map +1 -1
  355. package/build-module/hooks/grid-visualizer.js +61 -0
  356. package/build-module/hooks/grid-visualizer.js.map +1 -0
  357. package/build-module/hooks/index.js +3 -0
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout-child.js +47 -23
  360. package/build-module/hooks/layout-child.js.map +1 -1
  361. package/build-module/hooks/position.js +4 -15
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/use-bindings-attributes.js +96 -56
  364. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  365. package/build-module/hooks/utils.js +2 -0
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +50 -4
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/layouts/grid.js +92 -51
  370. package/build-module/layouts/grid.js.map +1 -1
  371. package/build-module/private-apis.js +8 -6
  372. package/build-module/private-apis.js.map +1 -1
  373. package/build-module/store/actions.js +15 -0
  374. package/build-module/store/actions.js.map +1 -1
  375. package/build-module/store/defaults.js +0 -2
  376. package/build-module/store/defaults.js.map +1 -1
  377. package/build-module/store/defaults.native.js +0 -3
  378. package/build-module/store/defaults.native.js.map +1 -1
  379. package/build-module/store/private-keys.js +1 -0
  380. package/build-module/store/private-keys.js.map +1 -1
  381. package/build-module/store/reducer.js +18 -1
  382. package/build-module/store/reducer.js.map +1 -1
  383. package/build-module/store/selectors.js +10 -0
  384. package/build-module/store/selectors.js.map +1 -1
  385. package/build-module/utils/format-font-style.js +39 -0
  386. package/build-module/utils/format-font-style.js.map +1 -0
  387. package/build-module/utils/format-font-weight.js +62 -0
  388. package/build-module/utils/format-font-weight.js.map +1 -0
  389. package/build-module/utils/get-editor-region.js +28 -0
  390. package/build-module/utils/get-editor-region.js.map +1 -0
  391. package/build-module/utils/get-font-styles-and-weights.js +160 -0
  392. package/build-module/utils/get-font-styles-and-weights.js.map +1 -0
  393. package/build-module/utils/pasting.js +5 -13
  394. package/build-module/utils/pasting.js.map +1 -1
  395. package/build-style/content-rtl.css +7 -6
  396. package/build-style/content.css +7 -6
  397. package/build-style/style-rtl.css +356 -181
  398. package/build-style/style.css +356 -181
  399. package/build-types/components/block-context/index.d.ts +2 -2
  400. package/build-types/components/block-context/index.d.ts.map +1 -1
  401. package/build-types/utils/dom.d.ts.map +1 -1
  402. package/package.json +32 -32
  403. package/src/components/alignment-control/ui.js +2 -2
  404. package/src/components/block-alignment-control/ui.js +1 -1
  405. package/src/components/block-alignment-control/ui.native.js +1 -1
  406. package/src/components/block-breadcrumb/index.js +16 -1
  407. package/src/components/block-context/README.md +4 -4
  408. package/src/components/block-inspector/index.js +8 -4
  409. package/src/components/block-list/content.scss +2 -16
  410. package/src/components/block-list/use-block-props/index.js +1 -1
  411. package/src/components/block-list/use-block-props/use-block-refs.js +19 -3
  412. package/src/components/block-list/use-block-props/use-is-hovered.js +26 -11
  413. package/src/components/block-list/use-in-between-inserter.js +5 -1
  414. package/src/components/block-lock/modal.js +10 -2
  415. package/src/components/block-lock/style.scss +4 -8
  416. package/src/components/block-lock/toolbar.js +0 -1
  417. package/src/components/block-mover/button.js +1 -1
  418. package/src/components/block-mover/index.js +1 -1
  419. package/src/components/block-pattern-setup/setup-toolbar.js +2 -2
  420. package/src/components/block-patterns-paging/index.js +8 -11
  421. package/src/components/block-patterns-paging/style.scss +0 -5
  422. package/src/components/block-quick-navigation/index.js +21 -28
  423. package/src/components/block-removal-warning-modal/index.js +10 -2
  424. package/src/components/block-rename/modal.js +2 -8
  425. package/src/components/block-switcher/index.js +1 -1
  426. package/src/components/block-switcher/pattern-transformations-menu.js +17 -15
  427. package/src/components/block-switcher/preview-block-popover.js +20 -14
  428. package/src/components/block-switcher/style.scss +8 -17
  429. package/src/components/block-switcher/test/index.js +6 -6
  430. package/src/components/block-toolbar/shuffle.js +9 -1
  431. package/src/components/block-toolbar/style.scss +1 -11
  432. package/src/components/block-tools/block-selection-button.js +11 -83
  433. package/src/components/block-tools/block-toolbar-breadcrumb.js +9 -4
  434. package/src/components/block-tools/index.js +21 -1
  435. package/src/components/block-tools/style.scss +23 -0
  436. package/src/components/block-tools/use-show-block-tools.js +21 -10
  437. package/src/components/block-tools/zoom-out-mode-inserter-button.js +47 -0
  438. package/src/components/block-tools/zoom-out-mode-inserters.js +44 -33
  439. package/src/components/block-tools/zoom-out-popover.js +50 -0
  440. package/src/components/block-tools/zoom-out-toolbar.js +140 -0
  441. package/src/components/button-block-appender/index.js +2 -1
  442. package/src/components/child-layout-control/index.js +41 -23
  443. package/src/components/date-format-picker/index.js +2 -2
  444. package/src/components/date-format-picker/style.scss +0 -9
  445. package/src/components/default-block-appender/index.js +11 -4
  446. package/src/components/dimensions-tool/index.js +97 -89
  447. package/src/components/font-appearance-control/index.js +24 -82
  448. package/src/components/font-appearance-control/style.scss +3 -5
  449. package/src/components/global-styles/background-panel.js +266 -167
  450. package/src/components/global-styles/border-panel.js +3 -2
  451. package/src/components/global-styles/color-panel.js +3 -2
  452. package/src/components/global-styles/dimensions-panel.js +3 -2
  453. package/src/components/global-styles/filters-panel.js +3 -2
  454. package/src/components/global-styles/hooks.js +14 -1
  455. package/src/components/global-styles/image-settings-panel.js +3 -2
  456. package/src/components/global-styles/style.scss +116 -19
  457. package/src/components/global-styles/test/typography-utils.js +594 -0
  458. package/src/components/global-styles/test/use-global-styles-output.js +3 -1
  459. package/src/components/global-styles/typography-panel.js +56 -27
  460. package/src/components/global-styles/typography-utils.js +159 -0
  461. package/src/components/global-styles/use-global-styles-output.js +45 -10
  462. package/src/components/global-styles/utils.js +17 -6
  463. package/src/components/grid/grid-item-movers.js +140 -86
  464. package/src/components/grid/grid-item-resizer.js +3 -2
  465. package/src/components/grid/grid-visualizer.js +172 -55
  466. package/src/components/grid/style.scss +157 -8
  467. package/src/components/grid/use-grid-layout-sync.js +88 -46
  468. package/src/components/iframe/content.scss +2 -1
  469. package/src/components/index.js +0 -5
  470. package/src/components/inner-blocks/index.js +6 -2
  471. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -16
  472. package/src/components/inserter/block-patterns-tab/patterns-filter.js +40 -44
  473. package/src/components/inserter/media-tab/media-panel.js +1 -0
  474. package/src/components/inserter/menu.js +47 -13
  475. package/src/components/inserter/preview-panel.js +27 -4
  476. package/src/components/inserter/quick-inserter.js +6 -1
  477. package/src/components/inserter/style.scss +58 -92
  478. package/src/components/inserter-draggable-blocks/index.js +11 -3
  479. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  480. package/src/components/inspector-controls-tabs/settings-tab.js +0 -2
  481. package/src/components/inspector-controls-tabs/style.scss +0 -21
  482. package/src/components/link-control/link-preview.js +1 -1
  483. package/src/components/list-view/block-select-button.js +3 -13
  484. package/src/components/list-view/block.js +10 -3
  485. package/src/components/list-view/style.scss +2 -1
  486. package/src/components/list-view/utils.js +13 -2
  487. package/src/components/media-placeholder/index.js +22 -32
  488. package/src/components/navigable-toolbar/index.js +3 -1
  489. package/src/components/rich-text/format-toolbar/index.js +1 -1
  490. package/src/components/rich-text/index.js +1 -1
  491. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -2
  492. package/src/components/tabbed-sidebar/README.md +76 -0
  493. package/src/components/tabbed-sidebar/index.js +70 -0
  494. package/src/components/tabbed-sidebar/style.scss +53 -0
  495. package/src/components/url-popover/image-url-input-ui.js +3 -3
  496. package/src/components/url-popover/index.js +3 -0
  497. package/src/components/url-popover/style.scss +1 -0
  498. package/src/hooks/background.js +25 -10
  499. package/src/hooks/block-hooks.js +9 -16
  500. package/src/hooks/block-style-variation.js +202 -3
  501. package/src/hooks/duotone.js +16 -12
  502. package/src/hooks/grid-visualizer.js +62 -0
  503. package/src/hooks/index.js +3 -0
  504. package/src/hooks/layout-child.js +64 -39
  505. package/src/hooks/position.js +3 -20
  506. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  507. package/src/hooks/use-bindings-attributes.js +107 -63
  508. package/src/hooks/utils.js +2 -0
  509. package/src/layouts/constrained.js +53 -4
  510. package/src/layouts/grid.js +148 -51
  511. package/src/private-apis.js +12 -7
  512. package/src/store/actions.js +15 -0
  513. package/src/store/defaults.js +0 -2
  514. package/src/store/defaults.native.js +0 -3
  515. package/src/store/private-keys.js +1 -0
  516. package/src/store/reducer.js +18 -0
  517. package/src/store/selectors.js +10 -0
  518. package/src/style.scss +1 -1
  519. package/src/utils/format-font-style.js +40 -0
  520. package/src/utils/format-font-weight.js +63 -0
  521. package/src/utils/get-editor-region.js +31 -0
  522. package/src/utils/get-font-styles-and-weights.js +191 -0
  523. package/src/utils/pasting.js +5 -12
  524. package/src/utils/test/format-font-style.js +34 -0
  525. package/src/utils/test/format-font-weight.js +66 -0
  526. package/src/utils/test/get-font-styles-and-weights.js +513 -0
  527. package/tsconfig.tsbuildinfo +1 -1
  528. package/build/components/inserter/reusable-block-rename-hint.js +0 -71
  529. package/build/components/inserter/reusable-block-rename-hint.js.map +0 -1
  530. package/build/components/inspector-controls-tabs/settings-tab-hint.js +0 -53
  531. package/build/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  532. package/build-module/components/inserter/reusable-block-rename-hint.js +0 -64
  533. package/build-module/components/inserter/reusable-block-rename-hint.js.map +0 -1
  534. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js +0 -47
  535. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  536. package/src/components/inserter/reusable-block-rename-hint.js +0 -69
  537. package/src/components/inspector-controls-tabs/settings-tab-hint.js +0 -52
  538. package/src/hooks/position.scss +0 -18
@@ -10,18 +10,16 @@ import {
10
10
  FlexBlock,
11
11
  FlexItem,
12
12
  } from '@wordpress/components';
13
- import {
14
- __experimentalGetBlockLabel,
15
- store as blocksStore,
16
- } from '@wordpress/blocks';
17
13
 
18
14
  /**
19
15
  * Internal dependencies
20
16
  */
21
17
  import { store as blockEditorStore } from '../../store';
22
18
  import BlockIcon from '../block-icon';
19
+ import useBlockDisplayInformation from '../use-block-display-information';
20
+ import useBlockDisplayTitle from '../block-title/use-block-display-title';
23
21
 
24
- export default function BlockQuickNavigation( { clientIds } ) {
22
+ export default function BlockQuickNavigation( { clientIds, onSelect } ) {
25
23
  if ( ! clientIds.length ) {
26
24
  return null;
27
25
  }
@@ -29,6 +27,7 @@ export default function BlockQuickNavigation( { clientIds } ) {
29
27
  <VStack spacing={ 1 }>
30
28
  { clientIds.map( ( clientId ) => (
31
29
  <BlockQuickNavigationItem
30
+ onSelect={ onSelect }
32
31
  key={ clientId }
33
32
  clientId={ clientId }
34
33
  />
@@ -37,29 +36,18 @@ export default function BlockQuickNavigation( { clientIds } ) {
37
36
  );
38
37
  }
39
38
 
40
- function BlockQuickNavigationItem( { clientId } ) {
41
- const { name, icon, isSelected } = useSelect(
39
+ function BlockQuickNavigationItem( { clientId, onSelect } ) {
40
+ const blockInformation = useBlockDisplayInformation( clientId );
41
+ const blockTitle = useBlockDisplayTitle( {
42
+ clientId,
43
+ context: 'list-view',
44
+ } );
45
+ const { isSelected } = useSelect(
42
46
  ( select ) => {
43
- const {
44
- getBlockName,
45
- getBlockAttributes,
46
- isBlockSelected,
47
- hasSelectedInnerBlock,
48
- } = select( blockEditorStore );
49
- const { getBlockType } = select( blocksStore );
50
-
51
- const blockType = getBlockType( getBlockName( clientId ) );
52
- const attributes = getBlockAttributes( clientId );
47
+ const { isBlockSelected, hasSelectedInnerBlock } =
48
+ select( blockEditorStore );
53
49
 
54
50
  return {
55
- name:
56
- blockType &&
57
- __experimentalGetBlockLabel(
58
- blockType,
59
- attributes,
60
- 'list-view'
61
- ),
62
- icon: blockType?.icon,
63
51
  isSelected:
64
52
  isBlockSelected( clientId ) ||
65
53
  hasSelectedInnerBlock( clientId, /* deep: */ true ),
@@ -72,14 +60,19 @@ function BlockQuickNavigationItem( { clientId } ) {
72
60
  return (
73
61
  <Button
74
62
  isPressed={ isSelected }
75
- onClick={ () => selectBlock( clientId ) }
63
+ onClick={ async () => {
64
+ await selectBlock( clientId );
65
+ if ( onSelect ) {
66
+ onSelect( clientId );
67
+ }
68
+ } }
76
69
  >
77
70
  <Flex>
78
71
  <FlexItem>
79
- <BlockIcon icon={ icon } />
72
+ <BlockIcon icon={ blockInformation?.icon } />
80
73
  </FlexItem>
81
74
  <FlexBlock style={ { textAlign: 'left' } }>
82
- <Truncate>{ name }</Truncate>
75
+ <Truncate>{ blockTitle }</Truncate>
83
76
  </FlexBlock>
84
77
  </Flex>
85
78
  </Button>
@@ -53,10 +53,18 @@ export function BlockRemovalWarningModal( { rules } ) {
53
53
  >
54
54
  <p>{ message }</p>
55
55
  <HStack justify="right">
56
- <Button variant="tertiary" onClick={ clearBlockRemovalPrompt }>
56
+ <Button
57
+ variant="tertiary"
58
+ onClick={ clearBlockRemovalPrompt }
59
+ __next40pxDefaultSize
60
+ >
57
61
  { __( 'Cancel' ) }
58
62
  </Button>
59
- <Button variant="primary" onClick={ onConfirmRemoval }>
63
+ <Button
64
+ variant="primary"
65
+ onClick={ onConfirmRemoval }
66
+ __next40pxDefaultSize
67
+ >
60
68
  { __( 'Delete' ) }
61
69
  </Button>
62
70
  </HStack>
@@ -9,7 +9,7 @@ import {
9
9
  Modal,
10
10
  } from '@wordpress/components';
11
11
  import { __, sprintf } from '@wordpress/i18n';
12
- import { useState, useId } from '@wordpress/element';
12
+ import { useState } from '@wordpress/element';
13
13
  import { speak } from '@wordpress/a11y';
14
14
 
15
15
  /**
@@ -27,7 +27,6 @@ export default function BlockRenameModal( {
27
27
  hasOverridesWarning,
28
28
  } ) {
29
29
  const [ editedBlockName, setEditedBlockName ] = useState( blockName );
30
- const descriptionId = useId();
31
30
 
32
31
  const nameHasChanged = editedBlockName !== blockName;
33
32
  const nameIsOriginal = editedBlockName === originalBlockName;
@@ -65,7 +64,6 @@ export default function BlockRenameModal( {
65
64
  onRequestClose={ onClose }
66
65
  overlayClassName="block-editor-block-rename-modal"
67
66
  focusOnMount="firstContentElement"
68
- aria={ { describedby: descriptionId } }
69
67
  size="small"
70
68
  >
71
69
  <form
@@ -79,16 +77,12 @@ export default function BlockRenameModal( {
79
77
  handleSubmit();
80
78
  } }
81
79
  >
82
- <p id={ descriptionId }>
83
- { __( 'Enter a custom name for this block.' ) }
84
- </p>
85
80
  <VStack spacing="3">
86
81
  <TextControl
87
82
  __nextHasNoMarginBottom
88
83
  __next40pxDefaultSize
89
84
  value={ editedBlockName }
90
- label={ __( 'Block name' ) }
91
- hideLabelFromVision
85
+ label={ __( 'Name' ) }
92
86
  help={
93
87
  hasOverridesWarning
94
88
  ? __(
@@ -306,7 +306,7 @@ export const BlockSwitcher = ( { clientIds, disabled, isUsingBindings } ) => {
306
306
  </>
307
307
  }
308
308
  toggleProps={ {
309
- describedBy: blockSwitcherDescription,
309
+ description: blockSwitcherDescription,
310
310
  ...toggleProps,
311
311
  } }
312
312
  menuProps={ { orientation: 'both' } }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { useState } from '@wordpress/element';
6
- import { useInstanceId } from '@wordpress/compose';
6
+ import { useInstanceId, useViewportMatch } from '@wordpress/compose';
7
7
  import { chevronRight } from '@wordpress/icons';
8
8
 
9
9
  import {
@@ -34,6 +34,7 @@ function PatternTransformationsMenu( {
34
34
  } ) {
35
35
  const [ showTransforms, setShowTransforms ] = useState( false );
36
36
  const patterns = useTransformedPatterns( statePatterns, blocks );
37
+
37
38
  if ( ! patterns.length ) {
38
39
  return null;
39
40
  }
@@ -60,21 +61,22 @@ function PatternTransformationsMenu( {
60
61
  }
61
62
 
62
63
  function PreviewPatternsPopover( { patterns, onSelect } ) {
64
+ const isMobile = useViewportMatch( 'medium', '<' );
65
+
63
66
  return (
64
- <div className="block-editor-block-switcher__popover__preview__parent">
65
- <div className="block-editor-block-switcher__popover__preview__container">
66
- <Popover
67
- className="block-editor-block-switcher__preview__popover"
68
- position="bottom right"
69
- >
70
- <div className="block-editor-block-switcher__preview is-pattern-list-preview">
71
- <BlockPatternsList
72
- patterns={ patterns }
73
- onSelect={ onSelect }
74
- />
75
- </div>
76
- </Popover>
77
- </div>
67
+ <div className="block-editor-block-switcher__popover-preview-container">
68
+ <Popover
69
+ className="block-editor-block-switcher__popover-preview"
70
+ placement={ isMobile ? 'bottom' : 'right-start' }
71
+ offset={ 16 }
72
+ >
73
+ <div className="block-editor-block-switcher__preview is-pattern-list-preview">
74
+ <BlockPatternsList
75
+ patterns={ patterns }
76
+ onSelect={ onSelect }
77
+ />
78
+ </div>
79
+ </Popover>
78
80
  </div>
79
81
  );
80
82
  }
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { Popover } from '@wordpress/components';
6
+ import { useViewportMatch } from '@wordpress/compose';
6
7
 
7
8
  /**
8
9
  * Internal dependencies
@@ -10,22 +11,27 @@ import { Popover } from '@wordpress/components';
10
11
  import BlockPreview from '../block-preview';
11
12
 
12
13
  export default function PreviewBlockPopover( { blocks } ) {
14
+ const isMobile = useViewportMatch( 'medium', '<' );
15
+
16
+ if ( isMobile ) {
17
+ return null;
18
+ }
19
+
13
20
  return (
14
- <div className="block-editor-block-switcher__popover__preview__parent">
15
- <div className="block-editor-block-switcher__popover__preview__container">
16
- <Popover
17
- className="block-editor-block-switcher__preview__popover"
18
- placement="bottom-start"
19
- focusOnMount={ false }
20
- >
21
- <div className="block-editor-block-switcher__preview">
22
- <div className="block-editor-block-switcher__preview-title">
23
- { __( 'Preview' ) }
24
- </div>
25
- <BlockPreview viewportWidth={ 500 } blocks={ blocks } />
21
+ <div className="block-editor-block-switcher__popover-preview-container">
22
+ <Popover
23
+ className="block-editor-block-switcher__popover-preview"
24
+ placement="right-start"
25
+ focusOnMount={ false }
26
+ offset={ 16 }
27
+ >
28
+ <div className="block-editor-block-switcher__preview">
29
+ <div className="block-editor-block-switcher__preview-title">
30
+ { __( 'Preview' ) }
26
31
  </div>
27
- </Popover>
28
- </div>
32
+ <BlockPreview viewportWidth={ 500 } blocks={ blocks } />
33
+ </div>
34
+ </Popover>
29
35
  </div>
30
36
  );
31
37
  }
@@ -84,27 +84,18 @@
84
84
  min-width: 300px;
85
85
  }
86
86
 
87
- .block-editor-block-switcher__popover__preview__parent {
88
- .block-editor-block-switcher__popover__preview__container {
89
- position: absolute;
90
- top: -$grid-unit-15;
91
- left: calc(100% + #{$grid-unit-20});
92
- }
87
+ .block-editor-block-switcher__popover-preview-container {
88
+ left: 0;
89
+ position: absolute;
90
+ top: -$border-width;
91
+ width: 100%;
92
+ bottom: 0;
93
+ pointer-events: none;
93
94
  }
94
95
 
95
- .block-editor-block-switcher__preview__popover {
96
- display: none;
96
+ .block-editor-block-switcher__popover-preview {
97
97
  overflow: hidden;
98
98
 
99
- // Position correctly. Needs specificity.
100
- &.components-popover {
101
- margin-top: $grid-unit-15 - $border-width;
102
- }
103
-
104
- @include break-medium() {
105
- display: block;
106
- }
107
-
108
99
  .components-popover__content {
109
100
  width: 300px;
110
101
  border: $border-width solid $gray-900;
@@ -134,7 +134,7 @@ describe( 'BlockSwitcher', () => {
134
134
  expect( items[ 1 ] ).toHaveTextContent( headingBlockType.title );
135
135
  } );
136
136
 
137
- test( 'should render disabled block switcher when we have a single selected block without styles and we cannot remove it', () => {
137
+ test( 'should render accessibly disabled block switcher when we have a single selected block without styles and we cannot remove it', () => {
138
138
  useSelect.mockImplementation( () => ( {
139
139
  blocks: [ headingBlock1 ],
140
140
  icon: copy,
@@ -142,11 +142,11 @@ describe( 'BlockSwitcher', () => {
142
142
  canRemove: false,
143
143
  } ) );
144
144
  render( <BlockSwitcher clientIds={ [ headingBlock1.clientId ] } /> );
145
- expect(
146
- screen.getByRole( 'button', {
147
- name: 'Block Name',
148
- } )
149
- ).toBeDisabled();
145
+ const blockSwitcher = screen.getByRole( 'button', {
146
+ name: 'Block Name',
147
+ } );
148
+ expect( blockSwitcher ).toBeEnabled();
149
+ expect( blockSwitcher ).toHaveAttribute( 'aria-disabled', 'true' );
150
150
  } );
151
151
 
152
152
  test( 'should render message for no available transforms', async () => {
@@ -54,10 +54,16 @@ export default function Shuffle( { clientId, as = Container } ) {
54
54
  return EMPTY_ARRAY;
55
55
  }
56
56
  return patterns.filter( ( pattern ) => {
57
+ const isCorePattern =
58
+ pattern.source === 'core' ||
59
+ ( pattern.source?.startsWith( 'pattern-directory' ) &&
60
+ pattern.source !== 'pattern-directory/theme' );
57
61
  return (
58
62
  // Check if the pattern has only one top level block,
59
63
  // otherwise we may shuffle to pattern that will not allow to continue shuffling.
60
64
  pattern.blocks.length === 1 &&
65
+ // We exclude the core patterns and pattern directory patterns that are not theme patterns.
66
+ ! isCorePattern &&
61
67
  pattern.categories?.some( ( category ) => {
62
68
  return categories.includes( category );
63
69
  } ) &&
@@ -66,7 +72,8 @@ export default function Shuffle( { clientId, as = Container } ) {
66
72
  );
67
73
  } );
68
74
  }, [ categories, patterns ] );
69
- if ( sameCategoryPatternsWithSingleWrapper.length === 0 ) {
75
+
76
+ if ( sameCategoryPatternsWithSingleWrapper.length < 2 ) {
70
77
  return null;
71
78
  }
72
79
 
@@ -85,6 +92,7 @@ export default function Shuffle( { clientId, as = Container } ) {
85
92
  <ComponentToUse
86
93
  label={ __( 'Shuffle' ) }
87
94
  icon={ shuffle }
95
+ className="block-editor-block-toolbar-shuffle"
88
96
  onClick={ () => {
89
97
  const nextPattern = getNextPattern();
90
98
  nextPattern.blocks[ 0 ].attributes = {
@@ -24,8 +24,6 @@
24
24
  .components-toolbar-group,
25
25
  .components-toolbar {
26
26
  background: none;
27
- // IE11 has thick paddings without this.
28
- line-height: 0;
29
27
 
30
28
  // These margins make the buttons themselves overlap the chrome of the toolbar.
31
29
  // This helps make them square, and maximize the hit area.
@@ -151,15 +149,7 @@
151
149
  }
152
150
 
153
151
  .block-editor-block-toolbar__slot {
154
- // Required for IE11.
155
- display: inline-block;
156
- // Fix for toolbar button misalignment on IE11
157
- line-height: 0;
158
-
159
- // IE11 doesn't read rules inside this query. They are applied only to modern browsers.
160
- @supports (position: sticky) {
161
- display: inline-flex;
162
- }
152
+ display: inline-flex;
163
153
  }
164
154
 
165
155
  .show-icon-labels {
@@ -6,10 +6,10 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { dragHandle, trash } from '@wordpress/icons';
10
- import { Button, Flex, FlexItem, ToolbarButton } from '@wordpress/components';
9
+ import { dragHandle } from '@wordpress/icons';
10
+ import { Button, Flex, FlexItem } from '@wordpress/components';
11
11
  import { useSelect, useDispatch } from '@wordpress/data';
12
- import { useEffect, useRef } from '@wordpress/element';
12
+ import { forwardRef, useEffect } from '@wordpress/element';
13
13
  import {
14
14
  BACKSPACE,
15
15
  DELETE,
@@ -38,8 +38,6 @@ import BlockIcon from '../block-icon';
38
38
  import { store as blockEditorStore } from '../../store';
39
39
  import BlockDraggable from '../block-draggable';
40
40
  import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
41
- import BlockMover from '../block-mover';
42
- import Shuffle from '../block-toolbar/shuffle';
43
41
 
44
42
  /**
45
43
  * Block selection button component, displaying the label of the block. If the block
@@ -48,10 +46,11 @@ import Shuffle from '../block-toolbar/shuffle';
48
46
  *
49
47
  * @param {string} props Component props.
50
48
  * @param {string} props.clientId Client ID of block.
49
+ * @param {Object} ref Reference to the component.
51
50
  *
52
51
  * @return {Component} The component to be rendered.
53
52
  */
54
- function BlockSelectionButton( { clientId, rootClientId } ) {
53
+ function BlockSelectionButton( { clientId, rootClientId }, ref ) {
55
54
  const selected = useSelect(
56
55
  ( select ) => {
57
56
  const {
@@ -62,7 +61,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
62
61
  __unstableGetEditorMode,
63
62
  getNextBlockClientId,
64
63
  getPreviousBlockClientId,
65
- canRemoveBlock,
66
64
  canMoveBlock,
67
65
  } = select( blockEditorStore );
68
66
  const { getActiveBlockVariation, getBlockType } =
@@ -73,26 +71,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
73
71
  const orientation =
74
72
  getBlockListSettings( rootClientId )?.orientation;
75
73
  const match = getActiveBlockVariation( name, attributes );
76
- const isBlockTemplatePart =
77
- blockType?.name === 'core/template-part';
78
-
79
- let isNextBlockTemplatePart = false;
80
- const nextClientId = getNextBlockClientId();
81
- if ( nextClientId ) {
82
- const { name: nextName } = getBlock( nextClientId );
83
- const nextBlockType = getBlockType( nextName );
84
- isNextBlockTemplatePart =
85
- nextBlockType?.name === 'core/template-part';
86
- }
87
-
88
- let isPrevBlockTemplatePart = false;
89
- const prevClientId = getPreviousBlockClientId();
90
- if ( prevClientId ) {
91
- const { name: prevName } = getBlock( prevClientId );
92
- const prevBlockType = getBlockType( prevName );
93
- isPrevBlockTemplatePart =
94
- prevBlockType?.name === 'core/template-part';
95
- }
96
74
 
97
75
  return {
98
76
  blockMovingMode: hasBlockMovingClientId(),
@@ -104,28 +82,15 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
104
82
  index + 1,
105
83
  orientation
106
84
  ),
107
- isBlockTemplatePart,
108
- isNextBlockTemplatePart,
109
- isPrevBlockTemplatePart,
110
- canRemove: canRemoveBlock( clientId ),
111
- canMove: canMoveBlock( clientId ),
85
+ canMove: canMoveBlock( clientId, rootClientId ),
86
+ getNextBlockClientId,
87
+ getPreviousBlockClientId,
112
88
  };
113
89
  },
114
90
  [ clientId, rootClientId ]
115
91
  );
116
- const {
117
- label,
118
- icon,
119
- blockMovingMode,
120
- editorMode,
121
- isBlockTemplatePart,
122
- isNextBlockTemplatePart,
123
- isPrevBlockTemplatePart,
124
- canRemove,
125
- canMove,
126
- } = selected;
92
+ const { label, icon, blockMovingMode, editorMode, canMove } = selected;
127
93
  const { setNavigationMode, removeBlock } = useDispatch( blockEditorStore );
128
- const ref = useRef();
129
94
 
130
95
  // Focus the breadcrumb in navigation mode.
131
96
  useEffect( () => {
@@ -164,11 +129,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
164
129
  const isEnter = keyCode === ENTER;
165
130
  const isSpace = keyCode === SPACE;
166
131
  const isShift = event.shiftKey;
167
- if ( isEscape && editorMode === 'navigation' ) {
168
- setNavigationMode( false );
169
- event.preventDefault();
170
- return;
171
- }
172
132
 
173
133
  if ( keyCode === BACKSPACE || keyCode === DELETE ) {
174
134
  removeBlock( clientId );
@@ -281,9 +241,7 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
281
241
  );
282
242
 
283
243
  const dragHandleLabel = __( 'Drag' );
284
- const showBlockDraggable =
285
- ( canMove && editorMode === 'navigation' ) ||
286
- ( editorMode === 'zoom-out' && canMove && ! isBlockTemplatePart );
244
+ const showBlockDraggable = canMove && editorMode === 'navigation';
287
245
 
288
246
  return (
289
247
  <div className={ classNames }>
@@ -312,36 +270,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
312
270
  </BlockDraggable>
313
271
  </FlexItem>
314
272
  ) }
315
- { editorMode === 'zoom-out' && ! isBlockTemplatePart && (
316
- <FlexItem>
317
- <BlockMover
318
- clientIds={ [ clientId ] }
319
- hideDragHandle
320
- isBlockMoverUpButtonDisabled={
321
- isPrevBlockTemplatePart
322
- }
323
- isBlockMoverDownButtonDisabled={
324
- isNextBlockTemplatePart
325
- }
326
- />
327
- </FlexItem>
328
- ) }
329
- { canMove && canRemove && editorMode === 'zoom-out' && (
330
- <Shuffle clientId={ clientId } as={ Button } />
331
- ) }
332
- { canRemove &&
333
- editorMode === 'zoom-out' &&
334
- ! isBlockTemplatePart && (
335
- <FlexItem>
336
- <ToolbarButton
337
- icon={ trash }
338
- label="Delete"
339
- onClick={ () => {
340
- removeBlock( clientId );
341
- } }
342
- />
343
- </FlexItem>
344
- ) }
345
273
  { editorMode === 'navigation' && (
346
274
  <FlexItem>
347
275
  <Button
@@ -368,4 +296,4 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
368
296
  );
369
297
  }
370
298
 
371
- export default BlockSelectionButton;
299
+ export default forwardRef( BlockSelectionButton );
@@ -3,6 +3,11 @@
3
3
  */
4
4
  import clsx from 'clsx';
5
5
 
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { forwardRef } from '@wordpress/element';
10
+
6
11
  /**
7
12
  * Internal dependencies
8
13
  */
@@ -11,10 +16,7 @@ import { PrivateBlockPopover } from '../block-popover';
11
16
  import useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';
12
17
  import useSelectedBlockToolProps from './use-selected-block-tool-props';
13
18
 
14
- export default function BlockToolbarBreadcrumb( {
15
- clientId,
16
- __unstableContentRef,
17
- } ) {
19
+ function BlockToolbarBreadcrumb( { clientId, __unstableContentRef }, ref ) {
18
20
  const {
19
21
  capturingClientId,
20
22
  isInsertionPointVisible,
@@ -38,9 +40,12 @@ export default function BlockToolbarBreadcrumb( {
38
40
  { ...popoverProps }
39
41
  >
40
42
  <BlockSelectionButton
43
+ ref={ ref }
41
44
  clientId={ clientId }
42
45
  rootClientId={ rootClientId }
43
46
  />
44
47
  </PrivateBlockPopover>
45
48
  );
46
49
  }
50
+
51
+ export default forwardRef( BlockToolbarBreadcrumb );
@@ -20,11 +20,13 @@ import {
20
20
  } from './insertion-point';
21
21
  import BlockToolbarPopover from './block-toolbar-popover';
22
22
  import BlockToolbarBreadcrumb from './block-toolbar-breadcrumb';
23
+ import ZoomOutPopover from './zoom-out-popover';
23
24
  import { store as blockEditorStore } from '../../store';
24
25
  import usePopoverScroll from '../block-popover/use-popover-scroll';
25
26
  import ZoomOutModeInserters from './zoom-out-mode-inserters';
26
27
  import { useShowBlockTools } from './use-show-block-tools';
27
28
  import { unlock } from '../../lock-unlock';
29
+ import getEditorRegion from '../../utils/get-editor-region';
28
30
 
29
31
  function selector( select ) {
30
32
  const {
@@ -78,9 +80,11 @@ export default function BlockTools( {
78
80
  showEmptyBlockSideInserter,
79
81
  showBreadcrumb,
80
82
  showBlockToolbarPopover,
83
+ showZoomOutToolbar,
81
84
  } = useShowBlockTools();
82
85
 
83
86
  const {
87
+ clearSelectedBlock,
84
88
  duplicateBlocks,
85
89
  removeBlocks,
86
90
  replaceBlocks,
@@ -92,6 +96,8 @@ export default function BlockTools( {
92
96
  expandBlock,
93
97
  } = unlock( useDispatch( blockEditorStore ) );
94
98
 
99
+ const blockSelectionButtonRef = useRef();
100
+
95
101
  function onKeyDown( event ) {
96
102
  if ( event.defaultPrevented ) {
97
103
  return;
@@ -152,6 +158,13 @@ export default function BlockTools( {
152
158
  // block so that focus is directed back to the beginning of the selection.
153
159
  // In effect, to the user this feels like deselecting the multi-selection.
154
160
  selectBlock( clientIds[ 0 ] );
161
+ } else if (
162
+ clientIds.length === 1 &&
163
+ event.target === blockSelectionButtonRef?.current
164
+ ) {
165
+ event.preventDefault();
166
+ clearSelectedBlock();
167
+ getEditorRegion( __unstableContentRef.current )?.focus();
155
168
  }
156
169
  } else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {
157
170
  // If focus is currently within a text field, such as a rich text block or other editable field,
@@ -182,7 +195,6 @@ export default function BlockTools( {
182
195
  }
183
196
  }
184
197
  }
185
-
186
198
  const blockToolbarRef = usePopoverScroll( __unstableContentRef );
187
199
  const blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );
188
200
 
@@ -213,6 +225,14 @@ export default function BlockTools( {
213
225
 
214
226
  { showBreadcrumb && (
215
227
  <BlockToolbarBreadcrumb
228
+ ref={ blockSelectionButtonRef }
229
+ __unstableContentRef={ __unstableContentRef }
230
+ clientId={ clientId }
231
+ />
232
+ ) }
233
+
234
+ { showZoomOutToolbar && (
235
+ <ZoomOutPopover
216
236
  __unstableContentRef={ __unstableContentRef }
217
237
  clientId={ clientId }
218
238
  />