@wordpress/block-editor 13.2.0 → 13.4.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 (538) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +0 -5
  3. package/build/components/alignment-control/ui.js +2 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/ui.js +1 -1
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +1 -1
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -1
  9. package/build/components/block-breadcrumb/index.js +12 -1
  10. package/build/components/block-breadcrumb/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -3
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +3 -1
  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 +9 -2
  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 +25 -9
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-list/use-in-between-inserter.js +3 -2
  20. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  21. package/build/components/block-lock/modal.js +2 -0
  22. package/build/components/block-lock/modal.js.map +1 -1
  23. package/build/components/block-lock/toolbar.js +0 -1
  24. package/build/components/block-lock/toolbar.js.map +1 -1
  25. package/build/components/block-mover/button.js +1 -1
  26. package/build/components/block-mover/button.js.map +1 -1
  27. package/build/components/block-mover/index.js +1 -1
  28. package/build/components/block-mover/index.js.map +1 -1
  29. package/build/components/block-pattern-setup/setup-toolbar.js +2 -2
  30. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  31. package/build/components/block-patterns-paging/index.js +5 -7
  32. package/build/components/block-patterns-paging/index.js.map +1 -1
  33. package/build/components/block-quick-navigation/index.js +20 -17
  34. package/build/components/block-quick-navigation/index.js.map +1 -1
  35. package/build/components/block-removal-warning-modal/index.js +2 -0
  36. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  37. package/build/components/block-rename/modal.js +4 -12
  38. package/build/components/block-rename/modal.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-switcher/pattern-transformations-menu.js +11 -12
  42. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  43. package/build/components/block-switcher/preview-block-popover.js +20 -17
  44. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  45. package/build/components/block-toolbar/shuffle.js +6 -2
  46. package/build/components/block-toolbar/shuffle.js.map +1 -1
  47. package/build/components/block-tools/block-selection-button.js +7 -58
  48. package/build/components/block-tools/block-selection-button.js.map +1 -1
  49. package/build/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  50. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  51. package/build/components/block-tools/index.js +14 -1
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-tools/use-show-block-tools.js +9 -8
  54. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  55. package/build/components/block-tools/zoom-out-mode-inserter-button.js +45 -0
  56. package/build/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  57. package/build/components/block-tools/zoom-out-mode-inserters.js +29 -28
  58. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  59. package/build/components/block-tools/zoom-out-popover.js +58 -0
  60. package/build/components/block-tools/zoom-out-popover.js.map +1 -0
  61. package/build/components/block-tools/zoom-out-toolbar.js +138 -0
  62. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -0
  63. package/build/components/button-block-appender/index.js +3 -1
  64. package/build/components/button-block-appender/index.js.map +1 -1
  65. package/build/components/child-layout-control/index.js +26 -18
  66. package/build/components/child-layout-control/index.js.map +1 -1
  67. package/build/components/date-format-picker/index.js +1 -1
  68. package/build/components/date-format-picker/index.js.map +1 -1
  69. package/build/components/default-block-appender/index.js +7 -4
  70. package/build/components/default-block-appender/index.js.map +1 -1
  71. package/build/components/dimensions-tool/index.js +6 -4
  72. package/build/components/dimensions-tool/index.js.map +1 -1
  73. package/build/components/font-appearance-control/index.js +22 -62
  74. package/build/components/font-appearance-control/index.js.map +1 -1
  75. package/build/components/global-styles/background-panel.js +185 -116
  76. package/build/components/global-styles/background-panel.js.map +1 -1
  77. package/build/components/global-styles/border-panel.js +2 -1
  78. package/build/components/global-styles/border-panel.js.map +1 -1
  79. package/build/components/global-styles/color-panel.js +2 -1
  80. package/build/components/global-styles/color-panel.js.map +1 -1
  81. package/build/components/global-styles/dimensions-panel.js +2 -1
  82. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  83. package/build/components/global-styles/filters-panel.js +2 -1
  84. package/build/components/global-styles/filters-panel.js.map +1 -1
  85. package/build/components/global-styles/hooks.js +13 -1
  86. package/build/components/global-styles/hooks.js.map +1 -1
  87. package/build/components/global-styles/image-settings-panel.js +2 -1
  88. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  89. package/build/components/global-styles/typography-panel.js +45 -24
  90. package/build/components/global-styles/typography-panel.js.map +1 -1
  91. package/build/components/global-styles/typography-utils.js +121 -0
  92. package/build/components/global-styles/typography-utils.js.map +1 -1
  93. package/build/components/global-styles/use-global-styles-output.js +47 -13
  94. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  95. package/build/components/global-styles/utils.js +17 -7
  96. package/build/components/global-styles/utils.js.map +1 -1
  97. package/build/components/grid/grid-item-movers.js +90 -48
  98. package/build/components/grid/grid-item-movers.js.map +1 -1
  99. package/build/components/grid/grid-item-resizer.js +2 -2
  100. package/build/components/grid/grid-item-resizer.js.map +1 -1
  101. package/build/components/grid/grid-visualizer.js +117 -37
  102. package/build/components/grid/grid-visualizer.js.map +1 -1
  103. package/build/components/grid/use-grid-layout-sync.js +60 -41
  104. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  105. package/build/components/index.js +1 -9
  106. package/build/components/index.js.map +1 -1
  107. package/build/components/inner-blocks/index.js +2 -2
  108. package/build/components/inner-blocks/index.js.map +1 -1
  109. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  110. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  111. package/build/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  112. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-panel.js +1 -0
  114. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  115. package/build/components/inserter/menu.js +26 -4
  116. package/build/components/inserter/menu.js.map +1 -1
  117. package/build/components/inserter/preview-panel.js +20 -3
  118. package/build/components/inserter/preview-panel.js.map +1 -1
  119. package/build/components/inserter/quick-inserter.js +2 -1
  120. package/build/components/inserter/quick-inserter.js.map +1 -1
  121. package/build/components/inserter-draggable-blocks/index.js +10 -3
  122. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  123. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  124. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  125. package/build/components/inspector-controls-tabs/settings-tab.js +1 -2
  126. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  127. package/build/components/link-control/link-preview.js +1 -1
  128. package/build/components/link-control/link-preview.js.map +1 -1
  129. package/build/components/list-view/block-select-button.js +2 -6
  130. package/build/components/list-view/block-select-button.js.map +1 -1
  131. package/build/components/list-view/block.js +2 -2
  132. package/build/components/list-view/block.js.map +1 -1
  133. package/build/components/list-view/utils.js +3 -1
  134. package/build/components/list-view/utils.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +19 -23
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/navigable-toolbar/index.js +3 -1
  138. package/build/components/navigable-toolbar/index.js.map +1 -1
  139. package/build/components/rich-text/format-toolbar/index.js +1 -1
  140. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  141. package/build/components/rich-text/index.js +1 -1
  142. package/build/components/rich-text/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/tabbed-sidebar/index.js +66 -0
  146. package/build/components/tabbed-sidebar/index.js.map +1 -0
  147. package/build/components/url-popover/image-url-input-ui.js +3 -3
  148. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  149. package/build/components/url-popover/index.js +3 -0
  150. package/build/components/url-popover/index.js.map +1 -1
  151. package/build/hooks/background.js +26 -4
  152. package/build/hooks/background.js.map +1 -1
  153. package/build/hooks/block-hooks.js +11 -17
  154. package/build/hooks/block-hooks.js.map +1 -1
  155. package/build/hooks/block-style-variation.js +169 -4
  156. package/build/hooks/block-style-variation.js.map +1 -1
  157. package/build/hooks/duotone.js +16 -11
  158. package/build/hooks/duotone.js.map +1 -1
  159. package/build/hooks/grid-visualizer.js +62 -0
  160. package/build/hooks/grid-visualizer.js.map +1 -0
  161. package/build/hooks/index.js +15 -2
  162. package/build/hooks/index.js.map +1 -1
  163. package/build/hooks/layout-child.js +47 -23
  164. package/build/hooks/layout-child.js.map +1 -1
  165. package/build/hooks/position.js +4 -15
  166. package/build/hooks/position.js.map +1 -1
  167. package/build/hooks/use-bindings-attributes.js +96 -55
  168. package/build/hooks/use-bindings-attributes.js.map +1 -1
  169. package/build/hooks/utils.js +2 -0
  170. package/build/hooks/utils.js.map +1 -1
  171. package/build/layouts/constrained.js +50 -4
  172. package/build/layouts/constrained.js.map +1 -1
  173. package/build/layouts/grid.js +92 -51
  174. package/build/layouts/grid.js.map +1 -1
  175. package/build/private-apis.js +6 -4
  176. package/build/private-apis.js.map +1 -1
  177. package/build/store/actions.js +18 -1
  178. package/build/store/actions.js.map +1 -1
  179. package/build/store/defaults.js +0 -2
  180. package/build/store/defaults.js.map +1 -1
  181. package/build/store/defaults.native.js +0 -3
  182. package/build/store/defaults.native.js.map +1 -1
  183. package/build/store/private-keys.js +2 -1
  184. package/build/store/private-keys.js.map +1 -1
  185. package/build/store/reducer.js +19 -1
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +13 -1
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/format-font-style.js +45 -0
  190. package/build/utils/format-font-style.js.map +1 -0
  191. package/build/utils/format-font-weight.js +68 -0
  192. package/build/utils/format-font-weight.js.map +1 -0
  193. package/build/utils/get-editor-region.js +34 -0
  194. package/build/utils/get-editor-region.js.map +1 -0
  195. package/build/utils/get-font-styles-and-weights.js +167 -0
  196. package/build/utils/get-font-styles-and-weights.js.map +1 -0
  197. package/build/utils/pasting.js +5 -13
  198. package/build/utils/pasting.js.map +1 -1
  199. package/build-module/components/alignment-control/ui.js +2 -2
  200. package/build-module/components/alignment-control/ui.js.map +1 -1
  201. package/build-module/components/block-alignment-control/ui.js +1 -1
  202. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  203. package/build-module/components/block-alignment-control/ui.native.js +1 -1
  204. package/build-module/components/block-alignment-control/ui.native.js.map +1 -1
  205. package/build-module/components/block-breadcrumb/index.js +12 -1
  206. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  207. package/build-module/components/block-inspector/index.js +6 -3
  208. package/build-module/components/block-inspector/index.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/index.js +3 -1
  210. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  211. package/build-module/components/block-list/use-block-props/use-block-refs.js +11 -4
  212. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  213. package/build-module/components/block-list/use-block-props/use-is-hovered.js +26 -9
  214. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  215. package/build-module/components/block-list/use-in-between-inserter.js +3 -2
  216. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  217. package/build-module/components/block-lock/modal.js +2 -0
  218. package/build-module/components/block-lock/modal.js.map +1 -1
  219. package/build-module/components/block-lock/toolbar.js +0 -1
  220. package/build-module/components/block-lock/toolbar.js.map +1 -1
  221. package/build-module/components/block-mover/button.js +1 -1
  222. package/build-module/components/block-mover/button.js.map +1 -1
  223. package/build-module/components/block-mover/index.js +1 -1
  224. package/build-module/components/block-mover/index.js.map +1 -1
  225. package/build-module/components/block-pattern-setup/setup-toolbar.js +2 -2
  226. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  227. package/build-module/components/block-patterns-paging/index.js +5 -7
  228. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  229. package/build-module/components/block-quick-navigation/index.js +20 -17
  230. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  231. package/build-module/components/block-removal-warning-modal/index.js +2 -0
  232. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  233. package/build-module/components/block-rename/modal.js +5 -13
  234. package/build-module/components/block-rename/modal.js.map +1 -1
  235. package/build-module/components/block-switcher/index.js +1 -1
  236. package/build-module/components/block-switcher/index.js.map +1 -1
  237. package/build-module/components/block-switcher/pattern-transformations-menu.js +12 -13
  238. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  239. package/build-module/components/block-switcher/preview-block-popover.js +20 -17
  240. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  241. package/build-module/components/block-toolbar/shuffle.js +6 -2
  242. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  243. package/build-module/components/block-tools/block-selection-button.js +10 -61
  244. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  245. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  246. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  247. package/build-module/components/block-tools/index.js +14 -1
  248. package/build-module/components/block-tools/index.js.map +1 -1
  249. package/build-module/components/block-tools/use-show-block-tools.js +9 -8
  250. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  251. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js +37 -0
  252. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  253. package/build-module/components/block-tools/zoom-out-mode-inserters.js +30 -29
  254. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  255. package/build-module/components/block-tools/zoom-out-popover.js +49 -0
  256. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -0
  257. package/build-module/components/block-tools/zoom-out-toolbar.js +131 -0
  258. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -0
  259. package/build-module/components/button-block-appender/index.js +3 -1
  260. package/build-module/components/button-block-appender/index.js.map +1 -1
  261. package/build-module/components/child-layout-control/index.js +27 -19
  262. package/build-module/components/child-layout-control/index.js.map +1 -1
  263. package/build-module/components/date-format-picker/index.js +2 -2
  264. package/build-module/components/date-format-picker/index.js.map +1 -1
  265. package/build-module/components/default-block-appender/index.js +7 -4
  266. package/build-module/components/default-block-appender/index.js.map +1 -1
  267. package/build-module/components/dimensions-tool/index.js +6 -4
  268. package/build-module/components/dimensions-tool/index.js.map +1 -1
  269. package/build-module/components/font-appearance-control/index.js +24 -62
  270. package/build-module/components/font-appearance-control/index.js.map +1 -1
  271. package/build-module/components/global-styles/background-panel.js +188 -119
  272. package/build-module/components/global-styles/background-panel.js.map +1 -1
  273. package/build-module/components/global-styles/border-panel.js +3 -2
  274. package/build-module/components/global-styles/border-panel.js.map +1 -1
  275. package/build-module/components/global-styles/color-panel.js +3 -2
  276. package/build-module/components/global-styles/color-panel.js.map +1 -1
  277. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  278. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  279. package/build-module/components/global-styles/filters-panel.js +3 -2
  280. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  281. package/build-module/components/global-styles/hooks.js +13 -1
  282. package/build-module/components/global-styles/hooks.js.map +1 -1
  283. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  284. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  285. package/build-module/components/global-styles/typography-panel.js +47 -26
  286. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  287. package/build-module/components/global-styles/typography-utils.js +117 -0
  288. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  289. package/build-module/components/global-styles/use-global-styles-output.js +47 -13
  290. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  291. package/build-module/components/global-styles/utils.js +15 -6
  292. package/build-module/components/global-styles/utils.js.map +1 -1
  293. package/build-module/components/grid/grid-item-movers.js +93 -50
  294. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  295. package/build-module/components/grid/grid-item-resizer.js +2 -2
  296. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  297. package/build-module/components/grid/grid-visualizer.js +118 -38
  298. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  299. package/build-module/components/grid/use-grid-layout-sync.js +61 -42
  300. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  301. package/build-module/components/index.js +0 -5
  302. package/build-module/components/index.js.map +1 -1
  303. package/build-module/components/inner-blocks/index.js +2 -2
  304. package/build-module/components/inner-blocks/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  306. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  307. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  308. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  309. package/build-module/components/inserter/media-tab/media-panel.js +1 -0
  310. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  311. package/build-module/components/inserter/menu.js +26 -4
  312. package/build-module/components/inserter/menu.js.map +1 -1
  313. package/build-module/components/inserter/preview-panel.js +20 -3
  314. package/build-module/components/inserter/preview-panel.js.map +1 -1
  315. package/build-module/components/inserter/quick-inserter.js +2 -1
  316. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  317. package/build-module/components/inserter-draggable-blocks/index.js +10 -3
  318. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  319. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  320. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  321. package/build-module/components/inspector-controls-tabs/settings-tab.js +1 -2
  322. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  323. package/build-module/components/link-control/link-preview.js +1 -1
  324. package/build-module/components/link-control/link-preview.js.map +1 -1
  325. package/build-module/components/list-view/block-select-button.js +3 -7
  326. package/build-module/components/list-view/block-select-button.js.map +1 -1
  327. package/build-module/components/list-view/block.js +2 -2
  328. package/build-module/components/list-view/block.js.map +1 -1
  329. package/build-module/components/list-view/utils.js +3 -1
  330. package/build-module/components/list-view/utils.js.map +1 -1
  331. package/build-module/components/media-placeholder/index.js +19 -23
  332. package/build-module/components/media-placeholder/index.js.map +1 -1
  333. package/build-module/components/navigable-toolbar/index.js +3 -1
  334. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  335. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  336. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  337. package/build-module/components/rich-text/index.js +1 -1
  338. package/build-module/components/rich-text/index.js.map +1 -1
  339. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  340. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  341. package/build-module/components/tabbed-sidebar/index.js +60 -0
  342. package/build-module/components/tabbed-sidebar/index.js.map +1 -0
  343. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  344. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -0
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/hooks/background.js +26 -4
  348. package/build-module/hooks/background.js.map +1 -1
  349. package/build-module/hooks/block-hooks.js +11 -17
  350. package/build-module/hooks/block-hooks.js.map +1 -1
  351. package/build-module/hooks/block-style-variation.js +168 -4
  352. package/build-module/hooks/block-style-variation.js.map +1 -1
  353. package/build-module/hooks/duotone.js +16 -11
  354. package/build-module/hooks/duotone.js.map +1 -1
  355. package/build-module/hooks/grid-visualizer.js +61 -0
  356. package/build-module/hooks/grid-visualizer.js.map +1 -0
  357. package/build-module/hooks/index.js +3 -0
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout-child.js +47 -23
  360. package/build-module/hooks/layout-child.js.map +1 -1
  361. package/build-module/hooks/position.js +4 -15
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/use-bindings-attributes.js +96 -56
  364. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  365. package/build-module/hooks/utils.js +2 -0
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +50 -4
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/layouts/grid.js +92 -51
  370. package/build-module/layouts/grid.js.map +1 -1
  371. package/build-module/private-apis.js +8 -6
  372. package/build-module/private-apis.js.map +1 -1
  373. package/build-module/store/actions.js +15 -0
  374. package/build-module/store/actions.js.map +1 -1
  375. package/build-module/store/defaults.js +0 -2
  376. package/build-module/store/defaults.js.map +1 -1
  377. package/build-module/store/defaults.native.js +0 -3
  378. package/build-module/store/defaults.native.js.map +1 -1
  379. package/build-module/store/private-keys.js +1 -0
  380. package/build-module/store/private-keys.js.map +1 -1
  381. package/build-module/store/reducer.js +18 -1
  382. package/build-module/store/reducer.js.map +1 -1
  383. package/build-module/store/selectors.js +10 -0
  384. package/build-module/store/selectors.js.map +1 -1
  385. package/build-module/utils/format-font-style.js +39 -0
  386. package/build-module/utils/format-font-style.js.map +1 -0
  387. package/build-module/utils/format-font-weight.js +62 -0
  388. package/build-module/utils/format-font-weight.js.map +1 -0
  389. package/build-module/utils/get-editor-region.js +28 -0
  390. package/build-module/utils/get-editor-region.js.map +1 -0
  391. package/build-module/utils/get-font-styles-and-weights.js +160 -0
  392. package/build-module/utils/get-font-styles-and-weights.js.map +1 -0
  393. package/build-module/utils/pasting.js +5 -13
  394. package/build-module/utils/pasting.js.map +1 -1
  395. package/build-style/content-rtl.css +7 -6
  396. package/build-style/content.css +7 -6
  397. package/build-style/style-rtl.css +356 -181
  398. package/build-style/style.css +356 -181
  399. package/build-types/components/block-context/index.d.ts +2 -2
  400. package/build-types/components/block-context/index.d.ts.map +1 -1
  401. package/build-types/utils/dom.d.ts.map +1 -1
  402. package/package.json +32 -32
  403. package/src/components/alignment-control/ui.js +2 -2
  404. package/src/components/block-alignment-control/ui.js +1 -1
  405. package/src/components/block-alignment-control/ui.native.js +1 -1
  406. package/src/components/block-breadcrumb/index.js +16 -1
  407. package/src/components/block-context/README.md +4 -4
  408. package/src/components/block-inspector/index.js +8 -4
  409. package/src/components/block-list/content.scss +2 -16
  410. package/src/components/block-list/use-block-props/index.js +1 -1
  411. package/src/components/block-list/use-block-props/use-block-refs.js +19 -3
  412. package/src/components/block-list/use-block-props/use-is-hovered.js +26 -11
  413. package/src/components/block-list/use-in-between-inserter.js +5 -1
  414. package/src/components/block-lock/modal.js +10 -2
  415. package/src/components/block-lock/style.scss +4 -8
  416. package/src/components/block-lock/toolbar.js +0 -1
  417. package/src/components/block-mover/button.js +1 -1
  418. package/src/components/block-mover/index.js +1 -1
  419. package/src/components/block-pattern-setup/setup-toolbar.js +2 -2
  420. package/src/components/block-patterns-paging/index.js +8 -11
  421. package/src/components/block-patterns-paging/style.scss +0 -5
  422. package/src/components/block-quick-navigation/index.js +21 -28
  423. package/src/components/block-removal-warning-modal/index.js +10 -2
  424. package/src/components/block-rename/modal.js +2 -8
  425. package/src/components/block-switcher/index.js +1 -1
  426. package/src/components/block-switcher/pattern-transformations-menu.js +17 -15
  427. package/src/components/block-switcher/preview-block-popover.js +20 -14
  428. package/src/components/block-switcher/style.scss +8 -17
  429. package/src/components/block-switcher/test/index.js +6 -6
  430. package/src/components/block-toolbar/shuffle.js +9 -1
  431. package/src/components/block-toolbar/style.scss +1 -11
  432. package/src/components/block-tools/block-selection-button.js +11 -83
  433. package/src/components/block-tools/block-toolbar-breadcrumb.js +9 -4
  434. package/src/components/block-tools/index.js +21 -1
  435. package/src/components/block-tools/style.scss +23 -0
  436. package/src/components/block-tools/use-show-block-tools.js +21 -10
  437. package/src/components/block-tools/zoom-out-mode-inserter-button.js +47 -0
  438. package/src/components/block-tools/zoom-out-mode-inserters.js +44 -33
  439. package/src/components/block-tools/zoom-out-popover.js +50 -0
  440. package/src/components/block-tools/zoom-out-toolbar.js +140 -0
  441. package/src/components/button-block-appender/index.js +2 -1
  442. package/src/components/child-layout-control/index.js +41 -23
  443. package/src/components/date-format-picker/index.js +2 -2
  444. package/src/components/date-format-picker/style.scss +0 -9
  445. package/src/components/default-block-appender/index.js +11 -4
  446. package/src/components/dimensions-tool/index.js +97 -89
  447. package/src/components/font-appearance-control/index.js +24 -82
  448. package/src/components/font-appearance-control/style.scss +3 -5
  449. package/src/components/global-styles/background-panel.js +266 -167
  450. package/src/components/global-styles/border-panel.js +3 -2
  451. package/src/components/global-styles/color-panel.js +3 -2
  452. package/src/components/global-styles/dimensions-panel.js +3 -2
  453. package/src/components/global-styles/filters-panel.js +3 -2
  454. package/src/components/global-styles/hooks.js +14 -1
  455. package/src/components/global-styles/image-settings-panel.js +3 -2
  456. package/src/components/global-styles/style.scss +116 -19
  457. package/src/components/global-styles/test/typography-utils.js +594 -0
  458. package/src/components/global-styles/test/use-global-styles-output.js +3 -1
  459. package/src/components/global-styles/typography-panel.js +56 -27
  460. package/src/components/global-styles/typography-utils.js +159 -0
  461. package/src/components/global-styles/use-global-styles-output.js +45 -10
  462. package/src/components/global-styles/utils.js +17 -6
  463. package/src/components/grid/grid-item-movers.js +140 -86
  464. package/src/components/grid/grid-item-resizer.js +3 -2
  465. package/src/components/grid/grid-visualizer.js +172 -55
  466. package/src/components/grid/style.scss +157 -8
  467. package/src/components/grid/use-grid-layout-sync.js +88 -46
  468. package/src/components/iframe/content.scss +2 -1
  469. package/src/components/index.js +0 -5
  470. package/src/components/inner-blocks/index.js +6 -2
  471. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -16
  472. package/src/components/inserter/block-patterns-tab/patterns-filter.js +40 -44
  473. package/src/components/inserter/media-tab/media-panel.js +1 -0
  474. package/src/components/inserter/menu.js +47 -13
  475. package/src/components/inserter/preview-panel.js +27 -4
  476. package/src/components/inserter/quick-inserter.js +6 -1
  477. package/src/components/inserter/style.scss +58 -92
  478. package/src/components/inserter-draggable-blocks/index.js +11 -3
  479. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  480. package/src/components/inspector-controls-tabs/settings-tab.js +0 -2
  481. package/src/components/inspector-controls-tabs/style.scss +0 -21
  482. package/src/components/link-control/link-preview.js +1 -1
  483. package/src/components/list-view/block-select-button.js +3 -13
  484. package/src/components/list-view/block.js +10 -3
  485. package/src/components/list-view/style.scss +2 -1
  486. package/src/components/list-view/utils.js +13 -2
  487. package/src/components/media-placeholder/index.js +22 -32
  488. package/src/components/navigable-toolbar/index.js +3 -1
  489. package/src/components/rich-text/format-toolbar/index.js +1 -1
  490. package/src/components/rich-text/index.js +1 -1
  491. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -2
  492. package/src/components/tabbed-sidebar/README.md +76 -0
  493. package/src/components/tabbed-sidebar/index.js +70 -0
  494. package/src/components/tabbed-sidebar/style.scss +53 -0
  495. package/src/components/url-popover/image-url-input-ui.js +3 -3
  496. package/src/components/url-popover/index.js +3 -0
  497. package/src/components/url-popover/style.scss +1 -0
  498. package/src/hooks/background.js +25 -10
  499. package/src/hooks/block-hooks.js +9 -16
  500. package/src/hooks/block-style-variation.js +202 -3
  501. package/src/hooks/duotone.js +16 -12
  502. package/src/hooks/grid-visualizer.js +62 -0
  503. package/src/hooks/index.js +3 -0
  504. package/src/hooks/layout-child.js +64 -39
  505. package/src/hooks/position.js +3 -20
  506. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  507. package/src/hooks/use-bindings-attributes.js +107 -63
  508. package/src/hooks/utils.js +2 -0
  509. package/src/layouts/constrained.js +53 -4
  510. package/src/layouts/grid.js +148 -51
  511. package/src/private-apis.js +12 -7
  512. package/src/store/actions.js +15 -0
  513. package/src/store/defaults.js +0 -2
  514. package/src/store/defaults.native.js +0 -3
  515. package/src/store/private-keys.js +1 -0
  516. package/src/store/reducer.js +18 -0
  517. package/src/store/selectors.js +10 -0
  518. package/src/style.scss +1 -1
  519. package/src/utils/format-font-style.js +40 -0
  520. package/src/utils/format-font-weight.js +63 -0
  521. package/src/utils/get-editor-region.js +31 -0
  522. package/src/utils/get-font-styles-and-weights.js +191 -0
  523. package/src/utils/pasting.js +5 -12
  524. package/src/utils/test/format-font-style.js +34 -0
  525. package/src/utils/test/format-font-weight.js +66 -0
  526. package/src/utils/test/get-font-styles-and-weights.js +513 -0
  527. package/tsconfig.tsbuildinfo +1 -1
  528. package/build/components/inserter/reusable-block-rename-hint.js +0 -71
  529. package/build/components/inserter/reusable-block-rename-hint.js.map +0 -1
  530. package/build/components/inspector-controls-tabs/settings-tab-hint.js +0 -53
  531. package/build/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  532. package/build-module/components/inserter/reusable-block-rename-hint.js +0 -64
  533. package/build-module/components/inserter/reusable-block-rename-hint.js.map +0 -1
  534. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js +0 -47
  535. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  536. package/src/components/inserter/reusable-block-rename-hint.js +0 -69
  537. package/src/components/inspector-controls-tabs/settings-tab-hint.js +0 -52
  538. package/src/hooks/position.scss +0 -18
@@ -8,7 +8,7 @@ import {
8
8
  __experimentalToolsPanelItem as ToolsPanelItem,
9
9
  } from '@wordpress/components';
10
10
  import { __ } from '@wordpress/i18n';
11
- import { useCallback, useMemo } from '@wordpress/element';
11
+ import { useCallback, useMemo, useEffect } from '@wordpress/element';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
@@ -21,8 +21,12 @@ import TextAlignmentControl from '../text-alignment-control';
21
21
  import TextTransformControl from '../text-transform-control';
22
22
  import TextDecorationControl from '../text-decoration-control';
23
23
  import WritingModeControl from '../writing-mode-control';
24
- import { getValueFromVariable, TOOLSPANEL_DROPDOWNMENU_PROPS } from './utils';
24
+ import { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';
25
25
  import { setImmutably } from '../../utils/object';
26
+ import {
27
+ getMergedFontFamiliesAndFontFamilyFaces,
28
+ findNearestStyleAndWeight,
29
+ } from './typography-utils';
26
30
 
27
31
  const MIN_TEXT_COLUMNS = 1;
28
32
  const MAX_TEXT_COLUMNS = 6;
@@ -135,6 +139,7 @@ function TypographyToolsPanel( {
135
139
  panelId,
136
140
  children,
137
141
  } ) {
142
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
138
143
  const resetAll = () => {
139
144
  const updatedValue = resetAllFilter( value );
140
145
  onChange( updatedValue );
@@ -145,7 +150,7 @@ function TypographyToolsPanel( {
145
150
  label={ __( 'Typography' ) }
146
151
  resetAll={ resetAll }
147
152
  panelId={ panelId }
148
- dropdownMenuProps={ TOOLSPANEL_DROPDOWNMENU_PROPS }
153
+ dropdownMenuProps={ dropdownMenuProps }
149
154
  >
150
155
  { children }
151
156
  </ToolsPanel>
@@ -179,15 +184,13 @@ export default function TypographyPanel( {
179
184
 
180
185
  // Font Family
181
186
  const hasFontFamilyEnabled = useHasFontFamilyControl( settings );
182
- const fontFamilies = settings?.typography?.fontFamilies;
183
- const mergedFontFamilies = useMemo( () => {
184
- return [ 'default', 'theme', 'custom' ].flatMap(
185
- ( key ) => fontFamilies?.[ key ] ?? []
186
- );
187
- }, [ fontFamilies ] );
188
187
  const fontFamily = decodeValue( inheritedValue?.typography?.fontFamily );
188
+ const { fontFamilies, fontFamilyFaces } = useMemo( () => {
189
+ return getMergedFontFamiliesAndFontFamilyFaces( settings, fontFamily );
190
+ }, [ settings, fontFamily ] );
191
+
189
192
  const setFontFamily = ( newValue ) => {
190
- const slug = mergedFontFamilies?.find(
193
+ const slug = fontFamilies?.find(
191
194
  ( { fontFamily: f } ) => f === newValue
192
195
  )?.slug;
193
196
  onChange(
@@ -232,24 +235,50 @@ export default function TypographyPanel( {
232
235
  const hasFontWeights = settings?.typography?.fontWeight;
233
236
  const fontStyle = decodeValue( inheritedValue?.typography?.fontStyle );
234
237
  const fontWeight = decodeValue( inheritedValue?.typography?.fontWeight );
235
- const setFontAppearance = ( {
236
- fontStyle: newFontStyle,
237
- fontWeight: newFontWeight,
238
- } ) => {
239
- onChange( {
240
- ...value,
241
- typography: {
242
- ...value?.typography,
243
- fontStyle: newFontStyle || undefined,
244
- fontWeight: newFontWeight || undefined,
245
- },
246
- } );
247
- };
238
+ const { nearestFontStyle, nearestFontWeight } = findNearestStyleAndWeight(
239
+ fontFamilyFaces,
240
+ fontStyle,
241
+ fontWeight
242
+ );
243
+ const setFontAppearance = useCallback(
244
+ ( { fontStyle: newFontStyle, fontWeight: newFontWeight } ) => {
245
+ // Only update the font style and weight if they have changed.
246
+ if ( newFontStyle !== fontStyle || newFontWeight !== fontWeight ) {
247
+ onChange( {
248
+ ...value,
249
+ typography: {
250
+ ...value?.typography,
251
+ fontStyle: newFontStyle || undefined,
252
+ fontWeight: newFontWeight || undefined,
253
+ },
254
+ } );
255
+ }
256
+ },
257
+ [ fontStyle, fontWeight, onChange, value ]
258
+ );
248
259
  const hasFontAppearance = () =>
249
260
  !! value?.typography?.fontStyle || !! value?.typography?.fontWeight;
250
- const resetFontAppearance = () => {
261
+ const resetFontAppearance = useCallback( () => {
251
262
  setFontAppearance( {} );
252
- };
263
+ }, [ setFontAppearance ] );
264
+
265
+ // Check if previous font style and weight values are available in the new font family.
266
+ useEffect( () => {
267
+ if ( nearestFontStyle && nearestFontWeight ) {
268
+ setFontAppearance( {
269
+ fontStyle: nearestFontStyle,
270
+ fontWeight: nearestFontWeight,
271
+ } );
272
+ } else {
273
+ // Reset font appearance if there are no available styles or weights.
274
+ resetFontAppearance();
275
+ }
276
+ }, [
277
+ nearestFontStyle,
278
+ nearestFontWeight,
279
+ resetFontAppearance,
280
+ setFontAppearance,
281
+ ] );
253
282
 
254
283
  // Line Height
255
284
  const hasLineHeightEnabled = useHasLineHeightControl( settings );
@@ -386,7 +415,7 @@ export default function TypographyPanel( {
386
415
  panelId={ panelId }
387
416
  >
388
417
  <FontFamilyControl
389
- fontFamilies={ mergedFontFamilies }
418
+ fontFamilies={ fontFamilies }
390
419
  value={ fontFamily }
391
420
  onChange={ setFontFamily }
392
421
  size="__unstable-large"
@@ -430,8 +459,8 @@ export default function TypographyPanel( {
430
459
  onChange={ setFontAppearance }
431
460
  hasFontStyles={ hasFontStyles }
432
461
  hasFontWeights={ hasFontWeights }
462
+ fontFamilyFaces={ fontFamilyFaces }
433
463
  size="__unstable-large"
434
- __nextHasNoMarginBottom
435
464
  />
436
465
  </ToolsPanelItem>
437
466
  ) }
@@ -11,6 +11,7 @@ import {
11
11
  getComputedFluidTypographyValue,
12
12
  getTypographyValueAndUnit,
13
13
  } from '../font-sizes/fluid-utils';
14
+ import { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';
14
15
 
15
16
  /**
16
17
  * @typedef {Object} FluidPreset
@@ -122,3 +123,161 @@ export function getFluidTypographyOptionsFromSettings( settings ) {
122
123
  fluid: typographySettings?.fluid,
123
124
  };
124
125
  }
126
+
127
+ /**
128
+ * Returns an object of merged font families and the font faces from the selected font family
129
+ * based on the theme.json settings object and the currently selected font family.
130
+ *
131
+ * @param {Object} settings Theme.json settings.
132
+ * @param {string} selectedFontFamily Decoded font family string.
133
+ * @return {Object} Merged font families and font faces from the selected font family.
134
+ */
135
+ export function getMergedFontFamiliesAndFontFamilyFaces(
136
+ settings,
137
+ selectedFontFamily
138
+ ) {
139
+ const fontFamiliesFromSettings = settings?.typography?.fontFamilies;
140
+
141
+ const fontFamilies = [ 'default', 'theme', 'custom' ].flatMap(
142
+ ( key ) => fontFamiliesFromSettings?.[ key ] ?? []
143
+ );
144
+
145
+ const fontFamilyFaces =
146
+ fontFamilies.find(
147
+ ( family ) => family.fontFamily === selectedFontFamily
148
+ )?.fontFace ?? [];
149
+
150
+ return { fontFamilies, fontFamilyFaces };
151
+ }
152
+
153
+ /**
154
+ * Returns the nearest font weight value from the available font weight list based on the new font weight.
155
+ * The nearest font weight is the one with the smallest difference from the new font weight.
156
+ *
157
+ * @param {Array} availableFontWeights Array of available font weights.
158
+ * @param {string} newFontWeightValue New font weight value.
159
+ * @return {string} Nearest font weight.
160
+ */
161
+ export function findNearestFontWeight(
162
+ availableFontWeights,
163
+ newFontWeightValue
164
+ ) {
165
+ if ( ! newFontWeightValue || typeof newFontWeightValue !== 'string' ) {
166
+ return '';
167
+ }
168
+
169
+ if ( ! availableFontWeights || availableFontWeights.length === 0 ) {
170
+ return newFontWeightValue;
171
+ }
172
+
173
+ const nearestFontWeight = availableFontWeights?.reduce(
174
+ ( nearest, { value: fw } ) => {
175
+ const currentDiff = Math.abs(
176
+ parseInt( fw ) - parseInt( newFontWeightValue )
177
+ );
178
+ const nearestDiff = Math.abs(
179
+ parseInt( nearest ) - parseInt( newFontWeightValue )
180
+ );
181
+ return currentDiff < nearestDiff ? fw : nearest;
182
+ },
183
+ availableFontWeights[ 0 ]?.value
184
+ );
185
+
186
+ return nearestFontWeight;
187
+ }
188
+
189
+ /**
190
+ * Returns the nearest font style based on the new font style.
191
+ * Defaults to an empty string if the new font style is not valid or available.
192
+ *
193
+ * @param {Array} availableFontStyles Array of available font weights.
194
+ * @param {string} newFontStyleValue New font style value.
195
+ * @return {string} Nearest font style or an empty string.
196
+ */
197
+ export function findNearestFontStyle( availableFontStyles, newFontStyleValue ) {
198
+ if ( typeof newFontStyleValue !== 'string' || ! newFontStyleValue ) {
199
+ return '';
200
+ }
201
+
202
+ const validStyles = [ 'normal', 'italic', 'oblique' ];
203
+ if ( ! validStyles.includes( newFontStyleValue ) ) {
204
+ return '';
205
+ }
206
+
207
+ if (
208
+ ! availableFontStyles ||
209
+ availableFontStyles.length === 0 ||
210
+ availableFontStyles.find(
211
+ ( style ) => style.value === newFontStyleValue
212
+ )
213
+ ) {
214
+ return newFontStyleValue;
215
+ }
216
+
217
+ if (
218
+ newFontStyleValue === 'oblique' &&
219
+ ! availableFontStyles.find( ( style ) => style.value === 'oblique' )
220
+ ) {
221
+ return 'italic';
222
+ }
223
+
224
+ return '';
225
+ }
226
+
227
+ /**
228
+ * Returns the nearest font style and weight based on the available font family faces and the new font style and weight.
229
+ *
230
+ * @param {Array} fontFamilyFaces Array of available font family faces.
231
+ * @param {string} fontStyle New font style. Defaults to previous value.
232
+ * @param {string} fontWeight New font weight. Defaults to previous value.
233
+ * @return {Object} Nearest font style and font weight.
234
+ */
235
+ export function findNearestStyleAndWeight(
236
+ fontFamilyFaces,
237
+ fontStyle,
238
+ fontWeight
239
+ ) {
240
+ let nearestFontStyle = fontStyle;
241
+ let nearestFontWeight = fontWeight;
242
+
243
+ const { fontStyles, fontWeights, combinedStyleAndWeightOptions } =
244
+ getFontStylesAndWeights( fontFamilyFaces );
245
+
246
+ // Check if the new font style and weight are available in the font family faces.
247
+ const hasFontStyle = fontStyles?.some(
248
+ ( { value: fs } ) => fs === fontStyle
249
+ );
250
+ const hasFontWeight = fontWeights?.some(
251
+ ( { value: fw } ) => fw === fontWeight
252
+ );
253
+
254
+ if ( ! hasFontStyle ) {
255
+ /*
256
+ * Default to italic if oblique is not available.
257
+ * Or find the nearest font style based on the nearest font weight.
258
+ */
259
+ nearestFontStyle = fontStyle
260
+ ? findNearestFontStyle( fontStyles, fontStyle )
261
+ : combinedStyleAndWeightOptions?.find(
262
+ ( option ) =>
263
+ option.style.fontWeight ===
264
+ findNearestFontWeight( fontWeights, fontWeight )
265
+ )?.style?.fontStyle;
266
+ }
267
+
268
+ if ( ! hasFontWeight ) {
269
+ /*
270
+ * Find the nearest font weight based on available weights.
271
+ * Or find the nearest font weight based on the nearest font style.
272
+ */
273
+ nearestFontWeight = fontWeight
274
+ ? findNearestFontWeight( fontWeights, fontWeight )
275
+ : combinedStyleAndWeightOptions?.find(
276
+ ( option ) =>
277
+ option.style.fontStyle ===
278
+ ( nearestFontStyle || fontStyle )
279
+ )?.style?.fontWeight;
280
+ }
281
+
282
+ return { nearestFontStyle, nearestFontWeight };
283
+ }
@@ -31,12 +31,19 @@ import { GlobalStylesContext } from './context';
31
31
  import { useGlobalSetting } from './hooks';
32
32
  import { getDuotoneFilter } from '../duotone/utils';
33
33
  import { getGapCSSValue } from '../../hooks/gap';
34
+ import { setBackgroundStyleDefaults } from '../../hooks/background';
34
35
  import { store as blockEditorStore } from '../../store';
35
36
  import { LAYOUT_DEFINITIONS } from '../../layouts/definitions';
36
37
  import { getValueFromObjectPath, setImmutably } from '../../utils/object';
37
38
  import { unlock } from '../../lock-unlock';
38
39
  import { setThemeFileUris } from './theme-file-uri-utils';
39
40
 
41
+ // Elements that rely on class names in their selectors.
42
+ const ELEMENT_CLASS_NAMES = {
43
+ button: 'wp-element-button',
44
+ caption: 'wp-element-caption',
45
+ };
46
+
40
47
  // List of block support features that can have their related styles
41
48
  // generated under their own feature level selector rather than the block's.
42
49
  const BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {
@@ -387,6 +394,20 @@ export function getStylesDeclarations(
387
394
  []
388
395
  );
389
396
 
397
+ /*
398
+ * Set background defaults.
399
+ * Applies to all background styles except the top-level site background.
400
+ */
401
+ if ( ! isRoot && !! blockStyles.background ) {
402
+ blockStyles = {
403
+ ...blockStyles,
404
+ background: {
405
+ ...blockStyles.background,
406
+ ...setBackgroundStyleDefaults( blockStyles.background ),
407
+ },
408
+ };
409
+ }
410
+
390
411
  // The goal is to move everything to server side generated engine styles
391
412
  // This is temporary as we absorb more and more styles into the engine.
392
413
  const extraRules = getCSSRules( blockStyles );
@@ -628,6 +649,9 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
628
649
  nodes.push( {
629
650
  styles,
630
651
  selector: ROOT_BLOCK_SELECTOR,
652
+ // Root selector (body) styles should not be wrapped in `:root where()` to keep
653
+ // specificity at (0,0,1) and maintain backwards compatibility.
654
+ skipSelectorWrapper: true,
631
655
  } );
632
656
  }
633
657
 
@@ -636,6 +660,9 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
636
660
  nodes.push( {
637
661
  styles: tree.styles?.elements?.[ name ],
638
662
  selector,
663
+ // Top level elements that don't use a class name should not receive the
664
+ // `:root :where()` wrapper to maintain backwards compatibility.
665
+ skipSelectorWrapper: ! ELEMENT_CLASS_NAMES[ name ],
639
666
  } );
640
667
  }
641
668
  } );
@@ -656,7 +683,7 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
656
683
  }
657
684
  const variationSelector =
658
685
  blockSelectors[ blockName ]
659
- .styleVariationSelectors?.[ variationName ];
686
+ ?.styleVariationSelectors?.[ variationName ];
660
687
 
661
688
  // Process the variation's inner element styles.
662
689
  // This comes before the inner block styles so the
@@ -685,18 +712,18 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
685
712
  const variationBlockSelector = scopeSelector(
686
713
  variationSelector,
687
714
  blockSelectors[ variationBlockName ]
688
- .selector
715
+ ?.selector
689
716
  );
690
717
  const variationDuotoneSelector = scopeSelector(
691
718
  variationSelector,
692
719
  blockSelectors[ variationBlockName ]
693
- .duotoneSelector
720
+ ?.duotoneSelector
694
721
  );
695
722
  const variationFeatureSelectors =
696
723
  scopeFeatureSelectors(
697
724
  variationSelector,
698
725
  blockSelectors[ variationBlockName ]
699
- .featureSelectors
726
+ ?.featureSelectors
700
727
  );
701
728
 
702
729
  const variationBlockStyleNodes =
@@ -713,10 +740,10 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
713
740
  featureSelectors: variationFeatureSelectors,
714
741
  fallbackGapValue:
715
742
  blockSelectors[ variationBlockName ]
716
- .fallbackGapValue,
743
+ ?.fallbackGapValue,
717
744
  hasLayoutSupport:
718
745
  blockSelectors[ variationBlockName ]
719
- .hasLayoutSupport,
746
+ ?.hasLayoutSupport,
720
747
  styles: variationBlockStyleNodes,
721
748
  } );
722
749
 
@@ -924,8 +951,8 @@ export const toStyles = (
924
951
  ruleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }
925
952
  .has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
926
953
  .has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }
927
- .has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) { padding-right: 0; padding-left: 0; }
928
- .has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull, .alignwide)) > .alignfull { margin-left: 0; margin-right: 0;
954
+ .has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }
955
+ .has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0;
929
956
  `;
930
957
  }
931
958
 
@@ -942,6 +969,7 @@ export const toStyles = (
942
969
  hasLayoutSupport,
943
970
  featureSelectors,
944
971
  styleVariationSelectors,
972
+ skipSelectorWrapper,
945
973
  } ) => {
946
974
  // Process styles for block support features with custom feature level
947
975
  // CSS selectors set.
@@ -1000,7 +1028,10 @@ export const toStyles = (
1000
1028
  disableRootPadding
1001
1029
  );
1002
1030
  if ( styleDeclarations?.length ) {
1003
- ruleset += `:root :where(${ selector }){${ styleDeclarations.join(
1031
+ const generalSelector = skipSelectorWrapper
1032
+ ? selector
1033
+ : `:root :where(${ selector })`;
1034
+ ruleset += `${ generalSelector }{${ styleDeclarations.join(
1004
1035
  ';'
1005
1036
  ) };}`;
1006
1037
  }
@@ -1094,7 +1125,11 @@ export const toStyles = (
1094
1125
  .map( ( sel ) => sel + pseudoKey )
1095
1126
  .join( ',' );
1096
1127
 
1097
- const pseudoRule = `${ _selector }{${ pseudoDeclarations.join(
1128
+ // As pseudo classes such as :hover, :focus etc. have class-level
1129
+ // specificity, they must use the `:root :where()` wrapper. This.
1130
+ // caps the specificity at `0-1-0` to allow proper nesting of variations
1131
+ // and block type element styles.
1132
+ const pseudoRule = `:root :where(${ _selector }){${ pseudoDeclarations.join(
1098
1133
  ';'
1099
1134
  ) };}`;
1100
1135
 
@@ -3,6 +3,11 @@
3
3
  */
4
4
  import fastDeepEqual from 'fast-deep-equal/es6';
5
5
 
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useViewportMatch } from '@wordpress/compose';
10
+
6
11
  /**
7
12
  * Internal dependencies
8
13
  */
@@ -136,12 +141,18 @@ export const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {
136
141
  'typography.fontFamily': 'fontFamily',
137
142
  };
138
143
 
139
- export const TOOLSPANEL_DROPDOWNMENU_PROPS = {
140
- popoverProps: {
141
- placement: 'left-start',
142
- offset: 259, // Inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)
143
- },
144
- };
144
+ export function useToolsPanelDropdownMenuProps() {
145
+ const isMobile = useViewportMatch( 'medium', '<' );
146
+ return ! isMobile
147
+ ? {
148
+ popoverProps: {
149
+ placement: 'left-start',
150
+ // For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)
151
+ offset: 259,
152
+ },
153
+ }
154
+ : {};
155
+ }
145
156
 
146
157
  function findInPresetsBy(
147
158
  features,