@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
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
4
+ import { render, screen } from '@testing-library/react';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -73,9 +73,9 @@ describe( 'BlockTitle', () => {
73
73
  attributes: null,
74
74
  } ) );
75
75
 
76
- const wrapper = shallow( <BlockTitle /> );
76
+ const { container } = render( <BlockTitle /> );
77
77
 
78
- expect( wrapper.type() ).toBe( null );
78
+ expect( container ).toBeEmptyDOMElement();
79
79
  } );
80
80
 
81
81
  it( 'renders nothing if block type does not exist', () => {
@@ -83,11 +83,12 @@ describe( 'BlockTitle', () => {
83
83
  name: 'name-not-exists',
84
84
  attributes: null,
85
85
  } ) );
86
- const wrapper = shallow(
86
+
87
+ const { container } = render(
87
88
  <BlockTitle clientId="afd1cb17-2c08-4e7a-91be-007ba7ddc3a1" />
88
89
  );
89
90
 
90
- expect( wrapper.type() ).toBe( null );
91
+ expect( container ).toBeEmptyDOMElement();
91
92
  } );
92
93
 
93
94
  it( 'renders title if block type exists', () => {
@@ -96,9 +97,9 @@ describe( 'BlockTitle', () => {
96
97
  attributes: null,
97
98
  } ) );
98
99
 
99
- const wrapper = shallow( <BlockTitle clientId="id-name-exists" /> );
100
+ render( <BlockTitle clientId="id-name-exists" /> );
100
101
 
101
- expect( wrapper.text() ).toBe( 'Block Title' );
102
+ expect( screen.getByText( 'Block Title' ) ).toBeVisible();
102
103
  } );
103
104
 
104
105
  it( 'renders label if it is set', () => {
@@ -107,9 +108,9 @@ describe( 'BlockTitle', () => {
107
108
  attributes: null,
108
109
  } ) );
109
110
 
110
- const wrapper = shallow( <BlockTitle clientId="id-name-with-label" /> );
111
+ render( <BlockTitle clientId="id-name-with-label" /> );
111
112
 
112
- expect( wrapper.text() ).toBe( 'Test Label' );
113
+ expect( screen.getByText( 'Test Label' ) ).toBeVisible();
113
114
  } );
114
115
 
115
116
  it( 'should prioritize reusable block title over title', () => {
@@ -119,9 +120,10 @@ describe( 'BlockTitle', () => {
119
120
  attributes: null,
120
121
  } ) );
121
122
 
122
- const wrapper = shallow( <BlockTitle clientId="id-name-with-label" /> );
123
+ render( <BlockTitle clientId="id-name-with-label" /> );
123
124
 
124
- expect( wrapper.text() ).toBe( 'Reuse me!' );
125
+ expect( screen.queryByText( 'Test Label' ) ).not.toBeInTheDocument();
126
+ expect( screen.getByText( 'Reuse me!' ) ).toBeVisible();
125
127
  } );
126
128
 
127
129
  it( 'should prioritize block label over title', () => {
@@ -130,11 +132,12 @@ describe( 'BlockTitle', () => {
130
132
  attributes: null,
131
133
  } ) );
132
134
 
133
- const wrapper = shallow( <BlockTitle clientId="id-name-with-label" /> );
135
+ render( <BlockTitle clientId="id-name-with-label" /> );
134
136
 
135
- expect( wrapper.text() ).toBe(
136
- 'A Custom Label like a Block Variation Label'
137
- );
137
+ expect( screen.queryByText( 'Test Label' ) ).not.toBeInTheDocument();
138
+ expect(
139
+ screen.getByText( 'A Custom Label like a Block Variation Label' )
140
+ ).toBeVisible();
138
141
  } );
139
142
 
140
143
  it( 'should default to block information title if no reusable title or block name is available', () => {
@@ -143,9 +146,9 @@ describe( 'BlockTitle', () => {
143
146
  attributes: null,
144
147
  } ) );
145
148
 
146
- const wrapper = shallow( <BlockTitle clientId="id-name-with-label" /> );
149
+ render( <BlockTitle clientId="id-name-with-label" /> );
147
150
 
148
- expect( wrapper.text() ).toBe( 'Block With Label' );
151
+ expect( screen.getByText( 'Block With Label' ) ).toBeVisible();
149
152
  } );
150
153
 
151
154
  it( 'truncates the label with custom truncate length', () => {
@@ -154,14 +157,14 @@ describe( 'BlockTitle', () => {
154
157
  attributes: null,
155
158
  } ) );
156
159
 
157
- const wrapper = shallow(
160
+ render(
158
161
  <BlockTitle
159
162
  clientId="id-name-with-long-label"
160
163
  maximumLength={ 12 }
161
164
  />
162
165
  );
163
166
 
164
- expect( wrapper.text() ).toBe( 'This is a...' );
167
+ expect( screen.getByText( 'This is a...' ) ).toBeVisible();
165
168
  } );
166
169
 
167
170
  it( 'should not truncate the label if maximum length is undefined', () => {
@@ -170,12 +173,12 @@ describe( 'BlockTitle', () => {
170
173
  attributes: null,
171
174
  } ) );
172
175
 
173
- const wrapper = shallow(
174
- <BlockTitle clientId="id-name-with-long-label" />
175
- );
176
+ render( <BlockTitle clientId="id-name-with-long-label" /> );
176
177
 
177
- expect( wrapper.text() ).toBe(
178
- 'This is a longer label than typical for blocks to have.'
179
- );
178
+ expect(
179
+ screen.getByText(
180
+ 'This is a longer label than typical for blocks to have.'
181
+ )
182
+ ).toBeVisible();
180
183
  } );
181
184
  } );
@@ -37,6 +37,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
37
37
  hasReducedUI,
38
38
  isValid,
39
39
  isVisual,
40
+ isContentLocked,
40
41
  } = useSelect( ( select ) => {
41
42
  const {
42
43
  getBlockName,
@@ -45,6 +46,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
45
46
  isBlockValid,
46
47
  getBlockRootClientId,
47
48
  getSettings,
49
+ __unstableGetContentLockingParent,
48
50
  } = select( blockEditorStore );
49
51
  const selectedBlockClientIds = getSelectedBlockClientIds();
50
52
  const selectedBlockClientId = selectedBlockClientIds[ 0 ];
@@ -66,6 +68,9 @@ const BlockToolbar = ( { hideDragHandle } ) => {
66
68
  isVisual: selectedBlockClientIds.every(
67
69
  ( id ) => getBlockMode( id ) === 'visual'
68
70
  ),
71
+ isContentLocked: !! __unstableGetContentLockingParent(
72
+ selectedBlockClientId
73
+ ),
69
74
  };
70
75
  }, [] );
71
76
 
@@ -112,24 +117,27 @@ const BlockToolbar = ( { hideDragHandle } ) => {
112
117
 
113
118
  return (
114
119
  <div className={ classes }>
115
- { ! isMultiToolbar && ! displayHeaderToolbar && (
116
- <BlockParentSelector clientIds={ blockClientIds } />
117
- ) }
120
+ { ! isMultiToolbar &&
121
+ ! displayHeaderToolbar &&
122
+ ! isContentLocked && <BlockParentSelector /> }
118
123
  <div ref={ nodeRef } { ...showMoversGestures }>
119
- { ( shouldShowVisualToolbar || isMultiToolbar ) && (
120
- <ToolbarGroup className="block-editor-block-toolbar__block-controls">
121
- <BlockSwitcher clientIds={ blockClientIds } />
122
- { ! isMultiToolbar && (
123
- <BlockLockToolbar
124
- clientId={ blockClientIds[ 0 ] }
124
+ { ( shouldShowVisualToolbar || isMultiToolbar ) &&
125
+ ! isContentLocked && (
126
+ <ToolbarGroup className="block-editor-block-toolbar__block-controls">
127
+ <BlockSwitcher clientIds={ blockClientIds } />
128
+ { ! isMultiToolbar && (
129
+ <BlockLockToolbar
130
+ clientId={ blockClientIds[ 0 ] }
131
+ />
132
+ ) }
133
+ <BlockMover
134
+ clientIds={ blockClientIds }
135
+ hideDragHandle={
136
+ hideDragHandle || hasReducedUI
137
+ }
125
138
  />
126
- ) }
127
- <BlockMover
128
- clientIds={ blockClientIds }
129
- hideDragHandle={ hideDragHandle || hasReducedUI }
130
- />
131
- </ToolbarGroup>
132
- ) }
139
+ </ToolbarGroup>
140
+ ) }
133
141
  </div>
134
142
  { shouldShowVisualToolbar && isMultiToolbar && (
135
143
  <BlockGroupToolbar />
@@ -161,7 +169,9 @@ const BlockToolbar = ( { hideDragHandle } ) => {
161
169
  </>
162
170
  ) }
163
171
  <BlockEditVisuallyButton clientIds={ blockClientIds } />
164
- <BlockSettingsMenu clientIds={ blockClientIds } />
172
+ { ! isContentLocked && (
173
+ <BlockSettingsMenu clientIds={ blockClientIds } />
174
+ ) }
165
175
  </div>
166
176
  );
167
177
  };
@@ -20,8 +20,12 @@ import { store as blockEditorStore } from '../../store';
20
20
  function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
21
21
  const { blockType, hasParents, showParentSelector } = useSelect(
22
22
  ( select ) => {
23
- const { getBlockName, getBlockParents, getSelectedBlockClientIds } =
24
- select( blockEditorStore );
23
+ const {
24
+ getBlockName,
25
+ getBlockParents,
26
+ getSelectedBlockClientIds,
27
+ __unstableGetContentLockingParent,
28
+ } = select( blockEditorStore );
25
29
  const { getBlockType } = select( blocksStore );
26
30
  const selectedBlockClientIds = getSelectedBlockClientIds();
27
31
  const selectedBlockClientId = selectedBlockClientIds[ 0 ];
@@ -42,7 +46,10 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
42
46
  '__experimentalParentSelector',
43
47
  true
44
48
  ) &&
45
- selectedBlockClientIds.length <= 1,
49
+ selectedBlockClientIds.length <= 1 &&
50
+ ! __unstableGetContentLockingParent(
51
+ selectedBlockClientId
52
+ ),
46
53
  };
47
54
  },
48
55
  []
@@ -39,6 +39,7 @@ import { store as blockEditorStore } from '../../store';
39
39
  import BlockDraggable from '../block-draggable';
40
40
  import useBlockDisplayInformation from '../use-block-display-information';
41
41
  import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
42
+ import BlockMover from '../block-mover';
42
43
 
43
44
  /**
44
45
  * Block selection button component, displaying the label of the block. If the block
@@ -59,6 +60,7 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
59
60
  getBlockIndex,
60
61
  hasBlockMovingClientId,
61
62
  getBlockListSettings,
63
+ __unstableGetEditorMode,
62
64
  } = select( blockEditorStore );
63
65
  const index = getBlockIndex( clientId );
64
66
  const { name, attributes } = getBlock( clientId );
@@ -69,11 +71,19 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
69
71
  attributes,
70
72
  blockMovingMode,
71
73
  orientation: getBlockListSettings( rootClientId )?.orientation,
74
+ editorMode: __unstableGetEditorMode(),
72
75
  };
73
76
  },
74
77
  [ clientId, rootClientId ]
75
78
  );
76
- const { index, name, attributes, blockMovingMode, orientation } = selected;
79
+ const {
80
+ index,
81
+ name,
82
+ attributes,
83
+ blockMovingMode,
84
+ orientation,
85
+ editorMode,
86
+ } = selected;
77
87
  const { setNavigationMode, removeBlock } = useDispatch( blockEditorStore );
78
88
  const ref = useRef();
79
89
 
@@ -236,25 +246,34 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
236
246
  <BlockIcon icon={ blockInformation?.icon } showColors />
237
247
  </FlexItem>
238
248
  <FlexItem>
239
- <BlockDraggable clientIds={ [ clientId ] }>
240
- { ( draggableProps ) => (
241
- <Button
242
- icon={ dragHandle }
243
- className="block-selection-button_drag-handle"
244
- aria-hidden="true"
245
- label={ dragHandleLabel }
246
- // Should not be able to tab to drag handle as this
247
- // button can only be used with a pointer device.
248
- tabIndex="-1"
249
- { ...draggableProps }
250
- />
251
- ) }
252
- </BlockDraggable>
249
+ { editorMode === 'zoom-out' && (
250
+ <BlockMover clientIds={ [ clientId ] } hideDragHandle />
251
+ ) }
252
+ { editorMode === 'navigation' && (
253
+ <BlockDraggable clientIds={ [ clientId ] }>
254
+ { ( draggableProps ) => (
255
+ <Button
256
+ icon={ dragHandle }
257
+ className="block-selection-button_drag-handle"
258
+ aria-hidden="true"
259
+ label={ dragHandleLabel }
260
+ // Should not be able to tab to drag handle as this
261
+ // button can only be used with a pointer device.
262
+ tabIndex="-1"
263
+ { ...draggableProps }
264
+ />
265
+ ) }
266
+ </BlockDraggable>
267
+ ) }
253
268
  </FlexItem>
254
269
  <FlexItem>
255
270
  <Button
256
271
  ref={ ref }
257
- onClick={ () => setNavigationMode( false ) }
272
+ onClick={
273
+ editorMode === 'navigation'
274
+ ? () => setNavigationMode( false )
275
+ : undefined
276
+ }
258
277
  onKeyDown={ onKeyDown }
259
278
  label={ label }
260
279
  showTooltip={ false }
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { first, last } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -10,15 +5,20 @@ import { useSelect, useDispatch } from '@wordpress/data';
10
5
  import { useViewportMatch } from '@wordpress/compose';
11
6
  import { Popover } from '@wordpress/components';
12
7
  import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';
8
+ import { useRef } from '@wordpress/element';
13
9
 
14
10
  /**
15
11
  * Internal dependencies
16
12
  */
17
- import InsertionPoint from './insertion-point';
13
+ import {
14
+ InsertionPointOpenRef,
15
+ default as InsertionPoint,
16
+ } from './insertion-point';
18
17
  import SelectedBlockPopover from './selected-block-popover';
19
18
  import { store as blockEditorStore } from '../../store';
20
19
  import BlockContextualToolbar from './block-contextual-toolbar';
21
20
  import usePopoverScroll from '../block-popover/use-popover-scroll';
21
+ import ZoomOutModeInserters from './zoom-out-mode-inserters';
22
22
 
23
23
  /**
24
24
  * Renders block tools (the block toolbar, select/navigation mode toolbar, the
@@ -35,10 +35,15 @@ export default function BlockTools( {
35
35
  ...props
36
36
  } ) {
37
37
  const isLargeViewport = useViewportMatch( 'medium' );
38
- const hasFixedToolbar = useSelect(
39
- ( select ) => select( blockEditorStore ).getSettings().hasFixedToolbar,
40
- []
41
- );
38
+ const { hasFixedToolbar, isZoomOutMode } = useSelect( ( select ) => {
39
+ const { __unstableGetEditorMode, getSettings } =
40
+ select( blockEditorStore );
41
+
42
+ return {
43
+ isZoomOutMode: __unstableGetEditorMode() === 'zoom-out',
44
+ hasFixedToolbar: getSettings().hasFixedToolbar,
45
+ };
46
+ }, [] );
42
47
  const isMatch = useShortcutEventMatch();
43
48
  const { getSelectedBlockClientIds, getBlockRootClientId } =
44
49
  useSelect( blockEditorStore );
@@ -59,14 +64,14 @@ export default function BlockTools( {
59
64
  const clientIds = getSelectedBlockClientIds();
60
65
  if ( clientIds.length ) {
61
66
  event.preventDefault();
62
- const rootClientId = getBlockRootClientId( first( clientIds ) );
67
+ const rootClientId = getBlockRootClientId( clientIds[ 0 ] );
63
68
  moveBlocksUp( clientIds, rootClientId );
64
69
  }
65
70
  } else if ( isMatch( 'core/block-editor/move-down', event ) ) {
66
71
  const clientIds = getSelectedBlockClientIds();
67
72
  if ( clientIds.length ) {
68
73
  event.preventDefault();
69
- const rootClientId = getBlockRootClientId( first( clientIds ) );
74
+ const rootClientId = getBlockRootClientId( clientIds[ 0 ] );
70
75
  moveBlocksDown( clientIds, rootClientId );
71
76
  }
72
77
  } else if ( isMatch( 'core/block-editor/duplicate', event ) ) {
@@ -85,13 +90,13 @@ export default function BlockTools( {
85
90
  const clientIds = getSelectedBlockClientIds();
86
91
  if ( clientIds.length ) {
87
92
  event.preventDefault();
88
- insertAfterBlock( last( clientIds ) );
93
+ insertAfterBlock( clientIds[ clientIds.length - 1 ] );
89
94
  }
90
95
  } else if ( isMatch( 'core/block-editor/insert-before', event ) ) {
91
96
  const clientIds = getSelectedBlockClientIds();
92
97
  if ( clientIds.length ) {
93
98
  event.preventDefault();
94
- insertBeforeBlock( first( clientIds ) );
99
+ insertBeforeBlock( clientIds[ 0 ] );
95
100
  }
96
101
  } else if ( isMatch( 'core/block-editor/unselect', event ) ) {
97
102
  const clientIds = getSelectedBlockClientIds();
@@ -106,30 +111,41 @@ export default function BlockTools( {
106
111
  }
107
112
  }
108
113
 
114
+ const blockToolbarRef = usePopoverScroll( __unstableContentRef );
115
+ const blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );
116
+
109
117
  return (
110
118
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
111
119
  <div { ...props } onKeyDown={ onKeyDown }>
112
- <InsertionPoint __unstableContentRef={ __unstableContentRef }>
113
- { ( hasFixedToolbar || ! isLargeViewport ) && (
114
- <BlockContextualToolbar isFixed />
120
+ <InsertionPointOpenRef.Provider value={ useRef( false ) }>
121
+ { ! isZoomOutMode && (
122
+ <InsertionPoint
123
+ __unstableContentRef={ __unstableContentRef }
124
+ />
115
125
  ) }
126
+ { ! isZoomOutMode &&
127
+ ( hasFixedToolbar || ! isLargeViewport ) && (
128
+ <BlockContextualToolbar isFixed />
129
+ ) }
116
130
  { /* Even if the toolbar is fixed, the block popover is still
117
- needed for navigation and exploded mode. */ }
131
+ needed for navigation and zoom-out mode. */ }
118
132
  <SelectedBlockPopover
119
133
  __unstableContentRef={ __unstableContentRef }
120
134
  />
121
135
  { /* Used for the inline rich text toolbar. */ }
122
- <Popover.Slot
123
- name="block-toolbar"
124
- ref={ usePopoverScroll( __unstableContentRef ) }
125
- />
136
+ <Popover.Slot name="block-toolbar" ref={ blockToolbarRef } />
126
137
  { children }
127
138
  { /* Used for inline rich text popovers. */ }
128
139
  <Popover.Slot
129
140
  name="__unstable-block-tools-after"
130
- ref={ usePopoverScroll( __unstableContentRef ) }
141
+ ref={ blockToolbarAfterRef }
131
142
  />
132
- </InsertionPoint>
143
+ { isZoomOutMode && (
144
+ <ZoomOutModeInserters
145
+ __unstableContentRef={ __unstableContentRef }
146
+ />
147
+ ) }
148
+ </InsertionPointOpenRef.Provider>
133
149
  </div>
134
150
  );
135
151
  }
@@ -200,6 +200,7 @@ function InsertionPointPopover( {
200
200
  <motion.div
201
201
  variants={ lineVariants }
202
202
  className="block-editor-block-list__insertion-point-indicator"
203
+ data-testid="block-list-insertion-point-indicator"
203
204
  />
204
205
  { isInserterShown && (
205
206
  <motion.div
@@ -227,15 +228,10 @@ function InsertionPointPopover( {
227
228
  );
228
229
  }
229
230
 
230
- export default function InsertionPoint( { children, ...props } ) {
231
+ export default function InsertionPoint( props ) {
231
232
  const isVisible = useSelect( ( select ) => {
232
233
  return select( blockEditorStore ).isBlockInsertionPointVisible();
233
234
  }, [] );
234
235
 
235
- return (
236
- <InsertionPointOpenRef.Provider value={ useRef( false ) }>
237
- { isVisible && <InsertionPointPopover { ...props } /> }
238
- { children }
239
- </InsertionPointOpenRef.Provider>
240
- );
236
+ return isVisible && <InsertionPointPopover { ...props } />;
241
237
  }
@@ -24,7 +24,7 @@ import useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';
24
24
 
25
25
  function selector( select ) {
26
26
  const {
27
- isNavigationMode,
27
+ __unstableGetEditorMode,
28
28
  isMultiSelecting,
29
29
  hasMultiSelection,
30
30
  isTyping,
@@ -32,7 +32,7 @@ function selector( select ) {
32
32
  getLastMultiSelectedBlockClientId,
33
33
  } = select( blockEditorStore );
34
34
  return {
35
- isNavigationMode: isNavigationMode(),
35
+ editorMode: __unstableGetEditorMode(),
36
36
  isMultiSelecting: isMultiSelecting(),
37
37
  isTyping: isTyping(),
38
38
  hasFixedToolbar: getSettings().hasFixedToolbar,
@@ -51,7 +51,7 @@ function SelectedBlockPopover( {
51
51
  __unstableContentRef,
52
52
  } ) {
53
53
  const {
54
- isNavigationMode,
54
+ editorMode,
55
55
  isMultiSelecting,
56
56
  isTyping,
57
57
  hasFixedToolbar,
@@ -80,17 +80,18 @@ function SelectedBlockPopover( {
80
80
  const { stopTyping } = useDispatch( blockEditorStore );
81
81
 
82
82
  const showEmptyBlockSideInserter =
83
- ! isTyping && ! isNavigationMode && isEmptyDefaultBlock;
84
- const shouldShowBreadcrumb = isNavigationMode;
83
+ ! isTyping && editorMode === 'edit' && isEmptyDefaultBlock;
84
+ const shouldShowBreadcrumb =
85
+ editorMode === 'navigation' || editorMode === 'zoom-out';
85
86
  const shouldShowContextualToolbar =
86
- ! isNavigationMode &&
87
+ editorMode === 'edit' &&
87
88
  ! hasFixedToolbar &&
88
89
  isLargeViewport &&
89
90
  ! isMultiSelecting &&
90
91
  ! showEmptyBlockSideInserter &&
91
92
  ! isTyping;
92
93
  const canFocusHiddenToolbar =
93
- ! isNavigationMode &&
94
+ editorMode === 'edit' &&
94
95
  ! shouldShowContextualToolbar &&
95
96
  ! hasFixedToolbar &&
96
97
  ! isEmptyDefaultBlock;
@@ -132,6 +133,7 @@ function SelectedBlockPopover( {
132
133
  } ) }
133
134
  __unstablePopoverSlot={ __unstablePopoverSlot }
134
135
  __unstableContentRef={ __unstableContentRef }
136
+ resize={ false }
135
137
  { ...popoverProps }
136
138
  >
137
139
  { shouldShowContextualToolbar && (
@@ -171,6 +171,11 @@
171
171
  .block-selection-button_select-button.components-button {
172
172
  padding: 0;
173
173
  }
174
+
175
+ .block-editor-block-mover {
176
+ background: unset;
177
+ border: none;
178
+ }
174
179
  }
175
180
 
176
181
  // Hide the popover block editor list while dragging.
@@ -14,15 +14,19 @@ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-
14
14
  // By default the toolbar sets the `shift` prop. If the user scrolls the page
15
15
  // down the toolbar will stay on screen by adopting a sticky position at the
16
16
  // top of the viewport.
17
- const DEFAULT_PROPS = { __unstableForcePosition: true, __unstableShift: true };
17
+ const DEFAULT_PROPS = {
18
+ flip: false,
19
+ shift: true,
20
+ };
18
21
 
19
22
  // When there isn't enough height between the top of the block and the editor
20
23
  // canvas, the `shift` prop is set to `false`, as it will cause the block to be
21
- // obscured. The `flip` behavior is enabled (by setting `forcePosition` to
22
- // `false`), which positions the toolbar below the block.
24
+ // obscured. The `flip` behavior is enabled, which positions the toolbar below
25
+ // the block. This only happens if the block is smaller than the viewport, as
26
+ // otherwise the toolbar will be off-screen.
23
27
  const RESTRICTED_HEIGHT_PROPS = {
24
- __unstableForcePosition: false,
25
- __unstableShift: false,
28
+ flip: true,
29
+ shift: false,
26
30
  };
27
31
 
28
32
  /**
@@ -42,7 +46,16 @@ function getProps( contentElement, selectedBlockElement, toolbarHeight ) {
42
46
  const blockRect = selectedBlockElement.getBoundingClientRect();
43
47
  const contentRect = contentElement.getBoundingClientRect();
44
48
 
45
- if ( blockRect.top - contentRect.top > toolbarHeight ) {
49
+ // The document element's clientHeight represents the viewport height.
50
+ const viewportHeight =
51
+ contentElement.ownerDocument.documentElement.clientHeight;
52
+
53
+ const hasSpaceForToolbarAbove =
54
+ blockRect.top - contentRect.top > toolbarHeight;
55
+ const isBlockTallerThanViewport =
56
+ blockRect.height > viewportHeight - toolbarHeight;
57
+
58
+ if ( hasSpaceForToolbarAbove || isBlockTallerThanViewport ) {
46
59
  return DEFAULT_PROPS;
47
60
  }
48
61
 
@@ -0,0 +1,57 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { useEffect, useState } from '@wordpress/element';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import BlockPopoverInbetween from '../block-popover/inbetween';
11
+ import { store as blockEditorStore } from '../../store';
12
+ import Inserter from '../inserter';
13
+
14
+ function ZoomOutModeInserters( { __unstableContentRef } ) {
15
+ const [ isReady, setIsReady ] = useState( false );
16
+ const blockOrder = useSelect( ( select ) => {
17
+ return select( blockEditorStore ).getBlockOrder();
18
+ }, [] );
19
+
20
+ // Defer the initial rendering to avoid the jumps due to the animation.
21
+ useEffect( () => {
22
+ const timeout = setTimeout( () => {
23
+ setIsReady( true );
24
+ }, 500 );
25
+ return () => {
26
+ clearTimeout( timeout );
27
+ };
28
+ }, [] );
29
+
30
+ if ( ! isReady ) {
31
+ return null;
32
+ }
33
+
34
+ return blockOrder.map( ( clientId, index ) => {
35
+ if ( index === blockOrder.length - 1 ) {
36
+ return null;
37
+ }
38
+ return (
39
+ <BlockPopoverInbetween
40
+ key={ clientId }
41
+ previousClientId={ clientId }
42
+ nextClientId={ blockOrder[ index + 1 ] }
43
+ __unstableContentRef={ __unstableContentRef }
44
+ >
45
+ <div className="block-editor-block-list__insertion-point-inserter is-with-inserter">
46
+ <Inserter
47
+ position="bottom center"
48
+ clientId={ blockOrder[ index + 1 ] }
49
+ __experimentalIsQuick
50
+ />
51
+ </div>
52
+ </BlockPopoverInbetween>
53
+ );
54
+ } );
55
+ }
56
+
57
+ export default ZoomOutModeInserters;