@wordpress/block-editor 12.13.0 → 12.15.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 (528) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  3. package/build/components/block-heading-level-dropdown/index.js +1 -1
  4. package/build/components/block-heading-level-dropdown/index.js.map +1 -1
  5. package/build/components/block-list/block.native.js +2 -0
  6. package/build/components/block-list/block.native.js.map +1 -1
  7. package/build/components/block-list/index.js +2 -9
  8. package/build/components/block-list/index.js.map +1 -1
  9. package/build/components/block-list-appender/index.js +16 -3
  10. package/build/components/block-list-appender/index.js.map +1 -1
  11. package/build/components/block-parent-selector/index.js +1 -1
  12. package/build/components/block-parent-selector/index.js.map +1 -1
  13. package/build/components/block-pattern-setup/index.js +25 -16
  14. package/build/components/block-pattern-setup/index.js.map +1 -1
  15. package/build/components/block-pattern-setup/setup-toolbar.js +4 -2
  16. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  17. package/build/components/block-patterns-list/index.js +36 -19
  18. package/build/components/block-patterns-list/index.js.map +1 -1
  19. package/build/components/block-quick-navigation/index.js +6 -4
  20. package/build/components/block-quick-navigation/index.js.map +1 -1
  21. package/build/components/block-rename/index.js +28 -0
  22. package/build/components/block-rename/index.js.map +1 -0
  23. package/build/components/block-rename/is-empty-string.js +10 -0
  24. package/build/components/block-rename/is-empty-string.js.map +1 -0
  25. package/build/components/block-rename/modal.js +87 -0
  26. package/build/components/block-rename/modal.js.map +1 -0
  27. package/build/components/block-rename/rename-control.js +74 -0
  28. package/build/components/block-rename/rename-control.js.map +1 -0
  29. package/build/components/block-rename/use-block-rename.js +17 -0
  30. package/build/components/block-rename/use-block-rename.js.map +1 -0
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +33 -20
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +7 -0
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-styles/index.js +0 -8
  36. package/build/components/block-styles/index.js.map +1 -1
  37. package/build/components/block-switcher/pattern-transformations-menu.js +18 -14
  38. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  39. package/build/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  40. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  41. package/build/components/block-tools/back-compat.js +2 -2
  42. package/build/components/block-tools/back-compat.js.map +1 -1
  43. package/build/components/block-tools/block-contextual-toolbar.js +11 -81
  44. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  45. package/build/components/block-tools/empty-block-inserter.js +56 -0
  46. package/build/components/block-tools/empty-block-inserter.js.map +1 -0
  47. package/build/components/block-tools/index.js +48 -9
  48. package/build/components/block-tools/index.js.map +1 -1
  49. package/build/components/block-tools/selected-block-tools.js +113 -0
  50. package/build/components/block-tools/selected-block-tools.js.map +1 -0
  51. package/build/components/block-tools/use-selected-block-tool-props.js +56 -0
  52. package/build/components/block-tools/use-selected-block-tool-props.js.map +1 -0
  53. package/build/components/block-types-list/index.js +6 -2
  54. package/build/components/block-types-list/index.js.map +1 -1
  55. package/build/components/date-format-picker/index.js +8 -1
  56. package/build/components/date-format-picker/index.js.map +1 -1
  57. package/build/components/editable-text/index.js +1 -2
  58. package/build/components/editable-text/index.js.map +1 -1
  59. package/build/components/global-styles/advanced-panel.js +1 -1
  60. package/build/components/global-styles/advanced-panel.js.map +1 -1
  61. package/build/components/iframe/index.js +4 -3
  62. package/build/components/iframe/index.js.map +1 -1
  63. package/build/components/image-size-control/index.js +0 -5
  64. package/build/components/image-size-control/index.js.map +1 -1
  65. package/build/components/inner-blocks/index.js +3 -1
  66. package/build/components/inner-blocks/index.js.map +1 -1
  67. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js +29 -31
  68. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  69. package/build/components/inserter/block-patterns-explorer/{explorer.js → index.js} +7 -7
  70. package/build/components/inserter/block-patterns-explorer/index.js.map +1 -0
  71. package/build/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +1 -1
  72. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -0
  73. package/build/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +4 -4
  74. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -0
  75. package/build/components/inserter/block-patterns-tab/index.js +75 -0
  76. package/build/components/inserter/block-patterns-tab/index.js.map +1 -0
  77. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +48 -0
  78. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -0
  79. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +108 -0
  80. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -0
  81. package/build/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +18 -34
  82. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -0
  83. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js +55 -0
  84. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -0
  85. package/build/components/inserter/block-patterns-tab/utils.js +69 -0
  86. package/build/components/inserter/block-patterns-tab/utils.js.map +1 -0
  87. package/build/components/inserter/hooks/use-patterns-state.js +2 -1
  88. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  89. package/build/components/inserter/media-tab/media-list.js +9 -5
  90. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  91. package/build/components/inserter/media-tab/media-preview.js +15 -12
  92. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  93. package/build/components/inserter/menu.js +3 -4
  94. package/build/components/inserter/menu.js.map +1 -1
  95. package/build/components/inserter-listbox/index.js +11 -6
  96. package/build/components/inserter-listbox/index.js.map +1 -1
  97. package/build/components/inserter-listbox/item.js +24 -23
  98. package/build/components/inserter-listbox/item.js.map +1 -1
  99. package/build/components/inserter-listbox/row.js +5 -5
  100. package/build/components/inserter-listbox/row.js.map +1 -1
  101. package/build/components/link-control/index.js +6 -5
  102. package/build/components/link-control/index.js.map +1 -1
  103. package/build/components/list-view/block-select-button.js +39 -0
  104. package/build/components/list-view/block-select-button.js.map +1 -1
  105. package/build/components/list-view/block.js +16 -3
  106. package/build/components/list-view/block.js.map +1 -1
  107. package/build/components/list-view/index.js +3 -2
  108. package/build/components/list-view/index.js.map +1 -1
  109. package/build/components/list-view/use-list-view-expand-selected-item.js +2 -3
  110. package/build/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  111. package/build/components/navigable-toolbar/index.js +69 -18
  112. package/build/components/navigable-toolbar/index.js.map +1 -1
  113. package/build/components/preview-options/index.js +4 -2
  114. package/build/components/preview-options/index.js.map +1 -1
  115. package/build/components/provider/use-block-sync.js +1 -14
  116. package/build/components/provider/use-block-sync.js.map +1 -1
  117. package/build/components/rich-text/index.js +0 -1
  118. package/build/components/rich-text/index.js.map +1 -1
  119. package/build/components/rich-text/index.native.js +4 -2
  120. package/build/components/rich-text/index.native.js.map +1 -1
  121. package/build/components/rich-text/native/format-edit.js +45 -0
  122. package/build/components/rich-text/native/format-edit.js.map +1 -0
  123. package/build/components/rich-text/native/get-format-colors.native.js +41 -0
  124. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -0
  125. package/build/components/rich-text/native/index.js +9 -0
  126. package/build/components/rich-text/native/index.js.map +1 -0
  127. package/build/components/rich-text/native/index.native.js +1189 -0
  128. package/build/components/rich-text/native/index.native.js.map +1 -0
  129. package/build/components/rich-text/native/toolbar-button-with-options.native.js +58 -0
  130. package/build/components/rich-text/native/toolbar-button-with-options.native.js.map +1 -0
  131. package/build/components/rich-text/native/use-format-types.js +111 -0
  132. package/build/components/rich-text/native/use-format-types.js.map +1 -0
  133. package/build/components/rich-text/use-input-rules.js +30 -1
  134. package/build/components/rich-text/use-input-rules.js.map +1 -1
  135. package/build/components/rich-text/use-paste-handler.js +2 -5
  136. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  137. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  138. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  139. package/build/components/url-popover/image-url-input-ui.js +2 -1
  140. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  141. package/build/components/use-block-drop-zone/index.js +4 -1
  142. package/build/components/use-block-drop-zone/index.js.map +1 -1
  143. package/build/components/use-moving-animation/index.js +2 -1
  144. package/build/components/use-moving-animation/index.js.map +1 -1
  145. package/build/components/use-settings/index.js +2 -2
  146. package/build/components/use-settings/index.js.map +1 -1
  147. package/build/components/writing-flow/use-tab-nav.js +7 -3
  148. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  149. package/build/hooks/align.js +10 -10
  150. package/build/hooks/align.js.map +1 -1
  151. package/build/hooks/align.native.js +2 -2
  152. package/build/hooks/align.native.js.map +1 -1
  153. package/build/hooks/anchor.js +7 -6
  154. package/build/hooks/anchor.js.map +1 -1
  155. package/build/hooks/background.js +16 -4
  156. package/build/hooks/background.js.map +1 -1
  157. package/build/hooks/block-hooks.js +7 -8
  158. package/build/hooks/block-hooks.js.map +1 -1
  159. package/build/hooks/block-renaming.js +42 -0
  160. package/build/hooks/block-renaming.js.map +1 -1
  161. package/build/hooks/content-lock-ui.js +5 -5
  162. package/build/hooks/content-lock-ui.js.map +1 -1
  163. package/build/hooks/custom-class-name.js +8 -7
  164. package/build/hooks/custom-class-name.js.map +1 -1
  165. package/build/hooks/custom-fields.js +57 -52
  166. package/build/hooks/custom-fields.js.map +1 -1
  167. package/build/hooks/duotone.js +9 -20
  168. package/build/hooks/duotone.js.map +1 -1
  169. package/build/hooks/index.js +0 -1
  170. package/build/hooks/index.js.map +1 -1
  171. package/build/hooks/layout.js +103 -93
  172. package/build/hooks/layout.js.map +1 -1
  173. package/build/hooks/position.js +10 -9
  174. package/build/hooks/position.js.map +1 -1
  175. package/build/hooks/style.js +10 -13
  176. package/build/hooks/style.js.map +1 -1
  177. package/build/hooks/utils.js +30 -0
  178. package/build/hooks/utils.js.map +1 -1
  179. package/build/layouts/constrained.js +4 -3
  180. package/build/layouts/constrained.js.map +1 -1
  181. package/build/private-apis.js +3 -0
  182. package/build/private-apis.js.map +1 -1
  183. package/build/store/actions.js +30 -37
  184. package/build/store/actions.js.map +1 -1
  185. package/build/store/reducer.js +18 -0
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +18 -13
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/transform-styles/index.js +26 -6
  190. package/build/utils/transform-styles/index.js.map +1 -1
  191. package/build-module/components/block-heading-level-dropdown/index.js +1 -1
  192. package/build-module/components/block-heading-level-dropdown/index.js.map +1 -1
  193. package/build-module/components/block-list/block.native.js +2 -0
  194. package/build-module/components/block-list/block.native.js.map +1 -1
  195. package/build-module/components/block-list/index.js +3 -10
  196. package/build-module/components/block-list/index.js.map +1 -1
  197. package/build-module/components/block-list-appender/index.js +16 -3
  198. package/build-module/components/block-list-appender/index.js.map +1 -1
  199. package/build-module/components/block-parent-selector/index.js +1 -1
  200. package/build-module/components/block-parent-selector/index.js.map +1 -1
  201. package/build-module/components/block-pattern-setup/index.js +24 -15
  202. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  203. package/build-module/components/block-pattern-setup/setup-toolbar.js +4 -2
  204. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  205. package/build-module/components/block-patterns-list/index.js +36 -19
  206. package/build-module/components/block-patterns-list/index.js.map +1 -1
  207. package/build-module/components/block-quick-navigation/index.js +7 -5
  208. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  209. package/build-module/components/block-rename/index.js +4 -0
  210. package/build-module/components/block-rename/index.js.map +1 -0
  211. package/build-module/components/block-rename/is-empty-string.js +4 -0
  212. package/build-module/components/block-rename/is-empty-string.js.map +1 -0
  213. package/build-module/components/block-rename/modal.js +79 -0
  214. package/build-module/components/block-rename/modal.js.map +1 -0
  215. package/build-module/components/block-rename/rename-control.js +66 -0
  216. package/build-module/components/block-rename/rename-control.js.map +1 -0
  217. package/build-module/components/block-rename/use-block-rename.js +10 -0
  218. package/build-module/components/block-rename/use-block-rename.js.map +1 -0
  219. package/build-module/components/block-settings-menu/block-settings-dropdown.js +34 -21
  220. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  221. package/build-module/components/block-settings-menu-controls/index.js +7 -0
  222. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  223. package/build-module/components/block-styles/index.js +0 -8
  224. package/build-module/components/block-styles/index.js.map +1 -1
  225. package/build-module/components/block-switcher/pattern-transformations-menu.js +17 -13
  226. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  227. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  228. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  229. package/build-module/components/block-tools/back-compat.js +1 -1
  230. package/build-module/components/block-tools/back-compat.js.map +1 -1
  231. package/build-module/components/block-tools/block-contextual-toolbar.js +11 -80
  232. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  233. package/build-module/components/block-tools/empty-block-inserter.js +48 -0
  234. package/build-module/components/block-tools/empty-block-inserter.js.map +1 -0
  235. package/build-module/components/block-tools/index.js +48 -9
  236. package/build-module/components/block-tools/index.js.map +1 -1
  237. package/build-module/components/block-tools/selected-block-tools.js +105 -0
  238. package/build-module/components/block-tools/selected-block-tools.js.map +1 -0
  239. package/build-module/components/block-tools/use-selected-block-tool-props.js +50 -0
  240. package/build-module/components/block-tools/use-selected-block-tool-props.js.map +1 -0
  241. package/build-module/components/block-types-list/index.js +6 -2
  242. package/build-module/components/block-types-list/index.js.map +1 -1
  243. package/build-module/components/date-format-picker/index.js +8 -1
  244. package/build-module/components/date-format-picker/index.js.map +1 -1
  245. package/build-module/components/editable-text/index.js +1 -2
  246. package/build-module/components/editable-text/index.js.map +1 -1
  247. package/build-module/components/global-styles/advanced-panel.js +1 -1
  248. package/build-module/components/global-styles/advanced-panel.js.map +1 -1
  249. package/build-module/components/iframe/index.js +4 -3
  250. package/build-module/components/iframe/index.js.map +1 -1
  251. package/build-module/components/image-size-control/index.js +0 -5
  252. package/build-module/components/image-size-control/index.js.map +1 -1
  253. package/build-module/components/inner-blocks/index.js +3 -1
  254. package/build-module/components/inner-blocks/index.js.map +1 -1
  255. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js +30 -32
  256. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  257. package/build-module/components/inserter/block-patterns-explorer/{explorer.js → index.js} +5 -5
  258. package/build-module/components/inserter/block-patterns-explorer/index.js.map +1 -0
  259. package/build-module/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +1 -1
  260. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -0
  261. package/build-module/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +3 -3
  262. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -0
  263. package/build-module/components/inserter/block-patterns-tab/index.js +66 -0
  264. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -0
  265. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +42 -0
  266. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -0
  267. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +100 -0
  268. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -0
  269. package/build-module/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +7 -20
  270. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -0
  271. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js +47 -0
  272. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -0
  273. package/build-module/components/inserter/block-patterns-tab/utils.js +57 -0
  274. package/build-module/components/inserter/block-patterns-tab/utils.js.map +1 -0
  275. package/build-module/components/inserter/hooks/use-patterns-state.js +2 -1
  276. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  277. package/build-module/components/inserter/media-tab/media-list.js +9 -5
  278. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  279. package/build-module/components/inserter/media-tab/media-preview.js +15 -12
  280. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  281. package/build-module/components/inserter/menu.js +4 -3
  282. package/build-module/components/inserter/menu.js.map +1 -1
  283. package/build-module/components/inserter-listbox/index.js +13 -8
  284. package/build-module/components/inserter-listbox/index.js.map +1 -1
  285. package/build-module/components/inserter-listbox/item.js +25 -23
  286. package/build-module/components/inserter-listbox/item.js.map +1 -1
  287. package/build-module/components/inserter-listbox/row.js +6 -5
  288. package/build-module/components/inserter-listbox/row.js.map +1 -1
  289. package/build-module/components/link-control/index.js +7 -6
  290. package/build-module/components/link-control/index.js.map +1 -1
  291. package/build-module/components/list-view/block-select-button.js +39 -0
  292. package/build-module/components/list-view/block-select-button.js.map +1 -1
  293. package/build-module/components/list-view/block.js +16 -3
  294. package/build-module/components/list-view/block.js.map +1 -1
  295. package/build-module/components/list-view/index.js +3 -2
  296. package/build-module/components/list-view/index.js.map +1 -1
  297. package/build-module/components/list-view/use-list-view-expand-selected-item.js +2 -3
  298. package/build-module/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  299. package/build-module/components/navigable-toolbar/index.js +69 -17
  300. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  301. package/build-module/components/preview-options/index.js +4 -2
  302. package/build-module/components/preview-options/index.js.map +1 -1
  303. package/build-module/components/provider/use-block-sync.js +1 -14
  304. package/build-module/components/provider/use-block-sync.js.map +1 -1
  305. package/build-module/components/rich-text/index.js +0 -1
  306. package/build-module/components/rich-text/index.js.map +1 -1
  307. package/build-module/components/rich-text/index.native.js +4 -2
  308. package/build-module/components/rich-text/index.native.js.map +1 -1
  309. package/build-module/components/rich-text/native/format-edit.js +38 -0
  310. package/build-module/components/rich-text/native/format-edit.js.map +1 -0
  311. package/build-module/components/rich-text/native/get-format-colors.native.js +34 -0
  312. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -0
  313. package/build-module/components/rich-text/native/index.js +2 -0
  314. package/build-module/components/rich-text/native/index.js.map +1 -0
  315. package/build-module/components/rich-text/native/index.native.js +1179 -0
  316. package/build-module/components/rich-text/native/index.native.js.map +1 -0
  317. package/build-module/components/rich-text/native/toolbar-button-with-options.native.js +51 -0
  318. package/build-module/components/rich-text/native/toolbar-button-with-options.native.js.map +1 -0
  319. package/build-module/components/rich-text/native/use-format-types.js +104 -0
  320. package/build-module/components/rich-text/native/use-format-types.js.map +1 -0
  321. package/build-module/components/rich-text/use-input-rules.js +31 -2
  322. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  323. package/build-module/components/rich-text/use-paste-handler.js +2 -5
  324. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  325. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  326. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  327. package/build-module/components/url-popover/image-url-input-ui.js +2 -1
  328. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  329. package/build-module/components/use-block-drop-zone/index.js +4 -1
  330. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  331. package/build-module/components/use-moving-animation/index.js +2 -1
  332. package/build-module/components/use-moving-animation/index.js.map +1 -1
  333. package/build-module/components/use-settings/index.js +2 -2
  334. package/build-module/components/use-settings/index.js.map +1 -1
  335. package/build-module/components/writing-flow/use-tab-nav.js +7 -3
  336. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  337. package/build-module/hooks/align.js +8 -8
  338. package/build-module/hooks/align.js.map +1 -1
  339. package/build-module/hooks/align.native.js +2 -2
  340. package/build-module/hooks/align.native.js.map +1 -1
  341. package/build-module/hooks/anchor.js +5 -4
  342. package/build-module/hooks/anchor.js.map +1 -1
  343. package/build-module/hooks/background.js +17 -5
  344. package/build-module/hooks/background.js.map +1 -1
  345. package/build-module/hooks/block-hooks.js +5 -6
  346. package/build-module/hooks/block-hooks.js.map +1 -1
  347. package/build-module/hooks/block-renaming.js +40 -0
  348. package/build-module/hooks/block-renaming.js.map +1 -1
  349. package/build-module/hooks/content-lock-ui.js +3 -3
  350. package/build-module/hooks/content-lock-ui.js.map +1 -1
  351. package/build-module/hooks/custom-class-name.js +6 -5
  352. package/build-module/hooks/custom-class-name.js.map +1 -1
  353. package/build-module/hooks/custom-fields.js +57 -52
  354. package/build-module/hooks/custom-fields.js.map +1 -1
  355. package/build-module/hooks/duotone.js +10 -21
  356. package/build-module/hooks/duotone.js.map +1 -1
  357. package/build-module/hooks/index.js +0 -1
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout.js +103 -93
  360. package/build-module/hooks/layout.js.map +1 -1
  361. package/build-module/hooks/position.js +11 -10
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/style.js +10 -13
  364. package/build-module/hooks/style.js.map +1 -1
  365. package/build-module/hooks/utils.js +30 -1
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +4 -3
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/private-apis.js +4 -1
  370. package/build-module/private-apis.js.map +1 -1
  371. package/build-module/store/actions.js +29 -37
  372. package/build-module/store/actions.js.map +1 -1
  373. package/build-module/store/reducer.js +17 -0
  374. package/build-module/store/reducer.js.map +1 -1
  375. package/build-module/store/selectors.js +17 -13
  376. package/build-module/store/selectors.js.map +1 -1
  377. package/build-module/utils/transform-styles/index.js +24 -7
  378. package/build-module/utils/transform-styles/index.js.map +1 -1
  379. package/build-style/content-rtl.css +6 -6
  380. package/build-style/content.css +6 -6
  381. package/build-style/style-rtl.css +26 -20
  382. package/build-style/style.css +26 -20
  383. package/package.json +31 -31
  384. package/src/components/block-heading-level-dropdown/index.js +1 -1
  385. package/src/components/block-list/block.native.js +2 -0
  386. package/src/components/block-list/index.js +4 -18
  387. package/src/components/block-list-appender/index.js +20 -4
  388. package/src/components/block-parent-selector/index.js +1 -1
  389. package/src/components/block-pattern-setup/index.js +38 -22
  390. package/src/components/block-pattern-setup/setup-toolbar.js +2 -0
  391. package/src/components/block-pattern-setup/style.scss +4 -1
  392. package/src/components/block-patterns-list/README.md +4 -4
  393. package/src/components/block-patterns-list/index.js +60 -34
  394. package/src/components/block-patterns-list/style.scss +7 -0
  395. package/src/components/block-quick-navigation/index.js +11 -5
  396. package/src/components/block-rename/index.js +3 -0
  397. package/src/components/block-rename/is-empty-string.js +3 -0
  398. package/src/components/block-rename/modal.js +115 -0
  399. package/src/components/block-rename/rename-control.js +80 -0
  400. package/src/components/block-rename/use-block-rename.js +10 -0
  401. package/src/components/block-settings-menu/block-settings-dropdown.js +38 -34
  402. package/src/components/block-settings-menu-controls/index.js +9 -0
  403. package/src/components/block-styles/index.js +0 -10
  404. package/src/components/block-switcher/pattern-transformations-menu.js +20 -14
  405. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -4
  406. package/src/components/block-toolbar/style.scss +8 -0
  407. package/src/components/block-tools/back-compat.js +1 -1
  408. package/src/components/block-tools/block-contextual-toolbar.js +11 -134
  409. package/src/components/block-tools/empty-block-inserter.js +56 -0
  410. package/src/components/block-tools/index.js +72 -16
  411. package/src/components/block-tools/selected-block-tools.js +127 -0
  412. package/src/components/block-tools/style.scss +0 -10
  413. package/src/components/block-tools/use-selected-block-tool-props.js +66 -0
  414. package/src/components/block-types-list/index.js +5 -4
  415. package/src/components/button-block-appender/content.scss +2 -2
  416. package/src/components/date-format-picker/index.js +7 -0
  417. package/src/components/editable-text/README.md +0 -36
  418. package/src/components/editable-text/index.js +1 -8
  419. package/src/components/global-styles/advanced-panel.js +1 -1
  420. package/src/components/iframe/index.js +4 -3
  421. package/src/components/image-size-control/index.js +0 -6
  422. package/src/components/inner-blocks/index.js +6 -2
  423. package/src/components/inner-blocks/warning-max-depth-exceeded.native.js +57 -33
  424. package/src/components/inserter/block-patterns-explorer/{explorer.js → index.js} +4 -4
  425. package/src/components/inserter/block-patterns-explorer/{patterns-list.js → pattern-list.js} +9 -2
  426. package/src/components/inserter/block-patterns-tab/index.js +118 -0
  427. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +48 -0
  428. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +179 -0
  429. package/src/components/inserter/{block-patterns-filter.js → block-patterns-tab/patterns-filter.js} +15 -21
  430. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +101 -0
  431. package/src/components/inserter/block-patterns-tab/utils.js +78 -0
  432. package/src/components/inserter/hooks/use-patterns-state.js +3 -1
  433. package/src/components/inserter/media-tab/media-list.js +7 -7
  434. package/src/components/inserter/media-tab/media-preview.js +27 -22
  435. package/src/components/inserter/menu.js +4 -5
  436. package/src/components/inserter-listbox/index.js +11 -7
  437. package/src/components/inserter-listbox/item.js +11 -12
  438. package/src/components/inserter-listbox/row.js +6 -12
  439. package/src/components/link-control/README.md +2 -2
  440. package/src/components/link-control/index.js +15 -6
  441. package/src/components/link-control/style.scss +8 -5
  442. package/src/components/list-view/block-select-button.js +44 -1
  443. package/src/components/list-view/block.js +11 -11
  444. package/src/components/list-view/index.js +2 -0
  445. package/src/components/list-view/use-list-view-expand-selected-item.js +7 -8
  446. package/src/components/media-replace-flow/style.scss +2 -2
  447. package/src/components/navigable-toolbar/index.js +71 -25
  448. package/src/components/plain-text/README.md +2 -30
  449. package/src/components/preview-options/index.js +2 -0
  450. package/src/components/provider/use-block-sync.js +2 -21
  451. package/src/components/rich-text/README.md +6 -63
  452. package/src/components/rich-text/index.js +0 -1
  453. package/src/components/rich-text/index.native.js +4 -2
  454. package/src/components/rich-text/native/format-edit.js +44 -0
  455. package/src/components/rich-text/native/get-format-colors.native.js +54 -0
  456. package/src/components/rich-text/native/index.js +1 -0
  457. package/src/components/rich-text/native/index.native.js +1406 -0
  458. package/src/components/rich-text/native/style.native.scss +28 -0
  459. package/src/components/rich-text/native/test/__snapshots__/index.native.js.snap +79 -0
  460. package/src/components/rich-text/native/test/index.native.js +278 -0
  461. package/src/components/rich-text/native/test/performance/rich-text.native.js +44 -0
  462. package/src/components/rich-text/native/toolbar-button-with-options.native.js +61 -0
  463. package/src/components/rich-text/native/use-format-types.js +146 -0
  464. package/src/components/rich-text/use-input-rules.js +30 -2
  465. package/src/components/rich-text/use-paste-handler.js +1 -6
  466. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  467. package/src/components/url-input/README.md +1 -74
  468. package/src/components/url-popover/image-url-input-ui.js +1 -0
  469. package/src/components/use-block-drop-zone/index.js +4 -1
  470. package/src/components/use-moving-animation/index.js +1 -1
  471. package/src/components/use-settings/index.js +2 -2
  472. package/src/components/use-settings/test/index.js +1 -1
  473. package/src/components/writing-flow/use-tab-nav.js +8 -3
  474. package/src/hooks/align.js +8 -8
  475. package/src/hooks/align.native.js +2 -2
  476. package/src/hooks/anchor.js +21 -23
  477. package/src/hooks/background.js +28 -6
  478. package/src/hooks/block-hooks.js +20 -16
  479. package/src/hooks/block-renaming.js +47 -0
  480. package/src/hooks/content-lock-ui.js +3 -3
  481. package/src/hooks/custom-class-name.js +7 -6
  482. package/src/hooks/custom-fields.js +73 -70
  483. package/src/hooks/duotone.js +23 -33
  484. package/src/hooks/index.js +0 -1
  485. package/src/hooks/layout.js +126 -113
  486. package/src/hooks/position.js +8 -21
  487. package/src/hooks/style.js +17 -31
  488. package/src/hooks/test/__snapshots__/align.native.js.snap +5 -5
  489. package/src/hooks/test/align.js +4 -4
  490. package/src/hooks/utils.js +33 -1
  491. package/src/layouts/constrained.js +57 -50
  492. package/src/private-apis.js +4 -1
  493. package/src/store/actions.js +26 -72
  494. package/src/store/reducer.js +19 -0
  495. package/src/store/selectors.js +15 -19
  496. package/src/style.scss +1 -1
  497. package/src/utils/test/transform-styles.js +49 -0
  498. package/src/utils/transform-styles/index.js +39 -13
  499. package/build/components/block-tools/selected-block-popover.js +0 -221
  500. package/build/components/block-tools/selected-block-popover.js.map +0 -1
  501. package/build/components/inserter/block-patterns-explorer/explorer.js.map +0 -1
  502. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +0 -1
  503. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +0 -1
  504. package/build/components/inserter/block-patterns-filter.js.map +0 -1
  505. package/build/components/inserter/block-patterns-tab.js +0 -270
  506. package/build/components/inserter/block-patterns-tab.js.map +0 -1
  507. package/build/hooks/block-rename-ui.js +0 -165
  508. package/build/hooks/block-rename-ui.js.map +0 -1
  509. package/build/store/utils.js +0 -22
  510. package/build/store/utils.js.map +0 -1
  511. package/build-module/components/block-tools/selected-block-popover.js +0 -213
  512. package/build-module/components/block-tools/selected-block-popover.js.map +0 -1
  513. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +0 -1
  514. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +0 -1
  515. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +0 -1
  516. package/build-module/components/inserter/block-patterns-filter.js.map +0 -1
  517. package/build-module/components/inserter/block-patterns-tab.js +0 -254
  518. package/build-module/components/inserter/block-patterns-tab.js.map +0 -1
  519. package/build-module/hooks/block-rename-ui.js +0 -157
  520. package/build-module/hooks/block-rename-ui.js.map +0 -1
  521. package/build-module/store/utils.js +0 -16
  522. package/build-module/store/utils.js.map +0 -1
  523. package/src/components/block-tools/selected-block-popover.js +0 -265
  524. package/src/components/inserter/block-patterns-tab.js +0 -448
  525. package/src/hooks/block-rename-ui.js +0 -226
  526. package/src/store/utils.js +0 -12
  527. /package/src/{hooks/block-rename-ui.scss → components/block-rename/style.scss} +0 -0
  528. /package/src/components/inserter/block-patterns-explorer/{sidebar.js → pattern-explorer-sidebar.js} +0 -0
@@ -34,6 +34,65 @@ function addAttribute( settings ) {
34
34
  return settings;
35
35
  }
36
36
 
37
+ function CustomFieldsControl( props ) {
38
+ const blockEditingMode = useBlockEditingMode();
39
+ if ( blockEditingMode !== 'default' ) {
40
+ return null;
41
+ }
42
+
43
+ // If the block is a paragraph or image block, we need to know which
44
+ // attribute to use for the connection. Only the `content` attribute
45
+ // of the paragraph block and the `url` attribute of the image block are supported.
46
+ let attributeName;
47
+ if ( props.name === 'core/paragraph' ) attributeName = 'content';
48
+ if ( props.name === 'core/image' ) attributeName = 'url';
49
+
50
+ return (
51
+ <InspectorControls>
52
+ <PanelBody title={ __( 'Connections' ) } initialOpen={ true }>
53
+ <TextControl
54
+ __nextHasNoMarginBottom
55
+ autoComplete="off"
56
+ label={ __( 'Custom field meta_key' ) }
57
+ value={
58
+ props.attributes?.connections?.attributes?.[
59
+ attributeName
60
+ ]?.value || ''
61
+ }
62
+ onChange={ ( nextValue ) => {
63
+ if ( nextValue === '' ) {
64
+ props.setAttributes( {
65
+ connections: undefined,
66
+ [ attributeName ]: undefined,
67
+ placeholder: undefined,
68
+ } );
69
+ } else {
70
+ props.setAttributes( {
71
+ connections: {
72
+ attributes: {
73
+ // The attributeName will be either `content` or `url`.
74
+ [ attributeName ]: {
75
+ // Source will be variable, could be post_meta, user_meta, term_meta, etc.
76
+ // Could even be a custom source like a social media attribute.
77
+ source: 'meta_fields',
78
+ value: nextValue,
79
+ },
80
+ },
81
+ },
82
+ [ attributeName ]: undefined,
83
+ placeholder: sprintf(
84
+ 'This content will be replaced on the frontend by the value of "%s" custom field.',
85
+ nextValue
86
+ ),
87
+ } );
88
+ }
89
+ } }
90
+ />
91
+ </PanelBody>
92
+ </InspectorControls>
93
+ );
94
+ }
95
+
37
96
  /**
38
97
  * Override the default edit UI to include a new block inspector control for
39
98
  * assigning a connection to blocks that has support for connections.
@@ -44,9 +103,8 @@ function addAttribute( settings ) {
44
103
  *
45
104
  * @return {Component} Wrapped component.
46
105
  */
47
- const withInspectorControl = createHigherOrderComponent( ( BlockEdit ) => {
106
+ const withCustomFieldsControls = createHigherOrderComponent( ( BlockEdit ) => {
48
107
  return ( props ) => {
49
- const blockEditingMode = useBlockEditingMode();
50
108
  const hasCustomFieldsSupport = hasBlockSupport(
51
109
  props.name,
52
110
  '__experimentalConnections',
@@ -56,84 +114,29 @@ const withInspectorControl = createHigherOrderComponent( ( BlockEdit ) => {
56
114
  // Check if the current block is a paragraph or image block.
57
115
  // Currently, only these two blocks are supported.
58
116
  if ( ! [ 'core/paragraph', 'core/image' ].includes( props.name ) ) {
59
- return <BlockEdit { ...props } />;
117
+ return <BlockEdit key="edit" { ...props } />;
60
118
  }
61
119
 
62
- // If the block is a paragraph or image block, we need to know which
63
- // attribute to use for the connection. Only the `content` attribute
64
- // of the paragraph block and the `url` attribute of the image block are supported.
65
- let attributeName;
66
- if ( props.name === 'core/paragraph' ) attributeName = 'content';
67
- if ( props.name === 'core/image' ) attributeName = 'url';
68
-
69
- if ( hasCustomFieldsSupport && props.isSelected ) {
70
- return (
71
- <>
72
- <BlockEdit { ...props } />
73
- { blockEditingMode === 'default' && (
74
- <InspectorControls>
75
- <PanelBody
76
- title={ __( 'Connections' ) }
77
- initialOpen={ true }
78
- >
79
- <TextControl
80
- __nextHasNoMarginBottom
81
- autoComplete="off"
82
- label={ __( 'Custom field meta_key' ) }
83
- value={
84
- props.attributes?.connections
85
- ?.attributes?.[ attributeName ]
86
- ?.value || ''
87
- }
88
- onChange={ ( nextValue ) => {
89
- if ( nextValue === '' ) {
90
- props.setAttributes( {
91
- connections: undefined,
92
- [ attributeName ]: undefined,
93
- placeholder: undefined,
94
- } );
95
- } else {
96
- props.setAttributes( {
97
- connections: {
98
- attributes: {
99
- // The attributeName will be either `content` or `url`.
100
- [ attributeName ]: {
101
- // Source will be variable, could be post_meta, user_meta, term_meta, etc.
102
- // Could even be a custom source like a social media attribute.
103
- source: 'meta_fields',
104
- value: nextValue,
105
- },
106
- },
107
- },
108
- [ attributeName ]: undefined,
109
- placeholder: sprintf(
110
- 'This content will be replaced on the frontend by the value of "%s" custom field.',
111
- nextValue
112
- ),
113
- } );
114
- }
115
- } }
116
- />
117
- </PanelBody>
118
- </InspectorControls>
119
- ) }
120
- </>
121
- );
122
- }
123
-
124
- return <BlockEdit { ...props } />;
120
+ return (
121
+ <>
122
+ <BlockEdit key="edit" { ...props } />
123
+ { hasCustomFieldsSupport && props.isSelected && (
124
+ <CustomFieldsControl { ...props } />
125
+ ) }
126
+ </>
127
+ );
125
128
  };
126
- }, 'withInspectorControl' );
129
+ }, 'withCustomFieldsControls' );
127
130
 
128
131
  if ( window.__experimentalConnections ) {
129
132
  addFilter(
130
133
  'blocks.registerBlockType',
131
- 'core/connections/attribute',
134
+ 'core/editor/connections/attribute',
132
135
  addAttribute
133
136
  );
134
137
  addFilter(
135
138
  'editor.BlockEdit',
136
- 'core/connections/with-inspector-control',
137
- withInspectorControl
139
+ 'core/editor/connections/with-inspector-controls',
140
+ withCustomFieldsControls
138
141
  );
139
142
  }
@@ -16,7 +16,6 @@ import {
16
16
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
17
17
  import { addFilter } from '@wordpress/hooks';
18
18
  import { useMemo, useEffect } from '@wordpress/element';
19
- import { useDispatch } from '@wordpress/data';
20
19
 
21
20
  /**
22
21
  * Internal dependencies
@@ -34,12 +33,10 @@ import {
34
33
  } from '../components/duotone/utils';
35
34
  import { getBlockCSSSelector } from '../components/global-styles/get-block-css-selector';
36
35
  import { scopeSelector } from '../components/global-styles/utils';
37
- import { useBlockSettings } from './utils';
36
+ import { useBlockSettings, useStyleOverride } from './utils';
38
37
  import { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';
39
38
  import { useBlockEditingMode } from '../components/block-editing-mode';
40
39
  import { __unstableUseBlockElement as useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
41
- import { store as blockEditorStore } from '../store';
42
- import { unlock } from '../lock-unlock';
43
40
 
44
41
  const EMPTY_ARRAY = [];
45
42
 
@@ -291,8 +288,27 @@ function DuotoneStyles( {
291
288
 
292
289
  const isValidFilter = Array.isArray( colors ) || colors === 'unset';
293
290
 
294
- const { setStyleOverride, deleteStyleOverride } = unlock(
295
- useDispatch( blockEditorStore )
291
+ useStyleOverride(
292
+ isValidFilter
293
+ ? {
294
+ css:
295
+ colors !== 'unset'
296
+ ? getDuotoneStylesheet( selector, filterId )
297
+ : getDuotoneUnsetStylesheet( selector ),
298
+ __unstableType: 'presets',
299
+ }
300
+ : undefined
301
+ );
302
+ useStyleOverride(
303
+ isValidFilter
304
+ ? {
305
+ assets:
306
+ colors !== 'unset'
307
+ ? getDuotoneFilter( filterId, colors )
308
+ : '',
309
+ __unstableType: 'svgs',
310
+ }
311
+ : undefined
296
312
  );
297
313
 
298
314
  const blockElement = useBlockElement( clientId );
@@ -300,19 +316,6 @@ function DuotoneStyles( {
300
316
  useEffect( () => {
301
317
  if ( ! isValidFilter ) return;
302
318
 
303
- setStyleOverride( filterId, {
304
- css:
305
- colors !== 'unset'
306
- ? getDuotoneStylesheet( selector, filterId )
307
- : getDuotoneUnsetStylesheet( selector ),
308
- __unstableType: 'presets',
309
- } );
310
- setStyleOverride( `duotone-${ filterId }`, {
311
- assets:
312
- colors !== 'unset' ? getDuotoneFilter( filterId, colors ) : '',
313
- __unstableType: 'svgs',
314
- } );
315
-
316
319
  // Safari does not always update the duotone filter when the duotone colors
317
320
  // are changed. When using Safari, force the block element to be repainted by
318
321
  // the browser to ensure any changes are reflected visually. This logic matches
@@ -329,20 +332,7 @@ function DuotoneStyles( {
329
332
  blockElement.offsetHeight;
330
333
  blockElement.style.display = display;
331
334
  }
332
-
333
- return () => {
334
- deleteStyleOverride( filterId );
335
- deleteStyleOverride( `duotone-${ filterId }` );
336
- };
337
- }, [
338
- isValidFilter,
339
- blockElement,
340
- colors,
341
- selector,
342
- filterId,
343
- setStyleOverride,
344
- deleteStyleOverride,
345
- ] );
335
+ }, [ isValidFilter, blockElement ] );
346
336
 
347
337
  return null;
348
338
  }
@@ -22,7 +22,6 @@ import './metadata';
22
22
  import './custom-fields';
23
23
  import './block-hooks';
24
24
  import './block-renaming';
25
- import './block-rename-ui';
26
25
 
27
26
  export { useCustomSides } from './dimensions';
28
27
  export { useLayoutClasses, useLayoutStyles } from './layout';
@@ -9,7 +9,7 @@ import classnames from 'classnames';
9
9
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
10
10
  import { addFilter } from '@wordpress/hooks';
11
11
  import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
12
- import { useSelect, useDispatch } from '@wordpress/data';
12
+ import { useSelect } from '@wordpress/data';
13
13
  import {
14
14
  Button,
15
15
  ButtonGroup,
@@ -17,7 +17,6 @@ import {
17
17
  PanelBody,
18
18
  } from '@wordpress/components';
19
19
  import { __ } from '@wordpress/i18n';
20
- import { useEffect } from '@wordpress/element';
21
20
 
22
21
  /**
23
22
  * Internal dependencies
@@ -29,8 +28,7 @@ import { getLayoutType, getLayoutTypes } from '../layouts';
29
28
  import { useBlockEditingMode } from '../components/block-editing-mode';
30
29
  import { LAYOUT_DEFINITIONS } from '../layouts/definitions';
31
30
  import { kebabCase } from '../utils/object';
32
- import { useBlockSettings } from './utils';
33
- import { unlock } from '../lock-unlock';
31
+ import { useBlockSettings, useStyleOverride } from './utils';
34
32
 
35
33
  const layoutBlockSupportKey = 'layout';
36
34
 
@@ -137,10 +135,9 @@ export function useLayoutStyles( blockAttributes = {}, blockName, selector ) {
137
135
 
138
136
  function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
139
137
  const settings = useBlockSettings( blockName );
140
- const {
141
- layout: { allowEditing: allowEditingSetting },
142
- } = settings;
143
-
138
+ // Block settings come from theme.json under settings.[blockName].
139
+ const { layout: layoutSettings } = settings;
140
+ // Layout comes from block attributes.
144
141
  const { layout } = attributes;
145
142
  const [ defaultThemeLayout ] = useSettings( 'layout' );
146
143
  const { themeSupportsLayout } = useSelect( ( select ) => {
@@ -155,17 +152,22 @@ function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
155
152
  return null;
156
153
  }
157
154
 
155
+ // Layout block support comes from the block's block.json.
158
156
  const layoutBlockSupport = getBlockSupport(
159
157
  blockName,
160
158
  layoutBlockSupportKey,
161
159
  {}
162
160
  );
161
+ const blockSupportAndThemeSettings = {
162
+ ...layoutSettings,
163
+ ...layoutBlockSupport,
164
+ };
163
165
  const {
164
166
  allowSwitching,
165
- allowEditing = allowEditingSetting ?? true,
167
+ allowEditing = true,
166
168
  allowInheriting = true,
167
169
  default: defaultBlockLayout,
168
- } = layoutBlockSupport;
170
+ } = blockSupportAndThemeSettings;
169
171
 
170
172
  if ( ! allowEditing ) {
171
173
  return null;
@@ -262,14 +264,14 @@ function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
262
264
  <layoutType.inspectorControls
263
265
  layout={ usedLayout }
264
266
  onChange={ onChangeLayout }
265
- layoutBlockSupport={ layoutBlockSupport }
267
+ layoutBlockSupport={ blockSupportAndThemeSettings }
266
268
  />
267
269
  ) }
268
270
  { constrainedType && displayControlsForLegacyLayouts && (
269
271
  <constrainedType.inspectorControls
270
272
  layout={ usedLayout }
271
273
  onChange={ onChangeLayout }
272
- layoutBlockSupport={ layoutBlockSupport }
274
+ layoutBlockSupport={ blockSupportAndThemeSettings }
273
275
  />
274
276
  ) }
275
277
  </PanelBody>
@@ -333,7 +335,7 @@ export function addAttribute( settings ) {
333
335
  *
334
336
  * @return {Function} Wrapped component.
335
337
  */
336
- export const withInspectorControls = createHigherOrderComponent(
338
+ export const withLayoutControls = createHigherOrderComponent(
337
339
  ( BlockEdit ) => ( props ) => {
338
340
  const supportLayout = hasLayoutBlockSupport( props.name );
339
341
 
@@ -342,9 +344,55 @@ export const withInspectorControls = createHigherOrderComponent(
342
344
  <BlockEdit key="edit" { ...props } />,
343
345
  ];
344
346
  },
345
- 'withInspectorControls'
347
+ 'withLayoutControls'
346
348
  );
347
349
 
350
+ function BlockWithLayoutStyles( { block: BlockListBlock, props } ) {
351
+ const { name, attributes } = props;
352
+ const id = useInstanceId( BlockListBlock );
353
+ const { layout } = attributes;
354
+ const { default: defaultBlockLayout } =
355
+ getBlockSupport( name, layoutBlockSupportKey ) || {};
356
+ const usedLayout =
357
+ layout?.inherit || layout?.contentSize || layout?.wideSize
358
+ ? { ...layout, type: 'constrained' }
359
+ : layout || defaultBlockLayout || {};
360
+ const layoutClasses = useLayoutClasses( attributes, name );
361
+
362
+ // Higher specificity to override defaults from theme.json.
363
+ const selector = `.wp-container-${ id }.wp-container-${ id }`;
364
+ const [ blockGapSupport ] = useSettings( 'spacing.blockGap' );
365
+ const hasBlockGapSupport = blockGapSupport !== null;
366
+
367
+ // Get CSS string for the current layout type.
368
+ // The CSS and `style` element is only output if it is not empty.
369
+ const fullLayoutType = getLayoutType( usedLayout?.type || 'default' );
370
+ const css = fullLayoutType?.getLayoutStyle?.( {
371
+ blockName: name,
372
+ selector,
373
+ layout: usedLayout,
374
+ style: attributes?.style,
375
+ hasBlockGapSupport,
376
+ } );
377
+
378
+ // Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.
379
+ const layoutClassNames = classnames(
380
+ {
381
+ [ `wp-container-${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.
382
+ },
383
+ layoutClasses
384
+ );
385
+
386
+ useStyleOverride( { css } );
387
+
388
+ return (
389
+ <BlockListBlock
390
+ { ...props }
391
+ __unstableLayoutClassNames={ layoutClassNames }
392
+ />
393
+ );
394
+ }
395
+
348
396
  /**
349
397
  * Override the default block element to add the layout styles.
350
398
  *
@@ -354,76 +402,60 @@ export const withInspectorControls = createHigherOrderComponent(
354
402
  */
355
403
  export const withLayoutStyles = createHigherOrderComponent(
356
404
  ( BlockListBlock ) => ( props ) => {
357
- const { name, attributes } = props;
358
- const blockSupportsLayout = hasLayoutBlockSupport( name );
359
- const disableLayoutStyles = useSelect( ( select ) => {
360
- const { getSettings } = select( blockEditorStore );
361
- return !! getSettings().disableLayoutStyles;
362
- } );
363
- const shouldRenderLayoutStyles =
364
- blockSupportsLayout && ! disableLayoutStyles;
365
- const id = useInstanceId( BlockListBlock );
366
- const { layout } = attributes;
367
- const { default: defaultBlockLayout } =
368
- getBlockSupport( name, layoutBlockSupportKey ) || {};
369
- const usedLayout =
370
- layout?.inherit || layout?.contentSize || layout?.wideSize
371
- ? { ...layout, type: 'constrained' }
372
- : layout || defaultBlockLayout || {};
373
- const layoutClasses = blockSupportsLayout
374
- ? useLayoutClasses( attributes, name )
375
- : null;
376
- // Higher specificity to override defaults from theme.json.
377
- const selector = `.wp-container-${ id }.wp-container-${ id }`;
378
- const [ blockGapSupport ] = useSettings( 'spacing.blockGap' );
379
- const hasBlockGapSupport = blockGapSupport !== null;
380
-
381
- // Get CSS string for the current layout type.
382
- // The CSS and `style` element is only output if it is not empty.
383
- let css;
384
- if ( shouldRenderLayoutStyles ) {
385
- const fullLayoutType = getLayoutType(
386
- usedLayout?.type || 'default'
387
- );
388
- css = fullLayoutType?.getLayoutStyle?.( {
389
- blockName: name,
390
- selector,
391
- layout: usedLayout,
392
- style: attributes?.style,
393
- hasBlockGapSupport,
394
- } );
395
- }
396
-
397
- // Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.
398
- const layoutClassNames = classnames(
399
- {
400
- [ `wp-container-${ id }` ]: shouldRenderLayoutStyles && !! css, // Only attach a container class if there is generated CSS to be attached.
405
+ const blockSupportsLayout = hasLayoutBlockSupport( props.name );
406
+ const shouldRenderLayoutStyles = useSelect(
407
+ ( select ) => {
408
+ // The callback returns early to avoid block editor subscription.
409
+ if ( ! blockSupportsLayout ) {
410
+ return false;
411
+ }
412
+
413
+ return ! select( blockEditorStore ).getSettings()
414
+ .disableLayoutStyles;
401
415
  },
402
- layoutClasses
403
- );
404
-
405
- const { setStyleOverride, deleteStyleOverride } = unlock(
406
- useDispatch( blockEditorStore )
416
+ [ blockSupportsLayout ]
407
417
  );
408
418
 
409
- useEffect( () => {
410
- if ( ! css ) return;
411
- setStyleOverride( selector, { css } );
412
- return () => {
413
- deleteStyleOverride( selector );
414
- };
415
- }, [ selector, css, setStyleOverride, deleteStyleOverride ] );
419
+ if ( ! shouldRenderLayoutStyles ) {
420
+ return <BlockListBlock { ...props } />;
421
+ }
416
422
 
417
423
  return (
418
- <BlockListBlock
419
- { ...props }
420
- __unstableLayoutClassNames={ layoutClassNames }
421
- />
424
+ <BlockWithLayoutStyles block={ BlockListBlock } props={ props } />
422
425
  );
423
426
  },
424
427
  'withLayoutStyles'
425
428
  );
426
429
 
430
+ function BlockWithChildLayoutStyles( { block: BlockListBlock, props } ) {
431
+ const layout = props.attributes.style?.layout ?? {};
432
+ const { selfStretch, flexSize } = layout;
433
+
434
+ const id = useInstanceId( BlockListBlock );
435
+ const selector = `.wp-container-content-${ id }`;
436
+
437
+ let css = '';
438
+ if ( selfStretch === 'fixed' && flexSize ) {
439
+ css = `${ selector } {
440
+ flex-basis: ${ flexSize };
441
+ box-sizing: border-box;
442
+ }`;
443
+ } else if ( selfStretch === 'fill' ) {
444
+ css = `${ selector } {
445
+ flex-grow: 1;
446
+ }`;
447
+ }
448
+
449
+ // Attach a `wp-container-content` id-based classname.
450
+ const className = classnames( props.className, {
451
+ [ `wp-container-content-${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.
452
+ } );
453
+
454
+ useStyleOverride( { css } );
455
+
456
+ return <BlockListBlock { ...props } className={ className } />;
457
+ }
458
+
427
459
  /**
428
460
  * Override the default block element to add the child layout styles.
429
461
  *
@@ -433,52 +465,33 @@ export const withLayoutStyles = createHigherOrderComponent(
433
465
  */
434
466
  export const withChildLayoutStyles = createHigherOrderComponent(
435
467
  ( BlockListBlock ) => ( props ) => {
436
- const { attributes } = props;
437
- const { style: { layout = {} } = {} } = attributes;
468
+ const layout = props.attributes.style?.layout ?? {};
438
469
  const { selfStretch, flexSize } = layout;
439
470
  const hasChildLayout = selfStretch || flexSize;
440
- const disableLayoutStyles = useSelect( ( select ) => {
441
- const { getSettings } = select( blockEditorStore );
442
- return !! getSettings().disableLayoutStyles;
443
- } );
444
- const shouldRenderChildLayoutStyles =
445
- hasChildLayout && ! disableLayoutStyles;
446
471
 
447
- const id = useInstanceId( BlockListBlock );
448
- const selector = `.wp-container-content-${ id }`;
472
+ const shouldRenderChildLayoutStyles = useSelect(
473
+ ( select ) => {
474
+ // The callback returns early to avoid block editor subscription.
475
+ if ( ! hasChildLayout ) {
476
+ return false;
477
+ }
449
478
 
450
- let css = '';
479
+ return ! select( blockEditorStore ).getSettings()
480
+ .disableLayoutStyles;
481
+ },
482
+ [ hasChildLayout ]
483
+ );
451
484
 
452
- if ( selfStretch === 'fixed' && flexSize ) {
453
- css += `${ selector } {
454
- flex-basis: ${ flexSize };
455
- box-sizing: border-box;
456
- }`;
457
- } else if ( selfStretch === 'fill' ) {
458
- css += `${ selector } {
459
- flex-grow: 1;
460
- }`;
485
+ if ( ! shouldRenderChildLayoutStyles ) {
486
+ return <BlockListBlock { ...props } />;
461
487
  }
462
488
 
463
- // Attach a `wp-container-content` id-based classname.
464
- const className = classnames( props?.className, {
465
- [ `wp-container-content-${ id }` ]:
466
- shouldRenderChildLayoutStyles && !! css, // Only attach a container class if there is generated CSS to be attached.
467
- } );
468
-
469
- const { setStyleOverride, deleteStyleOverride } = unlock(
470
- useDispatch( blockEditorStore )
489
+ return (
490
+ <BlockWithChildLayoutStyles
491
+ block={ BlockListBlock }
492
+ props={ props }
493
+ />
471
494
  );
472
-
473
- useEffect( () => {
474
- if ( ! css ) return;
475
- setStyleOverride( selector, { css } );
476
- return () => {
477
- deleteStyleOverride( selector );
478
- };
479
- }, [ selector, css, setStyleOverride, deleteStyleOverride ] );
480
-
481
- return <BlockListBlock { ...props } className={ className } />;
482
495
  },
483
496
  'withChildLayoutStyles'
484
497
  );
@@ -501,5 +514,5 @@ addFilter(
501
514
  addFilter(
502
515
  'editor.BlockEdit',
503
516
  'core/editor/layout/with-inspector-controls',
504
- withInspectorControls
517
+ withLayoutControls
505
518
  );