@wordpress/block-editor 11.8.0 → 12.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 (454) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +16 -4
  3. package/build/components/block-controls/slot.js +12 -4
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-controls/slot.native.js +10 -1
  6. package/build/components/block-controls/slot.native.js.map +1 -1
  7. package/build/components/block-draggable/index.js +11 -7
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  10. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  11. package/build/components/block-info-slot-fill/index.js +47 -0
  12. package/build/components/block-info-slot-fill/index.js.map +1 -0
  13. package/build/components/block-inspector/index.js +4 -2
  14. package/build/components/block-inspector/index.js.map +1 -1
  15. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  16. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  17. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  18. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  19. package/build/components/block-list/block-list-item.native.js +158 -195
  20. package/build/components/block-list/block-list-item.native.js.map +1 -1
  21. package/build/components/block-list/block-outline.native.js +57 -0
  22. package/build/components/block-list/block-outline.native.js.map +1 -0
  23. package/build/components/block-list/block.native.js +343 -300
  24. package/build/components/block-list/block.native.js.map +1 -1
  25. package/build/components/block-list/index.native.js +202 -298
  26. package/build/components/block-list/index.native.js.map +1 -1
  27. package/build/components/block-list/insertion-point.native.js +4 -2
  28. package/build/components/block-list/insertion-point.native.js.map +1 -1
  29. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  30. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +15 -4
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-toolbar/index.js +2 -1
  36. package/build/components/block-toolbar/index.js.map +1 -1
  37. package/build/components/block-tools/block-contextual-toolbar.js +40 -11
  38. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  39. package/build/components/block-tools/selected-block-popover.js +8 -30
  40. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  41. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  42. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  43. package/build/components/editor-styles/index.js +4 -3
  44. package/build/components/editor-styles/index.js.map +1 -1
  45. package/build/components/font-sizes/fluid-utils.js +21 -14
  46. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  47. package/build/components/global-styles/advanced-panel.js +86 -0
  48. package/build/components/global-styles/advanced-panel.js.map +1 -0
  49. package/build/components/global-styles/border-panel.js +2 -32
  50. package/build/components/global-styles/border-panel.js.map +1 -1
  51. package/build/components/global-styles/color-panel.js +16 -13
  52. package/build/components/global-styles/color-panel.js.map +1 -1
  53. package/build/components/global-styles/color-panel.native.js +174 -0
  54. package/build/components/global-styles/color-panel.native.js.map +1 -0
  55. package/build/components/global-styles/dimensions-panel.js +12 -12
  56. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  57. package/build/components/global-styles/effects-panel.js +1 -1
  58. package/build/components/global-styles/effects-panel.js.map +1 -1
  59. package/build/components/global-styles/filters-panel.js +78 -14
  60. package/build/components/global-styles/filters-panel.js.map +1 -1
  61. package/build/components/global-styles/hooks.js +1 -2
  62. package/build/components/global-styles/hooks.js.map +1 -1
  63. package/build/components/global-styles/index.js +24 -0
  64. package/build/components/global-styles/index.js.map +1 -1
  65. package/build/components/global-styles/typography-panel.js +10 -10
  66. package/build/components/global-styles/typography-panel.js.map +1 -1
  67. package/build/components/global-styles/use-global-styles-output.js +114 -81
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  69. package/build/components/global-styles/utils.js +30 -0
  70. package/build/components/global-styles/utils.js.map +1 -1
  71. package/build/components/image-editor/use-save-image.js +24 -8
  72. package/build/components/image-editor/use-save-image.js.map +1 -1
  73. package/build/components/index.js +7 -0
  74. package/build/components/index.js.map +1 -1
  75. package/build/components/inserter/block-types-tab.js +12 -7
  76. package/build/components/inserter/block-types-tab.js.map +1 -1
  77. package/build/components/inserter/index.js +2 -1
  78. package/build/components/inserter/index.js.map +1 -1
  79. package/build/components/inserter-draggable-blocks/index.js +5 -0
  80. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  81. package/build/components/inspector-controls/fill.js +1 -1
  82. package/build/components/inspector-controls/fill.js.map +1 -1
  83. package/build/components/inspector-controls/fill.native.js +1 -1
  84. package/build/components/inspector-controls/fill.native.js.map +1 -1
  85. package/build/components/inspector-controls/groups.js +2 -0
  86. package/build/components/inspector-controls/groups.js.map +1 -1
  87. package/build/components/inspector-controls/slot.js +3 -6
  88. package/build/components/inspector-controls/slot.js.map +1 -1
  89. package/build/components/inspector-controls/slot.native.js +1 -1
  90. package/build/components/inspector-controls/slot.native.js.map +1 -1
  91. package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
  92. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  93. package/build/components/line-height-control/index.js +7 -2
  94. package/build/components/line-height-control/index.js.map +1 -1
  95. package/build/components/link-control/use-internal-input-value.js +9 -8
  96. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  97. package/build/components/list-view/block-contents.js +7 -2
  98. package/build/components/list-view/block-contents.js.map +1 -1
  99. package/build/components/list-view/block-select-button.js +9 -3
  100. package/build/components/list-view/block-select-button.js.map +1 -1
  101. package/build/components/list-view/block.js +16 -25
  102. package/build/components/list-view/block.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +37 -10
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/index.js +38 -18
  106. package/build/components/list-view/index.js.map +1 -1
  107. package/build/components/list-view/leaf.js +2 -1
  108. package/build/components/list-view/leaf.js.map +1 -1
  109. package/build/components/list-view/use-block-selection.js +1 -1
  110. package/build/components/list-view/use-block-selection.js.map +1 -1
  111. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  112. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  113. package/build/components/media-placeholder/index.js +68 -7
  114. package/build/components/media-placeholder/index.js.map +1 -1
  115. package/build/components/media-replace-flow/index.js +5 -5
  116. package/build/components/media-replace-flow/index.js.map +1 -1
  117. package/build/components/multi-selection-inspector/index.js +2 -2
  118. package/build/components/multi-selection-inspector/index.js.map +1 -1
  119. package/build/components/navigable-toolbar/index.js +12 -4
  120. package/build/components/navigable-toolbar/index.js.map +1 -1
  121. package/build/components/off-canvas-editor/appender.js +2 -7
  122. package/build/components/off-canvas-editor/appender.js.map +1 -1
  123. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  124. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  125. package/build/components/preview-options/index.js +6 -1
  126. package/build/components/preview-options/index.js.map +1 -1
  127. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  128. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  129. package/build/components/url-input/index.js +1 -2
  130. package/build/components/url-input/index.js.map +1 -1
  131. package/build/hooks/align.js +1 -1
  132. package/build/hooks/align.js.map +1 -1
  133. package/build/hooks/border.js +1 -1
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +1 -1
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/content-lock-ui.js +8 -12
  138. package/build/hooks/content-lock-ui.js.map +1 -1
  139. package/build/hooks/duotone.js +29 -4
  140. package/build/hooks/duotone.js.map +1 -1
  141. package/build/hooks/index.native.js +8 -0
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout.js +2 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/position.js +1 -1
  146. package/build/hooks/position.js.map +1 -1
  147. package/build/hooks/style.js +1 -1
  148. package/build/hooks/style.js.map +1 -1
  149. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  150. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  151. package/build/hooks/use-typography-props.js +14 -10
  152. package/build/hooks/use-typography-props.js.map +1 -1
  153. package/build/hooks/utils.js +15 -3
  154. package/build/hooks/utils.js.map +1 -1
  155. package/build/index.native.js +31 -0
  156. package/build/index.native.js.map +1 -0
  157. package/build/private-apis.js +10 -1
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +7 -0
  160. package/build/store/actions.js.map +1 -1
  161. package/build/utils/object.js +5 -5
  162. package/build/utils/object.js.map +1 -1
  163. package/build/utils/transform-styles/index.js +2 -2
  164. package/build/utils/transform-styles/index.js.map +1 -1
  165. package/build/utils/use-should-contextual-toolbar-show.js +72 -0
  166. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
  167. package/build-module/components/block-controls/slot.js +11 -4
  168. package/build-module/components/block-controls/slot.js.map +1 -1
  169. package/build-module/components/block-controls/slot.native.js +9 -1
  170. package/build-module/components/block-controls/slot.native.js.map +1 -1
  171. package/build-module/components/block-draggable/index.js +10 -6
  172. package/build-module/components/block-draggable/index.js.map +1 -1
  173. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  174. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  175. package/build-module/components/block-info-slot-fill/index.js +34 -0
  176. package/build-module/components/block-info-slot-fill/index.js.map +1 -0
  177. package/build-module/components/block-inspector/index.js +3 -2
  178. package/build-module/components/block-inspector/index.js.map +1 -1
  179. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  180. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  181. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  182. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  183. package/build-module/components/block-list/block-list-item.native.js +160 -190
  184. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  185. package/build-module/components/block-list/block-outline.native.js +44 -0
  186. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  187. package/build-module/components/block-list/block.native.js +341 -299
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/index.native.js +203 -293
  190. package/build-module/components/block-list/index.native.js.map +1 -1
  191. package/build-module/components/block-list/insertion-point.native.js +4 -2
  192. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  194. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  196. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  197. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-toolbar/index.js +2 -1
  200. package/build-module/components/block-toolbar/index.js.map +1 -1
  201. package/build-module/components/block-tools/block-contextual-toolbar.js +37 -11
  202. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  203. package/build-module/components/block-tools/selected-block-popover.js +8 -29
  204. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  205. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  206. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  207. package/build-module/components/editor-styles/index.js +4 -3
  208. package/build-module/components/editor-styles/index.js.map +1 -1
  209. package/build-module/components/font-sizes/fluid-utils.js +21 -14
  210. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  211. package/build-module/components/global-styles/advanced-panel.js +74 -0
  212. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  213. package/build-module/components/global-styles/border-panel.js +2 -32
  214. package/build-module/components/global-styles/border-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +18 -15
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/color-panel.native.js +150 -0
  218. package/build-module/components/global-styles/color-panel.native.js.map +1 -0
  219. package/build-module/components/global-styles/dimensions-panel.js +13 -13
  220. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  221. package/build-module/components/global-styles/effects-panel.js +2 -2
  222. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  223. package/build-module/components/global-styles/filters-panel.js +78 -16
  224. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  225. package/build-module/components/global-styles/hooks.js +1 -2
  226. package/build-module/components/global-styles/hooks.js.map +1 -1
  227. package/build-module/components/global-styles/index.js +3 -1
  228. package/build-module/components/global-styles/index.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +11 -11
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/global-styles/use-global-styles-output.js +112 -81
  232. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  233. package/build-module/components/global-styles/utils.js +25 -0
  234. package/build-module/components/global-styles/utils.js.map +1 -1
  235. package/build-module/components/image-editor/use-save-image.js +24 -8
  236. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  237. package/build-module/components/index.js +1 -1
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/inserter/block-types-tab.js +12 -6
  240. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  241. package/build-module/components/inserter/index.js +2 -1
  242. package/build-module/components/inserter/index.js.map +1 -1
  243. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  244. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  245. package/build-module/components/inspector-controls/fill.js +1 -1
  246. package/build-module/components/inspector-controls/fill.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.native.js +1 -1
  248. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  249. package/build-module/components/inspector-controls/groups.js +2 -0
  250. package/build-module/components/inspector-controls/groups.js.map +1 -1
  251. package/build-module/components/inspector-controls/slot.js +4 -7
  252. package/build-module/components/inspector-controls/slot.js.map +1 -1
  253. package/build-module/components/inspector-controls/slot.native.js +1 -1
  254. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  255. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
  256. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  257. package/build-module/components/line-height-control/index.js +7 -2
  258. package/build-module/components/line-height-control/index.js.map +1 -1
  259. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  260. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  261. package/build-module/components/list-view/block-contents.js +7 -3
  262. package/build-module/components/list-view/block-contents.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +9 -3
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/block.js +18 -26
  266. package/build-module/components/list-view/block.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +36 -10
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/list-view/index.js +39 -19
  270. package/build-module/components/list-view/index.js.map +1 -1
  271. package/build-module/components/list-view/leaf.js +2 -1
  272. package/build-module/components/list-view/leaf.js.map +1 -1
  273. package/build-module/components/list-view/use-block-selection.js +1 -1
  274. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  275. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  276. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  277. package/build-module/components/media-placeholder/index.js +66 -7
  278. package/build-module/components/media-placeholder/index.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +5 -5
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/multi-selection-inspector/index.js +2 -2
  282. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  283. package/build-module/components/navigable-toolbar/index.js +12 -4
  284. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  285. package/build-module/components/off-canvas-editor/appender.js +1 -5
  286. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  287. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  288. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  289. package/build-module/components/preview-options/index.js +7 -2
  290. package/build-module/components/preview-options/index.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  292. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  293. package/build-module/components/url-input/index.js +1 -2
  294. package/build-module/components/url-input/index.js.map +1 -1
  295. package/build-module/hooks/align.js +1 -1
  296. package/build-module/hooks/align.js.map +1 -1
  297. package/build-module/hooks/border.js +1 -1
  298. package/build-module/hooks/border.js.map +1 -1
  299. package/build-module/hooks/color.js +1 -1
  300. package/build-module/hooks/color.js.map +1 -1
  301. package/build-module/hooks/content-lock-ui.js +8 -11
  302. package/build-module/hooks/content-lock-ui.js.map +1 -1
  303. package/build-module/hooks/duotone.js +28 -5
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/index.native.js +1 -0
  306. package/build-module/hooks/index.native.js.map +1 -1
  307. package/build-module/hooks/layout.js +2 -2
  308. package/build-module/hooks/layout.js.map +1 -1
  309. package/build-module/hooks/position.js +1 -1
  310. package/build-module/hooks/position.js.map +1 -1
  311. package/build-module/hooks/style.js +1 -1
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  314. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  315. package/build-module/hooks/use-typography-props.js +14 -10
  316. package/build-module/hooks/use-typography-props.js.map +1 -1
  317. package/build-module/hooks/utils.js +16 -4
  318. package/build-module/hooks/utils.js.map +1 -1
  319. package/build-module/index.native.js +6 -0
  320. package/build-module/index.native.js.map +1 -0
  321. package/build-module/private-apis.js +7 -1
  322. package/build-module/private-apis.js.map +1 -1
  323. package/build-module/store/actions.js +7 -0
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/utils/object.js +4 -4
  326. package/build-module/utils/object.js.map +1 -1
  327. package/build-module/utils/transform-styles/index.js +2 -2
  328. package/build-module/utils/transform-styles/index.js.map +1 -1
  329. package/build-module/utils/use-should-contextual-toolbar-show.js +60 -0
  330. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
  331. package/build-style/content-rtl.css +9 -7
  332. package/build-style/content.css +9 -7
  333. package/build-style/style-rtl.css +257 -56
  334. package/build-style/style.css +257 -56
  335. package/package.json +32 -32
  336. package/src/components/block-breadcrumb/style.scss +2 -1
  337. package/src/components/block-controls/slot.js +8 -4
  338. package/src/components/block-controls/slot.native.js +6 -1
  339. package/src/components/block-draggable/index.js +10 -6
  340. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  341. package/src/components/block-info-slot-fill/index.js +24 -0
  342. package/src/components/block-inspector/index.js +3 -0
  343. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  344. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  345. package/src/components/block-list/block-list-item.native.js +180 -208
  346. package/src/components/block-list/block-outline.native.js +58 -0
  347. package/src/components/block-list/block.native.js +564 -524
  348. package/src/components/block-list/content.scss +16 -16
  349. package/src/components/block-list/index.native.js +229 -298
  350. package/src/components/block-list/insertion-point.native.js +2 -2
  351. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  352. package/src/components/block-list/test/index.native.js +205 -0
  353. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +9 -9
  355. package/src/components/block-mover/style.scss +10 -4
  356. package/src/components/block-mover/test/index.native.js +4 -4
  357. package/src/components/block-pattern-setup/style.scss +1 -4
  358. package/src/components/block-patterns-list/style.scss +1 -4
  359. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  360. package/src/components/block-settings-menu-controls/index.js +24 -4
  361. package/src/components/block-styles/style.scss +4 -4
  362. package/src/components/block-toolbar/index.js +4 -3
  363. package/src/components/block-toolbar/style.scss +56 -33
  364. package/src/components/block-tools/block-contextual-toolbar.js +64 -15
  365. package/src/components/block-tools/selected-block-popover.js +11 -46
  366. package/src/components/block-tools/style.scss +165 -3
  367. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  368. package/src/components/editor-styles/index.js +9 -5
  369. package/src/components/font-sizes/fluid-utils.js +31 -14
  370. package/src/components/font-sizes/test/fluid-utils.js +5 -16
  371. package/src/components/global-styles/advanced-panel.js +82 -0
  372. package/src/components/global-styles/border-panel.js +1 -30
  373. package/src/components/global-styles/color-panel.js +19 -14
  374. package/src/components/global-styles/color-panel.native.js +207 -0
  375. package/src/components/global-styles/dimensions-panel.js +23 -13
  376. package/src/components/global-styles/effects-panel.js +2 -2
  377. package/src/components/global-styles/filters-panel.js +90 -17
  378. package/src/components/global-styles/hooks.js +1 -5
  379. package/src/components/global-styles/index.js +6 -1
  380. package/src/components/global-styles/style.scss +16 -1
  381. package/src/components/global-styles/test/typography-utils.js +63 -22
  382. package/src/components/global-styles/test/use-global-styles-output.js +126 -4
  383. package/src/components/global-styles/test/utils.js +57 -1
  384. package/src/components/global-styles/typography-panel.js +38 -12
  385. package/src/components/global-styles/use-global-styles-output.js +85 -67
  386. package/src/components/global-styles/utils.js +27 -0
  387. package/src/components/image-editor/use-save-image.js +20 -9
  388. package/src/components/index.js +1 -0
  389. package/src/components/inserter/block-types-tab.js +9 -6
  390. package/src/components/inserter/index.js +1 -1
  391. package/src/components/inserter-draggable-blocks/index.js +4 -0
  392. package/src/components/inspector-controls/fill.js +1 -1
  393. package/src/components/inspector-controls/fill.native.js +1 -1
  394. package/src/components/inspector-controls/groups.js +2 -0
  395. package/src/components/inspector-controls/slot.js +4 -9
  396. package/src/components/inspector-controls/slot.native.js +1 -1
  397. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  398. package/src/components/line-height-control/index.js +7 -2
  399. package/src/components/line-height-control/stories/index.js +1 -1
  400. package/src/components/link-control/test/index.js +42 -0
  401. package/src/components/link-control/use-internal-input-value.js +8 -7
  402. package/src/components/list-view/block-contents.js +26 -20
  403. package/src/components/list-view/block-select-button.js +11 -2
  404. package/src/components/list-view/block.js +28 -33
  405. package/src/components/list-view/drop-indicator.js +67 -22
  406. package/src/components/list-view/index.js +33 -14
  407. package/src/components/list-view/leaf.js +1 -0
  408. package/src/components/list-view/style.scss +18 -3
  409. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  410. package/src/components/list-view/use-block-selection.js +1 -1
  411. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  412. package/src/components/media-placeholder/index.js +74 -1
  413. package/src/components/media-replace-flow/README.md +3 -2
  414. package/src/components/media-replace-flow/index.js +4 -5
  415. package/src/components/multi-selection-inspector/index.js +2 -2
  416. package/src/components/navigable-toolbar/index.js +12 -3
  417. package/src/components/off-canvas-editor/appender.js +1 -4
  418. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  419. package/src/components/preview-options/index.js +9 -2
  420. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  421. package/src/components/url-input/index.js +1 -2
  422. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -3
  423. package/src/hooks/align.js +2 -1
  424. package/src/hooks/border.js +2 -1
  425. package/src/hooks/color.js +2 -1
  426. package/src/hooks/content-lock-ui.js +3 -15
  427. package/src/hooks/duotone.js +47 -25
  428. package/src/hooks/index.native.js +1 -0
  429. package/src/hooks/layout.js +4 -2
  430. package/src/hooks/position.js +2 -1
  431. package/src/hooks/style.js +2 -1
  432. package/src/hooks/test/anchor.js +113 -0
  433. package/src/hooks/test/color.js +0 -9
  434. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  435. package/src/hooks/test/use-typography-props.js +49 -4
  436. package/src/hooks/test/utils.js +20 -101
  437. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  438. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  439. package/src/hooks/use-typography-props.js +10 -11
  440. package/src/hooks/utils.js +20 -3
  441. package/src/index.native.js +6 -0
  442. package/src/private-apis.js +6 -0
  443. package/src/store/actions.js +7 -0
  444. package/src/utils/object.js +4 -4
  445. package/src/utils/test/object.js +21 -21
  446. package/src/utils/transform-styles/index.js +2 -2
  447. package/src/utils/use-should-contextual-toolbar-show.js +85 -0
  448. package/tsconfig.json +2 -0
  449. package/tsconfig.tsbuildinfo +1 -1
  450. package/build/hooks/color-panel.native.js +0 -77
  451. package/build/hooks/color-panel.native.js.map +0 -1
  452. package/build-module/hooks/color-panel.native.js +0 -62
  453. package/build-module/hooks/color-panel.native.js.map +0 -1
  454. package/src/hooks/color-panel.native.js +0 -63
@@ -27,7 +27,7 @@ import { shadow as shadowIcon, Icon, check } from '@wordpress/icons';
27
27
  * Internal dependencies
28
28
  */
29
29
  import { getValueFromVariable } from './utils';
30
- import { immutableSet } from '../../utils/object';
30
+ import { setImmutably } from '../../utils/object';
31
31
 
32
32
  export function useHasEffectsPanel( settings ) {
33
33
  const hasShadowControl = useHasShadowControl( settings );
@@ -81,7 +81,7 @@ export default function EffectsPanel( {
81
81
  const hasShadowEnabled = useHasShadowControl( settings );
82
82
  const shadow = decodeValue( inheritedValue?.shadow );
83
83
  const setShadow = ( newValue ) => {
84
- onChange( immutableSet( value, [ 'shadow' ], newValue ) );
84
+ onChange( setImmutably( value, [ 'shadow' ], newValue ) );
85
85
  };
86
86
  const hasShadow = () => !! value?.shadow;
87
87
  const resetShadow = () => setShadow( undefined );
@@ -1,11 +1,26 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import {
5
10
  __experimentalToolsPanel as ToolsPanel,
6
11
  __experimentalToolsPanelItem as ToolsPanelItem,
12
+ __experimentalItemGroup as ItemGroup,
13
+ __experimentalHStack as HStack,
14
+ __experimentalZStack as ZStack,
7
15
  __experimentalVStack as VStack,
16
+ __experimentalDropdownContentWrapper as DropdownContentWrapper,
17
+ Button,
18
+ ColorIndicator,
8
19
  DuotonePicker,
20
+ DuotoneSwatch,
21
+ Dropdown,
22
+ Flex,
23
+ FlexItem,
9
24
  } from '@wordpress/components';
10
25
  import { __ } from '@wordpress/i18n';
11
26
  import { useCallback, useMemo } from '@wordpress/element';
@@ -14,7 +29,7 @@ import { useCallback, useMemo } from '@wordpress/element';
14
29
  * Internal dependencies
15
30
  */
16
31
  import { getValueFromVariable } from './utils';
17
- import { immutableSet } from '../../utils/object';
32
+ import { setImmutably } from '../../utils/object';
18
33
 
19
34
  const EMPTY_ARRAY = [];
20
35
  function useMultiOriginColorPresets(
@@ -75,6 +90,29 @@ const DEFAULT_CONTROLS = {
75
90
  duotone: true,
76
91
  };
77
92
 
93
+ const popoverProps = {
94
+ placement: 'left-start',
95
+ offset: 36,
96
+ shift: true,
97
+ className: 'block-editor-duotone-control__popover',
98
+ headerTitle: __( 'Duotone' ),
99
+ };
100
+
101
+ const LabeledColorIndicator = ( { indicator, label } ) => (
102
+ <HStack justify="flex-start">
103
+ <ZStack isLayered={ false } offset={ -8 }>
104
+ <Flex expanded={ false }>
105
+ { indicator === 'unset' || ! indicator ? (
106
+ <ColorIndicator className="block-editor-duotone-control__unset-indicator" />
107
+ ) : (
108
+ <DuotoneSwatch values={ indicator } />
109
+ ) }
110
+ </Flex>
111
+ </ZStack>
112
+ <FlexItem title={ label }>{ label }</FlexItem>
113
+ </HStack>
114
+ );
115
+
78
116
  export default function FiltersPanel( {
79
117
  as: Wrapper = FiltersToolsPanel,
80
118
  value,
@@ -105,11 +143,16 @@ export default function FiltersPanel( {
105
143
  const settedValue = duotonePreset
106
144
  ? `var:preset|duotone|${ duotonePreset.slug }`
107
145
  : newValue;
108
- onChange( immutableSet( value, [ 'filter', 'duotone' ], settedValue ) );
146
+ onChange( setImmutably( value, [ 'filter', 'duotone' ], settedValue ) );
109
147
  };
110
148
  const hasDuotone = () => !! value?.filter?.duotone;
111
149
  const resetDuotone = () => setDuotone( undefined );
112
150
 
151
+ const disableCustomColors = ! settings?.color?.custom;
152
+ const disableCustomDuotone =
153
+ ! settings?.color?.customDuotone ||
154
+ ( colorPalette?.length === 0 && disableCustomColors );
155
+
113
156
  const resetAllFilter = useCallback( ( previousValue ) => {
114
157
  return {
115
158
  ...previousValue,
@@ -135,21 +178,51 @@ export default function FiltersPanel( {
135
178
  isShownByDefault={ defaultControls.duotone }
136
179
  panelId={ panelId }
137
180
  >
138
- <VStack>
139
- <p>
140
- { __(
141
- 'Create a two-tone color effect without losing your original image.'
142
- ) }
143
- </p>
144
- <DuotonePicker
145
- colorPalette={ colorPalette }
146
- duotonePalette={ duotonePalette }
147
- disableCustomColors={ true }
148
- disableCustomDuotone={ true }
149
- value={ duotone }
150
- onChange={ setDuotone }
151
- />
152
- </VStack>
181
+ <Dropdown
182
+ popoverProps={ popoverProps }
183
+ className="block-editor-global-styles-filters-panel__dropdown"
184
+ renderToggle={ ( { onToggle, isOpen } ) => {
185
+ const toggleProps = {
186
+ onClick: onToggle,
187
+ className: classnames( { 'is-open': isOpen } ),
188
+ 'aria-expanded': isOpen,
189
+ };
190
+
191
+ return (
192
+ <ItemGroup isBordered isSeparated>
193
+ <Button { ...toggleProps }>
194
+ <LabeledColorIndicator
195
+ indicator={ duotone }
196
+ label={ __( 'Duotone' ) }
197
+ />
198
+ </Button>
199
+ </ItemGroup>
200
+ );
201
+ } }
202
+ renderContent={ () => (
203
+ <DropdownContentWrapper paddingSize="medium">
204
+ <VStack>
205
+ <p>
206
+ { __(
207
+ 'Create a two-tone color effect without losing your original image.'
208
+ ) }
209
+ </p>
210
+ <DuotonePicker
211
+ colorPalette={ colorPalette }
212
+ duotonePalette={ duotonePalette }
213
+ disableCustomColors={
214
+ disableCustomColors
215
+ }
216
+ disableCustomDuotone={
217
+ disableCustomDuotone
218
+ }
219
+ value={ duotone }
220
+ onChange={ setDuotone }
221
+ />
222
+ </VStack>
223
+ </DropdownContentWrapper>
224
+ ) }
225
+ />
153
226
  </ToolsPanelItem>
154
227
  ) }
155
228
  </Wrapper>
@@ -181,11 +181,7 @@ export function useGlobalStyle(
181
181
  let rawResult, result;
182
182
  switch ( source ) {
183
183
  case 'all':
184
- rawResult =
185
- // The styles.css path is allowed to be empty, so don't revert to base if undefined.
186
- finalPath === 'styles.css'
187
- ? get( userConfig, finalPath )
188
- : get( mergedConfig, finalPath );
184
+ rawResult = get( mergedConfig, finalPath );
189
185
  result = shouldDecodeEncode
190
186
  ? getValueFromVariable( mergedConfig, blockName, rawResult )
191
187
  : rawResult;
@@ -5,7 +5,10 @@ export {
5
5
  useSettingsForBlockElement,
6
6
  } from './hooks';
7
7
  export { getBlockCSSSelector } from './get-block-css-selector';
8
- export { useGlobalStylesOutput } from './use-global-styles-output';
8
+ export {
9
+ useGlobalStylesOutput,
10
+ useGlobalStylesOutputWithConfig,
11
+ } from './use-global-styles-output';
9
12
  export { GlobalStylesContext } from './context';
10
13
  export {
11
14
  default as TypographyPanel,
@@ -19,3 +22,5 @@ export { default as BorderPanel, useHasBorderPanel } from './border-panel';
19
22
  export { default as ColorPanel, useHasColorPanel } from './color-panel';
20
23
  export { default as EffectsPanel, useHasEffectsPanel } from './effects-panel';
21
24
  export { default as FiltersPanel, useHasFiltersPanel } from './filters-panel';
25
+ export { default as AdvancedPanel } from './advanced-panel';
26
+ export { areGlobalStyleConfigsEqual } from './utils';
@@ -6,11 +6,12 @@
6
6
  width: 230px;
7
7
  }
8
8
 
9
+ .block-editor-global-styles-filters-panel__dropdown,
9
10
  .block-editor-global-styles-effects-panel__shadow-dropdown {
10
11
  display: block;
11
12
  padding: 0;
12
13
 
13
- > button {
14
+ button {
14
15
  width: 100%;
15
16
  padding: $grid-unit-10;
16
17
 
@@ -40,3 +41,17 @@
40
41
  height: 24px;
41
42
  width: 24px;
42
43
  }
44
+
45
+ .block-editor-global-styles-advanced-panel__custom-css-input textarea {
46
+ font-family: $editor_html_font;
47
+ }
48
+
49
+ .block-editor-global-styles-advanced-panel__custom-css-validation-wrapper {
50
+ position: absolute;
51
+ bottom: $grid-unit-20;
52
+ right: $grid-unit * 3;
53
+ }
54
+
55
+ .block-editor-global-styles-advanced-panel__custom-css-validation-icon {
56
+ fill: $alert-red;
57
+ }
@@ -89,11 +89,11 @@ describe( 'typography utils', () => {
89
89
  fluid: true,
90
90
  },
91
91
  expected:
92
- 'clamp(1.313rem, 1.313rem + ((1vw - 0.48rem) * 0.84), 1.75rem)',
92
+ 'clamp(1.119rem, 1.119rem + ((1vw - 0.2rem) * 0.789), 1.75rem)',
93
93
  },
94
94
 
95
95
  {
96
- message: 'should return clamp value with eem min and max units',
96
+ message: 'should return clamp value with em min and max units',
97
97
  preset: {
98
98
  size: '1.75em',
99
99
  },
@@ -101,19 +101,19 @@ describe( 'typography utils', () => {
101
101
  fluid: true,
102
102
  },
103
103
  expected:
104
- 'clamp(1.313em, 1.313rem + ((1vw - 0.48em) * 0.84), 1.75em)',
104
+ 'clamp(1.119em, 1.119rem + ((1vw - 0.2em) * 0.789), 1.75em)',
105
105
  },
106
106
 
107
107
  {
108
108
  message: 'should return clamp value for floats',
109
109
  preset: {
110
- size: '100.175px',
110
+ size: '70.175px',
111
111
  },
112
112
  typographySettings: {
113
113
  fluid: true,
114
114
  },
115
115
  expected:
116
- 'clamp(75.131px, 4.696rem + ((1vw - 7.68px) * 3.01), 100.175px)',
116
+ 'clamp(37.897px, 2.369rem + ((1vw - 3.2px) * 2.522), 70.175px)',
117
117
  },
118
118
 
119
119
  {
@@ -127,20 +127,20 @@ describe( 'typography utils', () => {
127
127
  fluid: true,
128
128
  },
129
129
  expected:
130
- 'clamp(24.75px, 1.547rem + ((1vw - 7.68px) * 0.992), 33px)',
130
+ 'clamp(20.515px, 1.282rem + ((1vw - 3.2px) * 0.975), 33px)',
131
131
  },
132
132
 
133
133
  {
134
134
  message: 'should coerce float to `px` and returns clamp value',
135
135
  preset: {
136
- size: 100.23,
136
+ size: 70.175,
137
137
  fluid: true,
138
138
  },
139
139
  typographySettings: {
140
140
  fluid: true,
141
141
  },
142
142
  expected:
143
- 'clamp(75.173px, 4.698rem + ((1vw - 7.68px) * 3.012), 100.23px)',
143
+ 'clamp(37.897px, 2.369rem + ((1vw - 3.2px) * 2.522), 70.175px)',
144
144
  },
145
145
 
146
146
  {
@@ -154,7 +154,7 @@ describe( 'typography utils', () => {
154
154
  fluid: true,
155
155
  },
156
156
  expected:
157
- 'clamp(21px, 1.313rem + ((1vw - 7.68px) * 0.841), 28px)',
157
+ 'clamp(17.905px, 1.119rem + ((1vw - 3.2px) * 0.789), 28px)',
158
158
  },
159
159
 
160
160
  {
@@ -167,7 +167,7 @@ describe( 'typography utils', () => {
167
167
  fluid: true,
168
168
  },
169
169
  expected:
170
- 'clamp(21px, 1.313rem + ((1vw - 7.68px) * 0.841), 28px)',
170
+ 'clamp(17.905px, 1.119rem + ((1vw - 3.2px) * 0.789), 28px)',
171
171
  },
172
172
 
173
173
  {
@@ -183,8 +183,7 @@ describe( 'typography utils', () => {
183
183
  typographySettings: {
184
184
  fluid: true,
185
185
  },
186
- expected:
187
- 'clamp(5rem, 5rem + ((1vw - 0.48rem) * -5.769), 32px)',
186
+ expected: 'clamp(5rem, 5rem + ((1vw - 0.2rem) * -3.75), 32px)',
188
187
  },
189
188
 
190
189
  {
@@ -240,14 +239,14 @@ describe( 'typography utils', () => {
240
239
  fluid: true,
241
240
  },
242
241
  expected:
243
- 'clamp(20px, 1.25rem + ((1vw - 7.68px) * 93.75), 50rem)',
242
+ 'clamp(20px, 1.25rem + ((1vw - 3.2px) * 60.938), 50rem)',
244
243
  },
245
244
 
246
245
  {
247
246
  message:
248
247
  'should return clamp value where no fluid max size is set',
249
248
  preset: {
250
- size: '28px',
249
+ size: '50px',
251
250
  fluid: {
252
251
  min: '2.6rem',
253
252
  },
@@ -256,7 +255,7 @@ describe( 'typography utils', () => {
256
255
  fluid: true,
257
256
  },
258
257
  expected:
259
- 'clamp(2.6rem, 2.6rem + ((1vw - 0.48rem) * -1.635), 28px)',
258
+ 'clamp(2.6rem, 2.6rem + ((1vw - 0.2rem) * 0.656), 50px)',
260
259
  },
261
260
 
262
261
  {
@@ -272,7 +271,7 @@ describe( 'typography utils', () => {
272
271
  fluid: true,
273
272
  },
274
273
  expected:
275
- 'clamp(21px, 1.313rem + ((1vw - 7.68px) * 7.091), 80px)',
274
+ 'clamp(17.905px, 1.119rem + ((1vw - 3.2px) * 4.851), 80px)',
276
275
  },
277
276
 
278
277
  {
@@ -289,7 +288,7 @@ describe( 'typography utils', () => {
289
288
  fluid: true,
290
289
  },
291
290
  expected:
292
- 'clamp(0.5rem, 0.5rem + ((1vw - 0.48rem) * 8.654), 5rem)',
291
+ 'clamp(0.5rem, 0.5rem + ((1vw - 0.2rem) * 5.625), 5rem)',
293
292
  },
294
293
 
295
294
  {
@@ -305,7 +304,7 @@ describe( 'typography utils', () => {
305
304
  fluid: true,
306
305
  },
307
306
  expected:
308
- 'clamp(12px, 0.75rem + ((1vw - 7.68px) * 0.962), 20px)',
307
+ 'clamp(12px, 0.75rem + ((1vw - 3.2px) * 0.625), 20px)',
309
308
  },
310
309
 
311
310
  {
@@ -321,7 +320,7 @@ describe( 'typography utils', () => {
321
320
  fluid: true,
322
321
  },
323
322
  expected:
324
- 'clamp(0.875rem, 0.875rem + ((1vw - 0.48rem) * 36.779), 20rem)',
323
+ 'clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 23.906), 20rem)',
325
324
  },
326
325
 
327
326
  {
@@ -337,7 +336,7 @@ describe( 'typography utils', () => {
337
336
  typographySettings: {
338
337
  fluid: true,
339
338
  },
340
- expected: 'clamp(30px, 1.875rem + ((1vw - 7.68px) * 1), 30px)',
339
+ expected: 'clamp(30px, 1.875rem + ((1vw - 3.2px) * 1), 30px)',
341
340
  },
342
341
 
343
342
  {
@@ -352,7 +351,7 @@ describe( 'typography utils', () => {
352
351
  },
353
352
  },
354
353
  expected:
355
- 'clamp(14px, 0.875rem + ((1vw - 7.68px) * 0.12), 15px)',
354
+ 'clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.078), 15px)',
356
355
  },
357
356
 
358
357
  // Equivalent custom config PHP unit tests in `test_should_covert_font_sizes_to_fluid_values()`.
@@ -366,7 +365,7 @@ describe( 'typography utils', () => {
366
365
  minFontSize: '16px',
367
366
  },
368
367
  },
369
- expected: 'clamp(16px, 1rem + ((1vw - 7.68px) * 0.12), 17px)',
368
+ expected: 'clamp(16px, 1rem + ((1vw - 3.2px) * 0.078), 17px)',
370
369
  },
371
370
 
372
371
  {
@@ -382,6 +381,48 @@ describe( 'typography utils', () => {
382
381
  },
383
382
  expected: '15px',
384
383
  },
384
+
385
+ {
386
+ message:
387
+ 'should apply scaled min font size for em values when custom min font size is not set',
388
+ preset: {
389
+ size: '12rem',
390
+ },
391
+ typographySettings: {
392
+ fluid: true,
393
+ },
394
+ expected:
395
+ 'clamp(5.174rem, 5.174rem + ((1vw - 0.2rem) * 8.533), 12rem)',
396
+ },
397
+
398
+ {
399
+ message:
400
+ 'should apply scaled min font size for px values when custom min font size is not set',
401
+ preset: {
402
+ size: '200px',
403
+ },
404
+ typographySettings: {
405
+ fluid: true,
406
+ },
407
+ expected:
408
+ 'clamp(85.342px, 5.334rem + ((1vw - 3.2px) * 8.958), 200px)',
409
+ },
410
+
411
+ {
412
+ message:
413
+ 'should not apply scaled min font size for minimum font size when custom min font size is set',
414
+ preset: {
415
+ size: '200px',
416
+ fluid: {
417
+ min: '100px',
418
+ },
419
+ },
420
+ typographySettings: {
421
+ fluid: true,
422
+ },
423
+ expected:
424
+ 'clamp(100px, 6.25rem + ((1vw - 3.2px) * 7.813), 200px)',
425
+ },
385
426
  ].forEach( ( { message, preset, typographySettings, expected } ) => {
386
427
  it( `${ message }`, () => {
387
428
  expect(
@@ -480,10 +480,128 @@ describe( 'global styles renderer', () => {
480
480
  expect( toStyles( tree, blockSelectors ) ).toEqual(
481
481
  'body {margin: 0;}' +
482
482
  'body{background-color: red;margin: 10px;padding: 10px;}a{color: blue;}a:hover{color: orange;}a:focus{color: orange;}h1{font-size: 42px;}.wp-block-group{margin-top: 10px;margin-right: 20px;margin-bottom: 30px;margin-left: 40px;padding-top: 11px;padding-right: 22px;padding-bottom: 33px;padding-left: 44px;}h1,h2,h3,h4,h5,h6{color: orange;}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color: hotpink;}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color: red;}h1 a:focus,h2 a:focus,h3 a:focus,h4 a:focus,h5 a:focus,h6 a:focus{color: red;}' +
483
- '.wp-block-image img, .wp-block-image .wp-crop-area{border-radius: 9999px}.wp-block-image{color: red;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }' +
483
+ '.wp-block-image img, .wp-block-image .wp-crop-area{border-radius: 9999px;}.wp-block-image{color: red;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }' +
484
484
  '.has-white-color{color: var(--wp--preset--color--white) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}h1.has-blue-color,h2.has-blue-color,h3.has-blue-color,h4.has-blue-color,h5.has-blue-color,h6.has-blue-color{color: var(--wp--preset--color--blue) !important;}h1.has-blue-background-color,h2.has-blue-background-color,h3.has-blue-background-color,h4.has-blue-background-color,h5.has-blue-background-color,h6.has-blue-background-color{background-color: var(--wp--preset--color--blue) !important;}h1.has-blue-border-color,h2.has-blue-border-color,h3.has-blue-border-color,h4.has-blue-border-color,h5.has-blue-border-color,h6.has-blue-border-color{border-color: var(--wp--preset--color--blue) !important;}'
485
485
  );
486
486
  } );
487
+
488
+ it( 'should handle feature selectors', () => {
489
+ const tree = {
490
+ styles: {
491
+ blocks: {
492
+ 'core/image': {
493
+ color: {
494
+ text: 'red',
495
+ },
496
+ spacing: {
497
+ padding: {
498
+ top: '1px',
499
+ },
500
+ },
501
+ border: {
502
+ color: 'red',
503
+ radius: '9999px',
504
+ },
505
+ },
506
+ },
507
+ },
508
+ };
509
+
510
+ const blockSelectors = {
511
+ 'core/image': {
512
+ selector: '.wp-image',
513
+ featureSelectors: {
514
+ spacing: '.wp-image-spacing',
515
+ border: {
516
+ root: '.wp-image-border',
517
+ color: '.wp-image-border-color',
518
+ },
519
+ },
520
+ },
521
+ };
522
+
523
+ expect( toStyles( Object.freeze( tree ), blockSelectors ) ).toEqual(
524
+ 'body {margin: 0;}' +
525
+ '.wp-image-spacing{padding-top: 1px;}.wp-image-border-color{border-color: red;}.wp-image-border{border-radius: 9999px;}.wp-image{color: red;}' +
526
+ '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'
527
+ );
528
+ } );
529
+
530
+ it( 'should handle block variations', () => {
531
+ const tree = {
532
+ styles: {
533
+ blocks: {
534
+ 'core/image': {
535
+ variations: {
536
+ foo: {
537
+ color: {
538
+ text: 'blue',
539
+ },
540
+ spacing: {
541
+ padding: {
542
+ top: '2px',
543
+ },
544
+ },
545
+ border: {
546
+ color: 'blue',
547
+ },
548
+ },
549
+ },
550
+ },
551
+ },
552
+ },
553
+ };
554
+
555
+ const blockSelectors = {
556
+ 'core/image': {
557
+ selector: '.wp-image',
558
+ featureSelectors: {
559
+ spacing: '.wp-image-spacing',
560
+ border: {
561
+ root: '.wp-image-border',
562
+ color: '.wp-image-border-color',
563
+ },
564
+ },
565
+ styleVariationSelectors: {
566
+ foo: '.is-style-foo.wp-image',
567
+ },
568
+ },
569
+ };
570
+
571
+ expect( toStyles( Object.freeze( tree ), blockSelectors ) ).toEqual(
572
+ 'body {margin: 0;}' +
573
+ '.is-style-foo.wp-image.wp-image-spacing{padding-top: 2px;}.is-style-foo.wp-image.wp-image-border-color{border-color: blue;}.is-style-foo.wp-image{color: blue;}' +
574
+ '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'
575
+ );
576
+ } );
577
+
578
+ it( 'should handle duotone filter', () => {
579
+ const tree = {
580
+ styles: {
581
+ blocks: {
582
+ 'core/image': {
583
+ filter: {
584
+ duotone: 'blur(5px)',
585
+ },
586
+ },
587
+ },
588
+ },
589
+ };
590
+
591
+ const blockSelectors = {
592
+ 'core/image': {
593
+ selector: '.wp-image',
594
+ duotoneSelector: '.wp-image img',
595
+ },
596
+ };
597
+
598
+ expect( toStyles( Object.freeze( tree ), blockSelectors ) ).toEqual(
599
+ 'body {margin: 0;}' +
600
+ '.wp-image img{filter: blur(5px);}' +
601
+ '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'
602
+ );
603
+ } );
604
+
487
605
  it( 'should output content and wide size variables if values are specified', () => {
488
606
  const tree = {
489
607
  settings: {
@@ -493,7 +611,7 @@ describe( 'global styles renderer', () => {
493
611
  },
494
612
  },
495
613
  };
496
- expect( toStyles( tree, 'body' ) ).toEqual(
614
+ expect( toStyles( Object.freeze( tree ), 'body' ) ).toEqual(
497
615
  'body {margin: 0; --wp--style--global--content-size: 840px; --wp--style--global--wide-size: 1100px;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'
498
616
  );
499
617
  } );
@@ -678,8 +796,9 @@ describe( 'global styles renderer', () => {
678
796
  selectors: imageSelectors,
679
797
  };
680
798
  const blockTypes = [ imageBlock ];
799
+ const getBlockStyles = () => [ { name: 'foo' } ];
681
800
 
682
- expect( getBlockSelectors( blockTypes, () => {} ) ).toEqual( {
801
+ expect( getBlockSelectors( blockTypes, getBlockStyles ) ).toEqual( {
683
802
  'core/image': {
684
803
  name: imageBlock.name,
685
804
  selector: imageSelectors.root,
@@ -690,6 +809,9 @@ describe( 'global styles renderer', () => {
690
809
  border: '.my-image img, .my-image .crop-area',
691
810
  filter: { duotone: 'img' },
692
811
  },
812
+ styleVariationSelectors: {
813
+ foo: '.is-style-foo.my-image',
814
+ },
693
815
  hasLayoutSupport: false,
694
816
  },
695
817
  } );
@@ -811,7 +933,7 @@ describe( 'global styles renderer', () => {
811
933
  'padding-bottom: 33px',
812
934
  'padding-left: 33px',
813
935
  'font-family: sans-serif',
814
- 'font-size: clamp(14px, 0.875rem + ((1vw - 7.68px) * 0.12), 15px)',
936
+ 'font-size: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.078), 15px)',
815
937
  ] );
816
938
  } );
817
939
 
@@ -1,7 +1,11 @@
1
1
  /**
2
2
  * Internal dependencies
3
3
  */
4
- import { getPresetVariableFromValue, getValueFromVariable } from '../utils';
4
+ import {
5
+ areGlobalStyleConfigsEqual,
6
+ getPresetVariableFromValue,
7
+ getValueFromVariable,
8
+ } from '../utils';
5
9
 
6
10
  describe( 'editor utils', () => {
7
11
  const themeJson = {
@@ -203,4 +207,56 @@ describe( 'editor utils', () => {
203
207
  } );
204
208
  } );
205
209
  } );
210
+
211
+ describe( 'areGlobalStyleConfigsEqual', () => {
212
+ test.each( [
213
+ { original: null, variation: null, expected: true },
214
+ { original: {}, variation: {}, expected: true },
215
+ { original: {}, variation: undefined, expected: false },
216
+ {
217
+ original: {
218
+ styles: {
219
+ color: { text: 'var(--wp--preset--color--red)' },
220
+ },
221
+ },
222
+ variation: {
223
+ styles: {
224
+ color: { text: 'var(--wp--preset--color--blue)' },
225
+ },
226
+ },
227
+ expected: false,
228
+ },
229
+ { original: {}, variation: undefined, expected: false },
230
+ {
231
+ original: {
232
+ styles: {
233
+ color: { text: 'var(--wp--preset--color--red)' },
234
+ },
235
+ settings: {
236
+ typography: {
237
+ fontSize: true,
238
+ },
239
+ },
240
+ },
241
+ variation: {
242
+ styles: {
243
+ color: { text: 'var(--wp--preset--color--red)' },
244
+ },
245
+ settings: {
246
+ typography: {
247
+ fontSize: true,
248
+ },
249
+ },
250
+ },
251
+ expected: true,
252
+ },
253
+ ] )(
254
+ '.areGlobalStyleConfigsEqual( $original, $variation )',
255
+ ( { original, variation, expected } ) => {
256
+ expect(
257
+ areGlobalStyleConfigsEqual( original, variation )
258
+ ).toBe( expected );
259
+ }
260
+ );
261
+ } );
206
262
  } );