@wordpress/block-editor 12.24.0 → 12.25.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 (510) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +1 -1
  3. package/build/components/alignment-control/ui.js +3 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-inspector/index.js +1 -1
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-list/block.js +0 -9
  8. package/build/components/block-list/block.js.map +1 -1
  9. package/build/components/block-list/index.js +4 -3
  10. package/build/components/block-list/index.js.map +1 -1
  11. package/build/components/block-list/index.native.js +1 -9
  12. package/build/components/block-list/index.native.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +6 -6
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-block-refs.js +17 -46
  16. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  17. package/build/components/block-list/use-block-props/use-is-hovered.js +10 -14
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-mover/index.native.js +3 -1
  20. package/build/components/block-mover/index.native.js.map +1 -1
  21. package/build/components/block-settings-menu/block-settings-dropdown.js +0 -25
  22. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  23. package/build/components/block-switcher/pattern-transformations-menu.js +3 -1
  24. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  25. package/build/components/block-switcher/use-transformed-patterns.js +6 -2
  26. package/build/components/block-switcher/use-transformed-patterns.js.map +1 -1
  27. package/build/components/block-switcher/utils.js +15 -5
  28. package/build/components/block-switcher/utils.js.map +1 -1
  29. package/build/components/block-toolbar/use-has-block-toolbar.js +14 -9
  30. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  31. package/build/components/block-tools/index.js +3 -1
  32. package/build/components/block-tools/index.js.map +1 -1
  33. package/build/components/block-tools/use-show-block-tools.js +2 -5
  34. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  35. package/build/components/block-tools/zoom-out-mode-inserters.js +5 -1
  36. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  37. package/build/components/block-variation-picker/index.js +3 -2
  38. package/build/components/block-variation-picker/index.js.map +1 -1
  39. package/build/components/block-variation-transforms/index.js +3 -1
  40. package/build/components/block-variation-transforms/index.js.map +1 -1
  41. package/build/components/floating-toolbar/index.native.js +9 -5
  42. package/build/components/floating-toolbar/index.native.js.map +1 -1
  43. package/build/components/global-styles/background-panel.js +1 -1
  44. package/build/components/global-styles/background-panel.js.map +1 -1
  45. package/build/components/global-styles/color-panel.js +3 -1
  46. package/build/components/global-styles/color-panel.js.map +1 -1
  47. package/build/components/global-styles/dimensions-panel.js +16 -0
  48. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  49. package/build/components/global-styles/hooks.js +3 -2
  50. package/build/components/global-styles/hooks.js.map +1 -1
  51. package/build/components/global-styles/typography-panel.js +23 -23
  52. package/build/components/global-styles/typography-panel.js.map +1 -1
  53. package/build/components/global-styles/use-global-styles-output.js +149 -132
  54. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  55. package/build/components/global-styles/utils.js +45 -0
  56. package/build/components/global-styles/utils.js.map +1 -1
  57. package/build/components/inner-blocks/index.js +16 -2
  58. package/build/components/inner-blocks/index.js.map +1 -1
  59. package/build/components/inserter/block-patterns-tab/index.js +12 -31
  60. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  61. package/build/components/inserter/block-types-tab.js +4 -0
  62. package/build/components/inserter/block-types-tab.js.map +1 -1
  63. package/build/components/inserter/category-tabs/index.js +56 -0
  64. package/build/components/inserter/category-tabs/index.js.map +1 -0
  65. package/build/components/inserter/media-tab/index.js +2 -2
  66. package/build/components/inserter/media-tab/index.js.map +1 -1
  67. package/build/components/inserter/media-tab/media-panel.js +0 -25
  68. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  69. package/build/components/inserter/media-tab/media-preview.js +13 -3
  70. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  71. package/build/components/inserter/media-tab/media-tab.js +15 -29
  72. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  73. package/build/components/inserter/menu.js +59 -69
  74. package/build/components/inserter/menu.js.map +1 -1
  75. package/build/components/inserter/tabs.js +6 -6
  76. package/build/components/inserter/tabs.js.map +1 -1
  77. package/build/components/line-height-control/index.js +6 -2
  78. package/build/components/line-height-control/index.js.map +1 -1
  79. package/build/components/link-control/search-item.js +9 -3
  80. package/build/components/link-control/search-item.js.map +1 -1
  81. package/build/components/list-view/block-select-button.js +5 -170
  82. package/build/components/list-view/block-select-button.js.map +1 -1
  83. package/build/components/list-view/block.js +166 -14
  84. package/build/components/list-view/block.js.map +1 -1
  85. package/build/components/list-view/index.js +1 -1
  86. package/build/components/list-view/index.js.map +1 -1
  87. package/build/components/list-view/use-list-view-drop-zone.js +1 -1
  88. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  89. package/build/components/list-view/utils.js +3 -1
  90. package/build/components/list-view/utils.js.map +1 -1
  91. package/build/components/media-placeholder/index.js +3 -3
  92. package/build/components/media-placeholder/index.js.map +1 -1
  93. package/build/components/navigable-toolbar/index.js +3 -1
  94. package/build/components/navigable-toolbar/index.js.map +1 -1
  95. package/build/components/provider/block-refs-provider.js +3 -4
  96. package/build/components/provider/block-refs-provider.js.map +1 -1
  97. package/build/components/provider/use-block-sync.js +3 -12
  98. package/build/components/provider/use-block-sync.js.map +1 -1
  99. package/build/components/rich-text/event-listeners/before-input-rules.js +93 -0
  100. package/build/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
  101. package/build/components/rich-text/event-listeners/delete.js +58 -0
  102. package/build/components/rich-text/event-listeners/delete.js.map +1 -0
  103. package/build/components/rich-text/event-listeners/enter.js +98 -0
  104. package/build/components/rich-text/event-listeners/enter.js.map +1 -0
  105. package/build/components/rich-text/event-listeners/firefox-compat.js +36 -0
  106. package/build/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
  107. package/build/components/rich-text/event-listeners/index.js +44 -0
  108. package/build/components/rich-text/event-listeners/index.js.map +1 -0
  109. package/build/components/rich-text/event-listeners/input-events.js +22 -0
  110. package/build/components/rich-text/event-listeners/input-events.js.map +1 -0
  111. package/build/components/rich-text/event-listeners/input-rules.js +135 -0
  112. package/build/components/rich-text/event-listeners/input-rules.js.map +1 -0
  113. package/build/components/rich-text/event-listeners/insert-replacement-text.js +33 -0
  114. package/build/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
  115. package/build/components/rich-text/event-listeners/paste-handler.js +146 -0
  116. package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -0
  117. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js +27 -0
  118. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
  119. package/build/components/rich-text/event-listeners/shortcuts.js +22 -0
  120. package/build/components/rich-text/event-listeners/shortcuts.js.map +1 -0
  121. package/build/components/rich-text/event-listeners/undo-automatic-change.js +51 -0
  122. package/build/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
  123. package/build/components/rich-text/index.js +11 -31
  124. package/build/components/rich-text/index.js.map +1 -1
  125. package/build/components/rich-text/index.native.js +13 -3
  126. package/build/components/rich-text/index.native.js.map +1 -1
  127. package/build/components/rich-text/multiline.js +6 -2
  128. package/build/components/rich-text/multiline.js.map +1 -1
  129. package/build/components/rich-text/native/index.native.js +12 -0
  130. package/build/components/rich-text/native/index.native.js.map +1 -1
  131. package/build/components/rich-text/use-format-types.js +8 -4
  132. package/build/components/rich-text/use-format-types.js.map +1 -1
  133. package/build/components/segmented-text-control/index.js +62 -0
  134. package/build/components/segmented-text-control/index.js.map +1 -0
  135. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
  136. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  137. package/build/components/text-alignment-control/index.js +76 -0
  138. package/build/components/text-alignment-control/index.js.map +1 -0
  139. package/build/components/text-decoration-control/index.js +21 -25
  140. package/build/components/text-decoration-control/index.js.map +1 -1
  141. package/build/components/text-transform-control/index.js +18 -22
  142. package/build/components/text-transform-control/index.js.map +1 -1
  143. package/build/components/use-block-display-information/index.js +9 -3
  144. package/build/components/use-block-display-information/index.js.map +1 -1
  145. package/build/components/use-on-block-drop/index.js +3 -1
  146. package/build/components/use-on-block-drop/index.js.map +1 -1
  147. package/build/components/writing-flow/use-drag-selection.js +3 -1
  148. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  149. package/build/components/writing-flow/use-tab-nav.js +3 -1
  150. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  151. package/build/components/writing-mode-control/index.js +16 -20
  152. package/build/components/writing-mode-control/index.js.map +1 -1
  153. package/build/hooks/duotone.js +3 -1
  154. package/build/hooks/duotone.js.map +1 -1
  155. package/build/hooks/utils.js +11 -6
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/private-apis.js +4 -2
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +32 -8
  160. package/build/store/actions.js.map +1 -1
  161. package/build/store/private-selectors.js +27 -6
  162. package/build/store/private-selectors.js.map +1 -1
  163. package/build/store/reducer.js +11 -8
  164. package/build/store/reducer.js.map +1 -1
  165. package/build/store/selectors.js +21 -7
  166. package/build/store/selectors.js.map +1 -1
  167. package/build/utils/object.js +17 -0
  168. package/build/utils/object.js.map +1 -1
  169. package/build/utils/order-inserter-block-items.js +6 -2
  170. package/build/utils/order-inserter-block-items.js.map +1 -1
  171. package/build/utils/pasting.js +6 -2
  172. package/build/utils/pasting.js.map +1 -1
  173. package/build-module/components/alignment-control/ui.js +3 -1
  174. package/build-module/components/alignment-control/ui.js.map +1 -1
  175. package/build-module/components/block-inspector/index.js +1 -1
  176. package/build-module/components/block-inspector/index.js.map +1 -1
  177. package/build-module/components/block-list/block.js +0 -9
  178. package/build-module/components/block-list/block.js.map +1 -1
  179. package/build-module/components/block-list/index.js +4 -3
  180. package/build-module/components/block-list/index.js.map +1 -1
  181. package/build-module/components/block-list/index.native.js +1 -9
  182. package/build-module/components/block-list/index.native.js.map +1 -1
  183. package/build-module/components/block-list/use-block-props/index.js +6 -6
  184. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  185. package/build-module/components/block-list/use-block-props/use-block-refs.js +19 -48
  186. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  187. package/build-module/components/block-list/use-block-props/use-is-hovered.js +10 -14
  188. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  189. package/build-module/components/block-mover/index.native.js +3 -1
  190. package/build-module/components/block-mover/index.native.js.map +1 -1
  191. package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -26
  192. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  193. package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -1
  194. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  195. package/build-module/components/block-switcher/use-transformed-patterns.js +6 -2
  196. package/build-module/components/block-switcher/use-transformed-patterns.js.map +1 -1
  197. package/build-module/components/block-switcher/utils.js +15 -5
  198. package/build-module/components/block-switcher/utils.js.map +1 -1
  199. package/build-module/components/block-toolbar/use-has-block-toolbar.js +14 -9
  200. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  201. package/build-module/components/block-tools/index.js +3 -1
  202. package/build-module/components/block-tools/index.js.map +1 -1
  203. package/build-module/components/block-tools/use-show-block-tools.js +2 -5
  204. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  205. package/build-module/components/block-tools/zoom-out-mode-inserters.js +5 -1
  206. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  207. package/build-module/components/block-variation-picker/index.js +3 -2
  208. package/build-module/components/block-variation-picker/index.js.map +1 -1
  209. package/build-module/components/block-variation-transforms/index.js +3 -1
  210. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  211. package/build-module/components/floating-toolbar/index.native.js +9 -5
  212. package/build-module/components/floating-toolbar/index.native.js.map +1 -1
  213. package/build-module/components/global-styles/background-panel.js +1 -1
  214. package/build-module/components/global-styles/background-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +3 -1
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/dimensions-panel.js +17 -1
  218. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  219. package/build-module/components/global-styles/hooks.js +3 -2
  220. package/build-module/components/global-styles/hooks.js.map +1 -1
  221. package/build-module/components/global-styles/typography-panel.js +24 -24
  222. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  223. package/build-module/components/global-styles/use-global-styles-output.js +149 -132
  224. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  225. package/build-module/components/global-styles/utils.js +44 -0
  226. package/build-module/components/global-styles/utils.js.map +1 -1
  227. package/build-module/components/inner-blocks/index.js +16 -2
  228. package/build-module/components/inner-blocks/index.js.map +1 -1
  229. package/build-module/components/inserter/block-patterns-tab/index.js +13 -32
  230. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  231. package/build-module/components/inserter/block-types-tab.js +4 -0
  232. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  233. package/build-module/components/inserter/category-tabs/index.js +49 -0
  234. package/build-module/components/inserter/category-tabs/index.js.map +1 -0
  235. package/build-module/components/inserter/media-tab/index.js +1 -1
  236. package/build-module/components/inserter/media-tab/index.js.map +1 -1
  237. package/build-module/components/inserter/media-tab/media-panel.js +0 -24
  238. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  239. package/build-module/components/inserter/media-tab/media-preview.js +13 -3
  240. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  241. package/build-module/components/inserter/media-tab/media-tab.js +17 -31
  242. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  243. package/build-module/components/inserter/menu.js +61 -71
  244. package/build-module/components/inserter/menu.js.map +1 -1
  245. package/build-module/components/inserter/tabs.js +6 -6
  246. package/build-module/components/inserter/tabs.js.map +1 -1
  247. package/build-module/components/line-height-control/index.js +6 -2
  248. package/build-module/components/line-height-control/index.js.map +1 -1
  249. package/build-module/components/link-control/search-item.js +9 -3
  250. package/build-module/components/link-control/search-item.js.map +1 -1
  251. package/build-module/components/list-view/block-select-button.js +7 -172
  252. package/build-module/components/list-view/block-select-button.js.map +1 -1
  253. package/build-module/components/list-view/block.js +167 -15
  254. package/build-module/components/list-view/block.js.map +1 -1
  255. package/build-module/components/list-view/index.js +1 -1
  256. package/build-module/components/list-view/index.js.map +1 -1
  257. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
  258. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  259. package/build-module/components/list-view/utils.js +3 -1
  260. package/build-module/components/list-view/utils.js.map +1 -1
  261. package/build-module/components/media-placeholder/index.js +3 -3
  262. package/build-module/components/media-placeholder/index.js.map +1 -1
  263. package/build-module/components/navigable-toolbar/index.js +3 -1
  264. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  265. package/build-module/components/provider/block-refs-provider.js +3 -4
  266. package/build-module/components/provider/block-refs-provider.js.map +1 -1
  267. package/build-module/components/provider/use-block-sync.js +4 -13
  268. package/build-module/components/provider/use-block-sync.js.map +1 -1
  269. package/build-module/components/rich-text/event-listeners/before-input-rules.js +86 -0
  270. package/build-module/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
  271. package/build-module/components/rich-text/event-listeners/delete.js +51 -0
  272. package/build-module/components/rich-text/event-listeners/delete.js.map +1 -0
  273. package/build-module/components/rich-text/event-listeners/enter.js +92 -0
  274. package/build-module/components/rich-text/event-listeners/enter.js.map +1 -0
  275. package/build-module/components/rich-text/event-listeners/firefox-compat.js +29 -0
  276. package/build-module/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
  277. package/build-module/components/rich-text/event-listeners/index.js +36 -0
  278. package/build-module/components/rich-text/event-listeners/index.js.map +1 -0
  279. package/build-module/components/rich-text/event-listeners/input-events.js +15 -0
  280. package/build-module/components/rich-text/event-listeners/input-events.js.map +1 -0
  281. package/build-module/components/rich-text/event-listeners/input-rules.js +127 -0
  282. package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -0
  283. package/build-module/components/rich-text/event-listeners/insert-replacement-text.js +27 -0
  284. package/build-module/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
  285. package/build-module/components/rich-text/event-listeners/paste-handler.js +142 -0
  286. package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -0
  287. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js +21 -0
  288. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
  289. package/build-module/components/rich-text/event-listeners/shortcuts.js +15 -0
  290. package/build-module/components/rich-text/event-listeners/shortcuts.js.map +1 -0
  291. package/build-module/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
  292. package/build-module/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
  293. package/build-module/components/rich-text/index.js +12 -32
  294. package/build-module/components/rich-text/index.js.map +1 -1
  295. package/build-module/components/rich-text/index.native.js +13 -3
  296. package/build-module/components/rich-text/index.native.js.map +1 -1
  297. package/build-module/components/rich-text/multiline.js +6 -2
  298. package/build-module/components/rich-text/multiline.js.map +1 -1
  299. package/build-module/components/rich-text/native/index.native.js +12 -0
  300. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  301. package/build-module/components/rich-text/use-format-types.js +8 -4
  302. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  303. package/build-module/components/segmented-text-control/index.js +55 -0
  304. package/build-module/components/segmented-text-control/index.js.map +1 -0
  305. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
  306. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  307. package/build-module/components/text-alignment-control/index.js +68 -0
  308. package/build-module/components/text-alignment-control/index.js.map +1 -0
  309. package/build-module/components/text-decoration-control/index.js +21 -25
  310. package/build-module/components/text-decoration-control/index.js.map +1 -1
  311. package/build-module/components/text-transform-control/index.js +18 -22
  312. package/build-module/components/text-transform-control/index.js.map +1 -1
  313. package/build-module/components/use-block-display-information/index.js +9 -3
  314. package/build-module/components/use-block-display-information/index.js.map +1 -1
  315. package/build-module/components/use-on-block-drop/index.js +3 -1
  316. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  317. package/build-module/components/writing-flow/use-drag-selection.js +3 -1
  318. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  319. package/build-module/components/writing-flow/use-tab-nav.js +3 -1
  320. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  321. package/build-module/components/writing-mode-control/index.js +16 -20
  322. package/build-module/components/writing-mode-control/index.js.map +1 -1
  323. package/build-module/hooks/duotone.js +3 -1
  324. package/build-module/hooks/duotone.js.map +1 -1
  325. package/build-module/hooks/utils.js +11 -6
  326. package/build-module/hooks/utils.js.map +1 -1
  327. package/build-module/private-apis.js +4 -2
  328. package/build-module/private-apis.js.map +1 -1
  329. package/build-module/store/actions.js +32 -8
  330. package/build-module/store/actions.js.map +1 -1
  331. package/build-module/store/private-selectors.js +27 -5
  332. package/build-module/store/private-selectors.js.map +1 -1
  333. package/build-module/store/reducer.js +11 -8
  334. package/build-module/store/reducer.js.map +1 -1
  335. package/build-module/store/selectors.js +21 -7
  336. package/build-module/store/selectors.js.map +1 -1
  337. package/build-module/utils/object.js +16 -0
  338. package/build-module/utils/object.js.map +1 -1
  339. package/build-module/utils/order-inserter-block-items.js +6 -2
  340. package/build-module/utils/order-inserter-block-items.js.map +1 -1
  341. package/build-module/utils/pasting.js +6 -2
  342. package/build-module/utils/pasting.js.map +1 -1
  343. package/build-style/content-rtl.css +41 -68
  344. package/build-style/content.css +41 -68
  345. package/build-style/style-rtl.css +100 -199
  346. package/build-style/style.css +100 -199
  347. package/package.json +31 -31
  348. package/src/components/alignment-control/ui.js +3 -1
  349. package/src/components/block-bindings-toolbar-indicator/style.scss +1 -4
  350. package/src/components/block-canvas/style.scss +1 -3
  351. package/src/components/block-draggable/test/helpers.native.js +8 -8
  352. package/src/components/block-inspector/index.js +1 -2
  353. package/src/components/block-list/block.js +2 -13
  354. package/src/components/block-list/content.scss +9 -1
  355. package/src/components/block-list/index.js +4 -4
  356. package/src/components/block-list/index.native.js +1 -6
  357. package/src/components/block-list/use-block-props/index.js +12 -4
  358. package/src/components/block-list/use-block-props/use-block-refs.js +17 -57
  359. package/src/components/block-list/use-block-props/use-is-hovered.js +11 -16
  360. package/src/components/block-mover/index.native.js +3 -1
  361. package/src/components/block-patterns-list/style.scss +1 -3
  362. package/src/components/block-preview/style.scss +13 -15
  363. package/src/components/block-settings-menu/block-settings-dropdown.js +1 -51
  364. package/src/components/block-switcher/pattern-transformations-menu.js +3 -1
  365. package/src/components/block-switcher/use-transformed-patterns.js +6 -2
  366. package/src/components/block-switcher/utils.js +14 -5
  367. package/src/components/block-toolbar/style.scss +8 -11
  368. package/src/components/block-toolbar/use-has-block-toolbar.js +21 -16
  369. package/src/components/block-tools/index.js +3 -1
  370. package/src/components/block-tools/use-show-block-tools.js +36 -48
  371. package/src/components/block-tools/zoom-out-mode-inserters.js +5 -1
  372. package/src/components/block-variation-picker/content.scss +22 -72
  373. package/src/components/block-variation-picker/index.js +3 -2
  374. package/src/components/block-variation-transforms/index.js +3 -1
  375. package/src/components/floating-toolbar/index.native.js +5 -2
  376. package/src/components/global-styles/background-panel.js +1 -3
  377. package/src/components/global-styles/color-panel.js +3 -1
  378. package/src/components/global-styles/dimensions-panel.js +18 -1
  379. package/src/components/global-styles/hooks.js +2 -0
  380. package/src/components/global-styles/test/utils.js +21 -0
  381. package/src/components/global-styles/typography-panel.js +27 -23
  382. package/src/components/global-styles/use-global-styles-output.js +211 -187
  383. package/src/components/global-styles/utils.js +55 -0
  384. package/src/components/inner-blocks/index.js +14 -1
  385. package/src/components/inserter/block-patterns-tab/index.js +15 -65
  386. package/src/components/inserter/block-types-tab.js +5 -0
  387. package/src/components/inserter/category-tabs/index.js +74 -0
  388. package/src/components/inserter/media-tab/index.js +1 -1
  389. package/src/components/inserter/media-tab/media-panel.js +0 -22
  390. package/src/components/inserter/media-tab/media-preview.js +15 -7
  391. package/src/components/inserter/media-tab/media-tab.js +44 -83
  392. package/src/components/inserter/menu.js +139 -117
  393. package/src/components/inserter/style.scss +90 -170
  394. package/src/components/inserter/tabs.js +5 -13
  395. package/src/components/line-height-control/index.js +6 -2
  396. package/src/components/link-control/search-item.js +9 -3
  397. package/src/components/list-view/block-select-button.js +73 -266
  398. package/src/components/list-view/block.js +218 -28
  399. package/src/components/list-view/index.js +1 -1
  400. package/src/components/list-view/style.scss +20 -28
  401. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  402. package/src/components/list-view/utils.js +3 -1
  403. package/src/components/media-placeholder/content.scss +0 -11
  404. package/src/components/media-placeholder/index.js +3 -3
  405. package/src/components/navigable-toolbar/index.js +3 -1
  406. package/src/components/provider/block-refs-provider.js +3 -8
  407. package/src/components/provider/test/use-block-sync.js +7 -0
  408. package/src/components/provider/use-block-sync.js +3 -20
  409. package/src/components/rich-text/event-listeners/before-input-rules.js +92 -0
  410. package/src/components/rich-text/event-listeners/delete.js +53 -0
  411. package/src/components/rich-text/event-listeners/enter.js +104 -0
  412. package/src/components/rich-text/event-listeners/firefox-compat.js +31 -0
  413. package/src/components/rich-text/event-listeners/index.js +56 -0
  414. package/src/components/rich-text/event-listeners/input-events.js +13 -0
  415. package/src/components/rich-text/event-listeners/input-rules.js +146 -0
  416. package/src/components/rich-text/event-listeners/insert-replacement-text.js +28 -0
  417. package/src/components/rich-text/event-listeners/paste-handler.js +169 -0
  418. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +24 -0
  419. package/src/components/rich-text/event-listeners/shortcuts.js +13 -0
  420. package/src/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
  421. package/src/components/rich-text/index.js +7 -34
  422. package/src/components/rich-text/index.native.js +11 -0
  423. package/src/components/rich-text/multiline.js +6 -2
  424. package/src/components/rich-text/native/index.native.js +11 -0
  425. package/src/components/rich-text/use-format-types.js +6 -2
  426. package/src/components/segmented-text-control/index.js +63 -0
  427. package/src/components/{writing-mode-control → segmented-text-control}/style.scss +2 -5
  428. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -1
  429. package/src/components/text-alignment-control/index.js +91 -0
  430. package/src/components/text-alignment-control/stories/index.story.js +39 -0
  431. package/src/components/text-decoration-control/index.js +20 -33
  432. package/src/components/text-transform-control/index.js +17 -30
  433. package/src/components/use-block-display-information/index.js +9 -3
  434. package/src/components/use-on-block-drop/index.js +3 -1
  435. package/src/components/writing-flow/use-drag-selection.js +3 -1
  436. package/src/components/writing-flow/use-tab-nav.js +3 -1
  437. package/src/components/writing-mode-control/index.js +15 -28
  438. package/src/hooks/duotone.js +3 -1
  439. package/src/hooks/utils.js +16 -2
  440. package/src/private-apis.js +4 -2
  441. package/src/store/actions.js +36 -12
  442. package/src/store/private-selectors.js +28 -4
  443. package/src/store/reducer.js +13 -23
  444. package/src/store/selectors.js +20 -7
  445. package/src/style.scss +1 -2
  446. package/src/utils/object.js +16 -0
  447. package/src/utils/order-inserter-block-items.js +6 -2
  448. package/src/utils/pasting.js +6 -2
  449. package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -54
  450. package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
  451. package/build/components/rich-text/use-before-input-rules.js +0 -98
  452. package/build/components/rich-text/use-before-input-rules.js.map +0 -1
  453. package/build/components/rich-text/use-delete.js +0 -64
  454. package/build/components/rich-text/use-delete.js.map +0 -1
  455. package/build/components/rich-text/use-enter.js +0 -109
  456. package/build/components/rich-text/use-enter.js.map +0 -1
  457. package/build/components/rich-text/use-firefox-compat.js +0 -44
  458. package/build/components/rich-text/use-firefox-compat.js.map +0 -1
  459. package/build/components/rich-text/use-input-events.js +0 -25
  460. package/build/components/rich-text/use-input-events.js.map +0 -1
  461. package/build/components/rich-text/use-input-rules.js +0 -139
  462. package/build/components/rich-text/use-input-rules.js.map +0 -1
  463. package/build/components/rich-text/use-insert-replacement-text.js +0 -38
  464. package/build/components/rich-text/use-insert-replacement-text.js.map +0 -1
  465. package/build/components/rich-text/use-paste-handler.js +0 -158
  466. package/build/components/rich-text/use-paste-handler.js.map +0 -1
  467. package/build/components/rich-text/use-remove-browser-shortcuts.js +0 -32
  468. package/build/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
  469. package/build/components/rich-text/use-shortcuts.js +0 -25
  470. package/build/components/rich-text/use-shortcuts.js.map +0 -1
  471. package/build/components/rich-text/use-undo-automatic-change.js +0 -53
  472. package/build/components/rich-text/use-undo-automatic-change.js.map +0 -1
  473. package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -47
  474. package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
  475. package/build-module/components/rich-text/use-before-input-rules.js +0 -92
  476. package/build-module/components/rich-text/use-before-input-rules.js.map +0 -1
  477. package/build-module/components/rich-text/use-delete.js +0 -57
  478. package/build-module/components/rich-text/use-delete.js.map +0 -1
  479. package/build-module/components/rich-text/use-enter.js +0 -102
  480. package/build-module/components/rich-text/use-enter.js.map +0 -1
  481. package/build-module/components/rich-text/use-firefox-compat.js +0 -37
  482. package/build-module/components/rich-text/use-firefox-compat.js.map +0 -1
  483. package/build-module/components/rich-text/use-input-events.js +0 -18
  484. package/build-module/components/rich-text/use-input-events.js.map +0 -1
  485. package/build-module/components/rich-text/use-input-rules.js +0 -132
  486. package/build-module/components/rich-text/use-input-rules.js.map +0 -1
  487. package/build-module/components/rich-text/use-insert-replacement-text.js +0 -32
  488. package/build-module/components/rich-text/use-insert-replacement-text.js.map +0 -1
  489. package/build-module/components/rich-text/use-paste-handler.js +0 -152
  490. package/build-module/components/rich-text/use-paste-handler.js.map +0 -1
  491. package/build-module/components/rich-text/use-remove-browser-shortcuts.js +0 -26
  492. package/build-module/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
  493. package/build-module/components/rich-text/use-shortcuts.js +0 -18
  494. package/build-module/components/rich-text/use-shortcuts.js.map +0 -1
  495. package/build-module/components/rich-text/use-undo-automatic-change.js +0 -46
  496. package/build-module/components/rich-text/use-undo-automatic-change.js.map +0 -1
  497. package/src/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -55
  498. package/src/components/rich-text/use-before-input-rules.js +0 -99
  499. package/src/components/rich-text/use-delete.js +0 -59
  500. package/src/components/rich-text/use-enter.js +0 -110
  501. package/src/components/rich-text/use-firefox-compat.js +0 -39
  502. package/src/components/rich-text/use-input-events.js +0 -19
  503. package/src/components/rich-text/use-input-rules.js +0 -150
  504. package/src/components/rich-text/use-insert-replacement-text.js +0 -31
  505. package/src/components/rich-text/use-paste-handler.js +0 -180
  506. package/src/components/rich-text/use-remove-browser-shortcuts.js +0 -29
  507. package/src/components/rich-text/use-shortcuts.js +0 -19
  508. package/src/components/rich-text/use-undo-automatic-change.js +0 -46
  509. package/src/components/text-decoration-control/style.scss +0 -18
  510. package/src/components/text-transform-control/style.scss +0 -18
@@ -13,11 +13,7 @@ import { useCallback } from '@wordpress/element';
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
- import {
17
- mergeOrigins,
18
- overrideOrigins,
19
- hasOriginValue,
20
- } from '../../store/get-block-settings';
16
+ import { mergeOrigins, hasOriginValue } from '../../store/get-block-settings';
21
17
  import FontFamilyControl from '../font-family';
22
18
  import FontAppearanceControl from '../font-appearance-control';
23
19
  import LineHeightControl from '../line-height-control';
@@ -57,7 +53,10 @@ export function useHasTypographyPanel( settings ) {
57
53
 
58
54
  function useHasFontSizeControl( settings ) {
59
55
  return (
60
- hasOriginValue( settings?.typography?.fontSizes ) ||
56
+ ( settings?.typography?.defaultFontSizes !== false &&
57
+ settings?.typography?.fontSizes?.default?.length ) ||
58
+ settings?.typography?.fontSizes?.theme?.length ||
59
+ settings?.typography?.fontSizes?.custom?.length ||
61
60
  settings?.typography?.customFontSize
62
61
  );
63
62
  }
@@ -104,16 +103,21 @@ function useHasTextColumnsControl( settings ) {
104
103
  return settings?.typography?.textColumns;
105
104
  }
106
105
 
107
- function getUniqueFontSizesBySlug( settings ) {
108
- const fontSizes = settings?.typography?.fontSizes ?? {};
109
- const overriddenFontSizes = overrideOrigins( fontSizes ) ?? [];
110
- const uniqueSizes = [];
111
- for ( const currentSize of overriddenFontSizes ) {
112
- if ( ! uniqueSizes.some( ( { slug } ) => slug === currentSize.slug ) ) {
113
- uniqueSizes.push( currentSize );
114
- }
115
- }
116
- return uniqueSizes;
106
+ /**
107
+ * Concatenate all the font sizes into a single list for the font size picker.
108
+ *
109
+ * @param {Object} settings The global styles settings.
110
+ *
111
+ * @return {Array} The merged font sizes.
112
+ */
113
+ function getMergedFontSizes( settings ) {
114
+ const fontSizes = settings?.typography?.fontSizes;
115
+ const defaultFontSizesEnabled = !! settings?.typography?.defaultFontSizes;
116
+ return [
117
+ ...( fontSizes?.custom ?? [] ),
118
+ ...( fontSizes?.theme ?? [] ),
119
+ ...( defaultFontSizesEnabled ? fontSizes?.default ?? [] : [] ),
120
+ ];
117
121
  }
118
122
 
119
123
  function TypographyToolsPanel( {
@@ -189,7 +193,7 @@ export default function TypographyPanel( {
189
193
  // Font Size
190
194
  const hasFontSizeEnabled = useHasFontSizeControl( settings );
191
195
  const disableCustomFontSizes = ! settings?.typography?.customFontSize;
192
- const mergedFontSizes = getUniqueFontSizesBySlug( settings );
196
+ const mergedFontSizes = getMergedFontSizes( settings );
193
197
 
194
198
  const fontSize = decodeValue( inheritedValue?.typography?.fontSize );
195
199
  const setFontSize = ( newValue, metadata ) => {
@@ -346,7 +350,7 @@ export default function TypographyPanel( {
346
350
  >
347
351
  { hasFontFamilyEnabled && (
348
352
  <ToolsPanelItem
349
- label={ __( 'Font family' ) }
353
+ label={ __( 'Font' ) }
350
354
  hasValue={ hasFontFamily }
351
355
  onDeselect={ resetFontFamily }
352
356
  isShownByDefault={ defaultControls.fontFamily }
@@ -363,7 +367,7 @@ export default function TypographyPanel( {
363
367
  ) }
364
368
  { hasFontSizeEnabled && (
365
369
  <ToolsPanelItem
366
- label={ __( 'Font size' ) }
370
+ label={ __( 'Size' ) }
367
371
  hasValue={ hasFontSize }
368
372
  onDeselect={ resetFontSize }
369
373
  isShownByDefault={ defaultControls.fontSize }
@@ -440,14 +444,14 @@ export default function TypographyPanel( {
440
444
  { hasTextColumnsControl && (
441
445
  <ToolsPanelItem
442
446
  className="single-column"
443
- label={ __( 'Text columns' ) }
447
+ label={ __( 'Columns' ) }
444
448
  hasValue={ hasTextColumns }
445
449
  onDeselect={ resetTextColumns }
446
450
  isShownByDefault={ defaultControls.textColumns }
447
451
  panelId={ panelId }
448
452
  >
449
453
  <NumberControl
450
- label={ __( 'Text columns' ) }
454
+ label={ __( 'Columns' ) }
451
455
  max={ MAX_TEXT_COLUMNS }
452
456
  min={ MIN_TEXT_COLUMNS }
453
457
  onChange={ setTextColumns }
@@ -461,7 +465,7 @@ export default function TypographyPanel( {
461
465
  { hasTextDecorationControl && (
462
466
  <ToolsPanelItem
463
467
  className="single-column"
464
- label={ __( 'Text decoration' ) }
468
+ label={ __( 'Decoration' ) }
465
469
  hasValue={ hasTextDecoration }
466
470
  onDeselect={ resetTextDecoration }
467
471
  isShownByDefault={ defaultControls.textDecoration }
@@ -478,7 +482,7 @@ export default function TypographyPanel( {
478
482
  { hasWritingModeControl && (
479
483
  <ToolsPanelItem
480
484
  className="single-column"
481
- label={ __( 'Text orientation' ) }
485
+ label={ __( 'Orientation' ) }
482
486
  hasValue={ hasWritingMode }
483
487
  onDeselect={ resetWritingMode }
484
488
  isShownByDefault={ defaultControls.writingMode }
@@ -776,15 +776,29 @@ export const toStyles = (
776
776
  hasBlockGapSupport,
777
777
  hasFallbackGapSupport,
778
778
  disableLayoutStyles = false,
779
- isTemplate = true
779
+ isTemplate = true,
780
+ styleOptions = undefined
780
781
  ) => {
782
+ // These allow opting out of certain sets of styles.
783
+ const options = {
784
+ blockGap: true,
785
+ blockStyles: true,
786
+ layoutStyles: true,
787
+ marginReset: true,
788
+ presets: true,
789
+ rootPadding: true,
790
+ ...styleOptions,
791
+ };
781
792
  const nodesWithStyles = getNodesWithStyles( tree, blockSelectors );
782
793
  const nodesWithSettings = getNodesWithSettings( tree, blockSelectors );
783
794
  const useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;
784
795
  const { contentSize, wideSize } = tree?.settings?.layout || {};
796
+ const hasBodyStyles =
797
+ options.marginReset || options.rootPadding || options.layoutStyles;
798
+
785
799
  let ruleset = '';
786
800
 
787
- if ( contentSize || wideSize ) {
801
+ if ( options.presets && ( contentSize || wideSize ) ) {
788
802
  ruleset += `${ ROOT_CSS_PROPERTIES_SELECTOR } {`;
789
803
  ruleset = contentSize
790
804
  ? ruleset + ` --wp--style--global--content-size: ${ contentSize };`
@@ -795,203 +809,211 @@ export const toStyles = (
795
809
  ruleset += '}';
796
810
  }
797
811
 
798
- /*
799
- * Reset default browser margin on the body element.
800
- * This is set on the body selector **before** generating the ruleset
801
- * from the `theme.json`. This is to ensure that if the `theme.json` declares
802
- * `margin` in its `spacing` declaration for the `body` element then these
803
- * user-generated values take precedence in the CSS cascade.
804
- * @link https://github.com/WordPress/gutenberg/issues/36147.
805
- */
806
- ruleset += 'body {margin: 0;';
807
-
808
- // Root padding styles should only be output for full templates, not patterns or template parts.
809
- if ( useRootPaddingAlign && isTemplate ) {
812
+ if ( hasBodyStyles ) {
810
813
  /*
811
- * These rules reproduce the ones from https://github.com/WordPress/gutenberg/blob/79103f124925d1f457f627e154f52a56228ed5ad/lib/class-wp-theme-json-gutenberg.php#L2508
812
- * almost exactly, but for the selectors that target block wrappers in the front end. This code only runs in the editor, so it doesn't need those selectors.
814
+ * Reset default browser margin on the body element.
815
+ * This is set on the body selector **before** generating the ruleset
816
+ * from the `theme.json`. This is to ensure that if the `theme.json` declares
817
+ * `margin` in its `spacing` declaration for the `body` element then these
818
+ * user-generated values take precedence in the CSS cascade.
819
+ * @link https://github.com/WordPress/gutenberg/issues/36147.
813
820
  */
814
- ruleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }
815
- .has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
816
- .has-global-padding :where(.has-global-padding:not(.wp-block-block)) { padding-right: 0; padding-left: 0; }
817
- .has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }
818
- .has-global-padding :where(.has-global-padding:not(.wp-block-block)) > .alignfull { margin-right: 0; margin-left: 0; }
819
- .has-global-padding > .alignfull:where(:not(.has-global-padding):not(.is-layout-flex):not(.is-layout-grid)) > :where(.wp-block:not(.alignfull),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
820
- .has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where(.wp-block:not(.alignfull),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0;`;
821
- }
821
+ ruleset += 'body {margin: 0;';
822
822
 
823
- ruleset += '}';
823
+ // Root padding styles should only be output for full templates, not patterns or template parts.
824
+ if ( options.rootPadding && useRootPaddingAlign && isTemplate ) {
825
+ /*
826
+ * These rules reproduce the ones from https://github.com/WordPress/gutenberg/blob/79103f124925d1f457f627e154f52a56228ed5ad/lib/class-wp-theme-json-gutenberg.php#L2508
827
+ * almost exactly, but for the selectors that target block wrappers in the front end. This code only runs in the editor, so it doesn't need those selectors.
828
+ */
829
+ ruleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }
830
+ .has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
831
+ .has-global-padding :where(.has-global-padding:not(.wp-block-block)) { padding-right: 0; padding-left: 0; }
832
+ .has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }
833
+ .has-global-padding :where(.has-global-padding:not(.wp-block-block)) > .alignfull { margin-right: 0; margin-left: 0; }
834
+ .has-global-padding > .alignfull:where(:not(.has-global-padding):not(.is-layout-flex):not(.is-layout-grid)) > :where(.wp-block:not(.alignfull),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
835
+ .has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where(.wp-block:not(.alignfull),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0;`;
836
+ }
824
837
 
825
- nodesWithStyles.forEach(
826
- ( {
827
- selector,
828
- duotoneSelector,
829
- styles,
830
- fallbackGapValue,
831
- hasLayoutSupport,
832
- featureSelectors,
833
- styleVariationSelectors,
834
- } ) => {
835
- // Process styles for block support features with custom feature level
836
- // CSS selectors set.
837
- if ( featureSelectors ) {
838
- const featureDeclarations = getFeatureDeclarations(
839
- featureSelectors,
840
- styles
841
- );
838
+ ruleset += '}';
839
+ }
842
840
 
843
- Object.entries( featureDeclarations ).forEach(
844
- ( [ cssSelector, declarations ] ) => {
845
- if ( declarations.length ) {
846
- const rules = declarations.join( ';' );
847
- ruleset += `:where(${ cssSelector }){${ rules };}`;
848
- }
849
- }
850
- );
851
- }
841
+ if ( options.blockStyles ) {
842
+ nodesWithStyles.forEach(
843
+ ( {
844
+ selector,
845
+ duotoneSelector,
846
+ styles,
847
+ fallbackGapValue,
848
+ hasLayoutSupport,
849
+ featureSelectors,
850
+ styleVariationSelectors,
851
+ } ) => {
852
+ // Process styles for block support features with custom feature level
853
+ // CSS selectors set.
854
+ if ( featureSelectors ) {
855
+ const featureDeclarations = getFeatureDeclarations(
856
+ featureSelectors,
857
+ styles
858
+ );
852
859
 
853
- if ( styleVariationSelectors ) {
854
- Object.entries( styleVariationSelectors ).forEach(
855
- ( [ styleVariationName, styleVariationSelector ] ) => {
856
- const styleVariations =
857
- styles?.variations?.[ styleVariationName ];
858
- if ( styleVariations ) {
859
- // If the block uses any custom selectors for block support, add those first.
860
- if ( featureSelectors ) {
861
- const featureDeclarations =
862
- getFeatureDeclarations(
863
- featureSelectors,
864
- styleVariations
865
- );
860
+ Object.entries( featureDeclarations ).forEach(
861
+ ( [ cssSelector, declarations ] ) => {
862
+ if ( declarations.length ) {
863
+ const rules = declarations.join( ';' );
864
+ ruleset += `:where(${ cssSelector }){${ rules };}`;
865
+ }
866
+ }
867
+ );
868
+ }
866
869
 
867
- Object.entries( featureDeclarations ).forEach(
868
- ( [ baseSelector, declarations ] ) => {
869
- if ( declarations.length ) {
870
- const cssSelector =
871
- concatFeatureVariationSelectorString(
872
- baseSelector,
873
- styleVariationSelector
874
- );
875
- const rules =
876
- declarations.join( ';' );
877
- ruleset += `${ cssSelector }{${ rules };}`;
870
+ if ( styleVariationSelectors ) {
871
+ Object.entries( styleVariationSelectors ).forEach(
872
+ ( [ styleVariationName, styleVariationSelector ] ) => {
873
+ const styleVariations =
874
+ styles?.variations?.[ styleVariationName ];
875
+ if ( styleVariations ) {
876
+ // If the block uses any custom selectors for block support, add those first.
877
+ if ( featureSelectors ) {
878
+ const featureDeclarations =
879
+ getFeatureDeclarations(
880
+ featureSelectors,
881
+ styleVariations
882
+ );
883
+
884
+ Object.entries(
885
+ featureDeclarations
886
+ ).forEach(
887
+ ( [ baseSelector, declarations ] ) => {
888
+ if ( declarations.length ) {
889
+ const cssSelector =
890
+ concatFeatureVariationSelectorString(
891
+ baseSelector,
892
+ styleVariationSelector
893
+ );
894
+ const rules =
895
+ declarations.join( ';' );
896
+ ruleset += `${ cssSelector }{${ rules };}`;
897
+ }
878
898
  }
879
- }
880
- );
881
- }
899
+ );
900
+ }
882
901
 
883
- // Otherwise add regular selectors.
884
- const styleVariationDeclarations =
885
- getStylesDeclarations(
886
- styleVariations,
887
- styleVariationSelector,
888
- useRootPaddingAlign,
889
- tree
890
- );
891
- if ( styleVariationDeclarations.length ) {
892
- ruleset += `${ styleVariationSelector }{${ styleVariationDeclarations.join(
893
- ';'
894
- ) };}`;
902
+ // Otherwise add regular selectors.
903
+ const styleVariationDeclarations =
904
+ getStylesDeclarations(
905
+ styleVariations,
906
+ styleVariationSelector,
907
+ useRootPaddingAlign,
908
+ tree
909
+ );
910
+ if ( styleVariationDeclarations.length ) {
911
+ ruleset += `${ styleVariationSelector }{${ styleVariationDeclarations.join(
912
+ ';'
913
+ ) };}`;
914
+ }
895
915
  }
896
916
  }
917
+ );
918
+ }
919
+
920
+ // Process duotone styles.
921
+ if ( duotoneSelector ) {
922
+ const duotoneStyles = {};
923
+ if ( styles?.filter ) {
924
+ duotoneStyles.filter = styles.filter;
925
+ delete styles.filter;
897
926
  }
898
- );
899
- }
927
+ const duotoneDeclarations =
928
+ getStylesDeclarations( duotoneStyles );
929
+ if ( duotoneDeclarations.length ) {
930
+ ruleset += `${ duotoneSelector }{${ duotoneDeclarations.join(
931
+ ';'
932
+ ) };}`;
933
+ }
934
+ }
900
935
 
901
- // Process duotone styles.
902
- if ( duotoneSelector ) {
903
- const duotoneStyles = {};
904
- if ( styles?.filter ) {
905
- duotoneStyles.filter = styles.filter;
906
- delete styles.filter;
936
+ // Process blockGap and layout styles.
937
+ if (
938
+ ! disableLayoutStyles &&
939
+ ( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )
940
+ ) {
941
+ ruleset += getLayoutStyles( {
942
+ style: styles,
943
+ selector,
944
+ hasBlockGapSupport,
945
+ hasFallbackGapSupport,
946
+ fallbackGapValue,
947
+ } );
907
948
  }
908
- const duotoneDeclarations =
909
- getStylesDeclarations( duotoneStyles );
910
- if ( duotoneDeclarations.length ) {
911
- ruleset += `${ duotoneSelector }{${ duotoneDeclarations.join(
949
+
950
+ // Process the remaining block styles (they use either normal block class or __experimentalSelector).
951
+ const declarations = getStylesDeclarations(
952
+ styles,
953
+ selector,
954
+ useRootPaddingAlign,
955
+ tree,
956
+ isTemplate
957
+ );
958
+ if ( declarations?.length ) {
959
+ ruleset += `:where(${ selector }){${ declarations.join(
912
960
  ';'
913
961
  ) };}`;
914
962
  }
915
- }
916
-
917
- // Process blockGap and layout styles.
918
- if (
919
- ! disableLayoutStyles &&
920
- ( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )
921
- ) {
922
- ruleset += getLayoutStyles( {
923
- style: styles,
924
- selector,
925
- hasBlockGapSupport,
926
- hasFallbackGapSupport,
927
- fallbackGapValue,
928
- } );
929
- }
930
963
 
931
- // Process the remaining block styles (they use either normal block class or __experimentalSelector).
932
- const declarations = getStylesDeclarations(
933
- styles,
934
- selector,
935
- useRootPaddingAlign,
936
- tree,
937
- isTemplate
938
- );
939
- if ( declarations?.length ) {
940
- ruleset += `:where(${ selector }){${ declarations.join(
941
- ';'
942
- ) };}`;
943
- }
964
+ // Check for pseudo selector in `styles` and handle separately.
965
+ const pseudoSelectorStyles = Object.entries( styles ).filter(
966
+ ( [ key ] ) => key.startsWith( ':' )
967
+ );
944
968
 
945
- // Check for pseudo selector in `styles` and handle separately.
946
- const pseudoSelectorStyles = Object.entries( styles ).filter(
947
- ( [ key ] ) => key.startsWith( ':' )
948
- );
969
+ if ( pseudoSelectorStyles?.length ) {
970
+ pseudoSelectorStyles.forEach(
971
+ ( [ pseudoKey, pseudoStyle ] ) => {
972
+ const pseudoDeclarations =
973
+ getStylesDeclarations( pseudoStyle );
949
974
 
950
- if ( pseudoSelectorStyles?.length ) {
951
- pseudoSelectorStyles.forEach(
952
- ( [ pseudoKey, pseudoStyle ] ) => {
953
- const pseudoDeclarations =
954
- getStylesDeclarations( pseudoStyle );
975
+ if ( ! pseudoDeclarations?.length ) {
976
+ return;
977
+ }
955
978
 
956
- if ( ! pseudoDeclarations?.length ) {
957
- return;
958
- }
979
+ // `selector` maybe provided in a form
980
+ // where block level selectors have sub element
981
+ // selectors appended to them as a comma separated
982
+ // string.
983
+ // e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;
984
+ // Split and append pseudo selector to create
985
+ // the proper rules to target the elements.
986
+ const _selector = selector
987
+ .split( ',' )
988
+ .map( ( sel ) => sel + pseudoKey )
989
+ .join( ',' );
959
990
 
960
- // `selector` maybe provided in a form
961
- // where block level selectors have sub element
962
- // selectors appended to them as a comma separated
963
- // string.
964
- // e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;
965
- // Split and append pseudo selector to create
966
- // the proper rules to target the elements.
967
- const _selector = selector
968
- .split( ',' )
969
- .map( ( sel ) => sel + pseudoKey )
970
- .join( ',' );
971
-
972
- const pseudoRule = `${ _selector }{${ pseudoDeclarations.join(
973
- ';'
974
- ) };}`;
991
+ const pseudoRule = `${ _selector }{${ pseudoDeclarations.join(
992
+ ';'
993
+ ) };}`;
975
994
 
976
- ruleset += pseudoRule;
977
- }
978
- );
995
+ ruleset += pseudoRule;
996
+ }
997
+ );
998
+ }
979
999
  }
980
- }
981
- );
1000
+ );
1001
+ }
1002
+
1003
+ if ( options.layoutStyles ) {
1004
+ /* Add alignment / layout styles */
1005
+ ruleset =
1006
+ ruleset +
1007
+ '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';
1008
+ ruleset =
1009
+ ruleset +
1010
+ '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
1011
+ ruleset =
1012
+ ruleset +
1013
+ '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
1014
+ }
982
1015
 
983
- /* Add alignment / layout styles */
984
- ruleset =
985
- ruleset +
986
- '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';
987
- ruleset =
988
- ruleset +
989
- '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
990
- ruleset =
991
- ruleset +
992
- '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
993
-
994
- if ( hasBlockGapSupport ) {
1016
+ if ( options.blockGap && hasBlockGapSupport ) {
995
1017
  // Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.
996
1018
  const gapValue =
997
1019
  getGapCSSValue( tree?.styles?.spacing?.blockGap ) || '0.5em';
@@ -1006,20 +1028,22 @@ export const toStyles = (
1006
1028
  ':where(.wp-site-blocks) > :last-child { margin-block-end: 0; }';
1007
1029
  }
1008
1030
 
1009
- nodesWithSettings.forEach( ( { selector, presets } ) => {
1010
- if (
1011
- ROOT_BLOCK_SELECTOR === selector ||
1012
- ROOT_CSS_PROPERTIES_SELECTOR === selector
1013
- ) {
1014
- // Do not add extra specificity for top-level classes.
1015
- selector = '';
1016
- }
1031
+ if ( options.presets ) {
1032
+ nodesWithSettings.forEach( ( { selector, presets } ) => {
1033
+ if (
1034
+ ROOT_BLOCK_SELECTOR === selector ||
1035
+ ROOT_CSS_PROPERTIES_SELECTOR === selector
1036
+ ) {
1037
+ // Do not add extra specificity for top-level classes.
1038
+ selector = '';
1039
+ }
1017
1040
 
1018
- const classes = getPresetsClasses( selector, presets );
1019
- if ( classes.length > 0 ) {
1020
- ruleset += classes;
1021
- }
1022
- } );
1041
+ const classes = getPresetsClasses( selector, presets );
1042
+ if ( classes.length > 0 ) {
1043
+ ruleset += classes;
1044
+ }
1045
+ } );
1046
+ }
1023
1047
 
1024
1048
  return ruleset;
1025
1049
  };
@@ -364,6 +364,10 @@ export function getValueFromVariable( features, blockName, variable ) {
364
364
  * @return {string} Scoped selector.
365
365
  */
366
366
  export function scopeSelector( scope, selector ) {
367
+ if ( ! scope || ! selector ) {
368
+ return selector;
369
+ }
370
+
367
371
  const scopes = scope.split( ',' );
368
372
  const selectors = selector.split( ',' );
369
373
 
@@ -377,6 +381,57 @@ export function scopeSelector( scope, selector ) {
377
381
  return selectorsScoped.join( ', ' );
378
382
  }
379
383
 
384
+ /**
385
+ * Scopes a collection of selectors for features and subfeatures.
386
+ *
387
+ * @example
388
+ * ```js
389
+ * const scope = '.custom-scope';
390
+ * const selectors = {
391
+ * color: '.wp-my-block p',
392
+ * typography: { fontSize: '.wp-my-block caption' },
393
+ * };
394
+ * const result = scopeFeatureSelector( scope, selectors );
395
+ * // result is {
396
+ * // color: '.custom-scope .wp-my-block p',
397
+ * // typography: { fonSize: '.custom-scope .wp-my-block caption' },
398
+ * // }
399
+ * ```
400
+ *
401
+ * @param {string} scope Selector to scope collection of selectors with.
402
+ * @param {Object} selectors Collection of feature selectors e.g.
403
+ *
404
+ * @return {Object|undefined} Scoped collection of feature selectors.
405
+ */
406
+ export function scopeFeatureSelectors( scope, selectors ) {
407
+ if ( ! scope || ! selectors ) {
408
+ return;
409
+ }
410
+
411
+ const featureSelectors = {};
412
+
413
+ Object.entries( selectors ).forEach( ( [ feature, selector ] ) => {
414
+ if ( typeof selector === 'string' ) {
415
+ featureSelectors[ feature ] = scopeSelector( scope, selector );
416
+ }
417
+
418
+ if ( typeof selector === 'object' ) {
419
+ featureSelectors[ feature ] = {};
420
+
421
+ Object.entries( selector ).forEach(
422
+ ( [ subfeature, subfeatureSelector ] ) => {
423
+ featureSelectors[ feature ][ subfeature ] = scopeSelector(
424
+ scope,
425
+ subfeatureSelector
426
+ );
427
+ }
428
+ );
429
+ }
430
+ } );
431
+
432
+ return featureSelectors;
433
+ }
434
+
380
435
  /**
381
436
  * Appends a sub-selector to an existing one.
382
437
  *
@@ -204,6 +204,8 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
204
204
  getBlockEditingMode,
205
205
  getBlockSettings,
206
206
  isDragging,
207
+ getSettings,
208
+ getBlockOrder,
207
209
  } = unlock( select( blockEditorStore ) );
208
210
  const { hasBlockSupport, getBlockType } = select( blocksStore );
209
211
  const blockName = getBlockName( clientId );
@@ -212,6 +214,17 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
212
214
  const blockEditingMode = getBlockEditingMode( clientId );
213
215
  const parentClientId = getBlockRootClientId( clientId );
214
216
  const [ defaultLayout ] = getBlockSettings( clientId, 'layout' );
217
+
218
+ // In zoom out mode, we want to disable the drop zone for the sections.
219
+ // The inner blocks belonging to the section drop zone is
220
+ // already disabled by the blocks themselves being disabled.
221
+ let _isDropZoneDisabled = blockEditingMode === 'disabled';
222
+ if ( __unstableGetEditorMode() === 'zoom-out' ) {
223
+ const { sectionRootClientId } = unlock( getSettings() );
224
+ const sectionsClientIds = getBlockOrder( sectionRootClientId );
225
+ _isDropZoneDisabled = sectionsClientIds?.includes( clientId );
226
+ }
227
+
215
228
  return {
216
229
  __experimentalCaptureToolbars: hasBlockSupport(
217
230
  blockName,
@@ -228,7 +241,7 @@ export function useInnerBlocksProps( props = {}, options = {} ) {
228
241
  blockType: getBlockType( blockName ),
229
242
  parentLock: getTemplateLock( parentClientId ),
230
243
  parentClientId,
231
- isDropZoneDisabled: blockEditingMode === 'disabled',
244
+ isDropZoneDisabled: _isDropZoneDisabled,
232
245
  defaultLayout,
233
246
  };
234
247
  },