@wordpress/block-editor 9.7.1-next.d6164808d3.0 → 10.0.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 (556) hide show
  1. package/CHANGELOG.md +8 -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/block-actions/index.js +5 -9
  6. package/build/components/block-actions/index.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.js +5 -5
  8. package/build/components/block-alignment-control/ui.js.map +1 -1
  9. package/build/components/block-content-overlay/index.js +2 -4
  10. package/build/components/block-content-overlay/index.js.map +1 -1
  11. package/build/components/block-draggable/draggable-chip.js +2 -1
  12. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  13. package/build/components/block-edit/edit.js +1 -1
  14. package/build/components/block-edit/edit.js.map +1 -1
  15. package/build/components/block-inspector/index.js +125 -17
  16. package/build/components/block-inspector/index.js.map +1 -1
  17. package/build/components/block-list/block-list-compact.native.js +73 -0
  18. package/build/components/block-list/block-list-compact.native.js.map +1 -0
  19. package/build/components/block-list/block.js +40 -9
  20. package/build/components/block-list/block.js.map +1 -1
  21. package/build/components/block-list/index.js +4 -4
  22. package/build/components/block-list/index.js.map +1 -1
  23. package/build/components/block-list/use-block-props/index.js +14 -11
  24. package/build/components/block-list/use-block-props/index.js.map +1 -1
  25. package/build/components/block-list/use-block-props/use-block-class-names.js +3 -2
  26. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  27. package/build/components/block-list/use-block-props/use-focus-first-element.js +4 -10
  28. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  29. package/build/components/block-list/use-block-props/use-is-hovered.js +1 -2
  30. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  31. package/build/components/block-list/use-in-between-inserter.js +7 -12
  32. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  33. package/build/components/block-list-appender/index.js +20 -21
  34. package/build/components/block-list-appender/index.js.map +1 -1
  35. package/build/components/block-list-appender/index.native.js +1 -7
  36. package/build/components/block-list-appender/index.native.js.map +1 -1
  37. package/build/components/block-lock/use-block-lock.js +3 -1
  38. package/build/components/block-lock/use-block-lock.js.map +1 -1
  39. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +20 -10
  40. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  41. package/build/components/block-mover/button.js +4 -6
  42. package/build/components/block-mover/button.js.map +1 -1
  43. package/build/components/block-mover/index.js +4 -6
  44. package/build/components/block-mover/index.js.map +1 -1
  45. package/build/components/block-mover/index.native.js +24 -8
  46. package/build/components/block-mover/index.native.js.map +1 -1
  47. package/build/components/block-popover/inbetween.js +58 -16
  48. package/build/components/block-popover/inbetween.js.map +1 -1
  49. package/build/components/block-popover/index.js +14 -9
  50. package/build/components/block-popover/index.js.map +1 -1
  51. package/build/components/block-preview/auto.js +4 -2
  52. package/build/components/block-preview/auto.js.map +1 -1
  53. package/build/components/block-settings-menu/block-settings-dropdown.js +3 -1
  54. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  55. package/build/components/block-settings-menu-controls/index.js +3 -1
  56. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  57. package/build/components/block-styles/preview-panel.js +7 -1
  58. package/build/components/block-styles/preview-panel.js.map +1 -1
  59. package/build/components/block-switcher/block-transformations-menu.js +114 -25
  60. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  61. package/build/components/block-toolbar/index.js +9 -8
  62. package/build/components/block-toolbar/index.js.map +1 -1
  63. package/build/components/block-tools/block-contextual-toolbar.js +3 -2
  64. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  65. package/build/components/block-tools/block-selection-button.js +13 -5
  66. package/build/components/block-tools/block-selection-button.js.map +1 -1
  67. package/build/components/block-tools/index.js +33 -15
  68. package/build/components/block-tools/index.js.map +1 -1
  69. package/build/components/block-tools/insertion-point.js +4 -9
  70. package/build/components/block-tools/insertion-point.js.map +1 -1
  71. package/build/components/block-tools/selected-block-popover.js +19 -10
  72. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  73. package/build/components/block-tools/use-block-toolbar-popover-props.js +131 -0
  74. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  75. package/build/components/block-tools/zoom-out-mode-inserters.js +71 -0
  76. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -0
  77. package/build/components/block-vertical-alignment-control/ui.js +5 -2
  78. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  79. package/build/components/colors-gradients/control.js +1 -0
  80. package/build/components/colors-gradients/control.js.map +1 -1
  81. package/build/components/colors-gradients/dropdown.js +1 -1
  82. package/build/components/colors-gradients/dropdown.js.map +1 -1
  83. package/build/components/iframe/index.js +31 -4
  84. package/build/components/iframe/index.js.map +1 -1
  85. package/build/components/inner-blocks/default-block-appender.js +1 -7
  86. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +2 -2
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inner-blocks/index.native.js +6 -2
  90. package/build/components/inner-blocks/index.native.js.map +1 -1
  91. package/build/components/inner-blocks/use-inner-block-template-sync.js +5 -5
  92. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  93. package/build/components/inner-blocks/use-nested-settings-update.js +1 -1
  94. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  95. package/build/components/inserter/index.js +3 -6
  96. package/build/components/inserter/index.js.map +1 -1
  97. package/build/components/inserter/library.js +14 -3
  98. package/build/components/inserter/library.js.map +1 -1
  99. package/build/components/inserter/menu.js +21 -8
  100. package/build/components/inserter/menu.js.map +1 -1
  101. package/build/components/inserter/preview-panel.js +1 -1
  102. package/build/components/inserter/preview-panel.js.map +1 -1
  103. package/build/components/inserter/tabs.js +11 -4
  104. package/build/components/inserter/tabs.js.map +1 -1
  105. package/build/components/link-control/link-preview.js +1 -1
  106. package/build/components/link-control/link-preview.js.map +1 -1
  107. package/build/components/link-control/search-input.js +6 -3
  108. package/build/components/link-control/search-input.js.map +1 -1
  109. package/build/components/link-control/search-item.js +36 -5
  110. package/build/components/link-control/search-item.js.map +1 -1
  111. package/build/components/list-view/block.js +23 -11
  112. package/build/components/list-view/block.js.map +1 -1
  113. package/build/components/list-view/branch.js +19 -2
  114. package/build/components/list-view/branch.js.map +1 -1
  115. package/build/components/list-view/index.js +8 -4
  116. package/build/components/list-view/index.js.map +1 -1
  117. package/build/components/list-view/use-block-selection.js +0 -1
  118. package/build/components/list-view/use-block-selection.js.map +1 -1
  119. package/build/components/provider/use-block-sync.js +1 -7
  120. package/build/components/provider/use-block-sync.js.map +1 -1
  121. package/build/components/publish-date-time-picker/index.js +1 -1
  122. package/build/components/publish-date-time-picker/index.js.map +1 -1
  123. package/build/components/rich-text/index.js +37 -19
  124. package/build/components/rich-text/index.js.map +1 -1
  125. package/build/components/rich-text/index.native.js +11 -20
  126. package/build/components/rich-text/index.native.js.map +1 -1
  127. package/build/components/spacing-sizes-control/spacing-input-control.js +6 -1
  128. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  129. package/build/components/spacing-sizes-control/utils.js +32 -1
  130. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  131. package/build/components/text-decoration-control/index.js +28 -17
  132. package/build/components/text-decoration-control/index.js.map +1 -1
  133. package/build/components/text-transform-control/index.js +21 -14
  134. package/build/components/text-transform-control/index.js.map +1 -1
  135. package/build/components/tool-selector/index.js +6 -11
  136. package/build/components/tool-selector/index.js.map +1 -1
  137. package/build/components/url-popover/index.js +1 -1
  138. package/build/components/url-popover/index.js.map +1 -1
  139. package/build/components/use-block-drop-zone/index.js +7 -4
  140. package/build/components/use-block-drop-zone/index.js.map +1 -1
  141. package/build/components/use-moving-animation/index.js +9 -28
  142. package/build/components/use-moving-animation/index.js.map +1 -1
  143. package/build/components/writing-flow/index.js +2 -0
  144. package/build/components/writing-flow/index.js.map +1 -1
  145. package/build/components/writing-flow/use-select-all.js +7 -16
  146. package/build/components/writing-flow/use-select-all.js.map +1 -1
  147. package/build/hooks/align.js +17 -3
  148. package/build/hooks/align.js.map +1 -1
  149. package/build/hooks/anchor.js +3 -7
  150. package/build/hooks/anchor.js.map +1 -1
  151. package/build/hooks/color-panel.js +2 -1
  152. package/build/hooks/color-panel.js.map +1 -1
  153. package/build/hooks/content-lock-ui.js +145 -0
  154. package/build/hooks/content-lock-ui.js.map +1 -0
  155. package/build/hooks/dimensions.js +6 -6
  156. package/build/hooks/dimensions.js.map +1 -1
  157. package/build/hooks/duotone.js +8 -1
  158. package/build/hooks/duotone.js.map +1 -1
  159. package/build/hooks/font-appearance.js +2 -1
  160. package/build/hooks/font-appearance.js.map +1 -1
  161. package/build/hooks/font-family.js +3 -1
  162. package/build/hooks/font-family.js.map +1 -1
  163. package/build/hooks/font-size.js +3 -1
  164. package/build/hooks/font-size.js.map +1 -1
  165. package/build/hooks/gap.js +23 -6
  166. package/build/hooks/gap.js.map +1 -1
  167. package/build/hooks/index.js +14 -0
  168. package/build/hooks/index.js.map +1 -1
  169. package/build/hooks/layout.js +14 -10
  170. package/build/hooks/layout.js.map +1 -1
  171. package/build/hooks/letter-spacing.js +2 -1
  172. package/build/hooks/letter-spacing.js.map +1 -1
  173. package/build/hooks/line-height.js +2 -1
  174. package/build/hooks/line-height.js.map +1 -1
  175. package/build/hooks/lock.js +3 -7
  176. package/build/hooks/lock.js.map +1 -1
  177. package/build/hooks/metadata-name.js +55 -0
  178. package/build/hooks/metadata-name.js.map +1 -0
  179. package/build/hooks/metadata.js +65 -0
  180. package/build/hooks/metadata.js.map +1 -0
  181. package/build/hooks/text-decoration.js +2 -1
  182. package/build/hooks/text-decoration.js.map +1 -1
  183. package/build/hooks/text-transform.js +2 -1
  184. package/build/hooks/text-transform.js.map +1 -1
  185. package/build/hooks/use-typography-props.js +51 -0
  186. package/build/hooks/use-typography-props.js.map +1 -0
  187. package/build/hooks/utils.js +3 -1
  188. package/build/hooks/utils.js.map +1 -1
  189. package/build/index.js +7 -0
  190. package/build/index.js.map +1 -1
  191. package/build/layouts/constrained.js +71 -22
  192. package/build/layouts/constrained.js.map +1 -1
  193. package/build/layouts/flow.js +30 -2
  194. package/build/layouts/flow.js.map +1 -1
  195. package/build/store/actions.js +65 -21
  196. package/build/store/actions.js.map +1 -1
  197. package/build/store/reducer.js +39 -18
  198. package/build/store/reducer.js.map +1 -1
  199. package/build/store/selectors.js +95 -9
  200. package/build/store/selectors.js.map +1 -1
  201. package/build/utils/parse-css-unit-to-px.js +1 -1
  202. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  203. package/build-module/components/alignment-control/ui.js +6 -5
  204. package/build-module/components/alignment-control/ui.js.map +1 -1
  205. package/build-module/components/block-actions/index.js +5 -8
  206. package/build-module/components/block-actions/index.js.map +1 -1
  207. package/build-module/components/block-alignment-control/ui.js +5 -5
  208. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  209. package/build-module/components/block-content-overlay/index.js +2 -4
  210. package/build-module/components/block-content-overlay/index.js.map +1 -1
  211. package/build-module/components/block-draggable/draggable-chip.js +2 -1
  212. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  213. package/build-module/components/block-edit/edit.js +1 -1
  214. package/build-module/components/block-edit/edit.js.map +1 -1
  215. package/build-module/components/block-inspector/index.js +127 -19
  216. package/build-module/components/block-inspector/index.js.map +1 -1
  217. package/build-module/components/block-list/block-list-compact.native.js +58 -0
  218. package/build-module/components/block-list/block-list-compact.native.js.map +1 -0
  219. package/build-module/components/block-list/block.js +41 -9
  220. package/build-module/components/block-list/block.js.map +1 -1
  221. package/build-module/components/block-list/index.js +4 -4
  222. package/build-module/components/block-list/index.js.map +1 -1
  223. package/build-module/components/block-list/use-block-props/index.js +13 -11
  224. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  225. package/build-module/components/block-list/use-block-props/use-block-class-names.js +3 -2
  226. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  227. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -9
  228. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  229. package/build-module/components/block-list/use-block-props/use-is-hovered.js +1 -2
  230. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  231. package/build-module/components/block-list/use-in-between-inserter.js +7 -12
  232. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  233. package/build-module/components/block-list-appender/index.js +20 -20
  234. package/build-module/components/block-list-appender/index.js.map +1 -1
  235. package/build-module/components/block-list-appender/index.native.js +1 -6
  236. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  237. package/build-module/components/block-lock/use-block-lock.js +3 -1
  238. package/build-module/components/block-lock/use-block-lock.js.map +1 -1
  239. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +20 -9
  240. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  241. package/build-module/components/block-mover/button.js +4 -5
  242. package/build-module/components/block-mover/button.js.map +1 -1
  243. package/build-module/components/block-mover/index.js +4 -5
  244. package/build-module/components/block-mover/index.js.map +1 -1
  245. package/build-module/components/block-mover/index.native.js +24 -7
  246. package/build-module/components/block-mover/index.native.js.map +1 -1
  247. package/build-module/components/block-popover/inbetween.js +59 -17
  248. package/build-module/components/block-popover/inbetween.js.map +1 -1
  249. package/build-module/components/block-popover/index.js +12 -9
  250. package/build-module/components/block-popover/index.js.map +1 -1
  251. package/build-module/components/block-preview/auto.js +4 -2
  252. package/build-module/components/block-preview/auto.js.map +1 -1
  253. package/build-module/components/block-settings-menu/block-settings-dropdown.js +3 -1
  254. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  255. package/build-module/components/block-settings-menu-controls/index.js +3 -1
  256. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  257. package/build-module/components/block-styles/preview-panel.js +6 -1
  258. package/build-module/components/block-styles/preview-panel.js.map +1 -1
  259. package/build-module/components/block-switcher/block-transformations-menu.js +115 -27
  260. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  261. package/build-module/components/block-toolbar/index.js +9 -8
  262. package/build-module/components/block-toolbar/index.js.map +1 -1
  263. package/build-module/components/block-tools/block-contextual-toolbar.js +3 -2
  264. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  265. package/build-module/components/block-tools/block-selection-button.js +12 -5
  266. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  267. package/build-module/components/block-tools/index.js +30 -15
  268. package/build-module/components/block-tools/index.js.map +1 -1
  269. package/build-module/components/block-tools/insertion-point.js +4 -9
  270. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  271. package/build-module/components/block-tools/selected-block-popover.js +17 -10
  272. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  273. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +119 -0
  274. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  275. package/build-module/components/block-tools/zoom-out-mode-inserters.js +59 -0
  276. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -0
  277. package/build-module/components/block-vertical-alignment-control/ui.js +5 -2
  278. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  279. package/build-module/components/colors-gradients/control.js +1 -0
  280. package/build-module/components/colors-gradients/control.js.map +1 -1
  281. package/build-module/components/colors-gradients/dropdown.js +1 -1
  282. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  283. package/build-module/components/iframe/index.js +32 -5
  284. package/build-module/components/iframe/index.js.map +1 -1
  285. package/build-module/components/inner-blocks/default-block-appender.js +1 -6
  286. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  287. package/build-module/components/inner-blocks/index.js +2 -2
  288. package/build-module/components/inner-blocks/index.js.map +1 -1
  289. package/build-module/components/inner-blocks/index.native.js +5 -2
  290. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  291. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +5 -5
  292. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  293. package/build-module/components/inner-blocks/use-nested-settings-update.js +1 -1
  294. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  295. package/build-module/components/inserter/index.js +3 -6
  296. package/build-module/components/inserter/index.js.map +1 -1
  297. package/build-module/components/inserter/library.js +14 -3
  298. package/build-module/components/inserter/library.js.map +1 -1
  299. package/build-module/components/inserter/menu.js +20 -8
  300. package/build-module/components/inserter/menu.js.map +1 -1
  301. package/build-module/components/inserter/preview-panel.js +1 -1
  302. package/build-module/components/inserter/preview-panel.js.map +1 -1
  303. package/build-module/components/inserter/tabs.js +11 -4
  304. package/build-module/components/inserter/tabs.js.map +1 -1
  305. package/build-module/components/link-control/link-preview.js +1 -1
  306. package/build-module/components/link-control/link-preview.js.map +1 -1
  307. package/build-module/components/link-control/search-input.js +6 -2
  308. package/build-module/components/link-control/search-input.js.map +1 -1
  309. package/build-module/components/link-control/search-item.js +37 -6
  310. package/build-module/components/link-control/search-item.js.map +1 -1
  311. package/build-module/components/list-view/block.js +23 -11
  312. package/build-module/components/list-view/block.js.map +1 -1
  313. package/build-module/components/list-view/branch.js +19 -3
  314. package/build-module/components/list-view/branch.js.map +1 -1
  315. package/build-module/components/list-view/index.js +8 -4
  316. package/build-module/components/list-view/index.js.map +1 -1
  317. package/build-module/components/list-view/use-block-selection.js +0 -1
  318. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  319. package/build-module/components/provider/use-block-sync.js +1 -6
  320. package/build-module/components/provider/use-block-sync.js.map +1 -1
  321. package/build-module/components/publish-date-time-picker/index.js +1 -1
  322. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  323. package/build-module/components/rich-text/index.js +37 -18
  324. package/build-module/components/rich-text/index.js.map +1 -1
  325. package/build-module/components/rich-text/index.native.js +11 -18
  326. package/build-module/components/rich-text/index.native.js.map +1 -1
  327. package/build-module/components/spacing-sizes-control/spacing-input-control.js +7 -2
  328. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  329. package/build-module/components/spacing-sizes-control/utils.js +30 -1
  330. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  331. package/build-module/components/text-decoration-control/index.js +25 -18
  332. package/build-module/components/text-decoration-control/index.js.map +1 -1
  333. package/build-module/components/text-transform-control/index.js +19 -15
  334. package/build-module/components/text-transform-control/index.js.map +1 -1
  335. package/build-module/components/tool-selector/index.js +6 -11
  336. package/build-module/components/tool-selector/index.js.map +1 -1
  337. package/build-module/components/url-popover/index.js +1 -1
  338. package/build-module/components/url-popover/index.js.map +1 -1
  339. package/build-module/components/use-block-drop-zone/index.js +7 -4
  340. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  341. package/build-module/components/use-moving-animation/index.js +9 -28
  342. package/build-module/components/use-moving-animation/index.js.map +1 -1
  343. package/build-module/components/writing-flow/index.js +2 -0
  344. package/build-module/components/writing-flow/index.js.map +1 -1
  345. package/build-module/components/writing-flow/use-select-all.js +7 -15
  346. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  347. package/build-module/hooks/align.js +16 -4
  348. package/build-module/hooks/align.js.map +1 -1
  349. package/build-module/hooks/anchor.js +3 -6
  350. package/build-module/hooks/anchor.js.map +1 -1
  351. package/build-module/hooks/color-panel.js +2 -1
  352. package/build-module/hooks/color-panel.js.map +1 -1
  353. package/build-module/hooks/content-lock-ui.js +128 -0
  354. package/build-module/hooks/content-lock-ui.js.map +1 -0
  355. package/build-module/hooks/dimensions.js +6 -6
  356. package/build-module/hooks/dimensions.js.map +1 -1
  357. package/build-module/hooks/duotone.js +6 -1
  358. package/build-module/hooks/duotone.js.map +1 -1
  359. package/build-module/hooks/font-appearance.js +2 -1
  360. package/build-module/hooks/font-appearance.js.map +1 -1
  361. package/build-module/hooks/font-family.js +3 -1
  362. package/build-module/hooks/font-family.js.map +1 -1
  363. package/build-module/hooks/font-size.js +3 -1
  364. package/build-module/hooks/font-size.js.map +1 -1
  365. package/build-module/hooks/gap.js +22 -6
  366. package/build-module/hooks/gap.js.map +1 -1
  367. package/build-module/hooks/index.js +4 -0
  368. package/build-module/hooks/index.js.map +1 -1
  369. package/build-module/hooks/layout.js +15 -11
  370. package/build-module/hooks/layout.js.map +1 -1
  371. package/build-module/hooks/letter-spacing.js +2 -1
  372. package/build-module/hooks/letter-spacing.js.map +1 -1
  373. package/build-module/hooks/line-height.js +2 -1
  374. package/build-module/hooks/line-height.js.map +1 -1
  375. package/build-module/hooks/lock.js +3 -6
  376. package/build-module/hooks/lock.js.map +1 -1
  377. package/build-module/hooks/metadata-name.js +45 -0
  378. package/build-module/hooks/metadata-name.js.map +1 -0
  379. package/build-module/hooks/metadata.js +50 -0
  380. package/build-module/hooks/metadata.js.map +1 -0
  381. package/build-module/hooks/text-decoration.js +2 -1
  382. package/build-module/hooks/text-decoration.js.map +1 -1
  383. package/build-module/hooks/text-transform.js +2 -1
  384. package/build-module/hooks/text-transform.js.map +1 -1
  385. package/build-module/hooks/use-typography-props.js +38 -0
  386. package/build-module/hooks/use-typography-props.js.map +1 -0
  387. package/build-module/hooks/utils.js +4 -2
  388. package/build-module/hooks/utils.js.map +1 -1
  389. package/build-module/index.js +1 -1
  390. package/build-module/index.js.map +1 -1
  391. package/build-module/layouts/constrained.js +74 -25
  392. package/build-module/layouts/constrained.js.map +1 -1
  393. package/build-module/layouts/flow.js +31 -3
  394. package/build-module/layouts/flow.js.map +1 -1
  395. package/build-module/store/actions.js +58 -20
  396. package/build-module/store/actions.js.map +1 -1
  397. package/build-module/store/reducer.js +37 -18
  398. package/build-module/store/reducer.js.map +1 -1
  399. package/build-module/store/selectors.js +80 -9
  400. package/build-module/store/selectors.js.map +1 -1
  401. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  402. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  403. package/build-style/style-rtl.css +137 -86
  404. package/build-style/style.css +137 -86
  405. package/package.json +28 -28
  406. package/src/components/alignment-control/test/__snapshots__/index.js.snap +137 -108
  407. package/src/components/alignment-control/test/index.js +124 -33
  408. package/src/components/alignment-control/ui.js +8 -3
  409. package/src/components/block-actions/index.js +9 -8
  410. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +108 -65
  411. package/src/components/block-alignment-control/test/index.js +95 -31
  412. package/src/components/block-alignment-control/ui.js +2 -2
  413. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +28 -26
  414. package/src/components/block-compare/test/block-view.js +3 -3
  415. package/src/components/block-content-overlay/index.js +2 -6
  416. package/src/components/block-content-overlay/style.scss +24 -3
  417. package/src/components/block-draggable/draggable-chip.js +4 -1
  418. package/src/components/block-edit/edit.js +5 -1
  419. package/src/components/block-edit/test/edit.js +23 -21
  420. package/src/components/block-icon/test/__snapshots__/index.js.snap +22 -0
  421. package/src/components/block-icon/test/index.js +31 -16
  422. package/src/components/block-inspector/index.js +126 -12
  423. package/src/components/block-inspector/style.scss +7 -1
  424. package/src/components/block-list/block-list-compact.native.js +62 -0
  425. package/src/components/block-list/block.js +53 -13
  426. package/src/components/block-list/index.js +4 -4
  427. package/src/components/block-list/style.scss +68 -18
  428. package/src/components/block-list/test/block-list-context.native.js +11 -13
  429. package/src/components/block-list/use-block-props/index.js +10 -10
  430. package/src/components/block-list/use-block-props/use-block-class-names.js +4 -1
  431. package/src/components/block-list/use-block-props/use-focus-first-element.js +4 -9
  432. package/src/components/block-list/use-block-props/use-is-hovered.js +2 -2
  433. package/src/components/block-list/use-in-between-inserter.js +11 -13
  434. package/src/components/block-list-appender/index.js +27 -18
  435. package/src/components/block-list-appender/index.native.js +3 -6
  436. package/src/components/block-lock/use-block-lock.js +2 -0
  437. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +15 -9
  438. package/src/components/block-mover/button.js +6 -5
  439. package/src/components/block-mover/index.js +8 -7
  440. package/src/components/block-mover/index.native.js +20 -13
  441. package/src/components/block-popover/inbetween.js +85 -21
  442. package/src/components/block-popover/index.js +25 -17
  443. package/src/components/block-popover/style.scss +3 -4
  444. package/src/components/block-preview/auto.js +4 -2
  445. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -0
  446. package/src/components/block-settings-menu-controls/README.md +9 -0
  447. package/src/components/block-settings-menu-controls/index.js +13 -2
  448. package/src/components/block-styles/preview-panel.js +3 -0
  449. package/src/components/block-switcher/block-transformations-menu.js +127 -33
  450. package/src/components/block-switcher/style.scss +4 -2
  451. package/src/components/block-switcher/test/index.js +1 -2
  452. package/src/components/block-title/test/index.js +28 -25
  453. package/src/components/block-toolbar/index.js +27 -17
  454. package/src/components/block-tools/block-contextual-toolbar.js +10 -3
  455. package/src/components/block-tools/block-selection-button.js +35 -16
  456. package/src/components/block-tools/index.js +40 -24
  457. package/src/components/block-tools/insertion-point.js +3 -7
  458. package/src/components/block-tools/selected-block-popover.js +16 -7
  459. package/src/components/block-tools/style.scss +5 -0
  460. package/src/components/block-tools/use-block-toolbar-popover-props.js +136 -0
  461. package/src/components/block-tools/zoom-out-mode-inserters.js +57 -0
  462. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +91 -51
  463. package/src/components/block-vertical-alignment-control/test/index.js +92 -23
  464. package/src/components/block-vertical-alignment-control/ui.js +3 -2
  465. package/src/components/button-block-appender/style.scss +23 -0
  466. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -12
  467. package/src/components/colors/test/with-colors.js +37 -12
  468. package/src/components/colors-gradients/control.js +1 -0
  469. package/src/components/colors-gradients/dropdown.js +1 -1
  470. package/src/components/contrast-checker/test/index.js +135 -116
  471. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +39 -57
  472. package/src/components/default-block-appender/test/index.js +32 -18
  473. package/src/components/font-sizes/README.MD +9 -0
  474. package/src/components/iframe/index.js +64 -5
  475. package/src/components/inner-blocks/README.md +2 -1
  476. package/src/components/inner-blocks/default-block-appender.js +1 -6
  477. package/src/components/inner-blocks/index.js +3 -2
  478. package/src/components/inner-blocks/index.native.js +5 -1
  479. package/src/components/inner-blocks/use-inner-block-template-sync.js +9 -5
  480. package/src/components/inner-blocks/use-nested-settings-update.js +3 -1
  481. package/src/components/inserter/index.js +2 -8
  482. package/src/components/inserter/library.js +11 -5
  483. package/src/components/inserter/menu.js +42 -29
  484. package/src/components/inserter/preview-panel.js +1 -1
  485. package/src/components/inserter/stories/fixtures.js +44 -0
  486. package/src/components/inserter/stories/index.js +90 -0
  487. package/src/components/inserter/style.scss +21 -27
  488. package/src/components/inserter/tabs.js +8 -4
  489. package/src/components/link-control/link-preview.js +5 -3
  490. package/src/components/link-control/search-input.js +2 -2
  491. package/src/components/link-control/search-item.js +39 -7
  492. package/src/components/list-view/block.js +29 -10
  493. package/src/components/list-view/branch.js +27 -4
  494. package/src/components/list-view/index.js +8 -3
  495. package/src/components/list-view/use-block-selection.js +0 -1
  496. package/src/components/media-placeholder/test/index.js +2 -2
  497. package/src/components/media-replace-flow/README.md +1 -1
  498. package/src/components/provider/use-block-sync.js +3 -6
  499. package/src/components/publish-date-time-picker/index.js +1 -1
  500. package/src/components/rich-text/index.js +33 -35
  501. package/src/components/rich-text/index.native.js +8 -21
  502. package/src/components/spacing-sizes-control/spacing-input-control.js +5 -0
  503. package/src/components/spacing-sizes-control/test/utils.js +26 -0
  504. package/src/components/spacing-sizes-control/utils.js +36 -9
  505. package/src/components/text-decoration-control/index.js +41 -30
  506. package/src/components/text-decoration-control/stories/index.js +37 -0
  507. package/src/components/text-transform-control/index.js +27 -27
  508. package/src/components/text-transform-control/stories/index.js +37 -0
  509. package/src/components/tool-selector/index.js +9 -11
  510. package/src/components/url-input/test/button.js +145 -71
  511. package/src/components/url-popover/index.js +1 -1
  512. package/src/components/url-popover/test/__snapshots__/index.js.snap +108 -80
  513. package/src/components/url-popover/test/index.js +14 -12
  514. package/src/components/use-block-drop-zone/index.js +15 -4
  515. package/src/components/use-moving-animation/index.js +9 -24
  516. package/src/components/warning/test/__snapshots__/index.js.snap +11 -14
  517. package/src/components/warning/test/index.js +32 -29
  518. package/src/components/writing-flow/index.js +2 -0
  519. package/src/components/writing-flow/use-select-all.js +13 -18
  520. package/src/hooks/align.js +24 -15
  521. package/src/hooks/anchor.js +1 -6
  522. package/src/hooks/color-panel.js +2 -1
  523. package/src/hooks/content-lock-ui.js +161 -0
  524. package/src/hooks/dimensions.js +7 -8
  525. package/src/hooks/duotone.js +13 -1
  526. package/src/hooks/font-appearance.js +1 -0
  527. package/src/hooks/font-family.js +2 -0
  528. package/src/hooks/font-size.js +2 -0
  529. package/src/hooks/gap.js +43 -25
  530. package/src/hooks/index.js +4 -0
  531. package/src/hooks/layout.js +27 -21
  532. package/src/hooks/layout.scss +7 -1
  533. package/src/hooks/letter-spacing.js +1 -0
  534. package/src/hooks/line-height.js +1 -0
  535. package/src/hooks/lock.js +1 -6
  536. package/src/hooks/metadata-name.js +48 -0
  537. package/src/hooks/metadata.js +64 -0
  538. package/src/hooks/test/gap.js +16 -22
  539. package/src/hooks/test/use-typography-props.js +28 -0
  540. package/src/hooks/text-decoration.js +1 -0
  541. package/src/hooks/text-transform.js +1 -0
  542. package/src/hooks/typography.scss +0 -6
  543. package/src/hooks/use-typography-props.js +41 -0
  544. package/src/hooks/utils.js +2 -11
  545. package/src/index.js +1 -0
  546. package/src/layouts/constrained.js +85 -33
  547. package/src/layouts/flow.js +21 -10
  548. package/src/store/actions.js +45 -4
  549. package/src/store/reducer.js +33 -21
  550. package/src/store/selectors.js +98 -19
  551. package/src/store/test/reducer.js +8 -5
  552. package/src/style.scss +0 -2
  553. package/src/utils/parse-css-unit-to-px.js +1 -1
  554. package/src/components/colors/test/__snapshots__/with-colors.js.snap +0 -23
  555. package/src/components/text-decoration-control/style.scss +0 -18
  556. package/src/components/text-transform-control/style.scss +0 -18
@@ -0,0 +1,136 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRefEffect } from '@wordpress/compose';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { useCallback, useLayoutEffect, useState } from '@wordpress/element';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { store as blockEditorStore } from '../../store';
12
+ import { __unstableUseBlockElement as useBlockElement } from '../block-list/use-block-props/use-block-refs';
13
+
14
+ // By default the toolbar sets the `shift` prop. If the user scrolls the page
15
+ // down the toolbar will stay on screen by adopting a sticky position at the
16
+ // top of the viewport.
17
+ const DEFAULT_PROPS = {
18
+ flip: false,
19
+ shift: true,
20
+ };
21
+
22
+ // When there isn't enough height between the top of the block and the editor
23
+ // canvas, the `shift` prop is set to `false`, as it will cause the block to be
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.
27
+ const RESTRICTED_HEIGHT_PROPS = {
28
+ flip: true,
29
+ shift: false,
30
+ };
31
+
32
+ /**
33
+ * Get the popover props for the block toolbar, determined by the space at the top of the canvas and the toolbar height.
34
+ *
35
+ * @param {Element} contentElement The DOM element that represents the editor content or canvas.
36
+ * @param {Element} selectedBlockElement The outer DOM element of the first selected block.
37
+ * @param {number} toolbarHeight The height of the toolbar in pixels.
38
+ *
39
+ * @return {Object} The popover props used to determine the position of the toolbar.
40
+ */
41
+ function getProps( contentElement, selectedBlockElement, toolbarHeight ) {
42
+ if ( ! contentElement || ! selectedBlockElement ) {
43
+ return DEFAULT_PROPS;
44
+ }
45
+
46
+ const blockRect = selectedBlockElement.getBoundingClientRect();
47
+ const contentRect = contentElement.getBoundingClientRect();
48
+
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 ) {
59
+ return DEFAULT_PROPS;
60
+ }
61
+
62
+ return RESTRICTED_HEIGHT_PROPS;
63
+ }
64
+
65
+ /**
66
+ * Determines the desired popover positioning behavior, returning a set of appropriate props.
67
+ *
68
+ * @param {Object} elements
69
+ * @param {Element} elements.contentElement The DOM element that represents the editor content or canvas.
70
+ * @param {string} elements.clientId The clientId of the first selected block.
71
+ *
72
+ * @return {Object} The popover props used to determine the position of the toolbar.
73
+ */
74
+ export default function useBlockToolbarPopoverProps( {
75
+ contentElement,
76
+ clientId,
77
+ } ) {
78
+ const selectedBlockElement = useBlockElement( clientId );
79
+ const [ toolbarHeight, setToolbarHeight ] = useState( 0 );
80
+ const [ props, setProps ] = useState( () =>
81
+ getProps( contentElement, selectedBlockElement, toolbarHeight )
82
+ );
83
+ const blockIndex = useSelect(
84
+ ( select ) => select( blockEditorStore ).getBlockIndex( clientId ),
85
+ [ clientId ]
86
+ );
87
+
88
+ const popoverRef = useRefEffect( ( popoverNode ) => {
89
+ setToolbarHeight( popoverNode.offsetHeight );
90
+ }, [] );
91
+
92
+ const updateProps = useCallback(
93
+ () =>
94
+ setProps(
95
+ getProps( contentElement, selectedBlockElement, toolbarHeight )
96
+ ),
97
+ [ contentElement, selectedBlockElement, toolbarHeight ]
98
+ );
99
+
100
+ // Update props when the block is moved. This also ensures the props are
101
+ // correct on initial mount, and when the selected block or content element
102
+ // changes (since the callback ref will update).
103
+ useLayoutEffect( updateProps, [ blockIndex, updateProps ] );
104
+
105
+ // Update props when the viewport is resized or the block is resized.
106
+ useLayoutEffect( () => {
107
+ if ( ! contentElement || ! selectedBlockElement ) {
108
+ return;
109
+ }
110
+
111
+ // Update the toolbar props on viewport resize.
112
+ const contentView = contentElement?.ownerDocument?.defaultView;
113
+ contentView?.addEventHandler?.( 'resize', updateProps );
114
+
115
+ // Update the toolbar props on block resize.
116
+ let resizeObserver;
117
+ const blockView = selectedBlockElement?.ownerDocument?.defaultView;
118
+ if ( blockView.ResizeObserver ) {
119
+ resizeObserver = new blockView.ResizeObserver( updateProps );
120
+ resizeObserver.observe( selectedBlockElement );
121
+ }
122
+
123
+ return () => {
124
+ contentView?.removeEventHandler?.( 'resize', updateProps );
125
+
126
+ if ( resizeObserver ) {
127
+ resizeObserver.disconnect();
128
+ }
129
+ };
130
+ }, [ updateProps, contentElement, selectedBlockElement ] );
131
+
132
+ return {
133
+ ...props,
134
+ ref: popoverRef,
135
+ };
136
+ }
@@ -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;
@@ -1,69 +1,109 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`BlockVerticalAlignmentUI should match snapshot 1`] = `
4
- <ToolbarGroup
5
- controls={
6
- Array [
7
- Object {
8
- "icon": <SVG
3
+ exports[`BlockVerticalAlignmentUI should match snapshot when controls are hidden 1`] = `
4
+ <div>
5
+ <div
6
+ class="components-dropdown components-dropdown-menu components-toolbar"
7
+ tabindex="-1"
8
+ >
9
+ <button
10
+ aria-expanded="false"
11
+ aria-haspopup="true"
12
+ aria-label="Change vertical alignment"
13
+ class="components-button components-dropdown-menu__toggle has-icon"
14
+ data-toolbar-item="true"
15
+ type="button"
16
+ >
17
+ <svg
18
+ aria-hidden="true"
19
+ focusable="false"
20
+ height="24"
21
+ viewBox="0 0 24 24"
22
+ width="24"
23
+ xmlns="http://www.w3.org/2000/svg"
24
+ >
25
+ <path
26
+ d="M9 20h6V9H9v11zM4 4v1.5h16V4H4z"
27
+ />
28
+ </svg>
29
+ </button>
30
+ </div>
31
+ </div>
32
+ `;
33
+
34
+ exports[`BlockVerticalAlignmentUI should match snapshot when controls are visible 1`] = `
35
+ <div>
36
+ <div
37
+ class="components-toolbar"
38
+ icon="[object Object]"
39
+ label="Change vertical alignment"
40
+ >
41
+ <div>
42
+ <button
43
+ aria-label="Align top"
44
+ aria-pressed="true"
45
+ class="components-button components-toolbar__control is-pressed has-icon"
46
+ data-toolbar-item="true"
47
+ type="button"
48
+ >
49
+ <svg
50
+ aria-hidden="true"
51
+ focusable="false"
52
+ height="24"
9
53
  viewBox="0 0 24 24"
54
+ width="24"
10
55
  xmlns="http://www.w3.org/2000/svg"
11
56
  >
12
- <Path
57
+ <path
13
58
  d="M9 20h6V9H9v11zM4 4v1.5h16V4H4z"
14
59
  />
15
- </SVG>,
16
- "isActive": true,
17
- "onClick": [Function],
18
- "role": "menuitemradio",
19
- "title": "Align top",
20
- },
21
- Object {
22
- "icon": <SVG
60
+ </svg>
61
+ </button>
62
+ </div>
63
+ <div>
64
+ <button
65
+ aria-label="Align middle"
66
+ aria-pressed="false"
67
+ class="components-button components-toolbar__control has-icon"
68
+ data-toolbar-item="true"
69
+ type="button"
70
+ >
71
+ <svg
72
+ aria-hidden="true"
73
+ focusable="false"
74
+ height="24"
23
75
  viewBox="0 0 24 24"
76
+ width="24"
24
77
  xmlns="http://www.w3.org/2000/svg"
25
78
  >
26
- <Path
79
+ <path
27
80
  d="M20 11h-5V4H9v7H4v1.5h5V20h6v-7.5h5z"
28
81
  />
29
- </SVG>,
30
- "isActive": false,
31
- "onClick": [Function],
32
- "role": "menuitemradio",
33
- "title": "Align middle",
34
- },
35
- Object {
36
- "icon": <SVG
82
+ </svg>
83
+ </button>
84
+ </div>
85
+ <div>
86
+ <button
87
+ aria-label="Align bottom"
88
+ aria-pressed="false"
89
+ class="components-button components-toolbar__control has-icon"
90
+ data-toolbar-item="true"
91
+ type="button"
92
+ >
93
+ <svg
94
+ aria-hidden="true"
95
+ focusable="false"
96
+ height="24"
37
97
  viewBox="0 0 24 24"
98
+ width="24"
38
99
  xmlns="http://www.w3.org/2000/svg"
39
100
  >
40
- <Path
101
+ <path
41
102
  d="M15 4H9v11h6V4zM4 18.5V20h16v-1.5H4z"
42
103
  />
43
- </SVG>,
44
- "isActive": false,
45
- "onClick": [Function],
46
- "role": "menuitemradio",
47
- "title": "Align bottom",
48
- },
49
- ]
50
- }
51
- icon={
52
- <SVG
53
- viewBox="0 0 24 24"
54
- xmlns="http://www.w3.org/2000/svg"
55
- >
56
- <Path
57
- d="M9 20h6V9H9v11zM4 4v1.5h16V4H4z"
58
- />
59
- </SVG>
60
- }
61
- isCollapsed={true}
62
- label="Change vertical alignment"
63
- popoverProps={
64
- Object {
65
- "isAlternate": true,
66
- }
67
- }
68
- />
104
+ </svg>
105
+ </button>
106
+ </div>
107
+ </div>
108
+ </div>
69
109
  `;
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -12,44 +13,112 @@ describe( 'BlockVerticalAlignmentUI', () => {
12
13
  const alignment = 'top';
13
14
  const onChange = jest.fn();
14
15
 
15
- const wrapper = shallow(
16
- <BlockVerticalAlignmentUI
17
- isToolbar
18
- value={ alignment }
19
- onChange={ onChange }
20
- />
21
- );
22
-
23
- const controls = wrapper.props().controls;
24
-
25
16
  afterEach( () => {
26
17
  onChange.mockClear();
27
18
  } );
28
19
 
29
- it( 'should match snapshot', () => {
30
- expect( wrapper ).toMatchSnapshot();
20
+ test( 'should match snapshot when controls are hidden', () => {
21
+ const { container } = render(
22
+ <BlockVerticalAlignmentUI
23
+ isToolbar
24
+ value={ alignment }
25
+ onChange={ onChange }
26
+ />
27
+ );
28
+ expect( container ).toMatchSnapshot();
29
+ } );
30
+
31
+ test( 'should match snapshot when controls are visible', () => {
32
+ const { container } = render(
33
+ <BlockVerticalAlignmentUI
34
+ isToolbar
35
+ value={ alignment }
36
+ onChange={ onChange }
37
+ isCollapsed={ false }
38
+ />
39
+ );
40
+ expect( container ).toMatchSnapshot();
31
41
  } );
32
42
 
33
- it( 'should call onChange with undefined, when the control is already active', () => {
34
- const activeControl = controls.find( ( { title } ) =>
35
- title.toLowerCase().includes( alignment )
43
+ test( 'should expand controls when toggled', async () => {
44
+ const user = userEvent.setup( {
45
+ advanceTimers: jest.advanceTimersByTime,
46
+ } );
47
+
48
+ render(
49
+ <BlockVerticalAlignmentUI
50
+ isToolbar
51
+ value={ alignment }
52
+ onChange={ onChange }
53
+ />
54
+ );
55
+
56
+ expect(
57
+ screen.queryByRole( 'menuitemradio', {
58
+ name: /^Align \w+$/,
59
+ } )
60
+ ).not.toBeInTheDocument();
61
+
62
+ await user.click(
63
+ screen.getByRole( 'button', {
64
+ name: 'Change vertical alignment',
65
+ } )
36
66
  );
37
- activeControl.onClick();
38
67
 
39
- expect( activeControl.isActive ).toBe( true );
68
+ expect(
69
+ screen.getAllByRole( 'menuitemradio', {
70
+ name: /^Align \w+$/,
71
+ } )
72
+ ).toHaveLength( 3 );
73
+ } );
74
+
75
+ it( 'should call onChange with undefined, when the control is already active', async () => {
76
+ const user = userEvent.setup( {
77
+ advanceTimers: jest.advanceTimersByTime,
78
+ } );
79
+
80
+ render(
81
+ <BlockVerticalAlignmentUI
82
+ isToolbar
83
+ value={ alignment }
84
+ onChange={ onChange }
85
+ isCollapsed={ false }
86
+ />
87
+ );
88
+
89
+ const activeControl = screen.getByRole( 'button', {
90
+ name: `Align ${ alignment }`,
91
+ pressed: true,
92
+ } );
93
+
94
+ await user.click( activeControl );
95
+
40
96
  expect( onChange ).toHaveBeenCalledTimes( 1 );
41
97
  expect( onChange ).toHaveBeenCalledWith( undefined );
42
98
  } );
43
99
 
44
- it( 'should call onChange with alignment value when the control is inactive', () => {
100
+ it( 'should call onChange with alignment value when the control is inactive', async () => {
45
101
  // note "middle" alias for "center"
46
- const inactiveCenterControl = controls.find( ( { title } ) =>
47
- title.toLowerCase().includes( 'middle' )
102
+ const user = userEvent.setup( {
103
+ advanceTimers: jest.advanceTimersByTime,
104
+ } );
105
+
106
+ render(
107
+ <BlockVerticalAlignmentUI
108
+ isToolbar
109
+ value={ alignment }
110
+ onChange={ onChange }
111
+ isCollapsed={ false }
112
+ />
48
113
  );
49
114
 
50
- inactiveCenterControl.onClick();
115
+ const inactiveControl = screen.getByRole( 'button', {
116
+ name: 'Align middle',
117
+ pressed: false,
118
+ } );
119
+
120
+ await user.click( inactiveControl );
51
121
 
52
- expect( inactiveCenterControl.isActive ).toBe( false );
53
122
  expect( onChange ).toHaveBeenCalledTimes( 1 );
54
123
  expect( onChange ).toHaveBeenCalledWith( 'center' );
55
124
  } );
@@ -47,11 +47,12 @@ function BlockVerticalAlignmentUI( {
47
47
  BLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];
48
48
 
49
49
  const UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;
50
- const extraProps = isToolbar ? { isCollapsed } : {};
50
+ const extraProps = isToolbar
51
+ ? { isCollapsed }
52
+ : { popoverProps: { POPOVER_PROPS } };
51
53
 
52
54
  return (
53
55
  <UIComponent
54
- popoverProps={ POPOVER_PROPS }
55
56
  icon={
56
57
  activeAlignment
57
58
  ? activeAlignment.icon
@@ -31,3 +31,26 @@
31
31
  color: $black;
32
32
  }
33
33
  }
34
+
35
+ // When the appender shows up in empty container blocks, such as Group and Columns, add an extra click state.
36
+ .block-list-appender:only-child {
37
+ .is-layout-constrained.block-editor-block-list__block:not(.is-selected) > &,
38
+ .is-layout-flow.block-editor-block-list__block:not(.is-selected) > & {
39
+ pointer-events: none;
40
+
41
+ &::after {
42
+ content: "";
43
+ position: absolute;
44
+ top: 0;
45
+ right: 0;
46
+ bottom: 0;
47
+ left: 0;
48
+ pointer-events: none;
49
+ @include placeholder-style();
50
+ }
51
+
52
+ .block-editor-inserter {
53
+ visibility: hidden;
54
+ }
55
+ }
56
+ }
@@ -29,15 +29,12 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
29
29
  -webkit-flex-direction: column;
30
30
  -ms-flex-direction: column;
31
31
  flex-direction: column;
32
+ gap: calc(4px * 1);
32
33
  -webkit-box-pack: justify;
33
34
  -webkit-justify-content: space-between;
34
35
  justify-content: space-between;
35
36
  }
36
37
 
37
- .emotion-4>*+*:not( marquee ) {
38
- margin-top: calc(4px * 1);
39
- }
40
-
41
38
  .emotion-4>* {
42
39
  min-height: 0;
43
40
  }
@@ -64,15 +61,12 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
64
61
  -webkit-flex-direction: column;
65
62
  -ms-flex-direction: column;
66
63
  flex-direction: column;
64
+ gap: calc(4px * 3);
67
65
  -webkit-box-pack: justify;
68
66
  -webkit-justify-content: space-between;
69
67
  justify-content: space-between;
70
68
  }
71
69
 
72
- .emotion-8>*+*:not( marquee ) {
73
- margin-top: calc(4px * 3);
74
- }
75
-
76
70
  .emotion-8>* {
77
71
  min-height: 0;
78
72
  }
@@ -89,16 +83,13 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
89
83
  -webkit-flex-direction: row;
90
84
  -ms-flex-direction: row;
91
85
  flex-direction: row;
86
+ gap: calc(4px * 2);
92
87
  -webkit-box-pack: justify;
93
88
  -webkit-justify-content: space-between;
94
89
  justify-content: space-between;
95
90
  width: 100%;
96
91
  }
97
92
 
98
- .emotion-10>*+*:not( marquee ) {
99
- margin-left: calc(4px * 2);
100
- }
101
-
102
93
  .emotion-10>* {
103
94
  min-width: 0;
104
95
  }
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow, mount } from 'enzyme';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -13,18 +14,37 @@ describe( 'createCustomColorsHOC', () => {
13
14
  const withCustomColors = createCustomColorsHOC( [
14
15
  { name: 'Red', slug: 'red', color: 'ff0000' },
15
16
  ] );
16
- const EnhancedComponent = withCustomColors( 'backgroundColor' )( () => (
17
- <div />
18
- ) );
17
+ const BaseComponent = jest.fn( () => <div /> );
18
+ const EnhancedComponent =
19
+ withCustomColors( 'backgroundColor' )( BaseComponent );
19
20
 
20
- const wrapper = shallow(
21
+ render(
21
22
  <EnhancedComponent attributes={ { backgroundColor: null } } />
22
23
  );
23
24
 
24
- expect( wrapper.dive() ).toMatchSnapshot();
25
+ expect( BaseComponent ).toHaveBeenCalledWith(
26
+ expect.objectContaining( {
27
+ attributes: {
28
+ backgroundColor: null,
29
+ },
30
+ backgroundColor: {
31
+ class: undefined,
32
+ color: undefined,
33
+ },
34
+ colorUtils: {
35
+ getMostReadableColor: expect.any( Function ),
36
+ },
37
+ colors: undefined,
38
+ setBackgroundColor: expect.any( Function ),
39
+ } ),
40
+ expect.anything()
41
+ );
25
42
  } );
26
43
 
27
- it( 'setting the color to a value in the provided custom color array updated the backgroundColor attribute', () => {
44
+ it( 'setting the color to a value in the provided custom color array updated the backgroundColor attribute', async () => {
45
+ const user = userEvent.setup( {
46
+ advanceTimers: jest.advanceTimersByTime,
47
+ } );
28
48
  const withCustomColors = createCustomColorsHOC( [
29
49
  { name: 'Red', slug: 'red', color: 'ff0000' },
30
50
  ] );
@@ -38,21 +58,25 @@ describe( 'createCustomColorsHOC', () => {
38
58
 
39
59
  const setAttributes = jest.fn();
40
60
 
41
- const wrapper = mount(
61
+ render(
42
62
  <EnhancedComponent
43
63
  attributes={ { backgroundColor: null } }
44
64
  setAttributes={ setAttributes }
45
65
  />
46
66
  );
47
67
 
48
- wrapper.find( 'button' ).simulate( 'click' );
68
+ await user.click( screen.getByRole( 'button' ) );
69
+
49
70
  expect( setAttributes ).toHaveBeenCalledWith( {
50
71
  backgroundColor: 'red',
51
72
  customBackgroundColor: undefined,
52
73
  } );
53
74
  } );
54
75
 
55
- it( 'setting the color to a value not in the provided custom color array updates customBackgroundColor attribute', () => {
76
+ it( 'setting the color to a value not in the provided custom color array updates customBackgroundColor attribute', async () => {
77
+ const user = userEvent.setup( {
78
+ advanceTimers: jest.advanceTimersByTime,
79
+ } );
56
80
  const withCustomColors = createCustomColorsHOC( [
57
81
  { name: 'Red', slug: 'red', color: 'ff0000' },
58
82
  ] );
@@ -66,14 +90,15 @@ describe( 'createCustomColorsHOC', () => {
66
90
 
67
91
  const setAttributes = jest.fn();
68
92
 
69
- const wrapper = mount(
93
+ render(
70
94
  <EnhancedComponent
71
95
  attributes={ { backgroundColor: null } }
72
96
  setAttributes={ setAttributes }
73
97
  />
74
98
  );
75
99
 
76
- wrapper.find( 'button' ).simulate( 'click' );
100
+ await user.click( screen.getByRole( 'button' ) );
101
+
77
102
  expect( setAttributes ).toHaveBeenCalledWith( {
78
103
  backgroundColor: undefined,
79
104
  customBackgroundColor: '000000',