@wordpress/block-editor 13.4.0 → 14.1.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 (533) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +20 -15
  3. package/build/autocompleters/block.js +1 -1
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +3 -1
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-draggable/index.js +2 -2
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-list/use-block-props/index.js +2 -2
  10. package/build/components/block-list/use-block-props/index.js.map +1 -1
  11. package/build/components/block-list/use-block-props/use-block-refs.js +24 -32
  12. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  13. package/build/components/block-list/use-in-between-inserter.js +11 -4
  14. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  15. package/build/components/block-mover/index.js +1 -2
  16. package/build/components/block-mover/index.js.map +1 -1
  17. package/build/components/block-popover/cover.js +1 -1
  18. package/build/components/block-popover/cover.js.map +1 -1
  19. package/build/components/block-popover/inbetween.js +2 -2
  20. package/build/components/block-popover/inbetween.js.map +1 -1
  21. package/build/components/block-popover/index.js +2 -2
  22. package/build/components/block-popover/index.js.map +1 -1
  23. package/build/components/block-settings-menu/block-mode-toggle.js +28 -34
  24. package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  25. package/build/components/block-tools/block-selection-button.js +1 -2
  26. package/build/components/block-tools/block-selection-button.js.map +1 -1
  27. package/build/components/block-tools/index.js +1 -1
  28. package/build/components/block-tools/index.js.map +1 -1
  29. package/build/components/block-tools/insertion-point.js +14 -3
  30. package/build/components/block-tools/insertion-point.js.map +1 -1
  31. package/build/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  32. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  33. package/build/components/block-tools/use-show-block-tools.js +2 -1
  34. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  35. package/build/components/block-tools/zoom-out-mode-inserters.js +22 -19
  36. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  37. package/build/components/block-tools/zoom-out-toolbar.js +0 -1
  38. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -1
  39. package/build/components/border-radius-control/index.js +1 -0
  40. package/build/components/border-radius-control/index.js.map +1 -1
  41. package/build/components/child-layout-control/index.js +3 -1
  42. package/build/components/child-layout-control/index.js.map +1 -1
  43. package/build/components/convert-to-group-buttons/index.js +1 -1
  44. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  45. package/build/components/date-format-picker/index.js +2 -0
  46. package/build/components/date-format-picker/index.js.map +1 -1
  47. package/build/components/dimensions-tool/scale-tool.js +1 -0
  48. package/build/components/dimensions-tool/scale-tool.js.map +1 -1
  49. package/build/components/font-appearance-control/index.js +3 -0
  50. package/build/components/font-appearance-control/index.js.map +1 -1
  51. package/build/components/font-family/index.js +15 -0
  52. package/build/components/font-family/index.js.map +1 -1
  53. package/build/components/global-styles/background-panel.js +153 -77
  54. package/build/components/global-styles/background-panel.js.map +1 -1
  55. package/build/components/global-styles/get-global-styles-changes.js +3 -1
  56. package/build/components/global-styles/get-global-styles-changes.js.map +1 -1
  57. package/build/components/global-styles/hooks.js +0 -7
  58. package/build/components/global-styles/hooks.js.map +1 -1
  59. package/build/components/global-styles/image-settings-panel.js +1 -0
  60. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  61. package/build/components/global-styles/index.js +0 -6
  62. package/build/components/global-styles/index.js.map +1 -1
  63. package/build/components/global-styles/typography-panel.js +0 -1
  64. package/build/components/global-styles/typography-panel.js.map +1 -1
  65. package/build/components/global-styles/use-global-styles-output.js +59 -40
  66. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  67. package/build/components/global-styles/utils.js +80 -0
  68. package/build/components/global-styles/utils.js.map +1 -1
  69. package/build/components/grid/grid-item-movers.js +30 -26
  70. package/build/components/grid/grid-item-movers.js.map +1 -1
  71. package/build/components/grid/grid-item-resizer.js +14 -15
  72. package/build/components/grid/grid-item-resizer.js.map +1 -1
  73. package/build/components/grid/grid-visualizer.js +21 -6
  74. package/build/components/grid/grid-visualizer.js.map +1 -1
  75. package/build/components/grid/use-grid-layout-sync.js +56 -20
  76. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  77. package/build/components/height-control/index.js +1 -0
  78. package/build/components/height-control/index.js.map +1 -1
  79. package/build/components/iframe/index.js +2 -4
  80. package/build/components/iframe/index.js.map +1 -1
  81. package/build/components/image-editor/zoom-dropdown.js +11 -7
  82. package/build/components/image-editor/zoom-dropdown.js.map +1 -1
  83. package/build/components/inner-blocks/button-block-appender.js +8 -8
  84. package/build/components/inner-blocks/button-block-appender.js.map +1 -1
  85. package/build/components/inner-blocks/default-block-appender.js +7 -25
  86. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +9 -11
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inserter/category-tabs/index.js +29 -2
  90. package/build/components/inserter/category-tabs/index.js.map +1 -1
  91. package/build/components/inserter/library.js +4 -2
  92. package/build/components/inserter/library.js.map +1 -1
  93. package/build/components/inserter/menu.js +32 -14
  94. package/build/components/inserter/menu.js.map +1 -1
  95. package/build/components/inserter/quick-inserter.js +4 -0
  96. package/build/components/inserter/quick-inserter.js.map +1 -1
  97. package/build/components/line-height-control/index.js +3 -15
  98. package/build/components/line-height-control/index.js.map +1 -1
  99. package/build/components/link-control/search-input.js +0 -1
  100. package/build/components/link-control/search-input.js.map +1 -1
  101. package/build/components/media-placeholder/index.js +9 -4
  102. package/build/components/media-placeholder/index.js.map +1 -1
  103. package/build/components/media-replace-flow/index.js +3 -1
  104. package/build/components/media-replace-flow/index.js.map +1 -1
  105. package/build/components/media-upload/index.native.js +4 -1
  106. package/build/components/media-upload/index.native.js.map +1 -1
  107. package/build/components/multi-selection-inspector/index.js +12 -12
  108. package/build/components/multi-selection-inspector/index.js.map +1 -1
  109. package/build/components/resolution-tool/index.js +1 -0
  110. package/build/components/resolution-tool/index.js.map +1 -1
  111. package/build/components/skip-to-selected-block/index.js +4 -2
  112. package/build/components/skip-to-selected-block/index.js.map +1 -1
  113. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +8 -8
  114. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  115. package/build/components/text-alignment-control/index.js +13 -8
  116. package/build/components/text-alignment-control/index.js.map +1 -1
  117. package/build/components/text-decoration-control/index.js +13 -8
  118. package/build/components/text-decoration-control/index.js.map +1 -1
  119. package/build/components/text-transform-control/index.js +13 -8
  120. package/build/components/text-transform-control/index.js.map +1 -1
  121. package/build/components/url-input/button.js +0 -1
  122. package/build/components/url-input/button.js.map +1 -1
  123. package/build/components/url-input/index.js +1 -11
  124. package/build/components/url-input/index.js.map +1 -1
  125. package/build/components/url-popover/image-url-input-ui.js +2 -0
  126. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  127. package/build/components/url-popover/link-editor.js +0 -1
  128. package/build/components/url-popover/link-editor.js.map +1 -1
  129. package/build/components/use-block-drop-zone/index.js +42 -4
  130. package/build/components/use-block-drop-zone/index.js.map +1 -1
  131. package/build/components/use-on-block-drop/index.js +3 -6
  132. package/build/components/use-on-block-drop/index.js.map +1 -1
  133. package/build/components/use-resize-canvas/index.js +1 -3
  134. package/build/components/use-resize-canvas/index.js.map +1 -1
  135. package/build/components/use-settings/index.js +2 -1
  136. package/build/components/use-settings/index.js.map +1 -1
  137. package/build/components/writing-mode-control/index.js +13 -8
  138. package/build/components/writing-mode-control/index.js.map +1 -1
  139. package/build/hooks/background.js +19 -23
  140. package/build/hooks/background.js.map +1 -1
  141. package/build/hooks/block-bindings.js +209 -39
  142. package/build/hooks/block-bindings.js.map +1 -1
  143. package/build/hooks/block-hooks.js +1 -0
  144. package/build/hooks/block-hooks.js.map +1 -1
  145. package/build/hooks/block-style-variation.js +2 -2
  146. package/build/hooks/block-style-variation.js.map +1 -1
  147. package/build/hooks/contrast-checker.js +6 -6
  148. package/build/hooks/contrast-checker.js.map +1 -1
  149. package/build/hooks/duotone.js +3 -3
  150. package/build/hooks/duotone.js.map +1 -1
  151. package/build/hooks/index.js +7 -1
  152. package/build/hooks/index.js.map +1 -1
  153. package/build/hooks/line-height.js +0 -1
  154. package/build/hooks/line-height.js.map +1 -1
  155. package/build/hooks/spacing-visualizer.js +1 -1
  156. package/build/hooks/spacing-visualizer.js.map +1 -1
  157. package/build/hooks/use-bindings-attributes.js +4 -0
  158. package/build/hooks/use-bindings-attributes.js.map +1 -1
  159. package/build/hooks/use-zoom-out.js +1 -1
  160. package/build/hooks/use-zoom-out.js.map +1 -1
  161. package/build/hooks/utils.js +20 -0
  162. package/build/hooks/utils.js.map +1 -1
  163. package/build/index.js +7 -0
  164. package/build/index.js.map +1 -1
  165. package/build/layouts/constrained.js +1 -0
  166. package/build/layouts/constrained.js.map +1 -1
  167. package/build/layouts/flex.js +2 -0
  168. package/build/layouts/flex.js.map +1 -1
  169. package/build/layouts/grid.js +3 -0
  170. package/build/layouts/grid.js.map +1 -1
  171. package/build/private-apis.js +3 -2
  172. package/build/private-apis.js.map +1 -1
  173. package/build/store/actions.js +9 -1
  174. package/build/store/actions.js.map +1 -1
  175. package/build/store/private-selectors.js +30 -0
  176. package/build/store/private-selectors.js.map +1 -1
  177. package/build/store/reducer.js +10 -1
  178. package/build/store/reducer.js.map +1 -1
  179. package/build/store/selectors.js +4 -4
  180. package/build/store/selectors.js.map +1 -1
  181. package/build/utils/block-bindings.js +112 -0
  182. package/build/utils/block-bindings.js.map +1 -0
  183. package/build/utils/get-editor-region.js +1 -1
  184. package/build/utils/get-editor-region.js.map +1 -1
  185. package/build/utils/get-px-from-css-unit.js +1 -1
  186. package/build/utils/get-px-from-css-unit.js.map +1 -1
  187. package/build-module/autocompleters/block.js +1 -1
  188. package/build-module/autocompleters/block.js.map +1 -1
  189. package/build-module/components/block-breadcrumb/index.js +4 -2
  190. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  191. package/build-module/components/block-draggable/index.js +3 -3
  192. package/build-module/components/block-draggable/index.js.map +1 -1
  193. package/build-module/components/block-list/use-block-props/index.js +2 -2
  194. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  195. package/build-module/components/block-list/use-block-props/use-block-refs.js +24 -34
  196. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  197. package/build-module/components/block-list/use-in-between-inserter.js +11 -4
  198. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  199. package/build-module/components/block-mover/index.js +1 -2
  200. package/build-module/components/block-mover/index.js.map +1 -1
  201. package/build-module/components/block-popover/cover.js +1 -1
  202. package/build-module/components/block-popover/cover.js.map +1 -1
  203. package/build-module/components/block-popover/inbetween.js +1 -1
  204. package/build-module/components/block-popover/inbetween.js.map +1 -1
  205. package/build-module/components/block-popover/index.js +1 -1
  206. package/build-module/components/block-popover/index.js.map +1 -1
  207. package/build-module/components/block-settings-menu/block-mode-toggle.js +29 -34
  208. package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  209. package/build-module/components/block-tools/block-selection-button.js +1 -2
  210. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  211. package/build-module/components/block-tools/index.js +1 -1
  212. package/build-module/components/block-tools/index.js.map +1 -1
  213. package/build-module/components/block-tools/insertion-point.js +14 -3
  214. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  215. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  216. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  217. package/build-module/components/block-tools/use-show-block-tools.js +2 -1
  218. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  219. package/build-module/components/block-tools/zoom-out-mode-inserters.js +23 -20
  220. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  221. package/build-module/components/block-tools/zoom-out-toolbar.js +0 -1
  222. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -1
  223. package/build-module/components/border-radius-control/index.js +1 -0
  224. package/build-module/components/border-radius-control/index.js.map +1 -1
  225. package/build-module/components/child-layout-control/index.js +3 -1
  226. package/build-module/components/child-layout-control/index.js.map +1 -1
  227. package/build-module/components/convert-to-group-buttons/index.js +1 -1
  228. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  229. package/build-module/components/date-format-picker/index.js +2 -0
  230. package/build-module/components/date-format-picker/index.js.map +1 -1
  231. package/build-module/components/dimensions-tool/scale-tool.js +1 -0
  232. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -1
  233. package/build-module/components/font-appearance-control/index.js +3 -0
  234. package/build-module/components/font-appearance-control/index.js.map +1 -1
  235. package/build-module/components/font-family/index.js +14 -0
  236. package/build-module/components/font-family/index.js.map +1 -1
  237. package/build-module/components/global-styles/background-panel.js +156 -80
  238. package/build-module/components/global-styles/background-panel.js.map +1 -1
  239. package/build-module/components/global-styles/get-global-styles-changes.js +3 -1
  240. package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -1
  241. package/build-module/components/global-styles/hooks.js +0 -6
  242. package/build-module/components/global-styles/hooks.js.map +1 -1
  243. package/build-module/components/global-styles/image-settings-panel.js +1 -0
  244. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  245. package/build-module/components/global-styles/index.js +1 -1
  246. package/build-module/components/global-styles/index.js.map +1 -1
  247. package/build-module/components/global-styles/typography-panel.js +0 -1
  248. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  249. package/build-module/components/global-styles/use-global-styles-output.js +61 -42
  250. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  251. package/build-module/components/global-styles/utils.js +77 -0
  252. package/build-module/components/global-styles/utils.js.map +1 -1
  253. package/build-module/components/grid/grid-item-movers.js +30 -26
  254. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  255. package/build-module/components/grid/grid-item-resizer.js +14 -15
  256. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  257. package/build-module/components/grid/grid-visualizer.js +21 -6
  258. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  259. package/build-module/components/grid/use-grid-layout-sync.js +56 -20
  260. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  261. package/build-module/components/height-control/index.js +1 -0
  262. package/build-module/components/height-control/index.js.map +1 -1
  263. package/build-module/components/iframe/index.js +2 -4
  264. package/build-module/components/iframe/index.js.map +1 -1
  265. package/build-module/components/image-editor/zoom-dropdown.js +12 -8
  266. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -1
  267. package/build-module/components/inner-blocks/button-block-appender.js +7 -6
  268. package/build-module/components/inner-blocks/button-block-appender.js.map +1 -1
  269. package/build-module/components/inner-blocks/default-block-appender.js +6 -23
  270. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  271. package/build-module/components/inner-blocks/index.js +9 -11
  272. package/build-module/components/inner-blocks/index.js.map +1 -1
  273. package/build-module/components/inserter/category-tabs/index.js +30 -3
  274. package/build-module/components/inserter/category-tabs/index.js.map +1 -1
  275. package/build-module/components/inserter/library.js +4 -2
  276. package/build-module/components/inserter/library.js.map +1 -1
  277. package/build-module/components/inserter/menu.js +32 -14
  278. package/build-module/components/inserter/menu.js.map +1 -1
  279. package/build-module/components/inserter/quick-inserter.js +5 -1
  280. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  281. package/build-module/components/line-height-control/index.js +3 -14
  282. package/build-module/components/line-height-control/index.js.map +1 -1
  283. package/build-module/components/link-control/search-input.js +0 -1
  284. package/build-module/components/link-control/search-input.js.map +1 -1
  285. package/build-module/components/media-placeholder/index.js +9 -4
  286. package/build-module/components/media-placeholder/index.js.map +1 -1
  287. package/build-module/components/media-replace-flow/index.js +3 -1
  288. package/build-module/components/media-replace-flow/index.js.map +1 -1
  289. package/build-module/components/media-upload/index.native.js +4 -1
  290. package/build-module/components/media-upload/index.native.js.map +1 -1
  291. package/build-module/components/multi-selection-inspector/index.js +12 -12
  292. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  293. package/build-module/components/resolution-tool/index.js +1 -0
  294. package/build-module/components/resolution-tool/index.js.map +1 -1
  295. package/build-module/components/skip-to-selected-block/index.js +5 -3
  296. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  297. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +8 -8
  298. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  299. package/build-module/components/text-alignment-control/index.js +13 -8
  300. package/build-module/components/text-alignment-control/index.js.map +1 -1
  301. package/build-module/components/text-decoration-control/index.js +13 -8
  302. package/build-module/components/text-decoration-control/index.js.map +1 -1
  303. package/build-module/components/text-transform-control/index.js +13 -8
  304. package/build-module/components/text-transform-control/index.js.map +1 -1
  305. package/build-module/components/url-input/button.js +0 -1
  306. package/build-module/components/url-input/button.js.map +1 -1
  307. package/build-module/components/url-input/index.js +1 -11
  308. package/build-module/components/url-input/index.js.map +1 -1
  309. package/build-module/components/url-popover/image-url-input-ui.js +2 -0
  310. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  311. package/build-module/components/url-popover/link-editor.js +0 -1
  312. package/build-module/components/url-popover/link-editor.js.map +1 -1
  313. package/build-module/components/use-block-drop-zone/index.js +42 -4
  314. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  315. package/build-module/components/use-on-block-drop/index.js +3 -6
  316. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  317. package/build-module/components/use-resize-canvas/index.js +1 -3
  318. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  319. package/build-module/components/use-settings/index.js +2 -1
  320. package/build-module/components/use-settings/index.js.map +1 -1
  321. package/build-module/components/writing-mode-control/index.js +13 -8
  322. package/build-module/components/writing-mode-control/index.js.map +1 -1
  323. package/build-module/hooks/background.js +19 -23
  324. package/build-module/hooks/background.js.map +1 -1
  325. package/build-module/hooks/block-bindings.js +214 -43
  326. package/build-module/hooks/block-bindings.js.map +1 -1
  327. package/build-module/hooks/block-hooks.js +1 -0
  328. package/build-module/hooks/block-hooks.js.map +1 -1
  329. package/build-module/hooks/block-style-variation.js +3 -3
  330. package/build-module/hooks/block-style-variation.js.map +1 -1
  331. package/build-module/hooks/contrast-checker.js +7 -7
  332. package/build-module/hooks/contrast-checker.js.map +1 -1
  333. package/build-module/hooks/duotone.js +4 -4
  334. package/build-module/hooks/duotone.js.map +1 -1
  335. package/build-module/hooks/index.js +2 -1
  336. package/build-module/hooks/index.js.map +1 -1
  337. package/build-module/hooks/line-height.js +0 -1
  338. package/build-module/hooks/line-height.js.map +1 -1
  339. package/build-module/hooks/spacing-visualizer.js +1 -1
  340. package/build-module/hooks/spacing-visualizer.js.map +1 -1
  341. package/build-module/hooks/use-bindings-attributes.js +3 -0
  342. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  343. package/build-module/hooks/use-zoom-out.js +1 -1
  344. package/build-module/hooks/use-zoom-out.js.map +1 -1
  345. package/build-module/hooks/utils.js +19 -0
  346. package/build-module/hooks/utils.js.map +1 -1
  347. package/build-module/index.js +1 -1
  348. package/build-module/index.js.map +1 -1
  349. package/build-module/layouts/constrained.js +1 -0
  350. package/build-module/layouts/constrained.js.map +1 -1
  351. package/build-module/layouts/flex.js +2 -0
  352. package/build-module/layouts/flex.js.map +1 -1
  353. package/build-module/layouts/grid.js +3 -0
  354. package/build-module/layouts/grid.js.map +1 -1
  355. package/build-module/private-apis.js +4 -3
  356. package/build-module/private-apis.js.map +1 -1
  357. package/build-module/store/actions.js +9 -1
  358. package/build-module/store/actions.js.map +1 -1
  359. package/build-module/store/private-selectors.js +27 -0
  360. package/build-module/store/private-selectors.js.map +1 -1
  361. package/build-module/store/reducer.js +9 -1
  362. package/build-module/store/reducer.js.map +1 -1
  363. package/build-module/store/selectors.js +4 -4
  364. package/build-module/store/selectors.js.map +1 -1
  365. package/build-module/utils/block-bindings.js +105 -0
  366. package/build-module/utils/block-bindings.js.map +1 -0
  367. package/build-module/utils/get-editor-region.js +1 -1
  368. package/build-module/utils/get-editor-region.js.map +1 -1
  369. package/build-module/utils/get-px-from-css-unit.js +1 -1
  370. package/build-module/utils/get-px-from-css-unit.js.map +1 -1
  371. package/build-style/content-rtl.css +12 -26
  372. package/build-style/content.css +12 -26
  373. package/build-style/default-editor-styles-rtl.css +5 -2
  374. package/build-style/default-editor-styles.css +5 -2
  375. package/build-style/style-rtl.css +123 -83
  376. package/build-style/style.css +123 -83
  377. package/package.json +32 -32
  378. package/src/autocompleters/block.js +2 -1
  379. package/src/autocompleters/style.scss +4 -0
  380. package/src/components/block-breadcrumb/index.js +4 -2
  381. package/src/components/block-canvas/style.scss +1 -0
  382. package/src/components/block-draggable/index.js +3 -3
  383. package/src/components/block-list/content.scss +5 -13
  384. package/src/components/block-list/use-block-props/index.js +2 -2
  385. package/src/components/block-list/use-block-props/use-block-refs.js +27 -43
  386. package/src/components/block-list/use-in-between-inserter.js +17 -5
  387. package/src/components/block-mover/index.js +5 -2
  388. package/src/components/block-popover/cover.js +1 -1
  389. package/src/components/block-popover/inbetween.js +1 -1
  390. package/src/components/block-popover/index.js +1 -1
  391. package/src/components/block-settings-menu/block-mode-toggle.js +28 -31
  392. package/src/components/block-settings-menu/test/block-mode-toggle.js +26 -23
  393. package/src/components/block-tools/block-selection-button.js +1 -2
  394. package/src/components/block-tools/index.js +5 -6
  395. package/src/components/block-tools/insertion-point.js +11 -0
  396. package/src/components/block-tools/style.scss +1 -1
  397. package/src/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  398. package/src/components/block-tools/use-show-block-tools.js +4 -1
  399. package/src/components/block-tools/zoom-out-mode-inserters.js +21 -19
  400. package/src/components/block-tools/zoom-out-toolbar.js +0 -1
  401. package/src/components/block-variation-transforms/style.scss +1 -1
  402. package/src/components/border-radius-control/index.js +1 -0
  403. package/src/components/border-radius-control/style.scss +0 -10
  404. package/src/components/button-block-appender/content.scss +1 -1
  405. package/src/components/child-layout-control/index.js +2 -0
  406. package/src/components/color-palette/test/__snapshots__/control.js.snap +2 -2
  407. package/src/components/colors-gradients/test/control.js +3 -2
  408. package/src/components/convert-to-group-buttons/index.js +1 -1
  409. package/src/components/date-format-picker/index.js +2 -0
  410. package/src/components/dimensions-tool/scale-tool.js +1 -0
  411. package/src/components/font-appearance-control/index.js +3 -0
  412. package/src/components/font-family/README.md +17 -0
  413. package/src/components/font-family/index.js +19 -0
  414. package/src/components/font-family/stories/index.story.js +54 -0
  415. package/src/components/global-styles/background-panel.js +180 -93
  416. package/src/components/global-styles/get-global-styles-changes.js +4 -1
  417. package/src/components/global-styles/hooks.js +0 -5
  418. package/src/components/global-styles/image-settings-panel.js +1 -0
  419. package/src/components/global-styles/index.js +0 -1
  420. package/src/components/global-styles/style.scss +13 -12
  421. package/src/components/global-styles/test/use-global-styles-output.js +68 -7
  422. package/src/components/global-styles/test/utils.js +120 -0
  423. package/src/components/global-styles/typography-panel.js +0 -1
  424. package/src/components/global-styles/use-global-styles-output.js +71 -53
  425. package/src/components/global-styles/utils.js +90 -0
  426. package/src/components/grid/grid-item-movers.js +46 -44
  427. package/src/components/grid/grid-item-resizer.js +11 -17
  428. package/src/components/grid/grid-visualizer.js +23 -8
  429. package/src/components/grid/style.scss +60 -10
  430. package/src/components/grid/use-grid-layout-sync.js +68 -14
  431. package/src/components/height-control/index.js +1 -0
  432. package/src/components/iframe/content.scss +2 -2
  433. package/src/components/iframe/index.js +1 -3
  434. package/src/components/image-editor/zoom-dropdown.js +17 -9
  435. package/src/components/inner-blocks/button-block-appender.js +5 -7
  436. package/src/components/inner-blocks/default-block-appender.js +4 -23
  437. package/src/components/inner-blocks/index.js +10 -9
  438. package/src/components/inserter/category-tabs/index.js +35 -2
  439. package/src/components/inserter/library.js +2 -0
  440. package/src/components/inserter/menu.js +34 -29
  441. package/src/components/inserter/quick-inserter.js +4 -1
  442. package/src/components/inserter/style.scss +17 -12
  443. package/src/components/inserter-list-item/style.scss +1 -0
  444. package/src/components/inspector-controls/README.md +5 -0
  445. package/src/components/line-height-control/README.md +4 -5
  446. package/src/components/line-height-control/index.js +4 -21
  447. package/src/components/line-height-control/stories/index.story.js +0 -1
  448. package/src/components/line-height-control/test/index.js +1 -7
  449. package/src/components/link-control/search-input.js +0 -1
  450. package/src/components/link-control/style.scss +1 -1
  451. package/src/components/media-placeholder/index.js +12 -7
  452. package/src/components/media-replace-flow/README.md +7 -0
  453. package/src/components/media-replace-flow/index.js +3 -1
  454. package/src/components/media-upload/README.md +2 -0
  455. package/src/components/media-upload/index.native.js +2 -0
  456. package/src/components/multi-selection-inspector/index.js +8 -9
  457. package/src/components/resolution-tool/index.js +1 -0
  458. package/src/components/responsive-block-control/README.md +1 -0
  459. package/src/components/responsive-block-control/test/index.js +6 -1
  460. package/src/components/skip-to-selected-block/index.js +5 -3
  461. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +11 -10
  462. package/src/components/spacing-sizes-control/style.scss +16 -16
  463. package/src/components/tabbed-sidebar/style.scss +1 -19
  464. package/src/components/text-alignment-control/index.js +20 -8
  465. package/src/components/text-decoration-control/index.js +20 -8
  466. package/src/components/text-decoration-control/stories/index.story.js +0 -4
  467. package/src/components/text-transform-control/index.js +20 -8
  468. package/src/components/text-transform-control/stories/index.story.js +0 -4
  469. package/src/components/url-input/README.md +0 -5
  470. package/src/components/url-input/button.js +0 -1
  471. package/src/components/url-input/index.js +1 -15
  472. package/src/components/url-input/style.scss +2 -2
  473. package/src/components/url-popover/image-url-input-ui.js +2 -0
  474. package/src/components/url-popover/link-editor.js +0 -1
  475. package/src/components/use-block-drop-zone/index.js +86 -16
  476. package/src/components/use-on-block-drop/index.js +1 -9
  477. package/src/components/use-resize-canvas/index.js +1 -3
  478. package/src/components/use-settings/index.js +2 -1
  479. package/src/components/writing-mode-control/index.js +20 -8
  480. package/src/hooks/background.js +21 -27
  481. package/src/hooks/block-bindings.js +248 -54
  482. package/src/hooks/block-bindings.scss +13 -2
  483. package/src/hooks/block-hooks.js +1 -0
  484. package/src/hooks/block-hooks.scss +1 -0
  485. package/src/hooks/block-style-variation.js +3 -3
  486. package/src/hooks/contrast-checker.js +7 -7
  487. package/src/hooks/duotone.js +4 -4
  488. package/src/hooks/index.js +2 -1
  489. package/src/hooks/line-height.js +0 -1
  490. package/src/hooks/spacing-visualizer.js +1 -1
  491. package/src/hooks/test/background.js +60 -0
  492. package/src/hooks/use-bindings-attributes.js +4 -0
  493. package/src/hooks/use-editor-wrapper-styles.native.scss +1 -0
  494. package/src/hooks/use-zoom-out.js +1 -1
  495. package/src/hooks/utils.js +14 -1
  496. package/src/index.js +1 -0
  497. package/src/layouts/constrained.js +1 -0
  498. package/src/layouts/flex.js +2 -0
  499. package/src/layouts/grid.js +3 -0
  500. package/src/private-apis.js +3 -2
  501. package/src/store/actions.js +13 -5
  502. package/src/store/private-selectors.js +36 -0
  503. package/src/store/reducer.js +7 -0
  504. package/src/store/selectors.js +4 -4
  505. package/src/store/test/private-selectors.js +89 -0
  506. package/src/style.scss +1 -2
  507. package/src/utils/block-bindings.js +98 -0
  508. package/src/utils/get-editor-region.js +1 -1
  509. package/src/utils/get-px-from-css-unit.js +1 -1
  510. package/src/utils/test/transform-styles.js +49 -0
  511. package/tsconfig.tsbuildinfo +1 -1
  512. package/build/components/global-styles/theme-file-uri-utils.js +0 -80
  513. package/build/components/global-styles/theme-file-uri-utils.js.map +0 -1
  514. package/build/components/inner-blocks/with-client-id.js +0 -28
  515. package/build/components/inner-blocks/with-client-id.js.map +0 -1
  516. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -30
  517. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +0 -1
  518. package/build/components/segmented-text-control/index.js +0 -63
  519. package/build/components/segmented-text-control/index.js.map +0 -1
  520. package/build-module/components/global-styles/theme-file-uri-utils.js +0 -73
  521. package/build-module/components/global-styles/theme-file-uri-utils.js.map +0 -1
  522. package/build-module/components/inner-blocks/with-client-id.js +0 -21
  523. package/build-module/components/inner-blocks/with-client-id.js.map +0 -1
  524. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -23
  525. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +0 -1
  526. package/build-module/components/segmented-text-control/index.js +0 -58
  527. package/build-module/components/segmented-text-control/index.js.map +0 -1
  528. package/src/components/global-styles/test/theme-file-uri-utils.js +0 -66
  529. package/src/components/global-styles/theme-file-uri-utils.js +0 -77
  530. package/src/components/inner-blocks/with-client-id.js +0 -19
  531. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -25
  532. package/src/components/segmented-text-control/index.js +0 -63
  533. package/src/components/segmented-text-control/style.scss +0 -15
@@ -209,11 +209,6 @@ export function useGlobalStyle(
209
209
  return [ result, setStyle ];
210
210
  }
211
211
 
212
- export function useGlobalStyleLinks() {
213
- const { merged: mergedConfig } = useContext( GlobalStylesContext );
214
- return mergedConfig?._links;
215
- }
216
-
217
212
  /**
218
213
  * React hook that overrides a global settings object with block and element specific settings.
219
214
  *
@@ -67,6 +67,7 @@ export default function ImageSettingsPanel( {
67
67
  panelId={ panelId }
68
68
  >
69
69
  <ToggleControl
70
+ __nextHasNoMarginBottom
70
71
  label={ __( 'Expand on click' ) }
71
72
  checked={ lightboxChecked }
72
73
  onChange={ onChangeLightbox }
@@ -3,7 +3,6 @@ export {
3
3
  useGlobalSetting,
4
4
  useGlobalStyle,
5
5
  useSettingsForBlockElement,
6
- useGlobalStyleLinks,
7
6
  } from './hooks';
8
7
  export { getBlockCSSSelector } from './get-block-css-selector';
9
8
  export {
@@ -73,7 +73,7 @@
73
73
 
74
74
 
75
75
  .block-editor-global-styles-background-panel__inspector-media-replace-container {
76
- border: 1px solid $gray-300;
76
+ border: $border-width solid $gray-300;
77
77
  border-radius: 2px;
78
78
  // Full width. ToolsPanel lays out children in a grid.
79
79
  grid-column: 1 / -1;
@@ -101,7 +101,7 @@
101
101
  }
102
102
 
103
103
  .block-editor-global-styles-background-panel__image-tools-panel-item {
104
- border: 1px solid $gray-300;
104
+ border: $border-width solid $gray-300;
105
105
  border-radius: 2px;
106
106
 
107
107
  // Full width. ToolsPanel lays out children in a grid.
@@ -134,6 +134,17 @@
134
134
  box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
135
135
  }
136
136
  }
137
+
138
+ .block-editor-global-styles-background-panel__loading {
139
+ height: 100%;
140
+ position: absolute;
141
+ z-index: 1;
142
+ width: 100%;
143
+ padding: 10px 0 0 0;
144
+ svg {
145
+ margin: 0;
146
+ }
147
+ }
137
148
  }
138
149
 
139
150
  .block-editor-global-styles-background-panel__image-preview-content,
@@ -193,10 +204,6 @@
193
204
  .block-editor-global-styles-background-panel__dropdown-content-wrapper {
194
205
  min-width: 260px;
195
206
  overflow-x: hidden;
196
- .components-base-control__help,
197
- .components-toggle-control {
198
- margin-bottom: 0;
199
- }
200
207
 
201
208
  .components-focal-point-picker-wrapper {
202
209
  background-color: $gray-100;
@@ -215,12 +222,6 @@
215
222
  }
216
223
  }
217
224
 
218
- .block-editor-global-styles-background-panel__hidden-tools-panel-item {
219
- height: 0;
220
- width: 0;
221
- position: absolute;
222
- }
223
-
224
225
  // Push control panel into the background when the media modal is open.
225
226
  .modal-open .block-editor-global-styles-background-panel__popover {
226
227
  z-index: z-index(".block-editor-global-styles-background-panel__popover");
@@ -763,7 +763,7 @@ describe( 'global styles renderer', () => {
763
763
  } );
764
764
 
765
765
  expect( layoutStyles ).toEqual(
766
- '.is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }.is-layout-flow > * + * { margin-block-start: 0.5em; margin-block-end: 0; }.is-layout-flex { gap: 0.5em; }:root { --wp--style--block-gap: 0.5em; }.is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }.is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }.is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }.is-layout-flex { flex-wrap: wrap; align-items: center; }.is-layout-flex > * { margin: 0; }'
766
+ ':root :where(.is-layout-flow) > * { margin-block-start: 0; margin-block-end: 0; }:root :where(.is-layout-flow) > * + * { margin-block-start: 0.5em; margin-block-end: 0; }:root :where(.is-layout-flex) { gap: 0.5em; }:root { --wp--style--block-gap: 0.5em; }.is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }.is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }.is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }.is-layout-flex { flex-wrap: wrap; align-items: center; }.is-layout-flex > * { margin: 0; }'
767
767
  );
768
768
  } );
769
769
 
@@ -780,7 +780,7 @@ describe( 'global styles renderer', () => {
780
780
  } );
781
781
 
782
782
  expect( layoutStyles ).toEqual(
783
- '.is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }.is-layout-flow > * + * { margin-block-start: 12px; margin-block-end: 0; }.is-layout-flex { gap: 12px; }:root { --wp--style--block-gap: 12px; }.is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }.is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }.is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }.is-layout-flex { flex-wrap: wrap; align-items: center; }.is-layout-flex > * { margin: 0; }'
783
+ ':root :where(.is-layout-flow) > * { margin-block-start: 0; margin-block-end: 0; }:root :where(.is-layout-flow) > * + * { margin-block-start: 12px; margin-block-end: 0; }:root :where(.is-layout-flex) { gap: 12px; }:root { --wp--style--block-gap: 12px; }.is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }.is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }.is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }.is-layout-flex { flex-wrap: wrap; align-items: center; }.is-layout-flex > * { margin: 0; }'
784
784
  );
785
785
  } );
786
786
 
@@ -797,7 +797,7 @@ describe( 'global styles renderer', () => {
797
797
  } );
798
798
 
799
799
  expect( layoutStyles ).toEqual(
800
- '.wp-block-group-is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }.wp-block-group-is-layout-flow > * + * { margin-block-start: 12px; margin-block-end: 0; }.wp-block-group-is-layout-flex { gap: 12px; }'
800
+ ':root :where(.wp-block-group-is-layout-flow) > * { margin-block-start: 0; margin-block-end: 0; }:root :where(.wp-block-group-is-layout-flow) > * + * { margin-block-start: 12px; margin-block-end: 0; }:root :where(.wp-block-group-is-layout-flex) { gap: 12px; }'
801
801
  );
802
802
  } );
803
803
 
@@ -1008,9 +1008,23 @@ describe( 'global styles renderer', () => {
1008
1008
  ref: 'styles.elements.h1.typography.letterSpacing',
1009
1009
  },
1010
1010
  },
1011
+ background: {
1012
+ backgroundImage: {
1013
+ ref: 'styles.background.backgroundImage',
1014
+ },
1015
+ backgroundSize: {
1016
+ ref: 'styles.background.backgroundSize',
1017
+ },
1018
+ },
1011
1019
  };
1012
1020
  const tree = {
1013
1021
  styles: {
1022
+ background: {
1023
+ backgroundImage: {
1024
+ url: 'http://my-image.org/image.gif',
1025
+ },
1026
+ backgroundSize: 'cover',
1027
+ },
1014
1028
  elements: {
1015
1029
  h1: {
1016
1030
  typography: {
@@ -1026,16 +1040,63 @@ describe( 'global styles renderer', () => {
1026
1040
  ).toEqual( [
1027
1041
  'font-size: var(--wp--preset--font-size--xx-large)',
1028
1042
  'letter-spacing: 2px',
1043
+ "background-image: url( 'http://my-image.org/image.gif' )",
1044
+ 'background-size: cover',
1045
+ ] );
1046
+ } );
1047
+ it( 'should set default values for block background styles', () => {
1048
+ const backgroundStyles = {
1049
+ background: {
1050
+ backgroundImage: {
1051
+ url: 'https://wordpress.org/assets/image.jpg',
1052
+ id: 123,
1053
+ },
1054
+ },
1055
+ };
1056
+ expect(
1057
+ getStylesDeclarations( backgroundStyles, '.wp-block-group' )
1058
+ ).toEqual( [
1059
+ "background-image: url( 'https://wordpress.org/assets/image.jpg' )",
1060
+ 'background-size: cover',
1061
+ ] );
1062
+ // Test with root-level styles.
1063
+ expect(
1064
+ getStylesDeclarations( backgroundStyles, ROOT_BLOCK_SELECTOR )
1065
+ ).toEqual( [
1066
+ "background-image: url( 'https://wordpress.org/assets/image.jpg' )",
1067
+ ] );
1068
+ expect(
1069
+ getStylesDeclarations(
1070
+ {
1071
+ background: {
1072
+ ...backgroundStyles.background,
1073
+ backgroundSize: 'contain',
1074
+ },
1075
+ },
1076
+ '.wp-block-group'
1077
+ )
1078
+ ).toEqual( [
1079
+ "background-image: url( 'https://wordpress.org/assets/image.jpg' )",
1080
+ 'background-position: 50% 50%',
1081
+ 'background-size: contain',
1029
1082
  ] );
1030
1083
  } );
1031
1084
  } );
1032
1085
 
1033
1086
  describe( 'processCSSNesting', () => {
1087
+ it( 'should return empty string when supplied css is empty', () => {
1088
+ expect( processCSSNesting( '', '.foo' ) ).toEqual( '' );
1089
+ } );
1034
1090
  it( 'should return processed CSS without any nested selectors', () => {
1035
1091
  expect(
1036
1092
  processCSSNesting( 'color: red; margin: auto;', '.foo' )
1037
1093
  ).toEqual( ':root :where(.foo){color: red; margin: auto;}' );
1038
1094
  } );
1095
+ it( 'should return processed CSS when there are no root selectors', () => {
1096
+ expect(
1097
+ processCSSNesting( '&::before{color: red;}', '.foo' )
1098
+ ).toEqual( ':root :where(.foo)::before{color: red;}' );
1099
+ } );
1039
1100
  it( 'should return processed CSS with nested selectors', () => {
1040
1101
  expect(
1041
1102
  processCSSNesting(
@@ -1049,21 +1110,21 @@ describe( 'global styles renderer', () => {
1049
1110
  it( 'should return processed CSS with pseudo elements', () => {
1050
1111
  expect(
1051
1112
  processCSSNesting(
1052
- 'color: red; margin: auto; &::before{color: blue;} & ::before{color: green;} &.one::before{color: yellow;} & .two::before{color: purple;}',
1113
+ 'color: red; margin: auto; &::before{color: blue;} & ::before{color: green;} &.one::before{color: yellow;} & .two::before{color: purple;} & > ::before{color: darkseagreen;}',
1053
1114
  '.foo'
1054
1115
  )
1055
1116
  ).toEqual(
1056
- ':root :where(.foo){color: red; margin: auto;}:root :where(.foo::before){color: blue;}:root :where(.foo ::before){color: green;}:root :where(.foo.one::before){color: yellow;}:root :where(.foo .two::before){color: purple;}'
1117
+ ':root :where(.foo){color: red; margin: auto;}:root :where(.foo)::before{color: blue;}:root :where(.foo) ::before{color: green;}:root :where(.foo.one)::before{color: yellow;}:root :where(.foo .two)::before{color: purple;}:root :where(.foo) > ::before{color: darkseagreen;}'
1057
1118
  );
1058
1119
  } );
1059
1120
  it( 'should return processed CSS with multiple root selectors', () => {
1060
1121
  expect(
1061
1122
  processCSSNesting(
1062
- 'color: red; margin: auto; &.one{color: blue;} & .two{color: green;} &::before{color: yellow;} & ::before{color: purple;} &.three::before{color: orange;} & .four::before{color: skyblue;}',
1123
+ 'color: red; margin: auto; &.one{color: blue;} & .two{color: green;} &::before{color: yellow;} & ::before{color: purple;} &.three::before{color: orange;} & .four::before{color: skyblue;} & > ::before{color: darkseagreen;}',
1063
1124
  '.foo, .bar'
1064
1125
  )
1065
1126
  ).toEqual(
1066
- ':root :where(.foo, .bar){color: red; margin: auto;}:root :where(.foo.one, .bar.one){color: blue;}:root :where(.foo .two, .bar .two){color: green;}:root :where(.foo::before, .bar::before){color: yellow;}:root :where(.foo ::before, .bar ::before){color: purple;}:root :where(.foo.three::before, .bar.three::before){color: orange;}:root :where(.foo .four::before, .bar .four::before){color: skyblue;}'
1127
+ ':root :where(.foo, .bar){color: red; margin: auto;}:root :where(.foo.one, .bar.one){color: blue;}:root :where(.foo .two, .bar .two){color: green;}:root :where(.foo, .bar)::before{color: yellow;}:root :where(.foo, .bar) ::before{color: purple;}:root :where(.foo.three, .bar.three)::before{color: orange;}:root :where(.foo .four, .bar .four)::before{color: skyblue;}:root :where(.foo, .bar) > ::before{color: darkseagreen;}'
1067
1128
  );
1068
1129
  } );
1069
1130
  } );
@@ -7,6 +7,9 @@ import {
7
7
  getPresetVariableFromValue,
8
8
  getValueFromVariable,
9
9
  scopeFeatureSelectors,
10
+ getResolvedThemeFilePath,
11
+ getResolvedRefValue,
12
+ getResolvedValue,
10
13
  } from '../utils';
11
14
 
12
15
  describe( 'editor utils', () => {
@@ -52,6 +55,41 @@ describe( 'editor utils', () => {
52
55
  },
53
56
  },
54
57
  },
58
+ styles: {
59
+ background: {
60
+ backgroundImage: {
61
+ url: 'file:./assets/image.jpg',
62
+ },
63
+ backgroundAttachment: 'fixed',
64
+ backgroundPosition: 'top left',
65
+ },
66
+ blocks: {
67
+ 'core/group': {
68
+ background: {
69
+ backgroundImage: {
70
+ ref: 'styles.background.backgroundImage',
71
+ },
72
+ },
73
+ dimensions: {
74
+ minHeight: '100px',
75
+ },
76
+ },
77
+ },
78
+ },
79
+ _links: {
80
+ 'wp:theme-file': [
81
+ {
82
+ name: 'file:./assets/image.jpg',
83
+ href: 'https://wordpress.org/assets/image.jpg',
84
+ target: 'styles.background.backgroundImage.url',
85
+ },
86
+ {
87
+ name: 'file:./assets/other/image.jpg',
88
+ href: 'https://wordpress.org/assets/other/image.jpg',
89
+ target: "styles.blocks.['core/group'].background.backgroundImage.url",
90
+ },
91
+ ],
92
+ },
55
93
  isGlobalStylesUserThemeJSON: true,
56
94
  };
57
95
 
@@ -366,4 +404,86 @@ describe( 'editor utils', () => {
366
404
  } );
367
405
  } );
368
406
  } );
407
+
408
+ describe( 'getResolvedThemeFilePath()', () => {
409
+ it.each( [
410
+ [
411
+ 'file:./assets/image.jpg',
412
+ 'https://wordpress.org/assets/image.jpg',
413
+ 'Should return absolute URL if found in themeFileURIs',
414
+ ],
415
+ [
416
+ 'file:./misc/image.jpg',
417
+ 'file:./misc/image.jpg',
418
+ 'Should return value if not found in themeFileURIs',
419
+ ],
420
+ [
421
+ 'https://wordpress.org/assets/image.jpg',
422
+ 'https://wordpress.org/assets/image.jpg',
423
+ 'Should not match absolute URLs',
424
+ ],
425
+ ] )(
426
+ 'Given file %s and return value %s: %s',
427
+ ( file, returnedValue ) => {
428
+ expect(
429
+ getResolvedThemeFilePath(
430
+ file,
431
+ themeJson._links[ 'wp:theme-file' ]
432
+ ) === returnedValue
433
+ ).toBe( true );
434
+ }
435
+ );
436
+ } );
437
+
438
+ describe( 'getResolvedRefValue()', () => {
439
+ it.each( [
440
+ [ 'blue', 'blue', null ],
441
+ [ 0, 0, themeJson ],
442
+ [
443
+ { ref: 'styles.background.backgroundImage' },
444
+ { url: 'file:./assets/image.jpg' },
445
+ themeJson,
446
+ ],
447
+ [
448
+ {
449
+ ref: 'styles.blocks.core/group.background.backgroundImage',
450
+ },
451
+ undefined,
452
+ themeJson,
453
+ ],
454
+ ] )(
455
+ 'Given ruleValue %s return expected value of %s',
456
+ ( ruleValue, returnedValue, tree ) => {
457
+ expect( getResolvedRefValue( ruleValue, tree ) ).toEqual(
458
+ returnedValue
459
+ );
460
+ }
461
+ );
462
+ } );
463
+
464
+ describe( 'getResolvedValue()', () => {
465
+ it.each( [
466
+ [ 'blue', 'blue', null ],
467
+ [ 0, 0, themeJson ],
468
+ [
469
+ { ref: 'styles.background.backgroundImage' },
470
+ { url: 'https://wordpress.org/assets/image.jpg' },
471
+ themeJson,
472
+ ],
473
+ [
474
+ {
475
+ ref: 'styles.blocks.core/group.background.backgroundImage',
476
+ },
477
+ undefined,
478
+ themeJson,
479
+ ],
480
+ ] )(
481
+ 'Given ruleValue %s return expected value of %s',
482
+ ( ruleValue, returnedValue, tree ) => {
483
+ expect( getResolvedValue( ruleValue, tree ) ).toEqual(
484
+ returnedValue
485
+ );
486
+ }
487
+ );
488
+ } );
369
489
  } );
@@ -474,7 +474,6 @@ export default function TypographyPanel( {
474
474
  panelId={ panelId }
475
475
  >
476
476
  <LineHeightControl
477
- __nextHasNoMarginBottom
478
477
  __unstableInputWidth="auto"
479
478
  value={ lineHeight }
480
479
  onChange={ setLineHeight }
@@ -10,7 +10,7 @@ import {
10
10
  } from '@wordpress/blocks';
11
11
  import { useSelect } from '@wordpress/data';
12
12
  import { useContext, useMemo } from '@wordpress/element';
13
- import { getCSSRules } from '@wordpress/style-engine';
13
+ import { getCSSRules, getCSSValueFromRawStyle } from '@wordpress/style-engine';
14
14
  import { privateApis as componentsPrivateApis } from '@wordpress/components';
15
15
 
16
16
  /**
@@ -24,6 +24,7 @@ import {
24
24
  scopeFeatureSelectors,
25
25
  appendToSelector,
26
26
  getBlockStyleVariationSelector,
27
+ getResolvedValue,
27
28
  } from './utils';
28
29
  import { getBlockCSSSelector } from './get-block-css-selector';
29
30
  import { getTypographyFontSizeValue } from './typography-utils';
@@ -36,7 +37,6 @@ import { store as blockEditorStore } from '../../store';
36
37
  import { LAYOUT_DEFINITIONS } from '../../layouts/definitions';
37
38
  import { getValueFromObjectPath, setImmutably } from '../../utils/object';
38
39
  import { unlock } from '../../lock-unlock';
39
- import { setThemeFileUris } from './theme-file-uri-utils';
40
40
 
41
41
  // Elements that rely on class names in their selectors.
42
42
  const ELEMENT_CLASS_NAMES = {
@@ -54,21 +54,6 @@ const BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {
54
54
  };
55
55
  const { kebabCase } = unlock( componentsPrivateApis );
56
56
 
57
- function compileStyleValue( uncompiledValue ) {
58
- const VARIABLE_REFERENCE_PREFIX = 'var:';
59
- const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
60
- const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
61
-
62
- if ( uncompiledValue?.startsWith?.( VARIABLE_REFERENCE_PREFIX ) ) {
63
- const variable = uncompiledValue
64
- .slice( VARIABLE_REFERENCE_PREFIX.length )
65
- .split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )
66
- .join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );
67
- return `var(--wp--${ variable })`;
68
- }
69
- return uncompiledValue;
70
- }
71
-
72
57
  /**
73
58
  * Transform given preset tree into a set of style declarations.
74
59
  *
@@ -371,7 +356,7 @@ export function getStylesDeclarations(
371
356
  ? name
372
357
  : kebabCase( name );
373
358
  declarations.push(
374
- `${ cssProperty }: ${ compileStyleValue(
359
+ `${ cssProperty }: ${ getCSSValueFromRawStyle(
375
360
  getValueFromObjectPath( styleValue, [ prop ] )
376
361
  ) }`
377
362
  );
@@ -383,7 +368,7 @@ export function getStylesDeclarations(
383
368
  ? key
384
369
  : kebabCase( key );
385
370
  declarations.push(
386
- `${ cssProperty }: ${ compileStyleValue(
371
+ `${ cssProperty }: ${ getCSSValueFromRawStyle(
387
372
  getValueFromObjectPath( blockStyles, pathToValue )
388
373
  ) }`
389
374
  );
@@ -395,21 +380,40 @@ export function getStylesDeclarations(
395
380
  );
396
381
 
397
382
  /*
398
- * Set background defaults.
399
- * Applies to all background styles except the top-level site background.
383
+ * Preprocess background image values.
384
+ *
385
+ * Note: As we absorb more and more styles into the engine, we could simplify this function.
386
+ * A refactor is for the style engine to handle ref resolution (and possibly defaults)
387
+ * via a public util used internally and externally. Theme.json tree and defaults could be passed
388
+ * as options.
400
389
  */
401
- if ( ! isRoot && !! blockStyles.background ) {
402
- blockStyles = {
403
- ...blockStyles,
404
- background: {
405
- ...blockStyles.background,
406
- ...setBackgroundStyleDefaults( blockStyles.background ),
407
- },
408
- };
390
+ if ( !! blockStyles.background ) {
391
+ /*
392
+ * Resolve dynamic values before they are compiled by the style engine,
393
+ * which doesn't (yet) resolve dynamic values.
394
+ */
395
+ if ( blockStyles.background?.backgroundImage ) {
396
+ blockStyles.background.backgroundImage = getResolvedValue(
397
+ blockStyles.background.backgroundImage,
398
+ tree
399
+ );
400
+ }
401
+
402
+ /*
403
+ * Set default values for block background styles.
404
+ * Top-level styles are an exception as they are applied to the body.
405
+ */
406
+ if ( ! isRoot && !! blockStyles.background?.backgroundImage?.id ) {
407
+ blockStyles = {
408
+ ...blockStyles,
409
+ background: {
410
+ ...blockStyles.background,
411
+ ...setBackgroundStyleDefaults( blockStyles.background ),
412
+ },
413
+ };
414
+ }
409
415
  }
410
416
 
411
- // The goal is to move everything to server side generated engine styles
412
- // This is temporary as we absorb more and more styles into the engine.
413
417
  const extraRules = getCSSRules( blockStyles );
414
418
  extraRules.forEach( ( rule ) => {
415
419
  // Don't output padding properties if padding variables are set or if we're not editing a full template.
@@ -424,18 +428,7 @@ export function getStylesDeclarations(
424
428
  ? rule.key
425
429
  : kebabCase( rule.key );
426
430
 
427
- let ruleValue = rule.value;
428
- if ( typeof ruleValue !== 'string' && ruleValue?.ref ) {
429
- const refPath = ruleValue.ref.split( '.' );
430
- ruleValue = compileStyleValue(
431
- getValueFromObjectPath( tree, refPath )
432
- );
433
- // Presence of another ref indicates a reference to another dynamic value.
434
- // Pointing to another dynamic value is not supported.
435
- if ( ! ruleValue || ruleValue?.ref ) {
436
- return;
437
- }
438
- }
431
+ let ruleValue = getResolvedValue( rule.value, tree, null );
439
432
 
440
433
  // Calculate fluid typography rules where available.
441
434
  if ( cssProperty === 'font-size' ) {
@@ -544,10 +537,10 @@ export function getLayoutStyles( {
544
537
  } else {
545
538
  combinedSelector =
546
539
  selector === ROOT_BLOCK_SELECTOR
547
- ? `.${ className }${
540
+ ? `:root :where(.${ className })${
548
541
  spacingStyle?.selector || ''
549
542
  }`
550
- : `${ selector }-${ className }${
543
+ : `:root :where(${ selector }-${ className })${
551
544
  spacingStyle?.selector || ''
552
545
  }`;
553
546
  }
@@ -1327,9 +1320,17 @@ function updateConfigWithSeparator( config ) {
1327
1320
  export function processCSSNesting( css, blockSelector ) {
1328
1321
  let processedCSS = '';
1329
1322
 
1323
+ if ( ! css || css.trim() === '' ) {
1324
+ return processedCSS;
1325
+ }
1326
+
1330
1327
  // Split CSS nested rules.
1331
1328
  const parts = css.split( '&' );
1332
1329
  parts.forEach( ( part ) => {
1330
+ if ( ! part || part.trim() === '' ) {
1331
+ return;
1332
+ }
1333
+
1333
1334
  const isRootCss = ! part.includes( '{' );
1334
1335
  if ( isRootCss ) {
1335
1336
  // If the part doesn't contain braces, it applies to the root level.
@@ -1342,11 +1343,32 @@ export function processCSSNesting( css, blockSelector ) {
1342
1343
  }
1343
1344
 
1344
1345
  const [ nestedSelector, cssValue ] = splittedPart;
1345
- const combinedSelector = nestedSelector.startsWith( ' ' )
1346
- ? scopeSelector( blockSelector, nestedSelector )
1347
- : appendToSelector( blockSelector, nestedSelector );
1348
1346
 
1349
- processedCSS += `:root :where(${ combinedSelector }){${ cssValue.trim() }}`;
1347
+ // Handle pseudo elements such as ::before, ::after, etc. Regex will also
1348
+ // capture any leading combinator such as >, +, or ~, as well as spaces.
1349
+ // This allows pseudo elements as descendants e.g. `.parent ::before`.
1350
+ const matches = nestedSelector.match( /([>+~\s]*::[a-zA-Z-]+)/ );
1351
+ const pseudoPart = matches ? matches[ 1 ] : '';
1352
+ const withoutPseudoElement = matches
1353
+ ? nestedSelector.replace( pseudoPart, '' ).trim()
1354
+ : nestedSelector.trim();
1355
+
1356
+ let combinedSelector;
1357
+ if ( withoutPseudoElement === '' ) {
1358
+ // Only contained a pseudo element to use the block selector to form
1359
+ // the final `:root :where()` selector.
1360
+ combinedSelector = blockSelector;
1361
+ } else {
1362
+ // If the nested selector is a descendant of the block scope it with the
1363
+ // block selector. Otherwise append it to the block selector.
1364
+ combinedSelector = nestedSelector.startsWith( ' ' )
1365
+ ? scopeSelector( blockSelector, withoutPseudoElement )
1366
+ : appendToSelector( blockSelector, withoutPseudoElement );
1367
+ }
1368
+
1369
+ // Build final rule, re-adding any pseudo element outside the `:where()`
1370
+ // to maintain valid CSS selector.
1371
+ processedCSS += `:root :where(${ combinedSelector })${ pseudoPart }{${ cssValue.trim() }}`;
1350
1372
  }
1351
1373
  } );
1352
1374
  return processedCSS;
@@ -1369,10 +1391,6 @@ export function useGlobalStylesOutputWithConfig(
1369
1391
  disableRootPadding
1370
1392
  ) {
1371
1393
  const [ blockGap ] = useGlobalSetting( 'spacing.blockGap' );
1372
- mergedConfig = setThemeFileUris(
1373
- mergedConfig,
1374
- mergedConfig?._links?.[ 'wp:theme-file' ]
1375
- );
1376
1394
  const hasBlockGapSupport = blockGap !== null;
1377
1395
  const hasFallbackGapSupport = ! hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.
1378
1396
  const disableLayoutStyles = useSelect( ( select ) => {