@wordpress/block-editor 11.2.0 → 11.3.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 (660) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +28 -4
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/autocomplete/index.js +2 -7
  6. package/build/components/autocomplete/index.js.map +1 -1
  7. package/build/components/block-alignment-matrix-control/index.js +2 -2
  8. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  9. package/build/components/block-card/index.js +2 -4
  10. package/build/components/block-card/index.js.map +1 -1
  11. package/build/components/block-edit/index.js +8 -0
  12. package/build/components/block-edit/index.js.map +1 -1
  13. package/build/components/block-inspector/index.js +15 -14
  14. package/build/components/block-inspector/index.js.map +1 -1
  15. package/build/components/block-list/use-in-between-inserter.js +5 -0
  16. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  17. package/build/components/block-lock/modal.js +0 -1
  18. package/build/components/block-lock/modal.js.map +1 -1
  19. package/build/components/block-mover/mover-description.js +2 -2
  20. package/build/components/block-mover/mover-description.js.map +1 -1
  21. package/build/components/block-navigation/dropdown.js +3 -1
  22. package/build/components/block-navigation/dropdown.js.map +1 -1
  23. package/build/components/block-pattern-setup/index.js +1 -1
  24. package/build/components/block-pattern-setup/index.js.map +1 -1
  25. package/build/components/block-pattern-setup/use-patterns-setup.js +2 -2
  26. package/build/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  27. package/build/components/block-patterns-list/index.js +31 -3
  28. package/build/components/block-patterns-list/index.js.map +1 -1
  29. package/build/components/block-preview/auto.js +9 -11
  30. package/build/components/block-preview/auto.js.map +1 -1
  31. package/build/components/block-preview/index.js +32 -8
  32. package/build/components/block-preview/index.js.map +1 -1
  33. package/build/components/block-selection-clearer/index.js +1 -1
  34. package/build/components/block-selection-clearer/index.js.map +1 -1
  35. package/build/components/block-settings/container.native.js +7 -33
  36. package/build/components/block-settings/container.native.js.map +1 -1
  37. package/build/components/block-settings-menu/block-settings-dropdown.js +12 -6
  38. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  39. package/build/components/block-settings-menu-controls/index.js +2 -8
  40. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  41. package/build/components/block-switcher/utils.js +1 -1
  42. package/build/components/block-switcher/utils.js.map +1 -1
  43. package/build/components/block-tools/selected-block-popover.js +55 -47
  44. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  45. package/build/components/block-vertical-alignment-control/icons.js +15 -1
  46. package/build/components/block-vertical-alignment-control/icons.js.map +1 -1
  47. package/build/components/block-vertical-alignment-control/ui.js +9 -4
  48. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  49. package/build/components/color-style-selector/index.js +3 -1
  50. package/build/components/color-style-selector/index.js.map +1 -1
  51. package/build/components/date-format-picker/index.js +3 -4
  52. package/build/components/date-format-picker/index.js.map +1 -1
  53. package/build/components/font-family/index.js +1 -7
  54. package/build/components/font-family/index.js.map +1 -1
  55. package/build/components/font-sizes/fluid-utils.js +1 -1
  56. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  57. package/build/components/font-sizes/utils.js +1 -1
  58. package/build/components/font-sizes/utils.js.map +1 -1
  59. package/build/components/global-styles/context.js +22 -0
  60. package/build/components/global-styles/context.js.map +1 -0
  61. package/build/components/global-styles/hooks.js +142 -0
  62. package/build/components/global-styles/hooks.js.map +1 -0
  63. package/build/components/global-styles/index.js +42 -0
  64. package/build/components/global-styles/index.js.map +1 -0
  65. package/build/components/global-styles/typography-utils.js +92 -0
  66. package/build/components/global-styles/typography-utils.js.map +1 -0
  67. package/build/components/global-styles/use-global-styles-output.js +974 -0
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -0
  69. package/build/components/global-styles/utils.js +340 -0
  70. package/build/components/global-styles/utils.js.map +1 -0
  71. package/build/components/height-control/index.js +13 -1
  72. package/build/components/height-control/index.js.map +1 -1
  73. package/build/components/image-editor/constants.js +1 -1
  74. package/build/components/image-editor/constants.js.map +1 -1
  75. package/build/components/image-editor/context.js +1 -2
  76. package/build/components/image-editor/context.js.map +1 -1
  77. package/build/components/image-editor/cropper.js +3 -1
  78. package/build/components/image-editor/cropper.js.map +1 -1
  79. package/build/components/image-editor/index.js +13 -9
  80. package/build/components/image-editor/index.js.map +1 -1
  81. package/build/components/image-editor/use-transform-image.js +11 -35
  82. package/build/components/image-editor/use-transform-image.js.map +1 -1
  83. package/build/components/image-size-control/index.js +1 -7
  84. package/build/components/image-size-control/index.js.map +1 -1
  85. package/build/components/index.js +8 -24
  86. package/build/components/index.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +22 -32
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inner-blocks/index.native.js +8 -23
  90. package/build/components/inner-blocks/index.native.js.map +1 -1
  91. package/build/components/inner-blocks/use-block-context.js +53 -0
  92. package/build/components/inner-blocks/use-block-context.js.map +1 -0
  93. package/build/components/inserter/block-patterns-explorer/explorer.js +0 -1
  94. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  95. package/build/components/inserter/block-patterns-tab.js +7 -1
  96. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  97. package/build/components/inserter/block-types-tab.js +2 -2
  98. package/build/components/inserter/block-types-tab.js.map +1 -1
  99. package/build/components/inserter/hooks/use-patterns-state.js +1 -7
  100. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  101. package/build/components/inserter/index.js +5 -4
  102. package/build/components/inserter/index.js.map +1 -1
  103. package/build/components/inserter/media-tab/hooks.js +142 -56
  104. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  105. package/build/components/inserter/media-tab/media-list.js +74 -21
  106. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  107. package/build/components/inserter/media-tab/media-panel.js +11 -13
  108. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  109. package/build/components/inserter/media-tab/media-tab.js +6 -3
  110. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  111. package/build/components/inserter/media-tab/utils.js +26 -15
  112. package/build/components/inserter/media-tab/utils.js.map +1 -1
  113. package/build/components/inserter/menu.js +1 -0
  114. package/build/components/inserter/menu.js.map +1 -1
  115. package/build/components/inserter/preview-panel.js +5 -3
  116. package/build/components/inserter/preview-panel.js.map +1 -1
  117. package/build/components/inserter/search-results.js +2 -7
  118. package/build/components/inserter/search-results.js.map +1 -1
  119. package/build/components/inserter-list-item/index.js +1 -9
  120. package/build/components/inserter-list-item/index.js.map +1 -1
  121. package/build/components/inspector-controls/fill.js +15 -2
  122. package/build/components/inspector-controls/fill.js.map +1 -1
  123. package/build/components/inspector-controls/fill.native.js +14 -1
  124. package/build/components/inspector-controls/fill.native.js.map +1 -1
  125. package/build/components/inspector-controls/groups.js +4 -0
  126. package/build/components/inspector-controls/groups.js.map +1 -1
  127. package/build/components/inspector-controls/index.js +2 -2
  128. package/build/components/inspector-controls/index.js.map +1 -1
  129. package/build/components/inspector-controls/slot.js +14 -1
  130. package/build/components/inspector-controls/slot.js.map +1 -1
  131. package/build/components/inspector-controls/slot.native.js +14 -1
  132. package/build/components/inspector-controls/slot.native.js.map +1 -1
  133. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  134. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  135. package/build/components/inspector-controls-tabs/index.js +2 -2
  136. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  137. package/build/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  138. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  139. package/build/components/inspector-controls-tabs/styles-tab.js +6 -4
  140. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  141. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  142. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  143. package/build/components/justify-content-control/ui.js +8 -1
  144. package/build/components/justify-content-control/ui.js.map +1 -1
  145. package/build/components/link-control/index.js +45 -17
  146. package/build/components/link-control/index.js.map +1 -1
  147. package/build/components/list-view/block.js +1 -1
  148. package/build/components/list-view/block.js.map +1 -1
  149. package/build/components/list-view/use-list-view-drop-zone.js +1 -1
  150. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  151. package/build/components/media-upload/index.native.js +4 -1
  152. package/build/components/media-upload/index.native.js.map +1 -1
  153. package/build/components/off-canvas-editor/appender.js +50 -3
  154. package/build/components/off-canvas-editor/appender.js.map +1 -1
  155. package/build/components/off-canvas-editor/block-select-button.js +10 -4
  156. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  157. package/build/components/off-canvas-editor/block.js +6 -27
  158. package/build/components/off-canvas-editor/block.js.map +1 -1
  159. package/build/components/off-canvas-editor/branch.js +25 -10
  160. package/build/components/off-canvas-editor/branch.js.map +1 -1
  161. package/build/components/off-canvas-editor/index.js +11 -16
  162. package/build/components/off-canvas-editor/index.js.map +1 -1
  163. package/build/components/off-canvas-editor/link-ui.js +2 -2
  164. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  165. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  166. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  167. package/build/components/provider/index.js +21 -9
  168. package/build/components/provider/index.js.map +1 -1
  169. package/build/components/provider/index.native.js +5 -6
  170. package/build/components/provider/index.native.js.map +1 -1
  171. package/build/components/rich-text/use-before-input-rules.js +11 -3
  172. package/build/components/rich-text/use-before-input-rules.js.map +1 -1
  173. package/build/components/rich-text/utils.js +1 -1
  174. package/build/components/rich-text/utils.js.map +1 -1
  175. package/build/components/spacing-sizes-control/utils.js +2 -8
  176. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  177. package/build/components/tool-selector/index.js +3 -1
  178. package/build/components/tool-selector/index.js.map +1 -1
  179. package/build/components/url-popover/image-url-input-ui.js +7 -8
  180. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  181. package/build/components/use-block-display-information/index.js +1 -1
  182. package/build/components/use-block-display-information/index.js.map +1 -1
  183. package/build/experiments.js +45 -0
  184. package/build/experiments.js.map +1 -0
  185. package/build/experiments.native.js +40 -0
  186. package/build/experiments.native.js.map +1 -0
  187. package/build/hooks/anchor.js +2 -1
  188. package/build/hooks/anchor.js.map +1 -1
  189. package/build/hooks/border.js +1 -1
  190. package/build/hooks/border.js.map +1 -1
  191. package/build/hooks/child-layout.js +5 -1
  192. package/build/hooks/child-layout.js.map +1 -1
  193. package/build/hooks/color-panel.js +1 -1
  194. package/build/hooks/color-panel.js.map +1 -1
  195. package/build/hooks/color.js +3 -3
  196. package/build/hooks/color.js.map +1 -1
  197. package/build/hooks/custom-class-name.js +2 -1
  198. package/build/hooks/custom-class-name.js.map +1 -1
  199. package/build/hooks/dimensions.js +7 -5
  200. package/build/hooks/dimensions.js.map +1 -1
  201. package/build/hooks/margin.js +1 -0
  202. package/build/hooks/margin.js.map +1 -1
  203. package/build/hooks/padding.js +1 -0
  204. package/build/hooks/padding.js.map +1 -1
  205. package/build/hooks/position.js +34 -15
  206. package/build/hooks/position.js.map +1 -1
  207. package/build/hooks/typography.js +1 -1
  208. package/build/hooks/typography.js.map +1 -1
  209. package/build/hooks/use-color-props.js +3 -3
  210. package/build/hooks/use-color-props.js.map +1 -1
  211. package/build/hooks/utils.js +69 -3
  212. package/build/hooks/utils.js.map +1 -1
  213. package/build/index.js +10 -1
  214. package/build/index.js.map +1 -1
  215. package/build/layouts/constrained.js +3 -0
  216. package/build/layouts/constrained.js.map +1 -1
  217. package/build/layouts/flex.js +59 -9
  218. package/build/layouts/flex.js.map +1 -1
  219. package/build/layouts/flow.js +0 -18
  220. package/build/layouts/flow.js.map +1 -1
  221. package/build/store/actions.js +3 -30
  222. package/build/store/actions.js.map +1 -1
  223. package/build/store/defaults.js +5 -2
  224. package/build/store/defaults.js.map +1 -1
  225. package/build/store/index.js +11 -2
  226. package/build/store/index.js.map +1 -1
  227. package/build/store/private-actions.js +78 -0
  228. package/build/store/private-actions.js.map +1 -0
  229. package/build/store/private-selectors.js +18 -0
  230. package/build/store/private-selectors.js.map +1 -0
  231. package/build/store/reducer.js +1 -1
  232. package/build/store/reducer.js.map +1 -1
  233. package/build/store/selectors.js +60 -34
  234. package/build/store/selectors.js.map +1 -1
  235. package/build/utils/block-variation-transforms.js +1 -1
  236. package/build/utils/block-variation-transforms.js.map +1 -1
  237. package/build/utils/parse-css-unit-to-px.js +1 -1
  238. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  239. package/build/utils/transform-styles/index.js +1 -7
  240. package/build/utils/transform-styles/index.js.map +1 -1
  241. package/build-module/components/alignment-control/ui.js +1 -1
  242. package/build-module/components/alignment-control/ui.js.map +1 -1
  243. package/build-module/components/autocomplete/index.js +2 -6
  244. package/build-module/components/autocomplete/index.js.map +1 -1
  245. package/build-module/components/block-alignment-matrix-control/index.js +2 -2
  246. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  247. package/build-module/components/block-card/index.js +2 -4
  248. package/build-module/components/block-card/index.js.map +1 -1
  249. package/build-module/components/block-edit/index.js +7 -0
  250. package/build-module/components/block-edit/index.js.map +1 -1
  251. package/build-module/components/block-inspector/index.js +15 -14
  252. package/build-module/components/block-inspector/index.js.map +1 -1
  253. package/build-module/components/block-list/use-in-between-inserter.js +5 -0
  254. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  255. package/build-module/components/block-lock/modal.js +0 -1
  256. package/build-module/components/block-lock/modal.js.map +1 -1
  257. package/build-module/components/block-mover/mover-description.js +2 -2
  258. package/build-module/components/block-mover/mover-description.js.map +1 -1
  259. package/build-module/components/block-navigation/dropdown.js +3 -1
  260. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  261. package/build-module/components/block-pattern-setup/index.js +1 -1
  262. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  263. package/build-module/components/block-pattern-setup/use-patterns-setup.js +2 -2
  264. package/build-module/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  265. package/build-module/components/block-patterns-list/index.js +32 -3
  266. package/build-module/components/block-patterns-list/index.js.map +1 -1
  267. package/build-module/components/block-preview/auto.js +9 -11
  268. package/build-module/components/block-preview/auto.js.map +1 -1
  269. package/build-module/components/block-preview/index.js +31 -8
  270. package/build-module/components/block-preview/index.js.map +1 -1
  271. package/build-module/components/block-selection-clearer/index.js +1 -1
  272. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  273. package/build-module/components/block-settings/container.native.js +6 -30
  274. package/build-module/components/block-settings/container.native.js.map +1 -1
  275. package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -6
  276. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  277. package/build-module/components/block-settings-menu-controls/index.js +2 -7
  278. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  279. package/build-module/components/block-switcher/utils.js +1 -1
  280. package/build-module/components/block-switcher/utils.js.map +1 -1
  281. package/build-module/components/block-tools/selected-block-popover.js +55 -48
  282. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  283. package/build-module/components/block-vertical-alignment-control/icons.js +12 -0
  284. package/build-module/components/block-vertical-alignment-control/icons.js.map +1 -1
  285. package/build-module/components/block-vertical-alignment-control/ui.js +10 -5
  286. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  287. package/build-module/components/color-style-selector/index.js +3 -1
  288. package/build-module/components/color-style-selector/index.js.map +1 -1
  289. package/build-module/components/date-format-picker/index.js +4 -5
  290. package/build-module/components/date-format-picker/index.js.map +1 -1
  291. package/build-module/components/font-family/index.js +1 -6
  292. package/build-module/components/font-family/index.js.map +1 -1
  293. package/build-module/components/font-sizes/fluid-utils.js +1 -1
  294. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  295. package/build-module/components/font-sizes/utils.js +1 -1
  296. package/build-module/components/font-sizes/utils.js.map +1 -1
  297. package/build-module/components/global-styles/context.js +12 -0
  298. package/build-module/components/global-styles/context.js.map +1 -0
  299. package/build-module/components/global-styles/hooks.js +121 -0
  300. package/build-module/components/global-styles/hooks.js.map +1 -0
  301. package/build-module/components/global-styles/index.js +4 -0
  302. package/build-module/components/global-styles/index.js.map +1 -0
  303. package/build-module/components/global-styles/typography-utils.js +84 -0
  304. package/build-module/components/global-styles/typography-utils.js.map +1 -0
  305. package/build-module/components/global-styles/use-global-styles-output.js +930 -0
  306. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -0
  307. package/build-module/components/global-styles/utils.js +321 -0
  308. package/build-module/components/global-styles/utils.js.map +1 -0
  309. package/build-module/components/height-control/index.js +14 -1
  310. package/build-module/components/height-control/index.js.map +1 -1
  311. package/build-module/components/image-editor/constants.js +1 -1
  312. package/build-module/components/image-editor/constants.js.map +1 -1
  313. package/build-module/components/image-editor/context.js +1 -2
  314. package/build-module/components/image-editor/context.js.map +1 -1
  315. package/build-module/components/image-editor/cropper.js +3 -1
  316. package/build-module/components/image-editor/cropper.js.map +1 -1
  317. package/build-module/components/image-editor/index.js +13 -3
  318. package/build-module/components/image-editor/index.js.map +1 -1
  319. package/build-module/components/image-editor/use-transform-image.js +12 -37
  320. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  321. package/build-module/components/image-size-control/index.js +1 -6
  322. package/build-module/components/image-size-control/index.js.map +1 -1
  323. package/build-module/components/index.js +2 -3
  324. package/build-module/components/index.js.map +1 -1
  325. package/build-module/components/inner-blocks/index.js +21 -32
  326. package/build-module/components/inner-blocks/index.js.map +1 -1
  327. package/build-module/components/inner-blocks/index.native.js +9 -22
  328. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  329. package/build-module/components/inner-blocks/use-block-context.js +43 -0
  330. package/build-module/components/inner-blocks/use-block-context.js.map +1 -0
  331. package/build-module/components/inserter/block-patterns-explorer/explorer.js +0 -1
  332. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  333. package/build-module/components/inserter/block-patterns-tab.js +7 -1
  334. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  335. package/build-module/components/inserter/block-types-tab.js +3 -3
  336. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  337. package/build-module/components/inserter/hooks/use-patterns-state.js +1 -6
  338. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  339. package/build-module/components/inserter/index.js +5 -4
  340. package/build-module/components/inserter/index.js.map +1 -1
  341. package/build-module/components/inserter/media-tab/hooks.js +145 -56
  342. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  343. package/build-module/components/inserter/media-tab/media-list.js +74 -24
  344. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  345. package/build-module/components/inserter/media-tab/media-panel.js +14 -14
  346. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  347. package/build-module/components/inserter/media-tab/media-tab.js +7 -4
  348. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  349. package/build-module/components/inserter/media-tab/utils.js +27 -15
  350. package/build-module/components/inserter/media-tab/utils.js.map +1 -1
  351. package/build-module/components/inserter/menu.js +1 -0
  352. package/build-module/components/inserter/menu.js.map +1 -1
  353. package/build-module/components/inserter/preview-panel.js +5 -3
  354. package/build-module/components/inserter/preview-panel.js.map +1 -1
  355. package/build-module/components/inserter/search-results.js +2 -6
  356. package/build-module/components/inserter/search-results.js.map +1 -1
  357. package/build-module/components/inserter-list-item/index.js +1 -9
  358. package/build-module/components/inserter-list-item/index.js.map +1 -1
  359. package/build-module/components/inspector-controls/fill.js +14 -2
  360. package/build-module/components/inspector-controls/fill.js.map +1 -1
  361. package/build-module/components/inspector-controls/fill.native.js +13 -1
  362. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  363. package/build-module/components/inspector-controls/groups.js +4 -0
  364. package/build-module/components/inspector-controls/groups.js.map +1 -1
  365. package/build-module/components/inspector-controls/index.js +2 -2
  366. package/build-module/components/inspector-controls/index.js.map +1 -1
  367. package/build-module/components/inspector-controls/slot.js +13 -1
  368. package/build-module/components/inspector-controls/slot.js.map +1 -1
  369. package/build-module/components/inspector-controls/slot.native.js +13 -1
  370. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  371. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  372. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  373. package/build-module/components/inspector-controls-tabs/index.js +2 -2
  374. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  375. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  376. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  377. package/build-module/components/inspector-controls-tabs/styles-tab.js +6 -4
  378. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  379. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  380. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  381. package/build-module/components/justify-content-control/ui.js +9 -2
  382. package/build-module/components/justify-content-control/ui.js.map +1 -1
  383. package/build-module/components/link-control/index.js +45 -16
  384. package/build-module/components/link-control/index.js.map +1 -1
  385. package/build-module/components/list-view/block.js +1 -1
  386. package/build-module/components/list-view/block.js.map +1 -1
  387. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
  388. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  389. package/build-module/components/media-upload/index.native.js +4 -1
  390. package/build-module/components/media-upload/index.native.js.map +1 -1
  391. package/build-module/components/off-canvas-editor/appender.js +47 -4
  392. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  393. package/build-module/components/off-canvas-editor/block-select-button.js +9 -4
  394. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  395. package/build-module/components/off-canvas-editor/block.js +6 -25
  396. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  397. package/build-module/components/off-canvas-editor/branch.js +23 -11
  398. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  399. package/build-module/components/off-canvas-editor/index.js +11 -15
  400. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  401. package/build-module/components/off-canvas-editor/link-ui.js +2 -2
  402. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  403. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  404. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  405. package/build-module/components/provider/index.js +16 -9
  406. package/build-module/components/provider/index.js.map +1 -1
  407. package/build-module/components/provider/index.native.js +4 -4
  408. package/build-module/components/provider/index.native.js.map +1 -1
  409. package/build-module/components/rich-text/use-before-input-rules.js +10 -2
  410. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -1
  411. package/build-module/components/rich-text/utils.js +1 -1
  412. package/build-module/components/rich-text/utils.js.map +1 -1
  413. package/build-module/components/spacing-sizes-control/utils.js +2 -7
  414. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  415. package/build-module/components/tool-selector/index.js +3 -1
  416. package/build-module/components/tool-selector/index.js.map +1 -1
  417. package/build-module/components/url-popover/image-url-input-ui.js +8 -8
  418. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  419. package/build-module/components/use-block-display-information/index.js +1 -1
  420. package/build-module/components/use-block-display-information/index.js.map +1 -1
  421. package/build-module/experiments.js +25 -0
  422. package/build-module/experiments.js.map +1 -0
  423. package/build-module/experiments.native.js +23 -0
  424. package/build-module/experiments.native.js.map +1 -0
  425. package/build-module/hooks/anchor.js +2 -1
  426. package/build-module/hooks/anchor.js.map +1 -1
  427. package/build-module/hooks/border.js +1 -1
  428. package/build-module/hooks/border.js.map +1 -1
  429. package/build-module/hooks/child-layout.js +5 -1
  430. package/build-module/hooks/child-layout.js.map +1 -1
  431. package/build-module/hooks/color-panel.js +1 -1
  432. package/build-module/hooks/color-panel.js.map +1 -1
  433. package/build-module/hooks/color.js +3 -3
  434. package/build-module/hooks/color.js.map +1 -1
  435. package/build-module/hooks/custom-class-name.js +2 -1
  436. package/build-module/hooks/custom-class-name.js.map +1 -1
  437. package/build-module/hooks/dimensions.js +6 -5
  438. package/build-module/hooks/dimensions.js.map +1 -1
  439. package/build-module/hooks/margin.js +1 -0
  440. package/build-module/hooks/margin.js.map +1 -1
  441. package/build-module/hooks/padding.js +1 -0
  442. package/build-module/hooks/padding.js.map +1 -1
  443. package/build-module/hooks/position.js +31 -14
  444. package/build-module/hooks/position.js.map +1 -1
  445. package/build-module/hooks/typography.js +1 -1
  446. package/build-module/hooks/typography.js.map +1 -1
  447. package/build-module/hooks/use-color-props.js +3 -3
  448. package/build-module/hooks/use-color-props.js.map +1 -1
  449. package/build-module/hooks/utils.js +70 -4
  450. package/build-module/hooks/utils.js.map +1 -1
  451. package/build-module/index.js +1 -0
  452. package/build-module/index.js.map +1 -1
  453. package/build-module/layouts/constrained.js +3 -0
  454. package/build-module/layouts/constrained.js.map +1 -1
  455. package/build-module/layouts/flex.js +60 -10
  456. package/build-module/layouts/flex.js.map +1 -1
  457. package/build-module/layouts/flow.js +0 -18
  458. package/build-module/layouts/flow.js.map +1 -1
  459. package/build-module/store/actions.js +2 -26
  460. package/build-module/store/actions.js.map +1 -1
  461. package/build-module/store/defaults.js +5 -2
  462. package/build-module/store/defaults.js.map +1 -1
  463. package/build-module/store/index.js +8 -2
  464. package/build-module/store/index.js.map +1 -1
  465. package/build-module/store/private-actions.js +66 -0
  466. package/build-module/store/private-actions.js.map +1 -0
  467. package/build-module/store/private-selectors.js +11 -0
  468. package/build-module/store/private-selectors.js.map +1 -0
  469. package/build-module/store/reducer.js +1 -1
  470. package/build-module/store/reducer.js.map +1 -1
  471. package/build-module/store/selectors.js +48 -25
  472. package/build-module/store/selectors.js.map +1 -1
  473. package/build-module/utils/block-variation-transforms.js +1 -1
  474. package/build-module/utils/block-variation-transforms.js.map +1 -1
  475. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  476. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  477. package/build-module/utils/transform-styles/index.js +1 -6
  478. package/build-module/utils/transform-styles/index.js.map +1 -1
  479. package/build-style/content-rtl.css +283 -3
  480. package/build-style/content.css +283 -3
  481. package/build-style/style-rtl.css +105 -221
  482. package/build-style/style.css +105 -221
  483. package/package.json +30 -29
  484. package/src/components/alignment-control/test/__snapshots__/index.js.snap +3 -3
  485. package/src/components/alignment-control/test/index.js +5 -15
  486. package/src/components/alignment-control/ui.js +1 -1
  487. package/src/components/autocomplete/index.js +3 -6
  488. package/src/components/block-alignment-control/test/index.js +3 -11
  489. package/src/components/block-alignment-matrix-control/index.js +1 -2
  490. package/src/components/block-card/index.js +1 -4
  491. package/src/components/block-content-overlay/content.scss +4 -4
  492. package/src/components/block-edit/index.js +15 -1
  493. package/src/components/block-icon/content.scss +31 -0
  494. package/src/components/block-inspector/index.js +13 -17
  495. package/src/components/block-list/use-in-between-inserter.js +5 -0
  496. package/src/components/block-lock/modal.js +0 -1
  497. package/src/components/block-mover/mover-description.js +2 -2
  498. package/src/components/block-mover/stories/index.js +3 -3
  499. package/src/components/block-navigation/dropdown.js +1 -1
  500. package/src/components/block-pattern-setup/index.js +1 -4
  501. package/src/components/block-pattern-setup/use-patterns-setup.js +2 -5
  502. package/src/components/block-patterns-list/index.js +29 -3
  503. package/src/components/block-preview/README.md +9 -9
  504. package/src/components/block-preview/auto.js +9 -11
  505. package/src/components/block-preview/content.scss +23 -0
  506. package/src/components/block-preview/index.js +40 -10
  507. package/src/components/block-preview/style.scss +0 -23
  508. package/src/components/block-selection-clearer/index.js +1 -1
  509. package/src/components/block-selection-clearer/test/index.js +6 -6
  510. package/src/components/block-settings/container.native.js +7 -26
  511. package/src/components/block-settings-menu/block-settings-dropdown.js +13 -5
  512. package/src/components/block-settings-menu-controls/index.js +2 -10
  513. package/src/components/block-switcher/test/index.js +43 -44
  514. package/src/components/block-switcher/utils.js +1 -1
  515. package/src/components/block-tools/selected-block-popover.js +77 -80
  516. package/src/components/block-tools/style.scss +0 -1
  517. package/src/components/block-variation-picker/{style.scss → content.scss} +0 -0
  518. package/src/components/block-vertical-alignment-control/icons.js +12 -0
  519. package/src/components/block-vertical-alignment-control/test/index.js +3 -11
  520. package/src/components/block-vertical-alignment-control/ui.js +16 -6
  521. package/src/components/color-style-selector/index.js +1 -1
  522. package/src/components/colors/test/with-colors.js +2 -8
  523. package/src/components/date-format-picker/index.js +23 -24
  524. package/src/components/date-format-picker/style.scss +0 -6
  525. package/src/components/default-block-appender/content.scss +18 -0
  526. package/src/components/default-block-appender/test/index.js +2 -8
  527. package/src/components/font-family/index.js +1 -6
  528. package/src/components/font-sizes/fluid-utils.js +1 -1
  529. package/src/components/font-sizes/utils.js +1 -1
  530. package/src/components/global-styles/README.md +77 -0
  531. package/src/components/global-styles/context.js +15 -0
  532. package/src/components/global-styles/hooks.js +145 -0
  533. package/src/components/global-styles/index.js +7 -0
  534. package/src/components/global-styles/test/typography-utils.js +393 -0
  535. package/src/components/global-styles/test/use-global-styles-output.js +814 -0
  536. package/src/components/global-styles/test/utils.js +206 -0
  537. package/src/components/global-styles/typography-utils.js +87 -0
  538. package/src/components/global-styles/use-global-styles-output.js +1088 -0
  539. package/src/components/global-styles/utils.js +373 -0
  540. package/src/components/height-control/README.md +55 -0
  541. package/src/components/height-control/index.js +13 -1
  542. package/src/components/image-editor/constants.js +1 -1
  543. package/src/components/image-editor/context.js +5 -9
  544. package/src/components/image-editor/cropper.js +3 -1
  545. package/src/components/image-editor/index.js +13 -4
  546. package/src/components/image-editor/use-transform-image.js +14 -55
  547. package/src/components/image-size-control/index.js +1 -6
  548. package/src/components/index.js +2 -6
  549. package/src/components/inner-blocks/index.js +29 -33
  550. package/src/components/inner-blocks/index.native.js +27 -47
  551. package/src/components/inner-blocks/use-block-context.js +47 -0
  552. package/src/components/inserter/block-patterns-explorer/explorer.js +0 -1
  553. package/src/components/inserter/block-patterns-tab.js +7 -0
  554. package/src/components/inserter/block-types-tab.js +3 -4
  555. package/src/components/inserter/hooks/use-patterns-state.js +1 -6
  556. package/src/components/inserter/index.js +3 -4
  557. package/src/components/inserter/media-tab/hooks.js +167 -65
  558. package/src/components/inserter/media-tab/media-list.js +94 -26
  559. package/src/components/inserter/media-tab/media-panel.js +9 -20
  560. package/src/components/inserter/media-tab/media-tab.js +12 -4
  561. package/src/components/inserter/media-tab/utils.js +20 -10
  562. package/src/components/inserter/menu.js +1 -0
  563. package/src/components/inserter/preview-panel.js +4 -2
  564. package/src/components/inserter/search-results.js +2 -6
  565. package/src/components/inserter/stories/index.js +9 -9
  566. package/src/components/inserter/style.scss +58 -11
  567. package/src/components/inserter-list-item/index.js +0 -7
  568. package/src/components/inspector-controls/README.md +3 -7
  569. package/src/components/inspector-controls/fill.js +15 -1
  570. package/src/components/inspector-controls/fill.native.js +14 -1
  571. package/src/components/inspector-controls/groups.js +3 -0
  572. package/src/components/inspector-controls/index.js +2 -6
  573. package/src/components/inspector-controls/slot.js +14 -1
  574. package/src/components/inspector-controls/slot.native.js +14 -1
  575. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  576. package/src/components/inspector-controls-tabs/index.js +2 -4
  577. package/src/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  578. package/src/components/inspector-controls-tabs/styles-tab.js +5 -7
  579. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +21 -10
  580. package/src/components/justify-content-control/ui.js +9 -0
  581. package/src/components/link-control/index.js +59 -23
  582. package/src/components/link-control/style.scss +7 -24
  583. package/src/components/link-control/test/index.js +134 -5
  584. package/src/components/list-view/block.js +1 -1
  585. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  586. package/src/components/media-replace-flow/test/index.js +4 -12
  587. package/src/components/media-upload/index.native.js +2 -2
  588. package/src/components/off-canvas-editor/README.md +2 -2
  589. package/src/components/off-canvas-editor/appender.js +93 -37
  590. package/src/components/off-canvas-editor/block-select-button.js +12 -1
  591. package/src/components/off-canvas-editor/block.js +3 -42
  592. package/src/components/off-canvas-editor/branch.js +32 -5
  593. package/src/components/off-canvas-editor/index.js +10 -25
  594. package/src/components/off-canvas-editor/link-ui.js +2 -2
  595. package/src/components/off-canvas-editor/style.scss +5 -1
  596. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  597. package/src/components/provider/index.js +33 -14
  598. package/src/components/provider/index.native.js +4 -3
  599. package/src/components/provider/test/experimental-provider.js +94 -0
  600. package/src/components/provider/test/use-block-sync.js +10 -0
  601. package/src/components/responsive-block-control/test/index.js +1 -5
  602. package/src/components/rich-text/use-before-input-rules.js +10 -2
  603. package/src/components/rich-text/utils.js +1 -1
  604. package/src/components/spacing-sizes-control/utils.js +2 -7
  605. package/src/components/tool-selector/index.js +1 -1
  606. package/src/components/url-input/test/button.js +24 -24
  607. package/src/components/url-popover/image-url-input-ui.js +7 -8
  608. package/src/components/url-popover/style.scss +0 -10
  609. package/src/components/use-block-display-information/index.js +1 -1
  610. package/src/components/warning/{style.scss → content.scss} +0 -0
  611. package/src/components/warning/test/index.js +1 -5
  612. package/src/content.scss +7 -0
  613. package/src/experiments.js +27 -0
  614. package/src/experiments.native.js +25 -0
  615. package/src/hooks/anchor.js +2 -1
  616. package/src/hooks/border.js +1 -1
  617. package/src/hooks/child-layout.js +6 -1
  618. package/src/hooks/color-panel.js +1 -1
  619. package/src/hooks/color.js +3 -3
  620. package/src/hooks/custom-class-name.js +2 -1
  621. package/src/hooks/dimensions.js +6 -6
  622. package/src/hooks/layout.scss +4 -0
  623. package/src/hooks/margin.js +1 -0
  624. package/src/hooks/padding.js +1 -0
  625. package/src/hooks/position.js +52 -36
  626. package/src/hooks/test/align.native.js +1 -1
  627. package/src/hooks/test/utils.js +104 -0
  628. package/src/hooks/typography.js +1 -1
  629. package/src/hooks/use-color-props.js +3 -3
  630. package/src/hooks/utils.js +68 -2
  631. package/src/index.js +1 -0
  632. package/src/layouts/constrained.js +3 -0
  633. package/src/layouts/flex.js +66 -14
  634. package/src/layouts/flow.js +0 -9
  635. package/src/store/actions.js +2 -26
  636. package/src/store/defaults.js +7 -2
  637. package/src/store/index.js +8 -2
  638. package/src/store/private-actions.js +65 -0
  639. package/src/store/private-selectors.js +10 -0
  640. package/src/store/reducer.js +1 -1
  641. package/src/store/selectors.js +103 -52
  642. package/src/store/test/actions.js +0 -18
  643. package/src/store/test/private-actions.js +22 -0
  644. package/src/store/test/private-selectors.js +24 -0
  645. package/src/store/test/selectors.js +52 -30
  646. package/src/style.scss +3 -5
  647. package/src/utils/block-variation-transforms.js +1 -1
  648. package/src/utils/parse-css-unit-to-px.js +3 -1
  649. package/src/utils/test/parse-css-unit-to-px.js +16 -24
  650. package/src/utils/transform-styles/index.js +1 -6
  651. package/build/components/inner-blocks/get-block-context.js +0 -45
  652. package/build/components/inner-blocks/get-block-context.js.map +0 -1
  653. package/build/components/off-canvas-editor/block-edit-button.js +0 -50
  654. package/build/components/off-canvas-editor/block-edit-button.js.map +0 -1
  655. package/build-module/components/inner-blocks/get-block-context.js +0 -37
  656. package/build-module/components/inner-blocks/get-block-context.js.map +0 -1
  657. package/build-module/components/off-canvas-editor/block-edit-button.js +0 -35
  658. package/build-module/components/off-canvas-editor/block-edit-button.js.map +0 -1
  659. package/src/components/inner-blocks/get-block-context.js +0 -39
  660. package/src/components/off-canvas-editor/block-edit-button.js +0 -27
@@ -11,7 +11,6 @@ import { forwardRef, useMemo } from '@wordpress/element';
11
11
  import { useSelect } from '@wordpress/data';
12
12
  import {
13
13
  getBlockSupport,
14
- getBlockType,
15
14
  store as blocksStore,
16
15
  __unstableGetInnerBlocksProps as getInnerBlocksProps,
17
16
  } from '@wordpress/blocks';
@@ -23,13 +22,16 @@ import ButtonBlockAppender from './button-block-appender';
23
22
  import DefaultBlockAppender from './default-block-appender';
24
23
  import useNestedSettingsUpdate from './use-nested-settings-update';
25
24
  import useInnerBlockTemplateSync from './use-inner-block-template-sync';
26
- import getBlockContext from './get-block-context';
25
+ import useBlockContext from './use-block-context';
27
26
  import { BlockListItems } from '../block-list';
28
27
  import { BlockContextProvider } from '../block-context';
29
28
  import { useBlockEditContext } from '../block-edit/context';
30
29
  import useBlockSync from '../provider/use-block-sync';
31
30
  import { store as blockEditorStore } from '../../store';
32
31
  import useBlockDropZone from '../use-block-drop-zone';
32
+ import useSetting from '../use-setting';
33
+
34
+ const EMPTY_OBJECT = {};
33
35
 
34
36
  /**
35
37
  * InnerBlocks is a component which allows a single block to have multiple blocks
@@ -54,7 +56,7 @@ function UncontrolledInnerBlocks( props ) {
54
56
  renderAppender,
55
57
  orientation,
56
58
  placeholder,
57
- __experimentalLayout,
59
+ layout,
58
60
  } = props;
59
61
 
60
62
  useNestedSettingsUpdate(
@@ -65,7 +67,7 @@ function UncontrolledInnerBlocks( props ) {
65
67
  templateLock,
66
68
  captureToolbars,
67
69
  orientation,
68
- __experimentalLayout
70
+ layout
69
71
  );
70
72
 
71
73
  useInnerBlockTemplateSync(
@@ -75,43 +77,33 @@ function UncontrolledInnerBlocks( props ) {
75
77
  templateInsertUpdatesSelection
76
78
  );
77
79
 
78
- const { context, name } = useSelect(
80
+ const context = useBlockContext( clientId );
81
+ const name = useSelect(
79
82
  ( select ) => {
80
- const block = select( blockEditorStore ).getBlock( clientId );
81
-
82
- // This check is here to avoid the Redux zombie bug where a child subscription
83
- // is called before a parent, causing potential JS errors when the child has been removed.
84
- if ( ! block ) {
85
- return {};
86
- }
87
-
88
- const blockType = getBlockType( block.name );
89
-
90
- if (
91
- Object.keys( blockType?.providesContext ?? {} ).length === 0
92
- ) {
93
- return { name: block.name };
94
- }
95
-
96
- return {
97
- context: getBlockContext( block.attributes, blockType ),
98
- name: block.name,
99
- };
83
+ return select( blockEditorStore ).getBlock( clientId )?.name;
100
84
  },
101
85
  [ clientId ]
102
86
  );
103
87
 
104
- const { allowSizingOnChildren = false } =
105
- getBlockSupport( name, '__experimentalLayout' ) || {};
88
+ const defaultLayoutBlockSupport =
89
+ getBlockSupport( name, '__experimentalLayout' ) || EMPTY_OBJECT;
90
+
91
+ const { allowSizingOnChildren = false } = defaultLayoutBlockSupport;
92
+
93
+ const defaultLayout = useSetting( 'layout' ) || EMPTY_OBJECT;
106
94
 
107
- const layout = useMemo(
95
+ const usedLayout = layout || defaultLayoutBlockSupport;
96
+
97
+ const memoedLayout = useMemo(
108
98
  () => ( {
109
- ...__experimentalLayout,
99
+ // Default layout will know about any content/wide size defined by the theme.
100
+ ...defaultLayout,
101
+ ...usedLayout,
110
102
  ...( allowSizingOnChildren && {
111
103
  allowSizingOnChildren: true,
112
104
  } ),
113
105
  } ),
114
- [ __experimentalLayout, allowSizingOnChildren ]
106
+ [ defaultLayout, usedLayout, allowSizingOnChildren ]
115
107
  );
116
108
 
117
109
  // This component needs to always be synchronous as it's the one changing
@@ -122,7 +114,7 @@ function UncontrolledInnerBlocks( props ) {
122
114
  rootClientId={ clientId }
123
115
  renderAppender={ renderAppender }
124
116
  __experimentalAppenderTagName={ __experimentalAppenderTagName }
125
- __experimentalLayout={ layout }
117
+ __experimentalLayout={ memoedLayout }
126
118
  wrapperRef={ wrapperRef }
127
119
  placeholder={ placeholder }
128
120
  />
@@ -171,8 +163,11 @@ const ForwardedInnerBlocks = forwardRef( ( props, ref ) => {
171
163
  export function useInnerBlocksProps( props = {}, options = {} ) {
172
164
  const { __unstableDisableLayoutClassNames, __unstableDisableDropZone } =
173
165
  options;
174
- const { clientId, __unstableLayoutClassNames: layoutClassNames = '' } =
175
- useBlockEditContext();
166
+ const {
167
+ clientId,
168
+ layout = null,
169
+ __unstableLayoutClassNames: layoutClassNames = '',
170
+ } = useBlockEditContext();
176
171
  const isSmallScreen = useViewportMatch( 'medium', '<' );
177
172
  const { __experimentalCaptureToolbars, hasOverlay } = useSelect(
178
173
  ( select ) => {
@@ -218,6 +213,7 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
218
213
 
219
214
  const innerBlocksProps = {
220
215
  __experimentalCaptureToolbars,
216
+ layout,
221
217
  ...options,
222
218
  };
223
219
  const InnerBlocks =
@@ -1,11 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useSelect } from '@wordpress/data';
5
- import {
6
- getBlockType,
7
- __unstableGetInnerBlocksProps as getInnerBlocksProps,
8
- } from '@wordpress/blocks';
4
+ import { __unstableGetInnerBlocksProps as getInnerBlocksProps } from '@wordpress/blocks';
9
5
  import { useRef } from '@wordpress/element';
10
6
 
11
7
  /**
@@ -15,7 +11,7 @@ import ButtonBlockAppender from './button-block-appender';
15
11
  import DefaultBlockAppender from './default-block-appender';
16
12
  import useNestedSettingsUpdate from './use-nested-settings-update';
17
13
  import useInnerBlockTemplateSync from './use-inner-block-template-sync';
18
- import getBlockContext from './get-block-context';
14
+ import useBlockContext from './use-block-context';
19
15
 
20
16
  /**
21
17
  * Internal dependencies
@@ -26,7 +22,6 @@ import { useBlockEditContext } from '../block-edit/context';
26
22
  import useBlockSync from '../provider/use-block-sync';
27
23
  import { BlockContextProvider } from '../block-context';
28
24
  import { defaultLayout, LayoutProvider } from '../block-list/layout';
29
- import { store as blockEditorStore } from '../../store';
30
25
 
31
26
  /**
32
27
  * This hook is used to lightly mark an element as an inner blocks wrapper
@@ -100,10 +95,7 @@ function UncontrolledInnerBlocks( props ) {
100
95
  useCompactList,
101
96
  } = props;
102
97
 
103
- const block = useSelect(
104
- ( select ) => select( blockEditorStore ).getBlock( clientId ),
105
- [ clientId ]
106
- ) || { innerBlocks: [] };
98
+ const context = useBlockContext( clientId );
107
99
 
108
100
  useNestedSettingsUpdate( clientId, allowedBlocks, templateLock );
109
101
 
@@ -116,43 +108,31 @@ function UncontrolledInnerBlocks( props ) {
116
108
 
117
109
  const BlockListComponent = useCompactList ? BlockListCompact : BlockList;
118
110
 
119
- let blockList = (
120
- <BlockListComponent
121
- marginVertical={ marginVertical }
122
- marginHorizontal={ marginHorizontal }
123
- rootClientId={ clientId }
124
- renderAppender={ renderAppender }
125
- renderFooterAppender={ renderFooterAppender }
126
- withFooter={ false }
127
- orientation={ orientation }
128
- parentWidth={ parentWidth }
129
- horizontalAlignment={ horizontalAlignment }
130
- horizontal={ horizontal }
131
- contentResizeMode={ contentResizeMode }
132
- contentStyle={ contentStyle }
133
- onAddBlock={ onAddBlock }
134
- onDeleteBlock={ onDeleteBlock }
135
- filterInnerBlocks={ filterInnerBlocks }
136
- gridProperties={ gridProperties }
137
- blockWidth={ blockWidth }
138
- />
111
+ return (
112
+ <LayoutProvider value={ layout }>
113
+ <BlockContextProvider value={ context }>
114
+ <BlockListComponent
115
+ marginVertical={ marginVertical }
116
+ marginHorizontal={ marginHorizontal }
117
+ rootClientId={ clientId }
118
+ renderAppender={ renderAppender }
119
+ renderFooterAppender={ renderFooterAppender }
120
+ withFooter={ false }
121
+ orientation={ orientation }
122
+ parentWidth={ parentWidth }
123
+ horizontalAlignment={ horizontalAlignment }
124
+ horizontal={ horizontal }
125
+ contentResizeMode={ contentResizeMode }
126
+ contentStyle={ contentStyle }
127
+ onAddBlock={ onAddBlock }
128
+ onDeleteBlock={ onDeleteBlock }
129
+ filterInnerBlocks={ filterInnerBlocks }
130
+ gridProperties={ gridProperties }
131
+ blockWidth={ blockWidth }
132
+ />
133
+ </BlockContextProvider>
134
+ </LayoutProvider>
139
135
  );
140
-
141
- // Wrap context provider if (and only if) block has context to provide.
142
- const blockType = getBlockType( block.name );
143
- if ( blockType && blockType.providesContext ) {
144
- const context = getBlockContext( block.attributes, blockType );
145
-
146
- blockList = (
147
- <LayoutProvider value={ layout }>
148
- <BlockContextProvider value={ context }>
149
- { blockList }
150
- </BlockContextProvider>
151
- </LayoutProvider>
152
- );
153
- }
154
-
155
- return blockList;
156
136
  }
157
137
 
158
138
  /**
@@ -0,0 +1,47 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store as blocksStore } from '@wordpress/blocks';
5
+ import { useSelect } from '@wordpress/data';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { store as blockEditorStore } from '../../store';
11
+
12
+ /**
13
+ * Returns a context object for a given block.
14
+ *
15
+ * @param {string} clientId The block client ID.
16
+ *
17
+ * @return {Record<string,*>} Context value.
18
+ */
19
+ export default function useBlockContext( clientId ) {
20
+ return useSelect(
21
+ ( select ) => {
22
+ const block = select( blockEditorStore ).getBlock( clientId );
23
+ if ( ! block ) {
24
+ return undefined;
25
+ }
26
+
27
+ const blockType = select( blocksStore ).getBlockType( block.name );
28
+ if ( ! blockType ) {
29
+ return undefined;
30
+ }
31
+
32
+ if ( Object.keys( blockType.providesContext ).length === 0 ) {
33
+ return undefined;
34
+ }
35
+
36
+ return Object.fromEntries(
37
+ Object.entries( blockType.providesContext ).map(
38
+ ( [ contextName, attributeName ] ) => [
39
+ contextName,
40
+ block.attributes[ attributeName ],
41
+ ]
42
+ )
43
+ );
44
+ },
45
+ [ clientId ]
46
+ );
47
+ }
@@ -38,7 +38,6 @@ function PatternsExplorerModal( { onModalClose, ...restProps } ) {
38
38
  return (
39
39
  <Modal
40
40
  title={ __( 'Patterns' ) }
41
- closeLabel={ __( 'Close' ) }
42
41
  onRequestClose={ onModalClose }
43
42
  isFullScreen
44
43
  >
@@ -92,6 +92,7 @@ function usePatternsCategories( rootClientId ) {
92
92
  export function BlockPatternsCategoryDialog( {
93
93
  rootClientId,
94
94
  onInsert,
95
+ onHover,
95
96
  category,
96
97
  showTitlesAsTooltip,
97
98
  } ) {
@@ -113,6 +114,7 @@ export function BlockPatternsCategoryDialog( {
113
114
  <BlockPatternsCategoryPanel
114
115
  rootClientId={ rootClientId }
115
116
  onInsert={ onInsert }
117
+ onHover={ onHover }
116
118
  category={ category }
117
119
  showTitlesAsTooltip={ showTitlesAsTooltip }
118
120
  />
@@ -123,6 +125,7 @@ export function BlockPatternsCategoryDialog( {
123
125
  export function BlockPatternsCategoryPanel( {
124
126
  rootClientId,
125
127
  onInsert,
128
+ onHover,
126
129
  category,
127
130
  showTitlesAsTooltip,
128
131
  } ) {
@@ -156,6 +159,9 @@ export function BlockPatternsCategoryPanel( {
156
159
 
157
160
  const currentShownPatterns = useAsyncList( currentCategoryPatterns );
158
161
 
162
+ // Hide block pattern preview on unmount.
163
+ useEffect( () => () => onHover( null ), [] );
164
+
159
165
  if ( ! currentCategoryPatterns.length ) {
160
166
  return null;
161
167
  }
@@ -170,6 +176,7 @@ export function BlockPatternsCategoryPanel( {
170
176
  shownPatterns={ currentShownPatterns }
171
177
  blockPatterns={ currentCategoryPatterns }
172
178
  onClickPattern={ onClick }
179
+ onHover={ onHover }
173
180
  label={ category.label }
174
181
  orientation="vertical"
175
182
  category={ category.label }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { map, groupBy } from 'lodash';
4
+ import { groupBy } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -113,7 +113,7 @@ export function BlockTypesTab( {
113
113
  </InserterPanel>
114
114
  ) }
115
115
 
116
- { map( currentlyRenderedCategories, ( category ) => {
116
+ { currentlyRenderedCategories.map( ( category ) => {
117
117
  const categoryItems = itemsPerCategory[ category.slug ];
118
118
  if ( ! categoryItems || ! categoryItems.length ) {
119
119
  return null;
@@ -148,8 +148,7 @@ export function BlockTypesTab( {
148
148
  </InserterPanel>
149
149
  ) }
150
150
 
151
- { map(
152
- currentlyRenderedCollections,
151
+ { currentlyRenderedCollections.map(
153
152
  ( [ namespace, collection ] ) => {
154
153
  const collectionItems = itemsPerCollection[ namespace ];
155
154
  if ( ! collectionItems || ! collectionItems.length ) {
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { map } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -41,7 +36,7 @@ const usePatternsState = ( onInsert, rootClientId ) => {
41
36
  const { createSuccessNotice } = useDispatch( noticesStore );
42
37
  const onClickPattern = useCallback( ( pattern, blocks ) => {
43
38
  onInsert(
44
- map( blocks, ( block ) => cloneBlock( block ) ),
39
+ ( blocks ?? [] ).map( ( block ) => cloneBlock( block ) ),
45
40
  pattern.name
46
41
  );
47
42
  createSuccessNotice(
@@ -207,7 +207,7 @@ class Inserter extends Component {
207
207
  'block-editor-inserter__popover',
208
208
  { 'is-quick': isQuick }
209
209
  ) }
210
- position={ position }
210
+ popoverProps={ { position } }
211
211
  onToggle={ this.onToggle }
212
212
  expandOnMobile
213
213
  headerTitle={ __( 'Add a block' ) }
@@ -225,7 +225,7 @@ export default compose( [
225
225
  const {
226
226
  getBlockRootClientId,
227
227
  hasInserterItems,
228
- __experimentalGetAllowedBlocks,
228
+ getAllowedBlocks,
229
229
  __experimentalGetDirectInsertBlock,
230
230
  getSettings,
231
231
  } = select( blockEditorStore );
@@ -235,8 +235,7 @@ export default compose( [
235
235
  rootClientId =
236
236
  rootClientId || getBlockRootClientId( clientId ) || undefined;
237
237
 
238
- const allowedBlocks =
239
- __experimentalGetAllowedBlocks( rootClientId );
238
+ const allowedBlocks = getAllowedBlocks( rootClientId );
240
239
 
241
240
  const directInsertBlock =
242
241
  shouldDirectInsert &&
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { __ } from '@wordpress/i18n';
5
- import { useEffect, useState } from '@wordpress/element';
4
+ import { useEffect, useState, useRef, useMemo } from '@wordpress/element';
6
5
  import { useSelect } from '@wordpress/data';
7
6
 
8
7
  /**
@@ -10,80 +9,183 @@ import { useSelect } from '@wordpress/data';
10
9
  */
11
10
  import { store as blockEditorStore } from '../../../store';
12
11
 
13
- export function useMediaResults( options = {} ) {
14
- const [ results, setResults ] = useState();
15
- const settings = useSelect(
16
- ( select ) => select( blockEditorStore ).getSettings(),
17
- []
18
- );
12
+ /**
13
+ * Interface for inserter media requests.
14
+ *
15
+ * @typedef {Object} InserterMediaRequest
16
+ * @property {number} per_page How many items to fetch per page.
17
+ * @property {string} search The search term to use for filtering the results.
18
+ */
19
+
20
+ /**
21
+ * Interface for inserter media responses. Any media resource should
22
+ * map their response to this interface, in order to create the core
23
+ * WordPress media blocks (image, video, audio).
24
+ *
25
+ * @typedef {Object} InserterMediaItem
26
+ * @property {string} title The title of the media item.
27
+ * @property {string} url The source url of the media item.
28
+ * @property {string} [previewUrl] The preview source url of the media item to display in the media list.
29
+ * @property {number} [id] The WordPress id of the media item.
30
+ * @property {number|string} [sourceId] The id of the media item from external source.
31
+ * @property {string} [alt] The alt text of the media item.
32
+ * @property {string} [caption] The caption of the media item.
33
+ */
34
+
35
+ /**
36
+ * Fetches media items based on the provided category.
37
+ * Each media category is responsible for providing a `fetch` function.
38
+ *
39
+ * @param {Object} category The media category to fetch results for.
40
+ * @param {InserterMediaRequest} query The query args to use for the request.
41
+ * @return {InserterMediaItem[]} The media results.
42
+ */
43
+ export function useMediaResults( category, query = {} ) {
44
+ const [ mediaList, setMediaList ] = useState();
45
+ const [ isLoading, setIsLoading ] = useState( false );
46
+ // We need to keep track of the last request made because
47
+ // multiple request can be fired without knowing the order
48
+ // of resolution, and we need to ensure we are showing
49
+ // the results of the last request.
50
+ // In the future we could use AbortController to cancel previous
51
+ // requests, but we don't for now as it involves adding support
52
+ // for this to `core-data` package.
53
+ const lastRequest = useRef();
19
54
  useEffect( () => {
20
55
  ( async () => {
21
- setResults();
22
- const _media = await settings?.__unstableFetchMedia( options );
23
- if ( _media ) setResults( _media );
56
+ const key = JSON.stringify( {
57
+ category: category.name,
58
+ ...query,
59
+ } );
60
+ lastRequest.current = key;
61
+ setIsLoading( true );
62
+ setMediaList( [] ); // Empty the previous results.
63
+ const _media = await category.fetch?.( query );
64
+ if ( key === lastRequest.current ) {
65
+ setMediaList( _media );
66
+ setIsLoading( false );
67
+ }
24
68
  } )();
25
- }, Object.values( options ) );
26
- return results;
69
+ }, [ category.name, ...Object.values( query ) ] );
70
+ return { mediaList, isLoading };
71
+ }
72
+
73
+ function useInserterMediaCategories() {
74
+ const {
75
+ inserterMediaCategories,
76
+ allowedMimeTypes,
77
+ enableOpenverseMediaCategory,
78
+ } = useSelect( ( select ) => {
79
+ const settings = select( blockEditorStore ).getSettings();
80
+ return {
81
+ inserterMediaCategories: settings.inserterMediaCategories,
82
+ allowedMimeTypes: settings.allowedMimeTypes,
83
+ enableOpenverseMediaCategory: settings.enableOpenverseMediaCategory,
84
+ };
85
+ }, [] );
86
+ // The allowed `mime_types` can be altered by `upload_mimes` filter and restrict
87
+ // some of them. In this case we shouldn't add the category to the available media
88
+ // categories list in the inserter.
89
+ const allowedCategories = useMemo( () => {
90
+ if ( ! inserterMediaCategories || ! allowedMimeTypes ) {
91
+ return;
92
+ }
93
+ return inserterMediaCategories.filter( ( category ) => {
94
+ // Check if Openverse category is enabled.
95
+ if (
96
+ ! enableOpenverseMediaCategory &&
97
+ category.name === 'openverse'
98
+ ) {
99
+ return false;
100
+ }
101
+ // When a category has set `isExternalResource` to `true`, we
102
+ // don't need to check for allowed mime types, as they are used
103
+ // for restricting uploads for this media type and not for
104
+ // inserting media from external sources.
105
+ if ( category.isExternalResource ) {
106
+ return true;
107
+ }
108
+ return Object.values( allowedMimeTypes ).some( ( mimeType ) =>
109
+ mimeType.startsWith( `${ category.mediaType }/` )
110
+ );
111
+ } );
112
+ }, [
113
+ inserterMediaCategories,
114
+ allowedMimeTypes,
115
+ enableOpenverseMediaCategory,
116
+ ] );
117
+ return allowedCategories;
27
118
  }
28
119
 
29
- const MEDIA_CATEGORIES = [
30
- { label: __( 'Images' ), name: 'images', mediaType: 'image' },
31
- { label: __( 'Videos' ), name: 'videos', mediaType: 'video' },
32
- { label: __( 'Audio' ), name: 'audio', mediaType: 'audio' },
33
- ];
34
120
  export function useMediaCategories( rootClientId ) {
35
121
  const [ categories, setCategories ] = useState( [] );
36
- const { canInsertImage, canInsertVideo, canInsertAudio, fetchMedia } =
37
- useSelect(
38
- ( select ) => {
39
- const { canInsertBlockType, getSettings } =
40
- select( blockEditorStore );
41
- return {
42
- fetchMedia: getSettings().__unstableFetchMedia,
43
- canInsertImage: canInsertBlockType(
44
- 'core/image',
45
- rootClientId
46
- ),
47
- canInsertVideo: canInsertBlockType(
48
- 'core/video',
49
- rootClientId
50
- ),
51
- canInsertAudio: canInsertBlockType(
52
- 'core/audio',
53
- rootClientId
54
- ),
55
- };
56
- },
57
- [ rootClientId ]
58
- );
122
+ const { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(
123
+ ( select ) => {
124
+ const { canInsertBlockType } = select( blockEditorStore );
125
+ return {
126
+ canInsertImage: canInsertBlockType(
127
+ 'core/image',
128
+ rootClientId
129
+ ),
130
+ canInsertVideo: canInsertBlockType(
131
+ 'core/video',
132
+ rootClientId
133
+ ),
134
+ canInsertAudio: canInsertBlockType(
135
+ 'core/audio',
136
+ rootClientId
137
+ ),
138
+ };
139
+ },
140
+ [ rootClientId ]
141
+ );
142
+ const inserterMediaCategories = useInserterMediaCategories();
59
143
  useEffect( () => {
60
144
  ( async () => {
61
- // If `__unstableFetchMedia` is not defined in block
62
- // editor settings, do not set any media categories.
63
- if ( ! fetchMedia ) return;
64
- const query = {
65
- context: 'view',
66
- per_page: 1,
67
- _fields: [ 'id' ],
68
- };
69
- const [ image, video, audio ] = await Promise.allSettled( [
70
- fetchMedia( { ...query, media_type: 'image' } ),
71
- fetchMedia( { ...query, media_type: 'video' } ),
72
- fetchMedia( { ...query, media_type: 'audio' } ),
73
- ] );
74
- // The `value` property is only present if the promise's status is "fulfilled".
75
- const showImage = canInsertImage && !! image.value?.length;
76
- const showVideo = canInsertVideo && !! video.value?.length;
77
- const showAudio = canInsertAudio && !! audio.value?.length;
78
- setCategories(
79
- MEDIA_CATEGORIES.filter(
80
- ( { mediaType } ) =>
81
- ( mediaType === 'image' && showImage ) ||
82
- ( mediaType === 'video' && showVideo ) ||
83
- ( mediaType === 'audio' && showAudio )
145
+ const _categories = [];
146
+ // If `inserterMediaCategories` is not defined in
147
+ // block editor settings, do not show any media categories.
148
+ if ( ! inserterMediaCategories ) {
149
+ return;
150
+ }
151
+ // Loop through categories to check if they have at least one media item.
152
+ const categoriesHaveMedia = new Map(
153
+ await Promise.all(
154
+ inserterMediaCategories.map( async ( category ) => {
155
+ // Some sources are external and we don't need to make a request.
156
+ if ( category.isExternalResource ) {
157
+ return [ category.name, true ];
158
+ }
159
+ const results = await category.fetch( { per_page: 1 } );
160
+ return [ category.name, !! results.length ];
161
+ } )
84
162
  )
85
163
  );
164
+ // We need to filter out categories that don't have any media items or
165
+ // whose corresponding block type is not allowed to be inserted, based
166
+ // on the category's `mediaType`.
167
+ const canInsertMediaType = {
168
+ image: canInsertImage,
169
+ video: canInsertVideo,
170
+ audio: canInsertAudio,
171
+ };
172
+ inserterMediaCategories.forEach( ( category ) => {
173
+ if (
174
+ canInsertMediaType[ category.mediaType ] &&
175
+ categoriesHaveMedia.get( category.name )
176
+ ) {
177
+ _categories.push( category );
178
+ }
179
+ } );
180
+ if ( !! _categories.length ) {
181
+ setCategories( _categories );
182
+ }
86
183
  } )();
87
- }, [ canInsertImage, canInsertVideo, canInsertAudio, fetchMedia ] );
184
+ }, [
185
+ canInsertImage,
186
+ canInsertVideo,
187
+ canInsertAudio,
188
+ inserterMediaCategories,
189
+ ] );
88
190
  return categories;
89
191
  }