@wordpress/block-editor 12.20.0 → 12.22.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 (558) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-actions/index.js +47 -36
  3. package/build/components/block-actions/index.js.map +1 -1
  4. package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
  5. package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  6. package/build/components/block-edit/context.js +2 -1
  7. package/build/components/block-edit/context.js.map +1 -1
  8. package/build/components/block-edit/index.js +8 -3
  9. package/build/components/block-edit/index.js.map +1 -1
  10. package/build/components/block-heading-level-dropdown/index.js +5 -5
  11. package/build/components/block-heading-level-dropdown/index.js.map +1 -1
  12. package/build/components/block-heading-level-dropdown/index.native.js +5 -4
  13. package/build/components/block-heading-level-dropdown/index.native.js.map +1 -1
  14. package/build/components/block-inspector/index.js +5 -4
  15. package/build/components/block-inspector/index.js.map +1 -1
  16. package/build/components/block-list/block-crash-boundary.native.js +49 -0
  17. package/build/components/block-list/block-crash-boundary.native.js.map +1 -0
  18. package/build/components/block-list/block-crash-warning.native.js +24 -0
  19. package/build/components/block-list/block-crash-warning.native.js.map +1 -0
  20. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  21. package/build/components/block-list/block-list-item.native.js +1 -1
  22. package/build/components/block-list/block-list-item.native.js.map +1 -1
  23. package/build/components/block-list/block-outline.native.js +23 -7
  24. package/build/components/block-list/block-outline.native.js.map +1 -1
  25. package/build/components/block-list/block-selection-button.native.js.map +1 -1
  26. package/build/components/block-list/block.native.js +7 -5
  27. package/build/components/block-list/block.native.js.map +1 -1
  28. package/build/components/block-list/use-block-props/index.js +8 -1
  29. package/build/components/block-list/use-block-props/index.js.map +1 -1
  30. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  31. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  32. package/build/components/block-mover/index.native.js.map +1 -1
  33. package/build/components/block-popover/cover.js +68 -0
  34. package/build/components/block-popover/cover.js.map +1 -0
  35. package/build/components/block-popover/drop-zone.js +2 -3
  36. package/build/components/block-popover/drop-zone.js.map +1 -1
  37. package/build/components/block-popover/index.js +1 -19
  38. package/build/components/block-popover/index.js.map +1 -1
  39. package/build/components/block-preview/index.js +2 -1
  40. package/build/components/block-preview/index.js.map +1 -1
  41. package/build/components/block-removal-warning-modal/index.js +2 -4
  42. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  43. package/build/components/block-rename/modal.js.map +1 -1
  44. package/build/components/block-settings/container.native.js +2 -1
  45. package/build/components/block-settings/container.native.js.map +1 -1
  46. package/build/components/block-settings-menu/block-settings-dropdown.js +41 -39
  47. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  48. package/build/components/block-settings-menu-controls/index.js +1 -3
  49. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  50. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  51. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  52. package/build/components/block-toolbar/index.js +24 -11
  53. package/build/components/block-toolbar/index.js.map +1 -1
  54. package/build/components/block-toolbar/shuffle.js +89 -0
  55. package/build/components/block-toolbar/shuffle.js.map +1 -0
  56. package/build/components/block-toolbar/use-has-block-toolbar.js +43 -0
  57. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  58. package/build/components/block-tools/block-selection-button.js +5 -1
  59. package/build/components/block-tools/block-selection-button.js.map +1 -1
  60. package/build/components/block-tools/empty-block-inserter.js +2 -5
  61. package/build/components/block-tools/empty-block-inserter.js.map +1 -1
  62. package/build/components/block-tools/index.js +9 -26
  63. package/build/components/block-tools/index.js.map +1 -1
  64. package/build/components/block-tools/use-show-block-tools.js +60 -0
  65. package/build/components/block-tools/use-show-block-tools.js.map +1 -0
  66. package/build/components/caption/index.native.js.map +1 -1
  67. package/build/components/child-layout-control/index.js +108 -11
  68. package/build/components/child-layout-control/index.js.map +1 -1
  69. package/build/components/color-palette/control.js.map +1 -1
  70. package/build/components/colors-gradients/control.js +1 -1
  71. package/build/components/colors-gradients/control.js.map +1 -1
  72. package/build/components/convert-to-group-buttons/toolbar.js +11 -0
  73. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
  74. package/build/components/global-styles/border-panel.js +21 -8
  75. package/build/components/global-styles/border-panel.js.map +1 -1
  76. package/build/components/global-styles/color-panel.js +1 -1
  77. package/build/components/global-styles/color-panel.js.map +1 -1
  78. package/build/components/global-styles/dimensions-panel.js +8 -33
  79. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  80. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  81. package/build/components/global-styles/index.js +6 -0
  82. package/build/components/global-styles/index.js.map +1 -1
  83. package/build/components/global-styles/shadow-panel-components.js +80 -23
  84. package/build/components/global-styles/shadow-panel-components.js.map +1 -1
  85. package/build/components/global-styles/typography-utils.js +7 -5
  86. package/build/components/global-styles/typography-utils.js.map +1 -1
  87. package/build/components/global-styles/use-global-styles-output.js +16 -16
  88. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  89. package/build/components/global-styles/utils.js +2 -4
  90. package/build/components/global-styles/utils.js.map +1 -1
  91. package/build/components/grid-visualizer/grid-item-resizer.js +77 -0
  92. package/build/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  93. package/build/components/grid-visualizer/grid-visualizer.js +81 -0
  94. package/build/components/grid-visualizer/grid-visualizer.js.map +1 -0
  95. package/build/components/grid-visualizer/index.js +20 -0
  96. package/build/components/grid-visualizer/index.js.map +1 -0
  97. package/build/components/grid-visualizer/utils.js +10 -0
  98. package/build/components/grid-visualizer/utils.js.map +1 -0
  99. package/build/components/iframe/index.js +66 -17
  100. package/build/components/iframe/index.js.map +1 -1
  101. package/build/components/index.native.js +7 -0
  102. package/build/components/index.native.js.map +1 -1
  103. package/build/components/inner-blocks/use-nested-settings-update.js +8 -2
  104. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  105. package/build/components/inserter/block-patterns-explorer/index.js +3 -6
  106. package/build/components/inserter/block-patterns-explorer/index.js.map +1 -1
  107. package/build/components/inserter/block-patterns-explorer/pattern-list.js +3 -1
  108. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  109. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  110. package/build/components/inserter/menu.native.js.map +1 -1
  111. package/build/components/inserter/mobile-tab-navigation.js +2 -2
  112. package/build/components/inserter/mobile-tab-navigation.js.map +1 -1
  113. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  114. package/build/components/inspector-controls-tabs/advanced-controls-panel.native.js +36 -0
  115. package/build/components/inspector-controls-tabs/advanced-controls-panel.native.js.map +1 -0
  116. package/build/components/inspector-controls-tabs/index.js +1 -1
  117. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  118. package/build/components/inspector-controls-tabs/styles-tab.js +1 -1
  119. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  120. package/build/components/link-control/link-preview.js +4 -1
  121. package/build/components/link-control/link-preview.js.map +1 -1
  122. package/build/components/link-control/search-input.js.map +1 -1
  123. package/build/components/list-view/block-select-button.js +0 -2
  124. package/build/components/list-view/block-select-button.js.map +1 -1
  125. package/build/components/list-view/block.js +4 -11
  126. package/build/components/list-view/block.js.map +1 -1
  127. package/build/components/list-view/branch.js.map +1 -1
  128. package/build/components/list-view/drop-indicator.js.map +1 -1
  129. package/build/components/list-view/index.js.map +1 -1
  130. package/build/components/list-view/use-clipboard-handler.js +2 -1
  131. package/build/components/list-view/use-clipboard-handler.js.map +1 -1
  132. package/build/components/list-view/utils.js +5 -3
  133. package/build/components/list-view/utils.js.map +1 -1
  134. package/build/components/panel-color-settings/index.js.map +1 -1
  135. package/build/components/provider/index.js.map +1 -1
  136. package/build/components/resizable-box-popover/index.js +3 -5
  137. package/build/components/resizable-box-popover/index.js.map +1 -1
  138. package/build/components/responsive-block-control/index.js +1 -1
  139. package/build/components/responsive-block-control/index.js.map +1 -1
  140. package/build/components/rich-text/index.js +46 -26
  141. package/build/components/rich-text/index.js.map +1 -1
  142. package/build/components/rich-text/use-enter.js +3 -0
  143. package/build/components/rich-text/use-enter.js.map +1 -1
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  146. package/build/components/spacing-sizes-control/sides-dropdown/index.js.map +1 -1
  147. package/build/components/url-popover/index.js +3 -3
  148. package/build/components/url-popover/index.js.map +1 -1
  149. package/build/components/use-moving-animation/index.js +4 -0
  150. package/build/components/use-moving-animation/index.js.map +1 -1
  151. package/build/components/warning/index.native.js +9 -4
  152. package/build/components/warning/index.native.js.map +1 -1
  153. package/build/components/writing-flow/use-clipboard-handler.js +2 -1
  154. package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
  155. package/build/components/writing-flow/utils.js +23 -6
  156. package/build/components/writing-flow/utils.js.map +1 -1
  157. package/build/hooks/anchor.js +7 -8
  158. package/build/hooks/anchor.js.map +1 -1
  159. package/build/hooks/background.js +39 -2
  160. package/build/hooks/background.js.map +1 -1
  161. package/build/hooks/block-hooks.js +34 -8
  162. package/build/hooks/block-hooks.js.map +1 -1
  163. package/build/hooks/border.js +6 -4
  164. package/build/hooks/border.js.map +1 -1
  165. package/build/hooks/dimensions.js +3 -4
  166. package/build/hooks/dimensions.js.map +1 -1
  167. package/build/hooks/font-size.js +6 -7
  168. package/build/hooks/font-size.js.map +1 -1
  169. package/build/hooks/index.js +3 -2
  170. package/build/hooks/index.js.map +1 -1
  171. package/build/hooks/layout-child.js +67 -6
  172. package/build/hooks/layout-child.js.map +1 -1
  173. package/build/hooks/layout.js +32 -14
  174. package/build/hooks/layout.js.map +1 -1
  175. package/build/hooks/line-height.js.map +1 -1
  176. package/build/hooks/position.js +1 -1
  177. package/build/hooks/position.js.map +1 -1
  178. package/build/hooks/spacing-visualizer.js +115 -0
  179. package/build/hooks/spacing-visualizer.js.map +1 -0
  180. package/build/hooks/use-bindings-attributes.js +171 -48
  181. package/build/hooks/use-bindings-attributes.js.map +1 -1
  182. package/build/hooks/use-typography-props.js +1 -2
  183. package/build/hooks/use-typography-props.js.map +1 -1
  184. package/build/layouts/grid.js +6 -2
  185. package/build/layouts/grid.js.map +1 -1
  186. package/build/private-apis.js +7 -3
  187. package/build/private-apis.js.map +1 -1
  188. package/build/private-apis.native.js +3 -1
  189. package/build/private-apis.native.js.map +1 -1
  190. package/build/store/actions.js +42 -12
  191. package/build/store/actions.js.map +1 -1
  192. package/build/store/private-actions.js +29 -55
  193. package/build/store/private-actions.js.map +1 -1
  194. package/build/store/private-selectors.js +0 -8
  195. package/build/store/private-selectors.js.map +1 -1
  196. package/build/store/reducer.js +34 -46
  197. package/build/store/reducer.js.map +1 -1
  198. package/build/store/selectors.js +27 -15
  199. package/build/store/selectors.js.map +1 -1
  200. package/build-module/components/block-actions/index.js +47 -36
  201. package/build-module/components/block-actions/index.js.map +1 -1
  202. package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
  203. package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
  204. package/build-module/components/block-edit/context.js +1 -0
  205. package/build-module/components/block-edit/context.js.map +1 -1
  206. package/build-module/components/block-edit/index.js +9 -4
  207. package/build-module/components/block-edit/index.js.map +1 -1
  208. package/build-module/components/block-heading-level-dropdown/index.js +5 -5
  209. package/build-module/components/block-heading-level-dropdown/index.js.map +1 -1
  210. package/build-module/components/block-heading-level-dropdown/index.native.js +5 -4
  211. package/build-module/components/block-heading-level-dropdown/index.native.js.map +1 -1
  212. package/build-module/components/block-inspector/index.js +6 -5
  213. package/build-module/components/block-inspector/index.js.map +1 -1
  214. package/build-module/components/block-list/block-crash-boundary.native.js +42 -0
  215. package/build-module/components/block-list/block-crash-boundary.native.js.map +1 -0
  216. package/build-module/components/block-list/block-crash-warning.native.js +15 -0
  217. package/build-module/components/block-list/block-crash-warning.native.js.map +1 -0
  218. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  219. package/build-module/components/block-list/block-list-item.native.js +1 -1
  220. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  221. package/build-module/components/block-list/block-outline.native.js +23 -7
  222. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  223. package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
  224. package/build-module/components/block-list/block.native.js +7 -5
  225. package/build-module/components/block-list/block.native.js.map +1 -1
  226. package/build-module/components/block-list/use-block-props/index.js +9 -2
  227. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  228. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
  229. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  230. package/build-module/components/block-mover/index.native.js.map +1 -1
  231. package/build-module/components/block-popover/cover.js +60 -0
  232. package/build-module/components/block-popover/cover.js.map +1 -0
  233. package/build-module/components/block-popover/drop-zone.js +2 -3
  234. package/build-module/components/block-popover/drop-zone.js.map +1 -1
  235. package/build-module/components/block-popover/index.js +1 -19
  236. package/build-module/components/block-popover/index.js.map +1 -1
  237. package/build-module/components/block-preview/index.js +2 -1
  238. package/build-module/components/block-preview/index.js.map +1 -1
  239. package/build-module/components/block-removal-warning-modal/index.js +3 -5
  240. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  241. package/build-module/components/block-rename/modal.js.map +1 -1
  242. package/build-module/components/block-settings/container.native.js +3 -2
  243. package/build-module/components/block-settings/container.native.js.map +1 -1
  244. package/build-module/components/block-settings-menu/block-settings-dropdown.js +42 -40
  245. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  246. package/build-module/components/block-settings-menu-controls/index.js +1 -3
  247. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  248. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  249. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  250. package/build-module/components/block-toolbar/index.js +24 -12
  251. package/build-module/components/block-toolbar/index.js.map +1 -1
  252. package/build-module/components/block-toolbar/shuffle.js +82 -0
  253. package/build-module/components/block-toolbar/shuffle.js.map +1 -0
  254. package/build-module/components/block-toolbar/use-has-block-toolbar.js +36 -0
  255. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -0
  256. package/build-module/components/block-tools/block-selection-button.js +5 -1
  257. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  258. package/build-module/components/block-tools/empty-block-inserter.js +2 -5
  259. package/build-module/components/block-tools/empty-block-inserter.js.map +1 -1
  260. package/build-module/components/block-tools/index.js +9 -26
  261. package/build-module/components/block-tools/index.js.map +1 -1
  262. package/build-module/components/block-tools/use-show-block-tools.js +54 -0
  263. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -0
  264. package/build-module/components/caption/index.native.js.map +1 -1
  265. package/build-module/components/child-layout-control/index.js +109 -12
  266. package/build-module/components/child-layout-control/index.js.map +1 -1
  267. package/build-module/components/color-palette/control.js.map +1 -1
  268. package/build-module/components/colors-gradients/control.js +1 -1
  269. package/build-module/components/colors-gradients/control.js.map +1 -1
  270. package/build-module/components/convert-to-group-buttons/toolbar.js +12 -1
  271. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
  272. package/build-module/components/global-styles/border-panel.js +22 -10
  273. package/build-module/components/global-styles/border-panel.js.map +1 -1
  274. package/build-module/components/global-styles/color-panel.js +1 -1
  275. package/build-module/components/global-styles/color-panel.js.map +1 -1
  276. package/build-module/components/global-styles/dimensions-panel.js +9 -34
  277. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  278. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  279. package/build-module/components/global-styles/index.js +1 -1
  280. package/build-module/components/global-styles/index.js.map +1 -1
  281. package/build-module/components/global-styles/shadow-panel-components.js +82 -24
  282. package/build-module/components/global-styles/shadow-panel-components.js.map +1 -1
  283. package/build-module/components/global-styles/typography-utils.js +7 -5
  284. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  285. package/build-module/components/global-styles/use-global-styles-output.js +17 -17
  286. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  287. package/build-module/components/global-styles/utils.js +2 -4
  288. package/build-module/components/global-styles/utils.js.map +1 -1
  289. package/build-module/components/grid-visualizer/grid-item-resizer.js +69 -0
  290. package/build-module/components/grid-visualizer/grid-item-resizer.js.map +1 -0
  291. package/build-module/components/grid-visualizer/grid-visualizer.js +73 -0
  292. package/build-module/components/grid-visualizer/grid-visualizer.js.map +1 -0
  293. package/build-module/components/grid-visualizer/index.js +3 -0
  294. package/build-module/components/grid-visualizer/index.js.map +1 -0
  295. package/build-module/components/grid-visualizer/utils.js +4 -0
  296. package/build-module/components/grid-visualizer/utils.js.map +1 -0
  297. package/build-module/components/iframe/index.js +66 -17
  298. package/build-module/components/iframe/index.js.map +1 -1
  299. package/build-module/components/index.native.js +1 -1
  300. package/build-module/components/index.native.js.map +1 -1
  301. package/build-module/components/inner-blocks/use-nested-settings-update.js +8 -2
  302. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  303. package/build-module/components/inserter/block-patterns-explorer/index.js +3 -6
  304. package/build-module/components/inserter/block-patterns-explorer/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +3 -1
  306. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  307. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  308. package/build-module/components/inserter/menu.native.js.map +1 -1
  309. package/build-module/components/inserter/mobile-tab-navigation.js +2 -2
  310. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -1
  311. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  312. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.native.js +28 -0
  313. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.native.js.map +1 -0
  314. package/build-module/components/inspector-controls-tabs/index.js +1 -1
  315. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  316. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -2
  317. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  318. package/build-module/components/link-control/link-preview.js +5 -2
  319. package/build-module/components/link-control/link-preview.js.map +1 -1
  320. package/build-module/components/link-control/search-input.js.map +1 -1
  321. package/build-module/components/list-view/block-select-button.js +0 -2
  322. package/build-module/components/list-view/block-select-button.js.map +1 -1
  323. package/build-module/components/list-view/block.js +6 -13
  324. package/build-module/components/list-view/block.js.map +1 -1
  325. package/build-module/components/list-view/branch.js.map +1 -1
  326. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  327. package/build-module/components/list-view/index.js.map +1 -1
  328. package/build-module/components/list-view/use-clipboard-handler.js +3 -2
  329. package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
  330. package/build-module/components/list-view/utils.js +2 -1
  331. package/build-module/components/list-view/utils.js.map +1 -1
  332. package/build-module/components/panel-color-settings/index.js.map +1 -1
  333. package/build-module/components/provider/index.js.map +1 -1
  334. package/build-module/components/resizable-box-popover/index.js +3 -5
  335. package/build-module/components/resizable-box-popover/index.js.map +1 -1
  336. package/build-module/components/responsive-block-control/index.js +1 -1
  337. package/build-module/components/responsive-block-control/index.js.map +1 -1
  338. package/build-module/components/rich-text/index.js +47 -28
  339. package/build-module/components/rich-text/index.js.map +1 -1
  340. package/build-module/components/rich-text/use-enter.js +3 -0
  341. package/build-module/components/rich-text/use-enter.js.map +1 -1
  342. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  343. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  344. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -3
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/components/use-moving-animation/index.js +4 -0
  348. package/build-module/components/use-moving-animation/index.js.map +1 -1
  349. package/build-module/components/warning/index.native.js +9 -4
  350. package/build-module/components/warning/index.native.js.map +1 -1
  351. package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
  352. package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
  353. package/build-module/components/writing-flow/utils.js +22 -7
  354. package/build-module/components/writing-flow/utils.js.map +1 -1
  355. package/build-module/hooks/anchor.js +8 -9
  356. package/build-module/hooks/anchor.js.map +1 -1
  357. package/build-module/hooks/background.js +38 -1
  358. package/build-module/hooks/background.js.map +1 -1
  359. package/build-module/hooks/block-hooks.js +34 -8
  360. package/build-module/hooks/block-hooks.js.map +1 -1
  361. package/build-module/hooks/border.js +7 -5
  362. package/build-module/hooks/border.js.map +1 -1
  363. package/build-module/hooks/dimensions.js +1 -2
  364. package/build-module/hooks/dimensions.js.map +1 -1
  365. package/build-module/hooks/font-size.js +7 -8
  366. package/build-module/hooks/font-size.js.map +1 -1
  367. package/build-module/hooks/index.js +3 -2
  368. package/build-module/hooks/index.js.map +1 -1
  369. package/build-module/hooks/layout-child.js +67 -6
  370. package/build-module/hooks/layout-child.js.map +1 -1
  371. package/build-module/hooks/layout.js +32 -14
  372. package/build-module/hooks/layout.js.map +1 -1
  373. package/build-module/hooks/line-height.js.map +1 -1
  374. package/build-module/hooks/position.js +1 -1
  375. package/build-module/hooks/position.js.map +1 -1
  376. package/build-module/hooks/spacing-visualizer.js +106 -0
  377. package/build-module/hooks/spacing-visualizer.js.map +1 -0
  378. package/build-module/hooks/use-bindings-attributes.js +172 -49
  379. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  380. package/build-module/hooks/use-typography-props.js +2 -3
  381. package/build-module/hooks/use-typography-props.js.map +1 -1
  382. package/build-module/layouts/grid.js +6 -2
  383. package/build-module/layouts/grid.js.map +1 -1
  384. package/build-module/private-apis.js +7 -3
  385. package/build-module/private-apis.js.map +1 -1
  386. package/build-module/private-apis.native.js +3 -1
  387. package/build-module/private-apis.native.js.map +1 -1
  388. package/build-module/store/actions.js +42 -12
  389. package/build-module/store/actions.js.map +1 -1
  390. package/build-module/store/private-actions.js +29 -54
  391. package/build-module/store/private-actions.js.map +1 -1
  392. package/build-module/store/private-selectors.js +0 -6
  393. package/build-module/store/private-selectors.js.map +1 -1
  394. package/build-module/store/reducer.js +34 -46
  395. package/build-module/store/reducer.js.map +1 -1
  396. package/build-module/store/selectors.js +23 -13
  397. package/build-module/store/selectors.js.map +1 -1
  398. package/build-style/content-rtl.css +22 -2
  399. package/build-style/content.css +22 -2
  400. package/build-style/default-editor-styles-rtl.css +1 -0
  401. package/build-style/default-editor-styles.css +1 -0
  402. package/build-style/style-rtl.css +106 -27
  403. package/build-style/style.css +106 -27
  404. package/package.json +31 -31
  405. package/src/components/block-actions/index.js +59 -55
  406. package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
  407. package/src/components/block-bindings-toolbar-indicator/style.scss +16 -0
  408. package/src/components/block-draggable/test/index.native.js +2 -2
  409. package/src/components/block-edit/context.js +1 -0
  410. package/src/components/block-edit/index.js +5 -1
  411. package/src/components/block-heading-level-dropdown/README.md +5 -5
  412. package/src/components/block-heading-level-dropdown/index.js +5 -5
  413. package/src/components/block-heading-level-dropdown/index.native.js +5 -4
  414. package/src/components/block-inspector/index.js +7 -5
  415. package/src/components/block-list/block-crash-boundary.native.js +43 -0
  416. package/src/components/block-list/block-crash-warning.native.js +19 -0
  417. package/src/components/block-list/block-invalid-warning.native.js +1 -1
  418. package/src/components/block-list/block-list-item.native.js +1 -1
  419. package/src/components/block-list/block-outline.native.js +36 -21
  420. package/src/components/block-list/block-selection-button.native.js +1 -3
  421. package/src/components/block-list/block.native.js +14 -10
  422. package/src/components/block-list/content.scss +21 -1
  423. package/src/components/block-list/test/block-outline.native.js +255 -0
  424. package/src/components/block-list/use-block-props/index.js +12 -2
  425. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
  426. package/src/components/block-mover/index.native.js +1 -1
  427. package/src/components/block-popover/cover.js +63 -0
  428. package/src/components/block-popover/drop-zone.js +3 -4
  429. package/src/components/block-popover/index.js +1 -28
  430. package/src/components/block-preview/index.js +3 -1
  431. package/src/components/block-removal-warning-modal/index.js +5 -19
  432. package/src/components/block-rename/modal.js +1 -1
  433. package/src/components/block-settings/container.native.js +5 -1
  434. package/src/components/block-settings-menu/block-settings-dropdown.js +53 -65
  435. package/src/components/block-settings-menu-controls/README.md +0 -9
  436. package/src/components/block-settings-menu-controls/index.js +1 -6
  437. package/src/components/block-switcher/block-transformations-menu.native.js +1 -1
  438. package/src/components/block-toolbar/block-toolbar-menu.native.js +2 -2
  439. package/src/components/block-toolbar/index.js +22 -16
  440. package/src/components/block-toolbar/shuffle.js +93 -0
  441. package/src/components/block-toolbar/test/index.native.js +1 -7
  442. package/src/components/block-toolbar/use-has-block-toolbar.js +49 -0
  443. package/src/components/block-tools/block-selection-button.js +4 -0
  444. package/src/components/block-tools/empty-block-inserter.js +3 -6
  445. package/src/components/block-tools/index.js +13 -36
  446. package/src/components/block-tools/use-show-block-tools.js +73 -0
  447. package/src/components/caption/index.native.js +1 -1
  448. package/src/components/child-layout-control/index.js +148 -36
  449. package/src/components/color-palette/control.js +1 -1
  450. package/src/components/colors-gradients/control.js +1 -1
  451. package/src/components/colors-gradients/test/control.js +2 -2
  452. package/src/components/contrast-checker/test/index.js +10 -10
  453. package/src/components/convert-to-group-buttons/toolbar.js +13 -1
  454. package/src/components/default-block-appender/content.scss +5 -2
  455. package/src/components/global-styles/border-panel.js +35 -24
  456. package/src/components/global-styles/color-panel.js +1 -1
  457. package/src/components/global-styles/dimensions-panel.js +9 -34
  458. package/src/components/global-styles/image-settings-panel.js +1 -1
  459. package/src/components/global-styles/index.js +5 -1
  460. package/src/components/global-styles/shadow-panel-components.js +92 -23
  461. package/src/components/global-styles/style.scss +33 -10
  462. package/src/components/global-styles/test/typography-utils.js +231 -81
  463. package/src/components/global-styles/test/use-global-styles-output.js +31 -0
  464. package/src/components/global-styles/typography-utils.js +10 -7
  465. package/src/components/global-styles/use-global-styles-output.js +17 -17
  466. package/src/components/global-styles/utils.js +2 -26
  467. package/src/components/grid-visualizer/grid-item-resizer.js +100 -0
  468. package/src/components/grid-visualizer/grid-visualizer.js +81 -0
  469. package/src/components/grid-visualizer/index.js +2 -0
  470. package/src/components/grid-visualizer/style.scss +33 -0
  471. package/src/components/grid-visualizer/utils.js +5 -0
  472. package/src/components/iframe/index.js +89 -26
  473. package/src/components/index.native.js +1 -0
  474. package/src/components/inner-blocks/use-nested-settings-update.js +12 -2
  475. package/src/components/inserter/block-patterns-explorer/index.js +2 -9
  476. package/src/components/inserter/block-patterns-explorer/pattern-list.js +7 -1
  477. package/src/components/inserter/media-tab/media-preview.js +1 -1
  478. package/src/components/inserter/menu.native.js +3 -3
  479. package/src/components/inserter/mobile-tab-navigation.js +2 -2
  480. package/src/components/inserter/style.scss +10 -0
  481. package/src/components/inspector-controls/block-support-tools-panel.js +2 -2
  482. package/src/components/inspector-controls-tabs/advanced-controls-panel.native.js +31 -0
  483. package/src/components/inspector-controls-tabs/index.js +1 -1
  484. package/src/components/inspector-controls-tabs/styles-tab.js +2 -2
  485. package/src/components/line-height-control/test/index.js +1 -1
  486. package/src/components/link-control/link-preview.js +9 -2
  487. package/src/components/link-control/search-input.js +1 -1
  488. package/src/components/link-control/style.scss +9 -5
  489. package/src/components/list-view/block-select-button.js +0 -2
  490. package/src/components/list-view/block.js +12 -21
  491. package/src/components/list-view/branch.js +1 -1
  492. package/src/components/list-view/drop-indicator.js +1 -1
  493. package/src/components/list-view/index.js +1 -1
  494. package/src/components/list-view/style.scss +34 -16
  495. package/src/components/list-view/use-clipboard-handler.js +3 -2
  496. package/src/components/list-view/utils.js +4 -1
  497. package/src/components/panel-color-settings/index.js +1 -1
  498. package/src/components/panel-color-settings/test/index.js +3 -3
  499. package/src/components/provider/index.js +1 -4
  500. package/src/components/resizable-box-popover/index.js +4 -6
  501. package/src/components/responsive-block-control/README.md +4 -4
  502. package/src/components/responsive-block-control/index.js +1 -1
  503. package/src/components/responsive-block-control/test/index.js +5 -5
  504. package/src/components/rich-text/README.md +6 -0
  505. package/src/components/rich-text/index.js +76 -53
  506. package/src/components/rich-text/use-enter.js +4 -0
  507. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +4 -4
  508. package/src/components/spacing-sizes-control/sides-dropdown/index.js +1 -1
  509. package/src/components/url-popover/index.js +5 -5
  510. package/src/components/url-popover/style.scss +1 -0
  511. package/src/components/use-moving-animation/index.js +1 -0
  512. package/src/components/warning/index.native.js +19 -15
  513. package/src/components/writing-flow/use-clipboard-handler.js +3 -2
  514. package/src/components/writing-flow/utils.js +31 -16
  515. package/src/hooks/anchor.js +41 -61
  516. package/src/hooks/background.js +49 -4
  517. package/src/hooks/block-hooks.js +47 -9
  518. package/src/hooks/block-hooks.scss +6 -0
  519. package/src/hooks/border.js +16 -4
  520. package/src/hooks/dimensions.js +1 -2
  521. package/src/hooks/font-size.js +7 -12
  522. package/src/hooks/index.js +3 -0
  523. package/src/hooks/layout-child.js +82 -8
  524. package/src/hooks/layout.js +34 -19
  525. package/src/hooks/line-height.js +1 -1
  526. package/src/hooks/position.js +1 -1
  527. package/src/hooks/spacing-visualizer.js +126 -0
  528. package/src/hooks/{padding.scss → spacing.scss} +1 -1
  529. package/src/hooks/test/__snapshots__/anchor.native.js.snap +7 -0
  530. package/src/hooks/test/anchor.native.js +32 -0
  531. package/src/hooks/use-bindings-attributes.js +215 -65
  532. package/src/hooks/use-typography-props.js +2 -8
  533. package/src/layouts/grid.js +8 -3
  534. package/src/private-apis.js +6 -2
  535. package/src/private-apis.native.js +2 -0
  536. package/src/store/actions.js +56 -18
  537. package/src/store/private-actions.js +34 -79
  538. package/src/store/private-selectors.js +0 -8
  539. package/src/store/reducer.js +43 -64
  540. package/src/store/selectors.js +41 -46
  541. package/src/store/test/actions.js +0 -4
  542. package/src/style.scss +3 -1
  543. package/tsconfig.json +1 -0
  544. package/build/hooks/margin.js +0 -86
  545. package/build/hooks/margin.js.map +0 -1
  546. package/build/hooks/padding.js +0 -78
  547. package/build/hooks/padding.js.map +0 -1
  548. package/build/utils/use-can-block-toolbar-be-focused.js +0 -46
  549. package/build/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  550. package/build-module/hooks/margin.js +0 -78
  551. package/build-module/hooks/margin.js.map +0 -1
  552. package/build-module/hooks/padding.js +0 -70
  553. package/build-module/hooks/padding.js.map +0 -1
  554. package/build-module/utils/use-can-block-toolbar-be-focused.js +0 -40
  555. package/build-module/utils/use-can-block-toolbar-be-focused.js.map +0 -1
  556. package/src/hooks/margin.js +0 -91
  557. package/src/hooks/padding.js +0 -82
  558. package/src/utils/use-can-block-toolbar-be-focused.js +0 -48
@@ -103,6 +103,46 @@ export function hasBackgroundSupport( blockName, feature = 'any' ) {
103
103
  return !! support?.[ feature ];
104
104
  }
105
105
 
106
+ function useBlockProps( { name, style } ) {
107
+ if (
108
+ ! hasBackgroundSupport( name ) ||
109
+ ! style?.background?.backgroundImage
110
+ ) {
111
+ return;
112
+ }
113
+
114
+ const backgroundImage = style?.background?.backgroundImage;
115
+ let props;
116
+
117
+ // Set block background defaults.
118
+ if ( backgroundImage?.source === 'file' && !! backgroundImage?.url ) {
119
+ if ( ! style?.background?.backgroundSize ) {
120
+ props = {
121
+ style: {
122
+ backgroundSize: 'cover',
123
+ },
124
+ };
125
+ }
126
+
127
+ if (
128
+ 'contain' === style?.background?.backgroundSize &&
129
+ ! style?.background?.backgroundPosition
130
+ ) {
131
+ props = {
132
+ style: {
133
+ backgroundPosition: 'center',
134
+ },
135
+ };
136
+ }
137
+ }
138
+
139
+ if ( ! props ) {
140
+ return;
141
+ }
142
+
143
+ return props;
144
+ }
145
+
106
146
  /**
107
147
  * Resets the background image block support attributes. This can be used when disabling
108
148
  * the background image controls for a block via a `ToolsPanel`.
@@ -425,11 +465,10 @@ function BackgroundSizePanelItem( {
425
465
  // If the current value is `cover` and the repeat value is `undefined`, then
426
466
  // the toggle should be unchecked as the default state. Otherwise, the toggle
427
467
  // should reflect the current repeat value.
428
- const repeatCheckedValue =
468
+ const repeatCheckedValue = ! (
429
469
  repeatValue === 'no-repeat' ||
430
470
  ( currentValueForToggle === 'cover' && repeatValue === undefined )
431
- ? false
432
- : true;
471
+ );
433
472
 
434
473
  const hasValue = hasBackgroundSizeValue( style );
435
474
 
@@ -526,7 +565,7 @@ function BackgroundSizePanelItem( {
526
565
  label={ __( 'Size' ) }
527
566
  value={ currentValueForToggle }
528
567
  onChange={ updateBackgroundSize }
529
- isBlock={ true }
568
+ isBlock
530
569
  help={ backgroundSizeHelpText( sizeValue ) }
531
570
  >
532
571
  <ToggleGroupControlOption
@@ -602,3 +641,9 @@ export function BackgroundImagePanel( props ) {
602
641
  </InspectorControls>
603
642
  );
604
643
  }
644
+
645
+ export default {
646
+ useBlockProps,
647
+ attributeKeys: [ 'style' ],
648
+ hasSupport: hasBackgroundSupport,
649
+ };
@@ -19,28 +19,38 @@ import { store as blockEditorStore } from '../store';
19
19
 
20
20
  const EMPTY_OBJECT = {};
21
21
 
22
- function BlockHooksControlPure( { name, clientId } ) {
22
+ function BlockHooksControlPure( {
23
+ name,
24
+ clientId,
25
+ metadata: { ignoredHookedBlocks = [] } = {},
26
+ } ) {
23
27
  const blockTypes = useSelect(
24
28
  ( select ) => select( blocksStore ).getBlockTypes(),
25
29
  []
26
30
  );
27
31
 
32
+ // A hooked block added via a filter will not be exposed through a block
33
+ // type's `blockHooks` property; however, if the containing layout has been
34
+ // modified, it will be present in the anchor block's `ignoredHookedBlocks`
35
+ // metadata.
28
36
  const hookedBlocksForCurrentBlock = useMemo(
29
37
  () =>
30
38
  blockTypes?.filter(
31
- ( { blockHooks } ) => blockHooks && name in blockHooks
39
+ ( { name: blockName, blockHooks } ) =>
40
+ ( blockHooks && name in blockHooks ) ||
41
+ ignoredHookedBlocks.includes( blockName )
32
42
  ),
33
- [ blockTypes, name ]
43
+ [ blockTypes, name, ignoredHookedBlocks ]
34
44
  );
35
45
 
36
46
  const { blockIndex, rootClientId, innerBlocksLength } = useSelect(
37
47
  ( select ) => {
38
- const { getBlock, getBlockIndex, getBlockRootClientId } =
48
+ const { getBlocks, getBlockIndex, getBlockRootClientId } =
39
49
  select( blockEditorStore );
40
50
 
41
51
  return {
42
52
  blockIndex: getBlockIndex( clientId ),
43
- innerBlocksLength: getBlock( clientId )?.innerBlocks?.length,
53
+ innerBlocksLength: getBlocks( clientId )?.length,
44
54
  rootClientId: getBlockRootClientId( clientId ),
45
55
  };
46
56
  },
@@ -49,7 +59,7 @@ function BlockHooksControlPure( { name, clientId } ) {
49
59
 
50
60
  const hookedBlockClientIds = useSelect(
51
61
  ( select ) => {
52
- const { getBlock, getGlobalBlockCount } =
62
+ const { getBlocks, getGlobalBlockCount } =
53
63
  select( blockEditorStore );
54
64
 
55
65
  const _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(
@@ -69,7 +79,7 @@ function BlockHooksControlPure( { name, clientId } ) {
69
79
  // Any of the current block's siblings (with the right block type) qualifies
70
80
  // as a hooked block (inserted `before` or `after` the current one), as the block
71
81
  // might've been automatically inserted and then moved around a bit by the user.
72
- candidates = getBlock( rootClientId )?.innerBlocks;
82
+ candidates = getBlocks( rootClientId );
73
83
  break;
74
84
 
75
85
  case 'first_child':
@@ -77,7 +87,17 @@ function BlockHooksControlPure( { name, clientId } ) {
77
87
  // Any of the current block's child blocks (with the right block type) qualifies
78
88
  // as a hooked first or last child block, as the block might've been automatically
79
89
  // inserted and then moved around a bit by the user.
80
- candidates = getBlock( clientId ).innerBlocks;
90
+ candidates = getBlocks( clientId );
91
+ break;
92
+
93
+ case undefined:
94
+ // If we haven't found a blockHooks field with a relative position for the hooked
95
+ // block, it means that it was added by a filter. In this case, we look for the block
96
+ // both among the current block's siblings and its children.
97
+ candidates = [
98
+ ...getBlocks( rootClientId ),
99
+ ...getBlocks( clientId ),
100
+ ];
81
101
  break;
82
102
  }
83
103
 
@@ -151,6 +171,18 @@ function BlockHooksControlPure( { name, clientId } ) {
151
171
  false
152
172
  );
153
173
  break;
174
+
175
+ case undefined:
176
+ // If we do not know the relative position, it is because the block was
177
+ // added via a filter. In this case, we default to inserting it after the
178
+ // current block.
179
+ insertBlock(
180
+ block,
181
+ blockIndex + 1,
182
+ rootClientId, // Insert as a child of the current block's parent
183
+ false
184
+ );
185
+ break;
154
186
  }
155
187
  };
156
188
 
@@ -159,8 +191,13 @@ function BlockHooksControlPure( { name, clientId } ) {
159
191
  <PanelBody
160
192
  className="block-editor-hooks__block-hooks"
161
193
  title={ __( 'Plugins' ) }
162
- initialOpen={ true }
194
+ initialOpen
163
195
  >
196
+ <p className="block-editor-hooks__block-hooks-helptext">
197
+ { __(
198
+ 'Manage the inclusion of blocks added automatically by plugins.'
199
+ ) }
200
+ </p>
164
201
  { Object.keys( groupedHookedBlocks ).map( ( vendor ) => {
165
202
  return (
166
203
  <Fragment key={ vendor }>
@@ -214,6 +251,7 @@ function BlockHooksControlPure( { name, clientId } ) {
214
251
 
215
252
  export default {
216
253
  edit: BlockHooksControlPure,
254
+ attributeKeys: [ 'metadata' ],
217
255
  hasSupport() {
218
256
  return true;
219
257
  },
@@ -13,4 +13,10 @@
13
13
  .components-toggle-control .components-h-stack .components-h-stack {
14
14
  flex-direction: row;
15
15
  }
16
+
17
+ .block-editor-hooks__block-hooks-helptext {
18
+ color: $gray-700;
19
+ font-size: $helptext-font-size;
20
+ margin-bottom: $grid-unit-20;
21
+ }
16
22
  }
@@ -18,9 +18,14 @@ import { useSelect } from '@wordpress/data';
18
18
  import { getColorClassName } from '../components/colors';
19
19
  import InspectorControls from '../components/inspector-controls';
20
20
  import useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';
21
- import { cleanEmptyObject, shouldSkipSerialization } from './utils';
21
+ import {
22
+ cleanEmptyObject,
23
+ shouldSkipSerialization,
24
+ useBlockSettings,
25
+ } from './utils';
22
26
  import {
23
27
  useHasBorderPanel,
28
+ useHasBorderPanelControls,
24
29
  BorderPanel as StylesBorderPanel,
25
30
  } from '../components/global-styles';
26
31
  import { store as blockEditorStore } from '../store';
@@ -220,14 +225,21 @@ export function hasShadowSupport( blockName ) {
220
225
  return hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );
221
226
  }
222
227
 
223
- export function getBorderPanelLabel( {
228
+ export function useBorderPanelLabel( {
224
229
  blockName,
225
230
  hasBorderControl,
226
231
  hasShadowControl,
227
232
  } = {} ) {
233
+ const settings = useBlockSettings( blockName );
234
+ const controls = useHasBorderPanelControls( settings );
235
+
228
236
  if ( ! hasBorderControl && ! hasShadowControl && blockName ) {
229
- hasBorderControl = hasBorderSupport( blockName );
230
- hasShadowControl = hasShadowSupport( blockName );
237
+ hasBorderControl =
238
+ controls?.hasBorderColor ||
239
+ controls?.hasBorderStyle ||
240
+ controls?.hasBorderWidth ||
241
+ controls?.hasBorderRadius;
242
+ hasShadowControl = controls?.hasShadow;
231
243
  }
232
244
 
233
245
  if ( hasBorderControl && hasShadowControl ) {
@@ -19,8 +19,7 @@ import {
19
19
  DimensionsPanel as StylesDimensionsPanel,
20
20
  useHasDimensionsPanel,
21
21
  } from '../components/global-styles';
22
- import { MarginVisualizer } from './margin';
23
- import { PaddingVisualizer } from './padding';
22
+ import { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';
24
23
  import { store as blockEditorStore } from '../store';
25
24
  import { unlock } from '../lock-unlock';
26
25
  import { cleanEmptyObject, shouldSkipSerialization } from './utils';
@@ -21,10 +21,7 @@ import {
21
21
  shouldSkipSerialization,
22
22
  } from './utils';
23
23
  import { useSettings } from '../components/use-settings';
24
- import {
25
- getTypographyFontSizeValue,
26
- getFluidTypographyOptionsFromSettings,
27
- } from '../components/global-styles/typography-utils';
24
+ import { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';
28
25
 
29
26
  export const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';
30
27
 
@@ -173,18 +170,16 @@ function useBlockProps( { name, fontSize, style } ) {
173
170
  let props;
174
171
 
175
172
  if ( style?.typography?.fontSize ) {
176
- const fluidSettings = getFluidTypographyOptionsFromSettings( {
177
- typography: {
178
- fluid: fluidTypographySettings,
179
- },
180
- layout: layoutSettings,
181
- } );
182
-
183
173
  props = {
184
174
  style: {
185
175
  fontSize: getTypographyFontSizeValue(
186
176
  { size: style.typography.fontSize },
187
- fluidSettings
177
+ {
178
+ typography: {
179
+ fluid: fluidTypographySettings,
180
+ },
181
+ layout: layoutSettings,
182
+ }
188
183
  ),
189
184
  },
190
185
  };
@@ -8,6 +8,7 @@ import {
8
8
  } from './utils';
9
9
  import './compat';
10
10
  import align from './align';
11
+ import background from './background';
11
12
  import './lock';
12
13
  import anchor from './anchor';
13
14
  import ariaLabel from './aria-label';
@@ -42,10 +43,12 @@ createBlockEditFilter(
42
43
  contentLockUI,
43
44
  blockHooks,
44
45
  blockRenaming,
46
+ childLayout,
45
47
  ].filter( Boolean )
46
48
  );
47
49
  createBlockListBlockFilter( [
48
50
  align,
51
+ background,
49
52
  style,
50
53
  color,
51
54
  dimensions,
@@ -10,13 +10,21 @@ import { useSelect } from '@wordpress/data';
10
10
  import { store as blockEditorStore } from '../store';
11
11
  import { useStyleOverride } from './utils';
12
12
  import { useLayout } from '../components/block-list/layout';
13
+ import { GridVisualizer, GridItemResizer } from '../components/grid-visualizer';
13
14
 
14
15
  function useBlockPropsChildLayoutStyles( { style } ) {
15
16
  const shouldRenderChildLayoutStyles = useSelect( ( select ) => {
16
17
  return ! select( blockEditorStore ).getSettings().disableLayoutStyles;
17
18
  } );
18
19
  const layout = style?.layout ?? {};
19
- const { selfStretch, flexSize, columnSpan, rowSpan } = layout;
20
+ const {
21
+ selfStretch,
22
+ flexSize,
23
+ columnStart,
24
+ rowStart,
25
+ columnSpan,
26
+ rowSpan,
27
+ } = layout;
20
28
  const parentLayout = useLayout() || {};
21
29
  const { columnCount, minimumColumnWidth } = parentLayout;
22
30
  const id = useInstanceId( useBlockPropsChildLayoutStyles );
@@ -33,6 +41,14 @@ function useBlockPropsChildLayoutStyles( { style } ) {
33
41
  css = `${ selector } {
34
42
  flex-grow: 1;
35
43
  }`;
44
+ } else if ( columnStart && columnSpan ) {
45
+ css = `${ selector } {
46
+ grid-column: ${ columnStart } / span ${ columnSpan };
47
+ }`;
48
+ } else if ( columnStart ) {
49
+ css = `${ selector } {
50
+ grid-column: ${ columnStart };
51
+ }`;
36
52
  } else if ( columnSpan ) {
37
53
  css = `${ selector } {
38
54
  grid-column: span ${ columnSpan };
@@ -43,9 +59,20 @@ function useBlockPropsChildLayoutStyles( { style } ) {
43
59
  * columnCount is set, the grid is responsive so a
44
60
  * container query is needed for the span to resize.
45
61
  */
46
- if ( columnSpan && ( minimumColumnWidth || ! columnCount ) ) {
47
- // Calculate the container query value.
48
- const columnSpanNumber = parseInt( columnSpan );
62
+ if (
63
+ ( columnSpan || columnStart ) &&
64
+ ( minimumColumnWidth || ! columnCount )
65
+ ) {
66
+ // Check if columnSpan and columnStart are numbers so Math.max doesn't break.
67
+ const columnSpanNumber = columnSpan ? parseInt( columnSpan ) : null;
68
+ const columnStartNumber = columnStart
69
+ ? parseInt( columnStart )
70
+ : null;
71
+ const highestNumber = Math.max(
72
+ columnSpanNumber,
73
+ columnStartNumber
74
+ );
75
+
49
76
  let parentColumnValue = parseFloat( minimumColumnWidth );
50
77
  /**
51
78
  * 12rem is the default minimumColumnWidth value.
@@ -69,16 +96,26 @@ function useBlockPropsChildLayoutStyles( { style } ) {
69
96
 
70
97
  const defaultGapValue = parentColumnUnit === 'px' ? 24 : 1.5;
71
98
  const containerQueryValue =
72
- columnSpanNumber * parentColumnValue +
73
- ( columnSpanNumber - 1 ) * defaultGapValue;
99
+ highestNumber * parentColumnValue +
100
+ ( highestNumber - 1 ) * defaultGapValue;
101
+ // If a span is set we want to preserve it as long as possible, otherwise we just reset the value.
102
+ const gridColumnValue = columnSpan ? '1/-1' : 'auto';
74
103
 
75
104
  css += `@container (max-width: ${ containerQueryValue }${ parentColumnUnit }) {
76
105
  ${ selector } {
77
- grid-column: 1 / -1;
106
+ grid-column: ${ gridColumnValue };
78
107
  }
79
108
  }`;
80
109
  }
81
- if ( rowSpan ) {
110
+ if ( rowStart && rowSpan ) {
111
+ css += `${ selector } {
112
+ grid-row: ${ rowStart } / span ${ rowSpan };
113
+ }`;
114
+ } else if ( rowStart ) {
115
+ css += `${ selector } {
116
+ grid-row: ${ rowStart };
117
+ }`;
118
+ } else if ( rowSpan ) {
82
119
  css += `${ selector } {
83
120
  grid-row: span ${ rowSpan };
84
121
  }`;
@@ -96,8 +133,45 @@ function useBlockPropsChildLayoutStyles( { style } ) {
96
133
  return { className: `wp-container-content-${ id }` };
97
134
  }
98
135
 
136
+ function ChildLayoutControlsPure( { clientId, style, setAttributes } ) {
137
+ const parentLayout = useLayout() || {};
138
+ const rootClientId = useSelect(
139
+ ( select ) => {
140
+ return select( blockEditorStore ).getBlockRootClientId( clientId );
141
+ },
142
+ [ clientId ]
143
+ );
144
+ if ( parentLayout.type !== 'grid' ) {
145
+ return null;
146
+ }
147
+ if ( ! window.__experimentalEnableGridInteractivity ) {
148
+ return null;
149
+ }
150
+ return (
151
+ <>
152
+ <GridVisualizer clientId={ rootClientId } />
153
+ <GridItemResizer
154
+ clientId={ clientId }
155
+ onChange={ ( { columnSpan, rowSpan } ) => {
156
+ setAttributes( {
157
+ style: {
158
+ ...style,
159
+ layout: {
160
+ ...style?.layout,
161
+ columnSpan,
162
+ rowSpan,
163
+ },
164
+ },
165
+ } );
166
+ } }
167
+ />
168
+ </>
169
+ );
170
+ }
171
+
99
172
  export default {
100
173
  useBlockProps: useBlockPropsChildLayoutStyles,
174
+ edit: ChildLayoutControlsPure,
101
175
  attributeKeys: [ 'style' ],
102
176
  hasSupport() {
103
177
  return true;
@@ -125,22 +125,24 @@ export function useLayoutStyles( blockAttributes = {}, blockName, selector ) {
125
125
  const fullLayoutType = getLayoutType( usedLayout?.type || 'default' );
126
126
  const [ blockGapSupport ] = useSettings( 'spacing.blockGap' );
127
127
  const hasBlockGapSupport = blockGapSupport !== null;
128
- const css = fullLayoutType?.getLayoutStyle?.( {
128
+ return fullLayoutType?.getLayoutStyle?.( {
129
129
  blockName,
130
130
  selector,
131
131
  layout,
132
132
  style,
133
133
  hasBlockGapSupport,
134
134
  } );
135
- return css;
136
135
  }
137
136
 
138
- function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
137
+ function LayoutPanelPure( {
138
+ layout,
139
+ setAttributes,
140
+ name: blockName,
141
+ clientId,
142
+ } ) {
139
143
  const settings = useBlockSettings( blockName );
140
144
  // Block settings come from theme.json under settings.[blockName].
141
145
  const { layout: layoutSettings } = settings;
142
- // Layout comes from block attributes.
143
- const [ defaultThemeLayout ] = useSettings( 'layout' );
144
146
  const { themeSupportsLayout } = useSelect( ( select ) => {
145
147
  const { getSettings } = select( blockEditorStore );
146
148
  return {
@@ -174,36 +176,43 @@ function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
174
176
  return null;
175
177
  }
176
178
 
179
+ /*
180
+ * Try to find the layout type from either the
181
+ * block's layout settings or any saved layout config.
182
+ */
183
+ const blockSupportAndLayout = {
184
+ ...layoutBlockSupport,
185
+ ...layout,
186
+ };
187
+ const { type, default: { type: defaultType = 'default' } = {} } =
188
+ blockSupportAndLayout;
189
+ const blockLayoutType = type || defaultType;
190
+
177
191
  // Only show the inherit toggle if it's supported,
178
- // a default theme layout is set (e.g. one that provides `contentSize` and/or `wideSize` values),
179
192
  // and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.
180
193
  const showInheritToggle = !! (
181
194
  allowInheriting &&
182
- !! defaultThemeLayout &&
183
- ( ! layout?.type ||
184
- layout?.type === 'default' ||
185
- layout?.type === 'constrained' ||
186
- layout?.inherit )
195
+ ( ! blockLayoutType ||
196
+ blockLayoutType === 'default' ||
197
+ blockLayoutType === 'constrained' ||
198
+ blockSupportAndLayout.inherit )
187
199
  );
188
200
 
189
201
  const usedLayout = layout || defaultBlockLayout || {};
190
- const {
191
- inherit = false,
192
- type = 'default',
193
- contentSize = null,
194
- } = usedLayout;
202
+ const { inherit = false, contentSize = null } = usedLayout;
195
203
  /**
196
204
  * `themeSupportsLayout` is only relevant to the `default/flow` or
197
205
  * `constrained` layouts and it should not be taken into account when other
198
206
  * `layout` types are used.
199
207
  */
200
208
  if (
201
- ( type === 'default' || type === 'constrained' ) &&
209
+ ( blockLayoutType === 'default' ||
210
+ blockLayoutType === 'constrained' ) &&
202
211
  ! themeSupportsLayout
203
212
  ) {
204
213
  return null;
205
214
  }
206
- const layoutType = getLayoutType( type );
215
+ const layoutType = getLayoutType( blockLayoutType );
207
216
  const constrainedType = getLayoutType( 'constrained' );
208
217
  const displayControlsForLegacyLayouts =
209
218
  ! usedLayout.type && ( contentSize || inherit );
@@ -256,7 +265,7 @@ function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
256
265
 
257
266
  { ! inherit && allowSwitching && (
258
267
  <LayoutTypeSwitcher
259
- type={ type }
268
+ type={ blockLayoutType }
260
269
  onChange={ onChangeType }
261
270
  />
262
271
  ) }
@@ -266,6 +275,8 @@ function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
266
275
  layout={ usedLayout }
267
276
  onChange={ onChangeLayout }
268
277
  layoutBlockSupport={ blockSupportAndThemeSettings }
278
+ name={ blockName }
279
+ clientId={ clientId }
269
280
  />
270
281
  ) }
271
282
  { constrainedType && displayControlsForLegacyLayouts && (
@@ -273,6 +284,8 @@ function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
273
284
  layout={ usedLayout }
274
285
  onChange={ onChangeLayout }
275
286
  layoutBlockSupport={ blockSupportAndThemeSettings }
287
+ name={ blockName }
288
+ clientId={ clientId }
276
289
  />
277
290
  ) }
278
291
  </PanelBody>
@@ -282,6 +295,8 @@ function LayoutPanelPure( { layout, setAttributes, name: blockName } ) {
282
295
  layout={ usedLayout }
283
296
  onChange={ onChangeLayout }
284
297
  layoutBlockSupport={ layoutBlockSupport }
298
+ name={ blockName }
299
+ clientId={ clientId }
285
300
  />
286
301
  ) }
287
302
  </>
@@ -39,7 +39,7 @@ export function LineHeightEdit( props ) {
39
39
  return (
40
40
  <LineHeightControl
41
41
  __unstableInputWidth="100%"
42
- __nextHasNoMarginBottom={ true }
42
+ __nextHasNoMarginBottom
43
43
  value={ style?.typography?.lineHeight }
44
44
  onChange={ onChange }
45
45
  size="__unstable-large"
@@ -152,7 +152,7 @@ export function hasPositionValue( props ) {
152
152
  * @return {boolean} Whether or not the block is set to a sticky or fixed position.
153
153
  */
154
154
  export function hasStickyOrFixedPositionValue( attributes ) {
155
- const positionType = attributes.style?.position?.type;
155
+ const positionType = attributes?.style?.position?.type;
156
156
  return positionType === 'sticky' || positionType === 'fixed';
157
157
  }
158
158