@wordpress/block-editor 10.5.0 → 11.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 (488) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/autocompleters/block.js +2 -6
  3. package/build/autocompleters/block.js.map +1 -1
  4. package/build/autocompleters/link.js +2 -0
  5. package/build/autocompleters/link.js.map +1 -1
  6. package/build/components/block-card/index.js +51 -3
  7. package/build/components/block-card/index.js.map +1 -1
  8. package/build/components/block-draggable/index.native.js +46 -39
  9. package/build/components/block-draggable/index.native.js.map +1 -1
  10. package/build/components/block-edit/edit.js +4 -3
  11. package/build/components/block-edit/edit.js.map +1 -1
  12. package/build/components/block-edit/edit.native.js +4 -7
  13. package/build/components/block-edit/edit.native.js.map +1 -1
  14. package/build/components/block-inspector/index.js +35 -33
  15. package/build/components/block-inspector/index.js.map +1 -1
  16. package/build/components/block-list/block-list-context.native.js +5 -8
  17. package/build/components/block-list/block-list-context.native.js.map +1 -1
  18. package/build/components/block-list/block.js +55 -24
  19. package/build/components/block-list/block.js.map +1 -1
  20. package/build/components/block-list/block.native.js +61 -28
  21. package/build/components/block-list/block.native.js.map +1 -1
  22. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +12 -4
  23. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  24. package/build/components/block-pattern-setup/index.js +3 -2
  25. package/build/components/block-pattern-setup/index.js.map +1 -1
  26. package/build/components/block-patterns-list/index.js +33 -11
  27. package/build/components/block-patterns-list/index.js.map +1 -1
  28. package/build/components/block-preview/auto.js +9 -3
  29. package/build/components/block-preview/auto.js.map +1 -1
  30. package/build/components/block-preview/index.js +5 -9
  31. package/build/components/block-preview/index.js.map +1 -1
  32. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -2
  33. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  34. package/build/components/block-toolbar/index.js +5 -1
  35. package/build/components/block-toolbar/index.js.map +1 -1
  36. package/build/components/block-tools/insertion-point.js +8 -49
  37. package/build/components/block-tools/insertion-point.js.map +1 -1
  38. package/build/components/block-variation-picker/index.js +1 -2
  39. package/build/components/block-variation-picker/index.js.map +1 -1
  40. package/build/components/height-control/index.js +115 -0
  41. package/build/components/height-control/index.js.map +1 -0
  42. package/build/components/iframe/index.js +11 -8
  43. package/build/components/iframe/index.js.map +1 -1
  44. package/build/components/image-editor/use-save-image.js +2 -0
  45. package/build/components/image-editor/use-save-image.js.map +1 -1
  46. package/build/components/image-editor/zoom-dropdown.js +1 -0
  47. package/build/components/image-editor/zoom-dropdown.js.map +1 -1
  48. package/build/components/index.js +9 -0
  49. package/build/components/index.js.map +1 -1
  50. package/build/components/inner-blocks/index.js +20 -6
  51. package/build/components/inner-blocks/index.js.map +1 -1
  52. package/build/components/inner-blocks/use-inner-block-template-sync.js +25 -10
  53. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  54. package/build/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  55. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  56. package/build/components/inserter/block-patterns-tab.js +25 -46
  57. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  58. package/build/components/inserter/block-types-tab.js +3 -1
  59. package/build/components/inserter/block-types-tab.js.map +1 -1
  60. package/build/components/inserter/hooks/use-debounced-input.js +27 -0
  61. package/build/components/inserter/hooks/use-debounced-input.js.map +1 -0
  62. package/build/components/inserter/index.js +8 -3
  63. package/build/components/inserter/index.js.map +1 -1
  64. package/build/components/inserter/index.native.js +3 -4
  65. package/build/components/inserter/index.native.js.map +1 -1
  66. package/build/components/inserter/media-tab/hooks.js +103 -0
  67. package/build/components/inserter/media-tab/hooks.js.map +1 -0
  68. package/build/components/inserter/media-tab/index.js +32 -0
  69. package/build/components/inserter/media-tab/index.js.map +1 -0
  70. package/build/components/inserter/media-tab/media-list.js +100 -0
  71. package/build/components/inserter/media-tab/media-list.js.map +1 -0
  72. package/build/components/inserter/media-tab/media-panel.js +96 -0
  73. package/build/components/inserter/media-tab/media-panel.js.map +1 -0
  74. package/build/components/inserter/media-tab/media-tab.js +120 -0
  75. package/build/components/inserter/media-tab/media-tab.js.map +1 -0
  76. package/build/components/inserter/media-tab/utils.js +54 -0
  77. package/build/components/inserter/media-tab/utils.js.map +1 -0
  78. package/build/components/inserter/menu.js +35 -12
  79. package/build/components/inserter/menu.js.map +1 -1
  80. package/build/components/inserter/mobile-tab-navigation.js +70 -0
  81. package/build/components/inserter/mobile-tab-navigation.js.map +1 -0
  82. package/build/components/inserter/quick-inserter.js +1 -0
  83. package/build/components/inserter/quick-inserter.js.map +1 -1
  84. package/build/components/inserter/search-results.js +3 -1
  85. package/build/components/inserter/search-results.js.map +1 -1
  86. package/build/components/inserter/tabs.js +16 -2
  87. package/build/components/inserter/tabs.js.map +1 -1
  88. package/build/components/inserter-list-item/index.js +4 -1
  89. package/build/components/inserter-list-item/index.js.map +1 -1
  90. package/build/components/inspector-controls/groups.js +2 -0
  91. package/build/components/inspector-controls/groups.js.map +1 -1
  92. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +46 -0
  93. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  94. package/build/components/inspector-controls-tabs/index.js +71 -0
  95. package/build/components/inspector-controls-tabs/index.js.map +1 -0
  96. package/build/components/inspector-controls-tabs/settings-tab.js +28 -0
  97. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  98. package/build/components/inspector-controls-tabs/styles-tab.js +61 -0
  99. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  100. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +97 -0
  101. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  102. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +18 -0
  103. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  104. package/build/components/inspector-controls-tabs/utils.js +37 -0
  105. package/build/components/inspector-controls-tabs/utils.js.map +1 -0
  106. package/build/components/link-control/index.js +1 -0
  107. package/build/components/link-control/index.js.map +1 -1
  108. package/build/components/link-control/search-input.js +0 -1
  109. package/build/components/link-control/search-input.js.map +1 -1
  110. package/build/components/link-control/use-internal-input-value.js +3 -3
  111. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  112. package/build/components/list-view/block.js +5 -2
  113. package/build/components/list-view/block.js.map +1 -1
  114. package/build/components/list-view/branch.js +13 -12
  115. package/build/components/list-view/branch.js.map +1 -1
  116. package/build/components/media-upload/index.native.js +2 -3
  117. package/build/components/media-upload/index.native.js.map +1 -1
  118. package/build/components/off-canvas-editor/appender.js +104 -0
  119. package/build/components/off-canvas-editor/appender.js.map +1 -0
  120. package/build/components/off-canvas-editor/block-edit-button.js +50 -0
  121. package/build/components/off-canvas-editor/block-edit-button.js.map +1 -0
  122. package/build/components/off-canvas-editor/block.js +36 -4
  123. package/build/components/off-canvas-editor/block.js.map +1 -1
  124. package/build/components/off-canvas-editor/branch.js +3 -5
  125. package/build/components/off-canvas-editor/branch.js.map +1 -1
  126. package/build/components/off-canvas-editor/index.js +20 -11
  127. package/build/components/off-canvas-editor/index.js.map +1 -1
  128. package/build/components/off-canvas-editor/leaf.js +1 -1
  129. package/build/components/off-canvas-editor/leaf.js.map +1 -1
  130. package/build/components/off-canvas-editor/link-ui.js +185 -0
  131. package/build/components/off-canvas-editor/link-ui.js.map +1 -0
  132. package/build/components/off-canvas-editor/update-attributes.js +108 -0
  133. package/build/components/off-canvas-editor/update-attributes.js.map +1 -0
  134. package/build/components/rich-text/format-toolbar/index.js +8 -4
  135. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  136. package/build/components/rich-text/index.js +3 -3
  137. package/build/components/rich-text/index.js.map +1 -1
  138. package/build/components/rich-text/index.native.js +0 -2
  139. package/build/components/rich-text/index.native.js.map +1 -1
  140. package/build/components/rich-text/use-insert-replacement-text.js +43 -0
  141. package/build/components/rich-text/use-insert-replacement-text.js.map +1 -0
  142. package/build/components/rich-text/use-undo-automatic-change.js +9 -1
  143. package/build/components/rich-text/use-undo-automatic-change.js.map +1 -1
  144. package/build/components/rich-text/utils.js +1 -19
  145. package/build/components/rich-text/utils.js.map +1 -1
  146. package/build/components/spacing-sizes-control/spacing-input-control.js +12 -3
  147. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  148. package/build/components/ungroup-button/index.native.js +4 -2
  149. package/build/components/ungroup-button/index.native.js.map +1 -1
  150. package/build/components/url-input/index.js +46 -43
  151. package/build/components/url-input/index.js.map +1 -1
  152. package/build/components/use-block-display-information/index.js +8 -4
  153. package/build/components/use-block-display-information/index.js.map +1 -1
  154. package/build/components/use-setting/index.js +9 -1
  155. package/build/components/use-setting/index.js.map +1 -1
  156. package/build/hooks/child-layout.js +209 -0
  157. package/build/hooks/child-layout.js.map +1 -0
  158. package/build/hooks/content-lock-ui.js +1 -1
  159. package/build/hooks/content-lock-ui.js.map +1 -1
  160. package/build/hooks/dimensions.js +25 -7
  161. package/build/hooks/dimensions.js.map +1 -1
  162. package/build/hooks/layout.js +57 -1
  163. package/build/hooks/layout.js.map +1 -1
  164. package/build/hooks/min-height.js +4 -10
  165. package/build/hooks/min-height.js.map +1 -1
  166. package/build/store/reducer.js +393 -270
  167. package/build/store/reducer.js.map +1 -1
  168. package/build/store/selectors.js +57 -47
  169. package/build/store/selectors.js.map +1 -1
  170. package/build/utils/sorting.js +63 -0
  171. package/build/utils/sorting.js.map +1 -0
  172. package/build-module/autocompleters/block.js +2 -6
  173. package/build-module/autocompleters/block.js.map +1 -1
  174. package/build-module/autocompleters/link.js +2 -0
  175. package/build-module/autocompleters/link.js.map +1 -1
  176. package/build-module/components/block-card/index.js +45 -3
  177. package/build-module/components/block-card/index.js.map +1 -1
  178. package/build-module/components/block-draggable/index.native.js +40 -31
  179. package/build-module/components/block-draggable/index.native.js.map +1 -1
  180. package/build-module/components/block-edit/edit.js +4 -2
  181. package/build-module/components/block-edit/edit.js.map +1 -1
  182. package/build-module/components/block-edit/edit.native.js +4 -6
  183. package/build-module/components/block-edit/edit.native.js.map +1 -1
  184. package/build-module/components/block-inspector/index.js +32 -30
  185. package/build-module/components/block-inspector/index.js.map +1 -1
  186. package/build-module/components/block-list/block-list-context.native.js +5 -8
  187. package/build-module/components/block-list/block-list-context.native.js.map +1 -1
  188. package/build-module/components/block-list/block.js +55 -25
  189. package/build-module/components/block-list/block.js.map +1 -1
  190. package/build-module/components/block-list/block.native.js +61 -28
  191. package/build-module/components/block-list/block.native.js.map +1 -1
  192. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +13 -6
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  194. package/build-module/components/block-pattern-setup/index.js +3 -2
  195. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  196. package/build-module/components/block-patterns-list/index.js +35 -13
  197. package/build-module/components/block-patterns-list/index.js.map +1 -1
  198. package/build-module/components/block-preview/auto.js +9 -3
  199. package/build-module/components/block-preview/auto.js.map +1 -1
  200. package/build-module/components/block-preview/index.js +5 -8
  201. package/build-module/components/block-preview/index.js.map +1 -1
  202. package/build-module/components/block-settings-menu/block-settings-dropdown.js +5 -2
  203. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  204. package/build-module/components/block-toolbar/index.js +6 -2
  205. package/build-module/components/block-toolbar/index.js.map +1 -1
  206. package/build-module/components/block-tools/insertion-point.js +8 -49
  207. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  208. package/build-module/components/block-variation-picker/index.js +1 -2
  209. package/build-module/components/block-variation-picker/index.js.map +1 -1
  210. package/build-module/components/height-control/index.js +103 -0
  211. package/build-module/components/height-control/index.js.map +1 -0
  212. package/build-module/components/iframe/index.js +11 -8
  213. package/build-module/components/iframe/index.js.map +1 -1
  214. package/build-module/components/image-editor/use-save-image.js +2 -0
  215. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  216. package/build-module/components/image-editor/zoom-dropdown.js +1 -0
  217. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -1
  218. package/build-module/components/index.js +1 -0
  219. package/build-module/components/index.js.map +1 -1
  220. package/build-module/components/inner-blocks/index.js +22 -8
  221. package/build-module/components/inner-blocks/index.js.map +1 -1
  222. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +23 -10
  223. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  224. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  225. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  226. package/build-module/components/inserter/block-patterns-tab.js +27 -49
  227. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  228. package/build-module/components/inserter/block-types-tab.js +3 -2
  229. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  230. package/build-module/components/inserter/hooks/use-debounced-input.js +18 -0
  231. package/build-module/components/inserter/hooks/use-debounced-input.js.map +1 -0
  232. package/build-module/components/inserter/index.js +8 -3
  233. package/build-module/components/inserter/index.js.map +1 -1
  234. package/build-module/components/inserter/index.native.js +3 -5
  235. package/build-module/components/inserter/index.native.js.map +1 -1
  236. package/build-module/components/inserter/media-tab/hooks.js +89 -0
  237. package/build-module/components/inserter/media-tab/hooks.js.map +1 -0
  238. package/build-module/components/inserter/media-tab/index.js +4 -0
  239. package/build-module/components/inserter/media-tab/index.js.map +1 -0
  240. package/build-module/components/inserter/media-tab/media-list.js +86 -0
  241. package/build-module/components/inserter/media-tab/media-list.js.map +1 -0
  242. package/build-module/components/inserter/media-tab/media-panel.js +77 -0
  243. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -0
  244. package/build-module/components/inserter/media-tab/media-tab.js +100 -0
  245. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -0
  246. package/build-module/components/inserter/media-tab/utils.js +45 -0
  247. package/build-module/components/inserter/media-tab/utils.js.map +1 -0
  248. package/build-module/components/inserter/menu.js +33 -12
  249. package/build-module/components/inserter/menu.js.map +1 -1
  250. package/build-module/components/inserter/mobile-tab-navigation.js +61 -0
  251. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -0
  252. package/build-module/components/inserter/quick-inserter.js +1 -0
  253. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  254. package/build-module/components/inserter/search-results.js +3 -2
  255. package/build-module/components/inserter/search-results.js.map +1 -1
  256. package/build-module/components/inserter/tabs.js +15 -2
  257. package/build-module/components/inserter/tabs.js.map +1 -1
  258. package/build-module/components/inserter-list-item/index.js +5 -2
  259. package/build-module/components/inserter-list-item/index.js.map +1 -1
  260. package/build-module/components/inspector-controls/groups.js +2 -0
  261. package/build-module/components/inspector-controls/groups.js.map +1 -1
  262. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +32 -0
  263. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  264. package/build-module/components/inspector-controls-tabs/index.js +56 -0
  265. package/build-module/components/inspector-controls-tabs/index.js.map +1 -0
  266. package/build-module/components/inspector-controls-tabs/settings-tab.js +17 -0
  267. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  268. package/build-module/components/inspector-controls-tabs/styles-tab.js +46 -0
  269. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  270. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +81 -0
  271. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  272. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +8 -0
  273. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  274. package/build-module/components/inspector-controls-tabs/utils.js +26 -0
  275. package/build-module/components/inspector-controls-tabs/utils.js.map +1 -0
  276. package/build-module/components/link-control/index.js +1 -0
  277. package/build-module/components/link-control/index.js.map +1 -1
  278. package/build-module/components/link-control/search-input.js +0 -1
  279. package/build-module/components/link-control/search-input.js.map +1 -1
  280. package/build-module/components/link-control/use-internal-input-value.js +3 -3
  281. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  282. package/build-module/components/list-view/block.js +5 -2
  283. package/build-module/components/list-view/block.js.map +1 -1
  284. package/build-module/components/list-view/branch.js +12 -11
  285. package/build-module/components/list-view/branch.js.map +1 -1
  286. package/build-module/components/media-upload/index.native.js +2 -4
  287. package/build-module/components/media-upload/index.native.js.map +1 -1
  288. package/build-module/components/off-canvas-editor/appender.js +89 -0
  289. package/build-module/components/off-canvas-editor/appender.js.map +1 -0
  290. package/build-module/components/off-canvas-editor/block-edit-button.js +35 -0
  291. package/build-module/components/off-canvas-editor/block-edit-button.js.map +1 -0
  292. package/build-module/components/off-canvas-editor/block.js +36 -6
  293. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  294. package/build-module/components/off-canvas-editor/branch.js +3 -4
  295. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  296. package/build-module/components/off-canvas-editor/index.js +20 -12
  297. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  298. package/build-module/components/off-canvas-editor/leaf.js +1 -1
  299. package/build-module/components/off-canvas-editor/leaf.js.map +1 -1
  300. package/build-module/components/off-canvas-editor/link-ui.js +165 -0
  301. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -0
  302. package/build-module/components/off-canvas-editor/update-attributes.js +97 -0
  303. package/build-module/components/off-canvas-editor/update-attributes.js.map +1 -0
  304. package/build-module/components/rich-text/format-toolbar/index.js +6 -2
  305. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  306. package/build-module/components/rich-text/index.js +2 -3
  307. package/build-module/components/rich-text/index.js.map +1 -1
  308. package/build-module/components/rich-text/index.native.js +0 -2
  309. package/build-module/components/rich-text/index.native.js.map +1 -1
  310. package/build-module/components/rich-text/use-insert-replacement-text.js +33 -0
  311. package/build-module/components/rich-text/use-insert-replacement-text.js.map +1 -0
  312. package/build-module/components/rich-text/use-undo-automatic-change.js +9 -1
  313. package/build-module/components/rich-text/use-undo-automatic-change.js.map +1 -1
  314. package/build-module/components/rich-text/utils.js +1 -16
  315. package/build-module/components/rich-text/utils.js.map +1 -1
  316. package/build-module/components/spacing-sizes-control/spacing-input-control.js +12 -3
  317. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  318. package/build-module/components/ungroup-button/index.native.js +3 -2
  319. package/build-module/components/ungroup-button/index.native.js.map +1 -1
  320. package/build-module/components/url-input/index.js +46 -43
  321. package/build-module/components/url-input/index.js.map +1 -1
  322. package/build-module/components/use-block-display-information/index.js +9 -5
  323. package/build-module/components/use-block-display-information/index.js.map +1 -1
  324. package/build-module/components/use-setting/index.js +8 -1
  325. package/build-module/components/use-setting/index.js.map +1 -1
  326. package/build-module/hooks/child-layout.js +189 -0
  327. package/build-module/hooks/child-layout.js.map +1 -0
  328. package/build-module/hooks/content-lock-ui.js +1 -1
  329. package/build-module/hooks/content-lock-ui.js.map +1 -1
  330. package/build-module/hooks/dimensions.js +25 -8
  331. package/build-module/hooks/dimensions.js.map +1 -1
  332. package/build-module/hooks/layout.js +55 -0
  333. package/build-module/hooks/layout.js.map +1 -1
  334. package/build-module/hooks/min-height.js +3 -9
  335. package/build-module/hooks/min-height.js.map +1 -1
  336. package/build-module/store/reducer.js +391 -271
  337. package/build-module/store/reducer.js.map +1 -1
  338. package/build-module/store/selectors.js +54 -47
  339. package/build-module/store/selectors.js.map +1 -1
  340. package/build-module/utils/sorting.js +56 -0
  341. package/build-module/utils/sorting.js.map +1 -0
  342. package/build-style/content-rtl.css +701 -0
  343. package/build-style/content.css +701 -0
  344. package/build-style/default-editor-styles-rtl.css +14 -0
  345. package/build-style/default-editor-styles.css +14 -0
  346. package/build-style/style-rtl.css +286 -662
  347. package/build-style/style.css +286 -662
  348. package/package.json +32 -30
  349. package/src/autocompleters/block.js +2 -6
  350. package/src/autocompleters/link.js +2 -0
  351. package/src/components/alignment-control/test/index.js +4 -1
  352. package/src/components/block-alignment-control/test/index.js +4 -1
  353. package/src/components/block-card/index.js +46 -2
  354. package/src/components/block-card/style.scss +4 -0
  355. package/src/components/block-content-overlay/{style.scss → content.scss} +7 -1
  356. package/src/components/block-draggable/content.scss +20 -0
  357. package/src/components/block-draggable/index.native.js +54 -40
  358. package/src/components/block-draggable/style.scss +0 -21
  359. package/src/components/block-draggable/test/helpers.native.js +7 -9
  360. package/src/components/block-draggable/test/index.native.js +35 -45
  361. package/src/components/block-edit/edit.js +5 -2
  362. package/src/components/block-edit/edit.native.js +5 -6
  363. package/src/components/block-inspector/index.js +96 -81
  364. package/src/components/block-inspector/style.scss +9 -1
  365. package/src/components/block-list/block-list-context.native.js +5 -8
  366. package/src/components/block-list/block.js +74 -23
  367. package/src/components/block-list/block.native.js +78 -23
  368. package/src/components/block-list/{style.scss → content.scss} +1 -15
  369. package/src/components/block-list-appender/{style.scss → content.scss} +0 -0
  370. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +24 -6
  371. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +0 -2
  372. package/src/components/block-pattern-setup/index.js +2 -1
  373. package/src/components/block-patterns-list/index.js +47 -24
  374. package/src/components/block-preview/README.md +15 -10
  375. package/src/components/block-preview/auto.js +7 -1
  376. package/src/components/block-preview/content.scss +4 -0
  377. package/src/components/block-preview/index.js +7 -12
  378. package/src/components/block-preview/style.scss +0 -7
  379. package/src/components/block-preview/test/index.js +18 -35
  380. package/src/components/block-selection-clearer/test/index.js +12 -12
  381. package/src/components/block-settings-menu/block-settings-dropdown.js +32 -20
  382. package/src/components/block-switcher/test/index.js +4 -0
  383. package/src/components/block-toolbar/index.js +12 -5
  384. package/src/components/block-toolbar/style.scss +10 -0
  385. package/src/components/block-tools/insertion-point.js +3 -47
  386. package/src/components/block-tools/style.scss +12 -5
  387. package/src/components/block-variation-picker/index.js +1 -4
  388. package/src/components/block-vertical-alignment-control/test/index.js +4 -1
  389. package/src/components/default-block-appender/{style.scss → content.scss} +0 -0
  390. package/src/components/height-control/index.js +123 -0
  391. package/src/components/height-control/stories/index.js +21 -0
  392. package/src/components/height-control/style.scss +5 -0
  393. package/src/components/iframe/index.js +25 -18
  394. package/src/components/image-editor/use-save-image.js +2 -0
  395. package/src/components/image-editor/zoom-dropdown.js +1 -0
  396. package/src/components/index.js +1 -0
  397. package/src/components/inner-blocks/{style.scss → content.scss} +0 -0
  398. package/src/components/inner-blocks/index.js +23 -6
  399. package/src/components/inner-blocks/use-inner-block-template-sync.js +28 -10
  400. package/src/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  401. package/src/components/inserter/block-patterns-tab.js +28 -71
  402. package/src/components/inserter/block-types-tab.js +3 -2
  403. package/src/components/inserter/hooks/use-debounced-input.js +17 -0
  404. package/src/components/inserter/index.js +10 -2
  405. package/src/components/inserter/index.native.js +1 -1
  406. package/src/components/inserter/media-tab/hooks.js +88 -0
  407. package/src/components/inserter/media-tab/index.js +3 -0
  408. package/src/components/inserter/media-tab/media-list.js +93 -0
  409. package/src/components/inserter/media-tab/media-panel.js +83 -0
  410. package/src/components/inserter/media-tab/media-tab.js +135 -0
  411. package/src/components/inserter/media-tab/utils.js +37 -0
  412. package/src/components/inserter/menu.js +55 -13
  413. package/src/components/inserter/mobile-tab-navigation.js +85 -0
  414. package/src/components/inserter/quick-inserter.js +1 -0
  415. package/src/components/inserter/search-results.js +3 -2
  416. package/src/components/inserter/stories/index.js +1 -1
  417. package/src/components/inserter/stories/{fixtures.js → utils/fixtures.js} +0 -0
  418. package/src/components/inserter/style.scss +176 -11
  419. package/src/components/inserter/tabs.js +12 -1
  420. package/src/components/inserter-list-item/index.js +11 -1
  421. package/src/components/inserter-list-item/style.scss +26 -0
  422. package/src/components/inspector-controls/groups.js +2 -0
  423. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +37 -0
  424. package/src/components/inspector-controls-tabs/index.js +62 -0
  425. package/src/components/inspector-controls-tabs/settings-tab.js +18 -0
  426. package/src/components/inspector-controls-tabs/styles-tab.js +51 -0
  427. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +89 -0
  428. package/src/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +9 -0
  429. package/src/components/inspector-controls-tabs/utils.js +28 -0
  430. package/src/components/line-height-control/test/index.js +5 -5
  431. package/src/components/link-control/README.md +1 -1
  432. package/src/components/link-control/index.js +1 -0
  433. package/src/components/link-control/search-input.js +0 -1
  434. package/src/components/link-control/test/index.js +188 -401
  435. package/src/components/link-control/use-internal-input-value.js +3 -3
  436. package/src/components/list-view/block.js +3 -0
  437. package/src/components/list-view/branch.js +10 -8
  438. package/src/components/list-view/style.scss +20 -9
  439. package/src/components/media-placeholder/{style.scss → content.scss} +0 -0
  440. package/src/components/media-replace-flow/test/index.js +37 -9
  441. package/src/components/media-upload/test/index.native.js +2 -0
  442. package/src/components/off-canvas-editor/appender.js +93 -0
  443. package/src/components/off-canvas-editor/block-edit-button.js +27 -0
  444. package/src/components/off-canvas-editor/block.js +88 -22
  445. package/src/components/off-canvas-editor/branch.js +3 -5
  446. package/src/components/off-canvas-editor/index.js +59 -33
  447. package/src/components/off-canvas-editor/leaf.js +5 -1
  448. package/src/components/off-canvas-editor/link-ui.js +166 -0
  449. package/src/components/off-canvas-editor/style.scss +17 -388
  450. package/src/components/off-canvas-editor/update-attributes.js +99 -0
  451. package/src/components/plain-text/{style.scss → content.scss} +0 -0
  452. package/src/components/recursion-provider/test/index.js +27 -29
  453. package/src/components/rich-text/content.scss +42 -0
  454. package/src/components/rich-text/format-toolbar/index.js +6 -4
  455. package/src/components/rich-text/index.js +2 -2
  456. package/src/components/rich-text/index.native.js +0 -2
  457. package/src/components/rich-text/style.scss +0 -43
  458. package/src/components/rich-text/use-insert-replacement-text.js +31 -0
  459. package/src/components/rich-text/use-undo-automatic-change.js +7 -1
  460. package/src/components/rich-text/utils.js +2 -21
  461. package/src/components/spacing-sizes-control/spacing-input-control.js +9 -0
  462. package/src/components/ungroup-button/index.native.js +6 -2
  463. package/src/components/url-input/index.js +57 -73
  464. package/src/components/url-popover/test/__snapshots__/index.js.snap +8 -6
  465. package/src/components/url-popover/test/index.js +21 -9
  466. package/src/components/use-block-display-information/index.js +14 -5
  467. package/src/components/use-setting/index.js +13 -1
  468. package/src/components/use-setting/test/index.js +99 -0
  469. package/src/content.scss +10 -0
  470. package/src/hooks/child-layout.js +190 -0
  471. package/src/hooks/content-lock-ui.js +1 -1
  472. package/src/hooks/dimensions.js +45 -7
  473. package/src/hooks/layout.js +60 -0
  474. package/src/hooks/min-height.js +2 -19
  475. package/src/store/reducer.js +459 -423
  476. package/src/store/selectors.js +56 -57
  477. package/src/store/test/performance.js +71 -0
  478. package/src/store/test/reducer.js +623 -491
  479. package/src/store/test/selectors.js +1820 -1306
  480. package/src/style.scss +4 -7
  481. package/src/utils/sorting.js +54 -0
  482. package/src/utils/test/sorting.js +49 -0
  483. package/tsconfig.tsbuildinfo +1 -1
  484. package/build/components/block-preview/live.js +0 -30
  485. package/build/components/block-preview/live.js.map +0 -1
  486. package/build-module/components/block-preview/live.js +0 -20
  487. package/build-module/components/block-preview/live.js.map +0 -1
  488. package/src/components/block-preview/live.js +0 -19
@@ -2,7 +2,11 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect } from '@wordpress/data';
5
- import { store as blocksStore } from '@wordpress/blocks';
5
+ import {
6
+ store as blocksStore,
7
+ isReusableBlock,
8
+ isTemplatePart,
9
+ } from '@wordpress/blocks';
6
10
 
7
11
  /**
8
12
  * Internal dependencies
@@ -16,10 +20,11 @@ import { store as blockEditorStore } from '../../store';
16
20
  *
17
21
  * @typedef {Object} WPBlockDisplayInformation
18
22
  *
19
- * @property {string} title Human-readable block type label.
20
- * @property {WPIcon} icon Block type icon.
21
- * @property {string} description A detailed block type description.
22
- * @property {string} anchor HTML anchor.
23
+ * @property {boolean} isSynced True if is a reusable block or template part
24
+ * @property {string} title Human-readable block type label.
25
+ * @property {WPIcon} icon Block type icon.
26
+ * @property {string} description A detailed block type description.
27
+ * @property {string} anchor HTML anchor.
23
28
  */
24
29
 
25
30
  /**
@@ -50,7 +55,10 @@ export default function useBlockDisplayInformation( clientId ) {
50
55
  if ( ! blockType ) return null;
51
56
  const attributes = getBlockAttributes( clientId );
52
57
  const match = getActiveBlockVariation( blockName, attributes );
58
+ const isSynced =
59
+ isReusableBlock( blockType ) || isTemplatePart( blockType );
53
60
  const blockTypeInfo = {
61
+ isSynced,
54
62
  title: blockType.title,
55
63
  icon: blockType.icon,
56
64
  description: blockType.description,
@@ -59,6 +67,7 @@ export default function useBlockDisplayInformation( clientId ) {
59
67
  if ( ! match ) return blockTypeInfo;
60
68
 
61
69
  return {
70
+ isSynced,
62
71
  title: match.title || blockType.title,
63
72
  icon: match.icon || blockType.icon,
64
73
  description: match.description || blockType.description,
@@ -11,6 +11,7 @@ import {
11
11
  __EXPERIMENTAL_PATHS_WITH_MERGE as PATHS_WITH_MERGE,
12
12
  hasBlockSupport,
13
13
  } from '@wordpress/blocks';
14
+ import { applyFilters } from '@wordpress/hooks';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -122,7 +123,18 @@ export default function useSetting( path ) {
122
123
  return undefined;
123
124
  }
124
125
 
125
- let result;
126
+ // 0. Allow third parties to filter the block's settings at runtime.
127
+ let result = applyFilters(
128
+ 'blockEditor.useSetting.before',
129
+ undefined,
130
+ path,
131
+ clientId,
132
+ blockName
133
+ );
134
+
135
+ if ( undefined !== result ) {
136
+ return result;
137
+ }
126
138
 
127
139
  const normalizedPath = removeCustomPrefixes( path );
128
140
 
@@ -0,0 +1,99 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { addFilter, removeFilter } from '@wordpress/hooks';
5
+ import { useSelect } from '@wordpress/data';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import useSetting from '..';
11
+ import * as BlockEditContext from '../../block-edit/context';
12
+
13
+ // Mock useSelect() functions used by useSetting()
14
+ jest.mock( '@wordpress/data/src/components/use-select' );
15
+
16
+ let selectMock = {};
17
+ const setupSelectMock = () => {
18
+ selectMock = {
19
+ getSettings: () => ( {} ),
20
+ getBlockParents: () => [],
21
+ getBlockName: () => '',
22
+ };
23
+ };
24
+
25
+ useSelect.mockImplementation( ( callback ) => callback( () => selectMock ) );
26
+
27
+ const mockSettings = ( settings ) => {
28
+ selectMock.getSettings = () => ( {
29
+ __experimentalFeatures: settings,
30
+ } );
31
+ };
32
+
33
+ const mockCurrentBlockContext = (
34
+ blockContext = { name: '', isSelected: false }
35
+ ) => {
36
+ jest.spyOn( BlockEditContext, 'useBlockEditContext' ).mockReturnValue(
37
+ blockContext
38
+ );
39
+ };
40
+
41
+ describe( 'useSetting', () => {
42
+ beforeEach( () => {
43
+ setupSelectMock();
44
+ mockCurrentBlockContext();
45
+ } );
46
+
47
+ it( 'uses block setting', () => {
48
+ mockSettings( {
49
+ blocks: {
50
+ 'core/test-block': {
51
+ layout: {
52
+ contentSize: '840px',
53
+ },
54
+ },
55
+ },
56
+ } );
57
+
58
+ mockCurrentBlockContext( {
59
+ name: 'core/test-block',
60
+ } );
61
+
62
+ expect( useSetting( 'layout.contentSize' ) ).toBe( '840px' );
63
+ } );
64
+
65
+ it( 'uses blockEditor.useSetting.before hook override', () => {
66
+ mockSettings( {
67
+ blocks: {
68
+ 'core/test-block': {
69
+ layout: {
70
+ contentSize: '840px',
71
+ },
72
+ },
73
+ },
74
+ } );
75
+
76
+ mockCurrentBlockContext( {
77
+ name: 'core/test-block',
78
+ } );
79
+
80
+ addFilter(
81
+ 'blockEditor.useSetting.before',
82
+ 'test/useSetting.before',
83
+ ( result, path, clientId, blockName ) => {
84
+ if ( blockName === 'core/test-block' ) {
85
+ return '960px';
86
+ }
87
+
88
+ return result;
89
+ }
90
+ );
91
+
92
+ expect( useSetting( 'layout.contentSize' ) ).toBe( '960px' );
93
+
94
+ removeFilter(
95
+ 'blockEditor.useSetting.before',
96
+ 'test/useSetting.before'
97
+ );
98
+ } );
99
+ } );
@@ -0,0 +1,10 @@
1
+ @import "./components/block-list/content.scss";
2
+ @import "./components/block-list-appender/content.scss";
3
+ @import "./components/block-content-overlay/content.scss";
4
+ @import "./components/block-draggable/content.scss";
5
+ @import "./components/block-preview/content.scss";
6
+ @import "./components/default-block-appender/content.scss";
7
+ @import "./components/inner-blocks/content.scss";
8
+ @import "./components/media-placeholder/content.scss";
9
+ @import "./components/plain-text/content.scss";
10
+ @import "./components/rich-text/content.scss";
@@ -0,0 +1,190 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalToggleGroupControl as ToggleGroupControl,
6
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
7
+ __experimentalUnitControl as UnitControl,
8
+ } from '@wordpress/components';
9
+ import { __ } from '@wordpress/i18n';
10
+ import { useEffect } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import useSetting from '../components/use-setting';
16
+
17
+ function helpText( selfStretch, parentLayout ) {
18
+ const { orientation = 'horizontal' } = parentLayout;
19
+
20
+ if ( selfStretch === 'fill' ) {
21
+ return __( 'Stretch to fill available space.' );
22
+ }
23
+ if ( selfStretch === 'fixed' ) {
24
+ if ( orientation === 'horizontal' ) {
25
+ return __( 'Specify a fixed width.' );
26
+ }
27
+ return __( 'Specify a fixed height.' );
28
+ }
29
+ return __( 'Fit contents.' );
30
+ }
31
+
32
+ /**
33
+ * Inspector controls containing the child layout related configuration.
34
+ *
35
+ * @param {Object} props Block props.
36
+ * @param {Object} props.attributes Block attributes.
37
+ * @param {Object} props.setAttributes Function to set block attributes.
38
+ * @param {Object} props.__unstableParentLayout
39
+ *
40
+ * @return {WPElement} child layout edit element.
41
+ */
42
+ export function ChildLayoutEdit( {
43
+ attributes,
44
+ setAttributes,
45
+ __unstableParentLayout: parentLayout,
46
+ } ) {
47
+ const { style = {} } = attributes;
48
+ const { layout: childLayout = {} } = style;
49
+ const { selfStretch, flexSize } = childLayout;
50
+
51
+ useEffect( () => {
52
+ if ( selfStretch === 'fixed' && ! flexSize ) {
53
+ setAttributes( {
54
+ style: {
55
+ ...style,
56
+ layout: {
57
+ ...childLayout,
58
+ selfStretch: 'fit',
59
+ },
60
+ },
61
+ } );
62
+ }
63
+ }, [] );
64
+
65
+ return (
66
+ <>
67
+ <ToggleGroupControl
68
+ size={ '__unstable-large' }
69
+ label={ childLayoutOrientation( parentLayout ) }
70
+ value={ selfStretch || 'fit' }
71
+ help={ helpText( selfStretch, parentLayout ) }
72
+ onChange={ ( value ) => {
73
+ const newFlexSize = value !== 'fixed' ? null : flexSize;
74
+ setAttributes( {
75
+ style: {
76
+ ...style,
77
+ layout: {
78
+ ...childLayout,
79
+ selfStretch: value,
80
+ flexSize: newFlexSize,
81
+ },
82
+ },
83
+ } );
84
+ } }
85
+ isBlock={ true }
86
+ >
87
+ <ToggleGroupControlOption
88
+ key={ 'fit' }
89
+ value={ 'fit' }
90
+ label={ __( 'Fit' ) }
91
+ />
92
+ <ToggleGroupControlOption
93
+ key={ 'fill' }
94
+ value={ 'fill' }
95
+ label={ __( 'Fill' ) }
96
+ />
97
+ <ToggleGroupControlOption
98
+ key={ 'fixed' }
99
+ value={ 'fixed' }
100
+ label={ __( 'Fixed' ) }
101
+ />
102
+ </ToggleGroupControl>
103
+ { selfStretch === 'fixed' && (
104
+ <UnitControl
105
+ size={ '__unstable-large' }
106
+ onChange={ ( value ) => {
107
+ setAttributes( {
108
+ style: {
109
+ ...style,
110
+ layout: {
111
+ ...childLayout,
112
+ flexSize: value,
113
+ },
114
+ },
115
+ } );
116
+ } }
117
+ value={ flexSize }
118
+ />
119
+ ) }
120
+ </>
121
+ );
122
+ }
123
+
124
+ /**
125
+ * Determines if there is child layout support.
126
+ *
127
+ * @param {Object} props Block Props object.
128
+ * @param {Object} props.__unstableParentLayout Parent layout.
129
+ *
130
+ * @return {boolean} Whether there is support.
131
+ */
132
+ export function hasChildLayoutSupport( {
133
+ __unstableParentLayout: parentLayout = {},
134
+ } ) {
135
+ const {
136
+ type: parentLayoutType = 'default',
137
+ allowSizingOnChildren = false,
138
+ } = parentLayout;
139
+ const support = parentLayoutType === 'flex' && allowSizingOnChildren;
140
+
141
+ return support;
142
+ }
143
+
144
+ /**
145
+ * Checks if there is a current value in the child layout attributes.
146
+ *
147
+ * @param {Object} props Block props.
148
+ * @return {boolean} Whether or not the block has a child layout value set.
149
+ */
150
+ export function hasChildLayoutValue( props ) {
151
+ return props.attributes.style?.layout !== undefined;
152
+ }
153
+
154
+ /**
155
+ * Resets the child layout attribute. This can be used when disabling
156
+ * child layout controls for a block via a progressive discovery panel.
157
+ *
158
+ * @param {Object} props Block props.
159
+ * @param {Object} props.attributes Block attributes.
160
+ * @param {Object} props.setAttributes Function to set block attributes.
161
+ */
162
+ export function resetChildLayout( { attributes = {}, setAttributes } ) {
163
+ const { style } = attributes;
164
+
165
+ setAttributes( {
166
+ style: {
167
+ ...style,
168
+ layout: undefined,
169
+ },
170
+ } );
171
+ }
172
+
173
+ /**
174
+ * Custom hook that checks if child layout settings have been disabled.
175
+ *
176
+ * @param {Object} props Block props.
177
+ *
178
+ * @return {boolean} Whether the child layout setting is disabled.
179
+ */
180
+ export function useIsChildLayoutDisabled( props ) {
181
+ const isDisabled = ! useSetting( 'layout' );
182
+
183
+ return ! hasChildLayoutSupport( props ) || isDisabled;
184
+ }
185
+
186
+ export function childLayoutOrientation( parentLayout ) {
187
+ const { orientation = 'horizontal' } = parentLayout;
188
+
189
+ return orientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );
190
+ }
@@ -168,6 +168,6 @@ export const withBlockControls = createHigherOrderComponent(
168
168
 
169
169
  addFilter(
170
170
  'editor.BlockEdit',
171
- 'core/style/with-block-controls',
171
+ 'core/content-lock-ui/with-block-controls',
172
172
  withBlockControls
173
173
  );
@@ -6,7 +6,10 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';
9
+ import {
10
+ __experimentalToolsPanelItem as ToolsPanelItem,
11
+ __experimentalVStack as VStack,
12
+ } from '@wordpress/components';
10
13
  import { Platform, useState } from '@wordpress/element';
11
14
  import { __ } from '@wordpress/i18n';
12
15
  import { getBlockSupport } from '@wordpress/blocks';
@@ -46,6 +49,14 @@ import {
46
49
  resetPadding,
47
50
  useIsPaddingDisabled,
48
51
  } from './padding';
52
+ import {
53
+ ChildLayoutEdit,
54
+ hasChildLayoutSupport,
55
+ hasChildLayoutValue,
56
+ resetChildLayout,
57
+ useIsChildLayoutDisabled,
58
+ childLayoutOrientation,
59
+ } from './child-layout';
49
60
  import useSetting from '../components/use-setting';
50
61
  import { store as blockEditorStore } from '../store';
51
62
 
@@ -85,8 +96,9 @@ export function DimensionsPanel( props ) {
85
96
  const isPaddingDisabled = useIsPaddingDisabled( props );
86
97
  const isMarginDisabled = useIsMarginDisabled( props );
87
98
  const isMinHeightDisabled = useIsMinHeightDisabled( props );
99
+ const isChildLayoutDisabled = useIsChildLayoutDisabled( props );
88
100
  const isDisabled = useIsDimensionsDisabled( props );
89
- const isSupported = hasDimensionsSupport( props.name );
101
+ const isSupported = hasDimensionsSupport( props );
90
102
  const spacingSizes = useSetting( 'spacing.spacingSizes' );
91
103
  const paddingMouseOver = useVisualizerMouseOver();
92
104
  const marginMouseOver = useVisualizerMouseOver();
@@ -121,6 +133,8 @@ export function DimensionsPanel( props ) {
121
133
  'tools-panel-item-spacing': spacingSizes && spacingSizes.length > 0,
122
134
  } );
123
135
 
136
+ const { __unstableParentLayout: parentLayout } = props;
137
+
124
138
  return (
125
139
  <>
126
140
  <InspectorControls __experimentalGroup="dimensions">
@@ -182,7 +196,6 @@ export function DimensionsPanel( props ) {
182
196
  ) }
183
197
  { ! isMinHeightDisabled && (
184
198
  <ToolsPanelItem
185
- className="single-column"
186
199
  hasValue={ () => hasMinHeightValue( props ) }
187
200
  label={ __( 'Min. height' ) }
188
201
  onDeselect={ () => resetMinHeight( props ) }
@@ -198,6 +211,23 @@ export function DimensionsPanel( props ) {
198
211
  <MinHeightEdit { ...props } />
199
212
  </ToolsPanelItem>
200
213
  ) }
214
+ { ! isChildLayoutDisabled && (
215
+ <VStack
216
+ as={ ToolsPanelItem }
217
+ spacing={ 2 }
218
+ hasValue={ () => hasChildLayoutValue( props ) }
219
+ label={ childLayoutOrientation( parentLayout ) }
220
+ onDeselect={ () => resetChildLayout( props ) }
221
+ resetAllFilter={ createResetAllFilter(
222
+ 'selfStretch',
223
+ 'layout'
224
+ ) }
225
+ isShownByDefault={ false }
226
+ panelId={ props.clientId }
227
+ >
228
+ <ChildLayoutEdit { ...props } />
229
+ </VStack>
230
+ ) }
201
231
  </InspectorControls>
202
232
  { ! isPaddingDisabled && (
203
233
  <PaddingVisualizer
@@ -218,20 +248,23 @@ export function DimensionsPanel( props ) {
218
248
  /**
219
249
  * Determine whether there is dimensions related block support.
220
250
  *
221
- * @param {string} blockName Block name.
251
+ * @param {Object} props Block props.
222
252
  *
223
253
  * @return {boolean} Whether there is support.
224
254
  */
225
- export function hasDimensionsSupport( blockName ) {
255
+ export function hasDimensionsSupport( props ) {
226
256
  if ( Platform.OS !== 'web' ) {
227
257
  return false;
228
258
  }
229
259
 
260
+ const { name: blockName } = props;
261
+
230
262
  return (
231
263
  hasGapSupport( blockName ) ||
232
264
  hasMinHeightSupport( blockName ) ||
233
265
  hasPaddingSupport( blockName ) ||
234
- hasMarginSupport( blockName )
266
+ hasMarginSupport( blockName ) ||
267
+ hasChildLayoutSupport( props )
235
268
  );
236
269
  }
237
270
 
@@ -247,9 +280,14 @@ const useIsDimensionsDisabled = ( props = {} ) => {
247
280
  const minHeightDisabled = useIsMinHeightDisabled( props );
248
281
  const paddingDisabled = useIsPaddingDisabled( props );
249
282
  const marginDisabled = useIsMarginDisabled( props );
283
+ const childLayoutDisabled = useIsChildLayoutDisabled( props );
250
284
 
251
285
  return (
252
- gapDisabled && minHeightDisabled && paddingDisabled && marginDisabled
286
+ gapDisabled &&
287
+ minHeightDisabled &&
288
+ paddingDisabled &&
289
+ marginDisabled &&
290
+ childLayoutDisabled
253
291
  );
254
292
  };
255
293
 
@@ -416,6 +416,61 @@ export const withLayoutStyles = createHigherOrderComponent(
416
416
  }
417
417
  );
418
418
 
419
+ /**
420
+ * Override the default block element to add the child layout styles.
421
+ *
422
+ * @param {Function} BlockListBlock Original component.
423
+ *
424
+ * @return {Function} Wrapped component.
425
+ */
426
+ export const withChildLayoutStyles = createHigherOrderComponent(
427
+ ( BlockListBlock ) => ( props ) => {
428
+ const { attributes } = props;
429
+ const { style: { layout = {} } = {} } = attributes;
430
+ const { selfStretch, flexSize } = layout;
431
+ const hasChildLayout = selfStretch || flexSize;
432
+ const disableLayoutStyles = useSelect( ( select ) => {
433
+ const { getSettings } = select( blockEditorStore );
434
+ return !! getSettings().disableLayoutStyles;
435
+ } );
436
+ const shouldRenderChildLayoutStyles =
437
+ hasChildLayout && ! disableLayoutStyles;
438
+
439
+ const element = useContext( BlockList.__unstableElementContext );
440
+ const id = useInstanceId( BlockListBlock );
441
+ const selector = `.wp-container-content-${ id }`;
442
+
443
+ let css = '';
444
+
445
+ if ( selfStretch === 'fixed' && flexSize ) {
446
+ css += `${ selector } {
447
+ flex-basis: ${ flexSize };
448
+ box-sizing: border-box;
449
+ }`;
450
+ } else if ( selfStretch === 'fill' ) {
451
+ css += `${ selector } {
452
+ flex-grow: 1;
453
+ }`;
454
+ }
455
+
456
+ // Attach a `wp-container-content` id-based classname.
457
+ const className = classnames( props?.className, {
458
+ [ `wp-container-content-${ id }` ]:
459
+ shouldRenderChildLayoutStyles && !! css, // Only attach a container class if there is generated CSS to be attached.
460
+ } );
461
+
462
+ return (
463
+ <>
464
+ { shouldRenderChildLayoutStyles &&
465
+ element &&
466
+ !! css &&
467
+ createPortal( <style>{ css }</style>, element ) }
468
+ <BlockListBlock { ...props } className={ className } />
469
+ </>
470
+ );
471
+ }
472
+ );
473
+
419
474
  addFilter(
420
475
  'blocks.registerBlockType',
421
476
  'core/layout/addAttribute',
@@ -426,6 +481,11 @@ addFilter(
426
481
  'core/editor/layout/with-layout-styles',
427
482
  withLayoutStyles
428
483
  );
484
+ addFilter(
485
+ 'editor.BlockListBlock',
486
+ 'core/editor/layout/with-child-layout-styles',
487
+ withChildLayoutStyles
488
+ );
429
489
  addFilter(
430
490
  'editor.BlockEdit',
431
491
  'core/editor/layout/with-inspector-controls',
@@ -2,16 +2,13 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { getBlockSupport } from '@wordpress/blocks';
5
- import {
6
- __experimentalUseCustomUnits as useCustomUnits,
7
- __experimentalUnitControl as UnitControl,
8
- } from '@wordpress/components';
9
5
  import { __ } from '@wordpress/i18n';
10
6
 
11
7
  /**
12
8
  * Internal dependencies
13
9
  */
14
10
  import useSetting from '../components/use-setting';
11
+ import HeightControl from '../components/height-control';
15
12
  import { DIMENSIONS_SUPPORT_KEY } from './dimensions';
16
13
  import { cleanEmptyObject } from './utils';
17
14
 
@@ -81,17 +78,6 @@ export function MinHeightEdit( props ) {
81
78
  setAttributes,
82
79
  } = props;
83
80
 
84
- const units = useCustomUnits( {
85
- availableUnits: useSetting( 'dimensions.units' ) || [
86
- '%',
87
- 'px',
88
- 'em',
89
- 'rem',
90
- 'vh',
91
- 'vw',
92
- ],
93
- } );
94
-
95
81
  if ( useIsMinHeightDisabled( props ) ) {
96
82
  return null;
97
83
  }
@@ -109,13 +95,10 @@ export function MinHeightEdit( props ) {
109
95
  };
110
96
 
111
97
  return (
112
- <UnitControl
98
+ <HeightControl
113
99
  label={ __( 'Min. height' ) }
114
100
  value={ style?.dimensions?.minHeight }
115
- units={ units }
116
101
  onChange={ onChange }
117
- min={ 0 }
118
- size={ '__unstable-large' }
119
102
  />
120
103
  );
121
104
  }