@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
@@ -210,6 +210,7 @@ export default function NavigableToolbar( {
210
210
  shouldUseKeyboardFocusShortcut = true,
211
211
  __experimentalInitialIndex: initialIndex,
212
212
  __experimentalOnIndexChange: onIndexChange,
213
+ orientation = 'horizontal',
213
214
  ...props
214
215
  } ) {
215
216
  const toolbarRef = useRef();
@@ -230,6 +231,7 @@ export default function NavigableToolbar( {
230
231
  <Toolbar
231
232
  label={ props[ 'aria-label' ] }
232
233
  ref={ toolbarRef }
234
+ orientation={ orientation }
233
235
  { ...props }
234
236
  >
235
237
  { children }
@@ -239,7 +241,7 @@ export default function NavigableToolbar( {
239
241
 
240
242
  return (
241
243
  <NavigableMenu
242
- orientation="horizontal"
244
+ orientation={ orientation }
243
245
  role="toolbar"
244
246
  ref={ toolbarRef }
245
247
  { ...props }
@@ -52,7 +52,7 @@ const FormatToolbar = () => {
52
52
  toggleProps.className,
53
53
  { 'is-pressed': hasActive }
54
54
  ),
55
- describedBy: __(
55
+ description: __(
56
56
  'Displays more block tools'
57
57
  ),
58
58
  } }
@@ -188,7 +188,7 @@ export function RichTextWrapper(
188
188
  binding.source
189
189
  );
190
190
  if (
191
- ! blockBindingsSource?.canUserEditValue( {
191
+ ! blockBindingsSource?.canUserEditValue?.( {
192
192
  select,
193
193
  context: blockContext,
194
194
  args: binding.args,
@@ -3,13 +3,13 @@
3
3
  */
4
4
  import {
5
5
  Button,
6
- CustomSelectControl,
7
6
  Icon,
8
7
  RangeControl,
9
8
  __experimentalHStack as HStack,
10
9
  __experimentalUnitControl as UnitControl,
11
10
  __experimentalUseCustomUnits as useCustomUnits,
12
11
  __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
12
+ privateApis as componentsPrivateApis,
13
13
  } from '@wordpress/components';
14
14
  import { useSelect } from '@wordpress/data';
15
15
  import { useState, useMemo } from '@wordpress/element';
@@ -31,6 +31,11 @@ import {
31
31
  getPresetValueFromCustomValue,
32
32
  isValueSpacingPreset,
33
33
  } from '../utils';
34
+ import { unlock } from '../../../lock-unlock';
35
+
36
+ const { CustomSelectControlV2Legacy: CustomSelectControl } = unlock(
37
+ componentsPrivateApis
38
+ );
34
39
 
35
40
  const CUSTOM_VALUE_SETTINGS = {
36
41
  px: { max: 300, steps: 1 },
@@ -298,9 +303,11 @@ export default function SpacingInputControl( {
298
303
  <CustomSelectControl
299
304
  className="spacing-sizes-control__custom-select-control"
300
305
  value={
306
+ // passing empty string as a fallback to continue using the
307
+ // component in controlled mode
301
308
  options.find(
302
309
  ( option ) => option.key === currentValue
303
- ) || '' // passing undefined here causes a downshift controlled/uncontrolled warning
310
+ ) || ''
304
311
  }
305
312
  onChange={ ( selection ) => {
306
313
  onChange(
@@ -0,0 +1,76 @@
1
+ # Tabbed Panel
2
+
3
+ The `TabbedPanel` component is used to create the secondary panels in the editor.
4
+
5
+ ## Development guidelines
6
+
7
+ This acts as a wrapper for the `Tabs` component, but adding conventions that can be shared between all secondary panels, for example:
8
+
9
+ - A close button
10
+ - Tabs that fill the panel
11
+ - Custom scollbars
12
+
13
+ ### Usage
14
+
15
+ Renders a block alignment toolbar with alignments options.
16
+
17
+ ```jsx
18
+ import { TabbedSidebar } from '@wordpress/components';
19
+
20
+ const MyTabbedSidebar = () => (
21
+ <TabbedSidebar
22
+ tabs={ [
23
+ {
24
+ name: 'slug-1',
25
+ title: _x( 'Title 1', 'context' ),
26
+ panel: <PanelContents>,
27
+ panelRef: useRef('an-optional-ref'),
28
+ },
29
+ {
30
+ name: 'slug-2',
31
+ title: _x( 'Title 2', 'context' ),
32
+ panel: <PanelContents />,
33
+ },
34
+ ] }
35
+ onClose={ onClickCloseButton }
36
+ onSelect={ onSelectTab }
37
+ defaultTabId="slug-1"
38
+ ref={ tabsRef }
39
+ />
40
+ );
41
+ ```
42
+
43
+ ### Props
44
+
45
+ ### `defaultTabId`
46
+
47
+ - **Type:** `String`
48
+ - **Default:** `undefined`
49
+
50
+ This is passed to the `Tabs` component so it can handle the tab to select by default when it component renders.
51
+
52
+ ### `onClose`
53
+
54
+ - **Type:** `Function`
55
+
56
+ The function that is called when the close button is clicked.
57
+
58
+ ### `onSelect`
59
+
60
+ - **Type:** `Function`
61
+
62
+ This is passed to the `Tabs` component - it will be called when a tab has been selected. It is passed the selected tab's ID as an argument.
63
+
64
+ ### `selectedTab`
65
+
66
+ - **Type:** `String`
67
+ - **Default:** `undefined`
68
+
69
+ This is passed to the `Tabs` component - it will display this tab as selected.
70
+
71
+ ### `tabs`
72
+
73
+ - **Type:** `Array`
74
+ - **Default:** `undefined`
75
+
76
+ An array of tabs which will be rendered as `TabList` and `TabPanel` components.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ Button,
6
+ privateApis as componentsPrivateApis,
7
+ } from '@wordpress/components';
8
+ import { forwardRef } from '@wordpress/element';
9
+ import { closeSmall } from '@wordpress/icons';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import { unlock } from '../../lock-unlock';
15
+
16
+ const { Tabs } = unlock( componentsPrivateApis );
17
+
18
+ function TabbedSidebar(
19
+ { defaultTabId, onClose, onSelect, selectedTab, tabs, closeButtonLabel },
20
+ ref
21
+ ) {
22
+ return (
23
+ <div className="block-editor-tabbed-sidebar">
24
+ <Tabs
25
+ selectOnMove={ false }
26
+ defaultTabId={ defaultTabId }
27
+ onSelect={ onSelect }
28
+ selectedTabId={ selectedTab }
29
+ >
30
+ <div className="block-editor-tabbed-sidebar__tablist-and-close-button">
31
+ <Button
32
+ className="block-editor-tabbed-sidebar__close-button"
33
+ icon={ closeSmall }
34
+ label={ closeButtonLabel }
35
+ onClick={ () => onClose() }
36
+ size="small"
37
+ />
38
+
39
+ <Tabs.TabList
40
+ className="block-editor-tabbed-sidebar__tablist"
41
+ ref={ ref }
42
+ >
43
+ { tabs.map( ( tab ) => (
44
+ <Tabs.Tab
45
+ key={ tab.name }
46
+ tabId={ tab.name }
47
+ className="block-editor-tabbed-sidebar__tab"
48
+ >
49
+ { tab.title }
50
+ </Tabs.Tab>
51
+ ) ) }
52
+ </Tabs.TabList>
53
+ </div>
54
+ { tabs.map( ( tab ) => (
55
+ <Tabs.TabPanel
56
+ key={ tab.name }
57
+ tabId={ tab.name }
58
+ focusable={ false }
59
+ className="block-editor-tabbed-sidebar__tabpanel"
60
+ ref={ tab.panelRef }
61
+ >
62
+ { tab.panel }
63
+ </Tabs.TabPanel>
64
+ ) ) }
65
+ </Tabs>
66
+ </div>
67
+ );
68
+ }
69
+
70
+ export default forwardRef( TabbedSidebar );
@@ -0,0 +1,53 @@
1
+ .block-editor-tabbed-sidebar {
2
+ height: 100%;
3
+ display: flex;
4
+ flex-direction: column;
5
+ flex-grow: 1;
6
+ overflow: hidden;
7
+
8
+ @include break-medium() {
9
+ width: 350px;
10
+ }
11
+ }
12
+
13
+ .block-editor-tabbed-sidebar__tablist-and-close-button {
14
+ border-bottom: $border-width solid $gray-300;
15
+ display: flex;
16
+ justify-content: space-between;
17
+ padding-right: $grid-unit-15;
18
+ }
19
+
20
+
21
+ .block-editor-tabbed-sidebar__close-button {
22
+ background: $white;
23
+ /* stylelint-disable-next-line property-disallowed-list -- This should be removed when https://github.com/WordPress/gutenberg/issues/59013 is fixed. */
24
+ order: 1;
25
+ align-self: center;
26
+ }
27
+
28
+ .block-editor-tabbed-sidebar__tablist {
29
+ box-sizing: border-box;
30
+ flex-grow: 1;
31
+ margin-bottom: -$border-width;
32
+ width: 100%;
33
+ }
34
+
35
+ .block-editor-tabbed-sidebar__tab {
36
+ flex-grow: 1;
37
+ margin-bottom: -$border-width;
38
+
39
+ &[id$="reusable"] {
40
+ flex-grow: inherit;
41
+ // These are to align the `reusable` icon with the search icon.
42
+ padding-left: $grid-unit-20;
43
+ padding-right: $grid-unit-20;
44
+ }
45
+ }
46
+
47
+ .block-editor-tabbed-sidebar__tabpanel {
48
+ display: flex;
49
+ flex-grow: 1;
50
+ flex-direction: column;
51
+ overflow-y: auto;
52
+ scrollbar-gutter: auto;
53
+ }
@@ -272,7 +272,7 @@ const ImageURLInputUI = ( {
272
272
  icon={ linkOff }
273
273
  label={ __( 'Disable expand on click' ) }
274
274
  onClick={ () => {
275
- onSetLightbox( false );
275
+ onSetLightbox?.( false );
276
276
  } }
277
277
  size="compact"
278
278
  />
@@ -302,7 +302,7 @@ const ImageURLInputUI = ( {
302
302
  label={ __( 'Remove link' ) }
303
303
  onClick={ () => {
304
304
  onLinkRemove();
305
- resetLightbox();
305
+ resetLightbox?.();
306
306
  } }
307
307
  size="compact"
308
308
  />
@@ -366,7 +366,7 @@ const ImageURLInputUI = ( {
366
366
  LINK_DESTINATION_NONE,
367
367
  href: '',
368
368
  } );
369
- onSetLightbox( true );
369
+ onSetLightbox?.( true );
370
370
  stopEditLink();
371
371
  } }
372
372
  >
@@ -71,6 +71,9 @@ const URLPopover = forwardRef(
71
71
  return (
72
72
  <Popover
73
73
  ref={ ref }
74
+ role="dialog"
75
+ aria-modal="true"
76
+ aria-label={ __( 'Edit URL' ) }
74
77
  className="block-editor-url-popover"
75
78
  focusOnMount={ focusOnMount }
76
79
  placement={ computedPlacement }
@@ -10,6 +10,7 @@
10
10
  .block-editor-url-popover__row {
11
11
  display: flex;
12
12
  gap: $grid-unit-05;
13
+ align-items: center;
13
14
  }
14
15
 
15
16
  // Any children of the popover-row that are not the settings-toggle
@@ -16,6 +16,10 @@ import {
16
16
  useHasBackgroundPanel,
17
17
  hasBackgroundImageValue,
18
18
  } from '../components/global-styles/background-panel';
19
+ import {
20
+ globalStylesDataKey,
21
+ globalStylesLinksDataKey,
22
+ } from '../store/private-keys';
19
23
 
20
24
  export const BACKGROUND_SUPPORT_KEY = 'background';
21
25
 
@@ -134,10 +138,25 @@ export function BackgroundImagePanel( {
134
138
  setAttributes,
135
139
  settings,
136
140
  } ) {
137
- const style = useSelect(
138
- ( select ) =>
139
- select( blockEditorStore ).getBlockAttributes( clientId )?.style,
140
- [ clientId ]
141
+ const { style, inheritedValue, _links } = useSelect(
142
+ ( select ) => {
143
+ const { getBlockAttributes, getSettings } =
144
+ select( blockEditorStore );
145
+ const _settings = getSettings();
146
+ return {
147
+ style: getBlockAttributes( clientId )?.style,
148
+ _links: _settings[ globalStylesLinksDataKey ],
149
+ /*
150
+ * @TODO 1. Pass inherited value down to all block style controls,
151
+ * See: packages/block-editor/src/hooks/style.js
152
+ * @TODO 2. Add support for block style variations,
153
+ * See implementation: packages/block-editor/src/hooks/block-style-variation.js
154
+ */
155
+ inheritedValue:
156
+ _settings[ globalStylesDataKey ]?.blocks?.[ name ],
157
+ };
158
+ },
159
+ [ clientId, name ]
141
160
  );
142
161
 
143
162
  if (
@@ -147,11 +166,6 @@ export function BackgroundImagePanel( {
147
166
  return null;
148
167
  }
149
168
 
150
- const defaultControls = getBlockSupport( name, [
151
- BACKGROUND_SUPPORT_KEY,
152
- '__experimentalDefaultControls',
153
- ] );
154
-
155
169
  const onChange = ( newStyle ) => {
156
170
  setAttributes( {
157
171
  style: cleanEmptyObject( newStyle ),
@@ -170,13 +184,14 @@ export function BackgroundImagePanel( {
170
184
 
171
185
  return (
172
186
  <StylesBackgroundPanel
187
+ inheritedValue={ inheritedValue }
173
188
  as={ BackgroundInspectorControl }
174
189
  panelId={ clientId }
175
- defaultControls={ defaultControls }
176
190
  defaultValues={ BACKGROUND_DEFAULT_VALUES }
177
191
  settings={ updatedSettings }
178
192
  onChange={ onChange }
179
193
  value={ style }
194
+ themeFileURIs={ _links?.[ 'wp:theme-file' ] }
180
195
  />
181
196
  );
182
197
  }
@@ -43,25 +43,12 @@ function BlockHooksControlPure( {
43
43
  [ blockTypes, name, ignoredHookedBlocks ]
44
44
  );
45
45
 
46
- const { blockIndex, rootClientId, innerBlocksLength } = useSelect(
47
- ( select ) => {
48
- const { getBlocks, getBlockIndex, getBlockRootClientId } =
49
- select( blockEditorStore );
50
-
51
- return {
52
- blockIndex: getBlockIndex( clientId ),
53
- innerBlocksLength: getBlocks( clientId )?.length,
54
- rootClientId: getBlockRootClientId( clientId ),
55
- };
56
- },
57
- [ clientId ]
58
- );
59
-
60
46
  const hookedBlockClientIds = useSelect(
61
47
  ( select ) => {
62
- const { getBlocks, getGlobalBlockCount } =
48
+ const { getBlocks, getBlockRootClientId, getGlobalBlockCount } =
63
49
  select( blockEditorStore );
64
50
 
51
+ const rootClientId = getBlockRootClientId( clientId );
65
52
  const _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(
66
53
  ( clientIds, block ) => {
67
54
  // If the block doesn't exist anywhere in the block tree,
@@ -127,9 +114,11 @@ function BlockHooksControlPure( {
127
114
 
128
115
  return EMPTY_OBJECT;
129
116
  },
130
- [ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]
117
+ [ hookedBlocksForCurrentBlock, name, clientId ]
131
118
  );
132
119
 
120
+ const { getBlockIndex, getBlockCount, getBlockRootClientId } =
121
+ useSelect( blockEditorStore );
133
122
  const { insertBlock, removeBlock } = useDispatch( blockEditorStore );
134
123
 
135
124
  if ( ! hookedBlocksForCurrentBlock.length ) {
@@ -150,6 +139,10 @@ function BlockHooksControlPure( {
150
139
  );
151
140
 
152
141
  const insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {
142
+ const blockIndex = getBlockIndex( clientId );
143
+ const innerBlocksLength = getBlockCount( clientId );
144
+ const rootClientId = getBlockRootClientId( clientId );
145
+
153
146
  switch ( relativePosition ) {
154
147
  case 'before':
155
148
  case 'after':
@@ -14,8 +14,10 @@ import {
14
14
  getBlockSelectors,
15
15
  } from '../components/global-styles';
16
16
  import { useStyleOverride } from './utils';
17
+ import { getValueFromObjectPath } from '../utils/object';
17
18
  import { store as blockEditorStore } from '../store';
18
19
  import { globalStylesDataKey } from '../store/private-keys';
20
+ import { unlock } from '../lock-unlock';
19
21
 
20
22
  const VARIATION_PREFIX = 'is-style-';
21
23
 
@@ -59,6 +61,197 @@ function getVariationNameFromClass( className, registeredStyles = [] ) {
59
61
  return null;
60
62
  }
61
63
 
64
+ // A helper component to apply a style override using the useStyleOverride hook.
65
+ function OverrideStyles( { override } ) {
66
+ useStyleOverride( override );
67
+ }
68
+
69
+ /**
70
+ * This component is used to generate new block style variation overrides
71
+ * based on an incoming theme config. If a matching style is found in the config,
72
+ * a new override is created and returned. The overrides can be used in conjunction with
73
+ * useStyleOverride to apply the new styles to the editor. Its use is
74
+ * subject to change.
75
+ *
76
+ * @param {Object} props Props.
77
+ * @param {Object} props.config A global styles object, containing settings and styles.
78
+ * @return {JSX.Element|undefined} An array of new block variation overrides.
79
+ */
80
+ export function __unstableBlockStyleVariationOverridesWithConfig( { config } ) {
81
+ const { getBlockStyles, overrides } = useSelect(
82
+ ( select ) => ( {
83
+ getBlockStyles: select( blocksStore ).getBlockStyles,
84
+ overrides: unlock( select( blockEditorStore ) ).getStyleOverrides(),
85
+ } ),
86
+ []
87
+ );
88
+ const { getBlockName } = useSelect( blockEditorStore );
89
+
90
+ const overridesWithConfig = useMemo( () => {
91
+ if ( ! overrides?.length ) {
92
+ return;
93
+ }
94
+ const newOverrides = [];
95
+ const overriddenClientIds = [];
96
+ for ( const [ , override ] of overrides ) {
97
+ if (
98
+ override?.variation &&
99
+ override?.clientId &&
100
+ /*
101
+ * Because this component overwrites existing style overrides,
102
+ * filter out any overrides that are already present in the store.
103
+ */
104
+ ! overriddenClientIds.includes( override.clientId )
105
+ ) {
106
+ const blockName = getBlockName( override.clientId );
107
+ const configStyles =
108
+ config?.styles?.blocks?.[ blockName ]?.variations?.[
109
+ override.variation
110
+ ];
111
+ if ( configStyles ) {
112
+ const variationConfig = {
113
+ settings: config?.settings,
114
+ // The variation style data is all that is needed to generate
115
+ // the styles for the current application to a block. The variation
116
+ // name is updated to match the instance specific class name.
117
+ styles: {
118
+ blocks: {
119
+ [ blockName ]: {
120
+ variations: {
121
+ [ `${ override.variation }-${ override.clientId }` ]:
122
+ configStyles,
123
+ },
124
+ },
125
+ },
126
+ },
127
+ };
128
+ const blockSelectors = getBlockSelectors(
129
+ getBlockTypes(),
130
+ getBlockStyles,
131
+ override.clientId
132
+ );
133
+ const hasBlockGapSupport = false;
134
+ const hasFallbackGapSupport = true;
135
+ const disableLayoutStyles = true;
136
+ const disableRootPadding = true;
137
+ const variationStyles = toStyles(
138
+ variationConfig,
139
+ blockSelectors,
140
+ hasBlockGapSupport,
141
+ hasFallbackGapSupport,
142
+ disableLayoutStyles,
143
+ disableRootPadding,
144
+ {
145
+ blockGap: false,
146
+ blockStyles: true,
147
+ layoutStyles: false,
148
+ marginReset: false,
149
+ presets: false,
150
+ rootPadding: false,
151
+ variationStyles: true,
152
+ }
153
+ );
154
+ newOverrides.push( {
155
+ id: `${ override.variation }-${ override.clientId }`,
156
+ css: variationStyles,
157
+ __unstableType: 'variation',
158
+ variation: override.variation,
159
+ // The clientId will be stored with the override and used to ensure
160
+ // the order of overrides matches the order of blocks so that the
161
+ // correct CSS cascade is maintained.
162
+ clientId: override.clientId,
163
+ } );
164
+ overriddenClientIds.push( override.clientId );
165
+ }
166
+ }
167
+ }
168
+ return newOverrides;
169
+ }, [ config, overrides, getBlockStyles, getBlockName ] );
170
+
171
+ if ( ! overridesWithConfig || ! overridesWithConfig.length ) {
172
+ return;
173
+ }
174
+
175
+ return (
176
+ <>
177
+ { overridesWithConfig.map( ( override ) => (
178
+ <OverrideStyles key={ override.id } override={ override } />
179
+ ) ) }
180
+ </>
181
+ );
182
+ }
183
+
184
+ /**
185
+ * Retrieves any variation styles data and resolves any referenced values.
186
+ *
187
+ * @param {Object} globalStyles A complete global styles object, containing settings and styles.
188
+ * @param {string} name The name of the desired block type.
189
+ * @param {variation} variation The of the block style variation to retrieve data for.
190
+ *
191
+ * @return {Object|undefined} The global styles data for the specified variation.
192
+ */
193
+ export function getVariationStylesWithRefValues(
194
+ globalStyles,
195
+ name,
196
+ variation
197
+ ) {
198
+ if ( ! globalStyles?.styles?.blocks?.[ name ]?.variations?.[ variation ] ) {
199
+ return;
200
+ }
201
+
202
+ // Helper to recursively look for `ref` values to resolve.
203
+ const replaceRefs = ( variationStyles ) => {
204
+ Object.keys( variationStyles ).forEach( ( key ) => {
205
+ const value = variationStyles[ key ];
206
+
207
+ // Only process objects.
208
+ if ( typeof value === 'object' && value !== null ) {
209
+ // Process `ref` value if present.
210
+ if ( value.ref !== undefined ) {
211
+ if (
212
+ typeof value.ref !== 'string' ||
213
+ value.ref.trim() === ''
214
+ ) {
215
+ // Remove invalid ref.
216
+ delete variationStyles[ key ];
217
+ } else {
218
+ // Resolve `ref` value.
219
+ const refValue = getValueFromObjectPath(
220
+ globalStyles,
221
+ value.ref
222
+ );
223
+
224
+ if ( refValue ) {
225
+ variationStyles[ key ] = refValue;
226
+ } else {
227
+ delete variationStyles[ key ];
228
+ }
229
+ }
230
+ } else {
231
+ // Recursively resolve `ref` values in nested objects.
232
+ replaceRefs( value );
233
+
234
+ // After recursion, if value is empty due to explicitly
235
+ // `undefined` ref value, remove it.
236
+ if ( Object.keys( value ).length === 0 ) {
237
+ delete variationStyles[ key ];
238
+ }
239
+ }
240
+ }
241
+ } );
242
+ };
243
+
244
+ // Deep clone variation node to avoid mutating it within global styles and losing refs.
245
+ const styles = JSON.parse(
246
+ JSON.stringify(
247
+ globalStyles.styles.blocks[ name ].variations[ variation ]
248
+ )
249
+ );
250
+ replaceRefs( styles );
251
+
252
+ return styles;
253
+ }
254
+
62
255
  function useBlockStyleVariation( name, variation, clientId ) {
63
256
  // Prefer global styles data in GlobalStylesContext, which are available
64
257
  // if in the site editor. Otherwise fall back to whatever is in the
@@ -73,9 +266,14 @@ function useBlockStyleVariation( name, variation, clientId ) {
73
266
  }, [] );
74
267
 
75
268
  return useMemo( () => {
76
- const styles = mergedConfig?.styles ?? globalStyles;
77
- const variationStyles =
78
- styles?.blocks?.[ name ]?.variations?.[ variation ];
269
+ const variationStyles = getVariationStylesWithRefValues(
270
+ {
271
+ settings: mergedConfig?.settings ?? globalSettings,
272
+ styles: mergedConfig?.styles ?? globalStyles,
273
+ },
274
+ name,
275
+ variation
276
+ );
79
277
 
80
278
  return {
81
279
  settings: mergedConfig?.settings ?? globalSettings,
@@ -157,6 +355,7 @@ function useBlockProps( { name, className, clientId } ) {
157
355
  id: `variation-${ clientId }`,
158
356
  css: variationStyles,
159
357
  __unstableType: 'variation',
358
+ variation,
160
359
  // The clientId will be stored with the override and used to ensure
161
360
  // the order of overrides matches the order of blocks so that the
162
361
  // correct CSS cascade is maintained.