@wordpress/block-editor 11.7.0 → 12.0.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 (357) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +56 -57
  3. package/build/components/block-info-slot-fill/index.js +47 -0
  4. package/build/components/block-info-slot-fill/index.js.map +1 -0
  5. package/build/components/block-inspector/index.js +4 -2
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-list/index.native.js +11 -21
  8. package/build/components/block-list/index.native.js.map +1 -1
  9. package/build/components/block-list/use-in-between-inserter.js +3 -1
  10. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  11. package/build/components/block-popover/inbetween.js +2 -9
  12. package/build/components/block-popover/inbetween.js.map +1 -1
  13. package/build/components/block-settings-menu/block-settings-dropdown.js +1 -10
  14. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  15. package/build/components/block-toolbar/index.js +2 -1
  16. package/build/components/block-toolbar/index.js.map +1 -1
  17. package/build/components/block-tools/block-contextual-toolbar.js +83 -9
  18. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  19. package/build/components/block-tools/selected-block-popover.js +11 -28
  20. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  21. package/build/components/caption/index.native.js +0 -1
  22. package/build/components/caption/index.native.js.map +1 -1
  23. package/build/components/date-format-picker/index.js +1 -1
  24. package/build/components/date-format-picker/index.js.map +1 -1
  25. package/build/components/editor-styles/index.js +4 -3
  26. package/build/components/editor-styles/index.js.map +1 -1
  27. package/build/components/font-sizes/fluid-utils.js +21 -14
  28. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  29. package/build/components/global-styles/border-panel.js +15 -59
  30. package/build/components/global-styles/border-panel.js.map +1 -1
  31. package/build/components/global-styles/color-panel.js +12 -12
  32. package/build/components/global-styles/color-panel.js.map +1 -1
  33. package/build/components/global-styles/color-panel.native.js +174 -0
  34. package/build/components/global-styles/color-panel.native.js.map +1 -0
  35. package/build/components/global-styles/dimensions-panel.js +21 -20
  36. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  37. package/build/components/global-styles/effects-panel.js +244 -0
  38. package/build/components/global-styles/effects-panel.js.map +1 -0
  39. package/build/components/global-styles/filters-panel.js +215 -0
  40. package/build/components/global-styles/filters-panel.js.map +1 -0
  41. package/build/components/global-styles/get-block-css-selector.js +1 -12
  42. package/build/components/global-styles/get-block-css-selector.js.map +1 -1
  43. package/build/components/global-styles/hooks.js +7 -0
  44. package/build/components/global-styles/hooks.js.map +1 -1
  45. package/build/components/global-styles/index.js +28 -0
  46. package/build/components/global-styles/index.js.map +1 -1
  47. package/build/components/global-styles/typography-panel.js +9 -9
  48. package/build/components/global-styles/typography-panel.js.map +1 -1
  49. package/build/components/global-styles/use-global-styles-output.js +100 -82
  50. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  51. package/build/components/iframe/index.js +1 -1
  52. package/build/components/iframe/index.js.map +1 -1
  53. package/build/components/image-size-control/use-dimension-handler.js +5 -3
  54. package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
  55. package/build/components/index.js +23 -0
  56. package/build/components/index.js.map +1 -1
  57. package/build/components/inserter/block-patterns-tab.js +4 -2
  58. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  59. package/build/components/inserter/block-types-tab.js +12 -7
  60. package/build/components/inserter/block-types-tab.js.map +1 -1
  61. package/build/components/inserter/index.js +2 -1
  62. package/build/components/inserter/index.js.map +1 -1
  63. package/build/components/inspector-controls/groups.js +2 -0
  64. package/build/components/inspector-controls/groups.js.map +1 -1
  65. package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
  66. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  67. package/build/components/inspector-controls-tabs/utils.js +5 -3
  68. package/build/components/inspector-controls-tabs/utils.js.map +1 -1
  69. package/build/components/list-view/block-select-button.js +7 -2
  70. package/build/components/list-view/block-select-button.js.map +1 -1
  71. package/build/components/list-view/block.js +13 -21
  72. package/build/components/list-view/block.js.map +1 -1
  73. package/build/components/list-view/drop-indicator.js +37 -10
  74. package/build/components/list-view/drop-indicator.js.map +1 -1
  75. package/build/components/list-view/index.js +31 -7
  76. package/build/components/list-view/index.js.map +1 -1
  77. package/build/components/list-view/leaf.js +2 -1
  78. package/build/components/list-view/leaf.js.map +1 -1
  79. package/build/components/list-view/use-block-selection.js +1 -1
  80. package/build/components/list-view/use-block-selection.js.map +1 -1
  81. package/build/components/list-view/use-list-view-client-ids.js +7 -3
  82. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  83. package/build/components/list-view/use-list-view-drop-zone.js +8 -2
  84. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  85. package/build/components/media-replace-flow/index.js +5 -5
  86. package/build/components/media-replace-flow/index.js.map +1 -1
  87. package/build/components/navigable-toolbar/index.js +12 -4
  88. package/build/components/navigable-toolbar/index.js.map +1 -1
  89. package/build/components/off-canvas-editor/appender.js +2 -7
  90. package/build/components/off-canvas-editor/appender.js.map +1 -1
  91. package/build/components/off-canvas-editor/block-contents.js +6 -1
  92. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  93. package/build/components/off-canvas-editor/index.js +17 -14
  94. package/build/components/off-canvas-editor/index.js.map +1 -1
  95. package/build/components/resizable-box-popover/index.js +38 -0
  96. package/build/components/resizable-box-popover/index.js.map +1 -0
  97. package/build/components/rich-text/index.js +0 -1
  98. package/build/components/rich-text/index.js.map +1 -1
  99. package/build/components/rich-text/index.native.js +7 -11
  100. package/build/components/rich-text/index.native.js.map +1 -1
  101. package/build/components/spacing-sizes-control/spacing-input-control.js +8 -0
  102. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  103. package/build/hooks/anchor.js +1 -1
  104. package/build/hooks/anchor.js.map +1 -1
  105. package/build/hooks/border.js +1 -1
  106. package/build/hooks/border.js.map +1 -1
  107. package/build/hooks/duotone.js +121 -70
  108. package/build/hooks/duotone.js.map +1 -1
  109. package/build/hooks/margin.js +27 -17
  110. package/build/hooks/margin.js.map +1 -1
  111. package/build/hooks/padding.js +19 -9
  112. package/build/hooks/padding.js.map +1 -1
  113. package/build/hooks/utils.js +22 -7
  114. package/build/hooks/utils.js.map +1 -1
  115. package/build/layouts/utils.js +3 -2
  116. package/build/layouts/utils.js.map +1 -1
  117. package/build/private-apis.js +13 -1
  118. package/build/private-apis.js.map +1 -1
  119. package/build/store/actions.js +8 -1
  120. package/build/store/actions.js.map +1 -1
  121. package/build/utils/object.js +6 -6
  122. package/build/utils/object.js.map +1 -1
  123. package/build/utils/transform-styles/index.js +2 -2
  124. package/build/utils/transform-styles/index.js.map +1 -1
  125. package/build/utils/use-should-contextual-toolbar-show.js +68 -0
  126. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
  127. package/build-module/components/block-info-slot-fill/index.js +34 -0
  128. package/build-module/components/block-info-slot-fill/index.js.map +1 -0
  129. package/build-module/components/block-inspector/index.js +3 -2
  130. package/build-module/components/block-inspector/index.js.map +1 -1
  131. package/build-module/components/block-list/index.native.js +11 -19
  132. package/build-module/components/block-list/index.native.js.map +1 -1
  133. package/build-module/components/block-list/use-in-between-inserter.js +2 -1
  134. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  135. package/build-module/components/block-popover/inbetween.js +2 -9
  136. package/build-module/components/block-popover/inbetween.js.map +1 -1
  137. package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -9
  138. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  139. package/build-module/components/block-toolbar/index.js +2 -1
  140. package/build-module/components/block-toolbar/index.js.map +1 -1
  141. package/build-module/components/block-tools/block-contextual-toolbar.js +79 -9
  142. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  143. package/build-module/components/block-tools/selected-block-popover.js +10 -27
  144. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  145. package/build-module/components/caption/index.native.js +0 -1
  146. package/build-module/components/caption/index.native.js.map +1 -1
  147. package/build-module/components/date-format-picker/index.js +1 -1
  148. package/build-module/components/date-format-picker/index.js.map +1 -1
  149. package/build-module/components/editor-styles/index.js +4 -3
  150. package/build-module/components/editor-styles/index.js.map +1 -1
  151. package/build-module/components/font-sizes/fluid-utils.js +21 -14
  152. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  153. package/build-module/components/global-styles/border-panel.js +15 -59
  154. package/build-module/components/global-styles/border-panel.js.map +1 -1
  155. package/build-module/components/global-styles/color-panel.js +13 -13
  156. package/build-module/components/global-styles/color-panel.js.map +1 -1
  157. package/build-module/components/global-styles/color-panel.native.js +150 -0
  158. package/build-module/components/global-styles/color-panel.native.js.map +1 -0
  159. package/build-module/components/global-styles/dimensions-panel.js +22 -21
  160. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  161. package/build-module/components/global-styles/effects-panel.js +228 -0
  162. package/build-module/components/global-styles/effects-panel.js.map +1 -0
  163. package/build-module/components/global-styles/filters-panel.js +201 -0
  164. package/build-module/components/global-styles/filters-panel.js.map +1 -0
  165. package/build-module/components/global-styles/get-block-css-selector.js +1 -12
  166. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -1
  167. package/build-module/components/global-styles/hooks.js +7 -0
  168. package/build-module/components/global-styles/hooks.js.map +1 -1
  169. package/build-module/components/global-styles/index.js +2 -0
  170. package/build-module/components/global-styles/index.js.map +1 -1
  171. package/build-module/components/global-styles/typography-panel.js +10 -10
  172. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  173. package/build-module/components/global-styles/use-global-styles-output.js +101 -83
  174. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  175. package/build-module/components/iframe/index.js +1 -1
  176. package/build-module/components/iframe/index.js.map +1 -1
  177. package/build-module/components/image-size-control/use-dimension-handler.js +5 -3
  178. package/build-module/components/image-size-control/use-dimension-handler.js.map +1 -1
  179. package/build-module/components/index.js +1 -0
  180. package/build-module/components/index.js.map +1 -1
  181. package/build-module/components/inserter/block-patterns-tab.js +5 -2
  182. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  183. package/build-module/components/inserter/block-types-tab.js +12 -6
  184. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  185. package/build-module/components/inserter/index.js +2 -1
  186. package/build-module/components/inserter/index.js.map +1 -1
  187. package/build-module/components/inspector-controls/groups.js +2 -0
  188. package/build-module/components/inspector-controls/groups.js.map +1 -1
  189. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
  190. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  191. package/build-module/components/inspector-controls-tabs/utils.js +4 -3
  192. package/build-module/components/inspector-controls-tabs/utils.js.map +1 -1
  193. package/build-module/components/list-view/block-select-button.js +7 -2
  194. package/build-module/components/list-view/block-select-button.js.map +1 -1
  195. package/build-module/components/list-view/block.js +15 -22
  196. package/build-module/components/list-view/block.js.map +1 -1
  197. package/build-module/components/list-view/drop-indicator.js +36 -10
  198. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  199. package/build-module/components/list-view/index.js +31 -8
  200. package/build-module/components/list-view/index.js.map +1 -1
  201. package/build-module/components/list-view/leaf.js +2 -1
  202. package/build-module/components/list-view/leaf.js.map +1 -1
  203. package/build-module/components/list-view/use-block-selection.js +1 -1
  204. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  205. package/build-module/components/list-view/use-list-view-client-ids.js +7 -3
  206. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  207. package/build-module/components/list-view/use-list-view-drop-zone.js +8 -4
  208. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  209. package/build-module/components/media-replace-flow/index.js +5 -5
  210. package/build-module/components/media-replace-flow/index.js.map +1 -1
  211. package/build-module/components/navigable-toolbar/index.js +12 -4
  212. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  213. package/build-module/components/off-canvas-editor/appender.js +1 -5
  214. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  215. package/build-module/components/off-canvas-editor/block-contents.js +5 -1
  216. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  217. package/build-module/components/off-canvas-editor/index.js +17 -14
  218. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  219. package/build-module/components/resizable-box-popover/index.js +26 -0
  220. package/build-module/components/resizable-box-popover/index.js.map +1 -0
  221. package/build-module/components/rich-text/index.js +0 -1
  222. package/build-module/components/rich-text/index.js.map +1 -1
  223. package/build-module/components/rich-text/index.native.js +7 -10
  224. package/build-module/components/rich-text/index.native.js.map +1 -1
  225. package/build-module/components/spacing-sizes-control/spacing-input-control.js +7 -0
  226. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  227. package/build-module/hooks/anchor.js +1 -1
  228. package/build-module/hooks/anchor.js.map +1 -1
  229. package/build-module/hooks/border.js +1 -1
  230. package/build-module/hooks/border.js.map +1 -1
  231. package/build-module/hooks/duotone.js +118 -71
  232. package/build-module/hooks/duotone.js.map +1 -1
  233. package/build-module/hooks/margin.js +29 -18
  234. package/build-module/hooks/margin.js.map +1 -1
  235. package/build-module/hooks/padding.js +21 -10
  236. package/build-module/hooks/padding.js.map +1 -1
  237. package/build-module/hooks/utils.js +24 -9
  238. package/build-module/hooks/utils.js.map +1 -1
  239. package/build-module/layouts/utils.js +3 -2
  240. package/build-module/layouts/utils.js.map +1 -1
  241. package/build-module/private-apis.js +9 -1
  242. package/build-module/private-apis.js.map +1 -1
  243. package/build-module/store/actions.js +8 -1
  244. package/build-module/store/actions.js.map +1 -1
  245. package/build-module/utils/object.js +5 -5
  246. package/build-module/utils/object.js.map +1 -1
  247. package/build-module/utils/transform-styles/index.js +2 -2
  248. package/build-module/utils/transform-styles/index.js.map +1 -1
  249. package/build-module/utils/use-should-contextual-toolbar-show.js +56 -0
  250. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
  251. package/build-style/content-rtl.css +9 -6
  252. package/build-style/content.css +9 -6
  253. package/build-style/style-rtl.css +272 -54
  254. package/build-style/style.css +272 -54
  255. package/package.json +32 -32
  256. package/src/components/block-info-slot-fill/index.js +24 -0
  257. package/src/components/block-inspector/index.js +3 -0
  258. package/src/components/block-inspector/style.scss +6 -4
  259. package/src/components/block-list/content.scss +16 -15
  260. package/src/components/block-list/index.native.js +19 -38
  261. package/src/components/block-list/use-in-between-inserter.js +4 -1
  262. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +9 -9
  263. package/src/components/block-mover/style.scss +10 -4
  264. package/src/components/block-mover/test/index.native.js +4 -4
  265. package/src/components/block-popover/inbetween.js +2 -13
  266. package/src/components/block-settings-menu/block-settings-dropdown.js +2 -12
  267. package/src/components/block-toolbar/index.js +4 -3
  268. package/src/components/block-toolbar/style.scss +56 -33
  269. package/src/components/block-tools/block-contextual-toolbar.js +94 -11
  270. package/src/components/block-tools/selected-block-popover.js +11 -44
  271. package/src/components/block-tools/style.scss +157 -3
  272. package/src/components/caption/index.native.js +0 -1
  273. package/src/components/date-format-picker/index.js +1 -1
  274. package/src/components/editor-styles/index.js +9 -5
  275. package/src/components/font-sizes/fluid-utils.js +31 -14
  276. package/src/components/font-sizes/test/fluid-utils.js +5 -16
  277. package/src/components/global-styles/README.md +129 -16
  278. package/src/components/global-styles/border-panel.js +13 -61
  279. package/src/components/global-styles/color-panel.js +13 -13
  280. package/src/components/global-styles/color-panel.native.js +207 -0
  281. package/src/components/global-styles/dimensions-panel.js +47 -20
  282. package/src/components/global-styles/effects-panel.js +228 -0
  283. package/src/components/global-styles/filters-panel.js +230 -0
  284. package/src/components/global-styles/get-block-css-selector.js +0 -11
  285. package/src/components/global-styles/hooks.js +10 -0
  286. package/src/components/global-styles/index.js +2 -0
  287. package/src/components/global-styles/style.scss +43 -0
  288. package/src/components/global-styles/test/typography-utils.js +63 -22
  289. package/src/components/global-styles/test/use-global-styles-output.js +130 -8
  290. package/src/components/global-styles/typography-panel.js +37 -11
  291. package/src/components/global-styles/use-global-styles-output.js +88 -72
  292. package/src/components/iframe/index.js +1 -1
  293. package/src/components/image-size-control/use-dimension-handler.js +4 -3
  294. package/src/components/index.js +5 -1
  295. package/src/components/inserter/block-patterns-tab.js +3 -1
  296. package/src/components/inserter/block-types-tab.js +9 -6
  297. package/src/components/inserter/index.js +1 -1
  298. package/src/components/inspector-controls/groups.js +2 -0
  299. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  300. package/src/components/inspector-controls-tabs/utils.js +4 -3
  301. package/src/components/list-view/README.md +2 -0
  302. package/src/components/list-view/block-select-button.js +6 -1
  303. package/src/components/list-view/block.js +24 -31
  304. package/src/components/list-view/drop-indicator.js +67 -22
  305. package/src/components/list-view/index.js +26 -3
  306. package/src/components/list-view/leaf.js +1 -0
  307. package/src/components/list-view/style.scss +18 -4
  308. package/src/components/list-view/test/use-list-view-drop-zone.js +188 -0
  309. package/src/components/list-view/use-block-selection.js +1 -1
  310. package/src/components/list-view/use-list-view-client-ids.js +5 -3
  311. package/src/components/list-view/use-list-view-drop-zone.js +9 -3
  312. package/src/components/media-replace-flow/README.md +3 -2
  313. package/src/components/media-replace-flow/index.js +4 -5
  314. package/src/components/navigable-toolbar/index.js +12 -3
  315. package/src/components/off-canvas-editor/appender.js +1 -4
  316. package/src/components/off-canvas-editor/block-contents.js +4 -0
  317. package/src/components/off-canvas-editor/index.js +15 -11
  318. package/src/components/resizable-box-popover/index.js +27 -0
  319. package/src/components/rich-text/index.js +0 -1
  320. package/src/components/rich-text/index.native.js +2 -5
  321. package/src/components/spacing-sizes-control/spacing-input-control.js +10 -0
  322. package/src/components/spacing-sizes-control/style.scss +7 -7
  323. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -3
  324. package/src/hooks/anchor.js +1 -1
  325. package/src/hooks/border.js +1 -1
  326. package/src/hooks/duotone.js +162 -99
  327. package/src/hooks/margin.js +31 -26
  328. package/src/hooks/padding.js +24 -18
  329. package/src/hooks/test/anchor.js +113 -0
  330. package/src/hooks/test/color.js +0 -9
  331. package/src/hooks/test/use-typography-props.js +2 -2
  332. package/src/hooks/test/utils.js +20 -101
  333. package/src/hooks/utils.js +23 -6
  334. package/src/layouts/utils.js +2 -2
  335. package/src/private-apis.js +8 -0
  336. package/src/store/actions.js +8 -1
  337. package/src/style.scss +1 -0
  338. package/src/utils/object.js +5 -5
  339. package/src/utils/test/object.js +53 -15
  340. package/src/utils/transform-styles/index.js +2 -2
  341. package/src/utils/use-should-contextual-toolbar-show.js +75 -0
  342. package/tsconfig.json +1 -0
  343. package/build/components/rich-text/use-native-props.js +0 -11
  344. package/build/components/rich-text/use-native-props.js.map +0 -1
  345. package/build/components/rich-text/use-native-props.native.js +0 -24
  346. package/build/components/rich-text/use-native-props.native.js.map +0 -1
  347. package/build/hooks/color-panel.native.js +0 -77
  348. package/build/hooks/color-panel.native.js.map +0 -1
  349. package/build-module/components/rich-text/use-native-props.js +0 -4
  350. package/build-module/components/rich-text/use-native-props.js.map +0 -1
  351. package/build-module/components/rich-text/use-native-props.native.js +0 -15
  352. package/build-module/components/rich-text/use-native-props.native.js.map +0 -1
  353. package/build-module/hooks/color-panel.native.js +0 -62
  354. package/build-module/hooks/color-panel.native.js.map +0 -1
  355. package/src/components/rich-text/use-native-props.js +0 -3
  356. package/src/components/rich-text/use-native-props.native.js +0 -17
  357. package/src/hooks/color-panel.native.js +0 -63
@@ -0,0 +1,43 @@
1
+ .block-editor-global-styles-effects-panel__toggle-icon {
2
+ fill: currentColor;
3
+ }
4
+
5
+ .block-editor-global-styles-effects-panel__shadow-popover-container {
6
+ width: 230px;
7
+ }
8
+
9
+ .block-editor-global-styles-filters-panel__dropdown,
10
+ .block-editor-global-styles-effects-panel__shadow-dropdown {
11
+ display: block;
12
+ padding: 0;
13
+
14
+ button {
15
+ width: 100%;
16
+ padding: $grid-unit-10;
17
+
18
+ &.is-open {
19
+ background-color: $gray-100;
20
+ }
21
+ }
22
+ }
23
+
24
+ // wrapper to clip the shadow beyond 6px
25
+ .block-editor-global-styles-effects-panel__shadow-indicator-wrapper {
26
+ padding: 6px;
27
+ overflow: hidden;
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ }
32
+
33
+ // These styles are similar to the color palette.
34
+ .block-editor-global-styles-effects-panel__shadow-indicator {
35
+ color: $gray-800;
36
+ border: $gray-200 $border-width solid;
37
+ border-radius: $radius-block-ui;
38
+ cursor: pointer;
39
+ padding: 0;
40
+
41
+ height: 24px;
42
+ width: 24px;
43
+ }
@@ -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
  } );
@@ -612,7 +730,7 @@ describe( 'global styles renderer', () => {
612
730
  } );
613
731
 
614
732
  expect( layoutStyles ).toEqual(
615
- 'body .is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }body .is-layout-flow > * + * { margin-block-start: 0.5em; margin-block-end: 0; }body .is-layout-flex { gap: 0.5em; }body { --wp--style--block-gap: 0.5em; }body .is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }body .is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }body .is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }body .is-layout-flex { flex-wrap: wrap; align-items: center; }body .is-layout-flex > * { margin: 0; }'
733
+ ':where(body .is-layout-flow) > * { margin-block-start: 0; margin-block-end: 0; }:where(body .is-layout-flow) > * + * { margin-block-start: 0.5em; margin-block-end: 0; }:where(body .is-layout-flex) { gap: 0.5em; }body { --wp--style--block-gap: 0.5em; }body .is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }body .is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }body .is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }body .is-layout-flex { flex-wrap: wrap; align-items: center; }body .is-layout-flex > * { margin: 0; }'
616
734
  );
617
735
  } );
618
736
 
@@ -628,7 +746,7 @@ describe( 'global styles renderer', () => {
628
746
  } );
629
747
 
630
748
  expect( layoutStyles ).toEqual(
631
- 'body .is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }body .is-layout-flow > * + * { margin-block-start: 12px; margin-block-end: 0; }body .is-layout-flex { gap: 12px; }body { --wp--style--block-gap: 12px; }body .is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }body .is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }body .is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }body .is-layout-flex { flex-wrap: wrap; align-items: center; }body .is-layout-flex > * { margin: 0; }'
749
+ ':where(body .is-layout-flow) > * { margin-block-start: 0; margin-block-end: 0; }:where(body .is-layout-flow) > * + * { margin-block-start: 12px; margin-block-end: 0; }:where(body .is-layout-flex) { gap: 12px; }body { --wp--style--block-gap: 12px; }body .is-layout-flow > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }body .is-layout-flow > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }body .is-layout-flow > .aligncenter { margin-left: auto !important; margin-right: auto !important; }body .is-layout-flex { display:flex; }body .is-layout-flex { flex-wrap: wrap; align-items: center; }body .is-layout-flex > * { margin: 0; }'
632
750
  );
633
751
  } );
634
752
 
@@ -644,7 +762,7 @@ describe( 'global styles renderer', () => {
644
762
  } );
645
763
 
646
764
  expect( layoutStyles ).toEqual(
647
- '.wp-block-group-is-layout-flow.wp-block-group-is-layout-flow > * { margin-block-start: 0; margin-block-end: 0; }.wp-block-group-is-layout-flow.wp-block-group-is-layout-flow > * + * { margin-block-start: 12px; margin-block-end: 0; }.wp-block-group-is-layout-flex.wp-block-group-is-layout-flex { gap: 12px; }'
765
+ '.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; }'
648
766
  );
649
767
  } );
650
768
 
@@ -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
  } );
@@ -713,7 +835,7 @@ describe( 'global styles renderer', () => {
713
835
  'core/image': {
714
836
  name: imageBlock.name,
715
837
  selector: imageSupports.__experimentalSelector,
716
- duotoneSelector: imageSupports.color.__experimentalDuotone,
838
+ duotoneSelector: '.my-image img',
717
839
  fallbackGapValue: undefined,
718
840
  featureSelectors: {
719
841
  root: '.my-image',
@@ -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
 
@@ -20,7 +20,7 @@ import LetterSpacingControl from '../letter-spacing-control';
20
20
  import TextTransformControl from '../text-transform-control';
21
21
  import TextDecorationControl from '../text-decoration-control';
22
22
  import { getValueFromVariable } from './utils';
23
- import { immutableSet } from '../../utils/object';
23
+ import { setImmutably } from '../../utils/object';
24
24
 
25
25
  const MIN_TEXT_COLUMNS = 1;
26
26
  const MAX_TEXT_COLUMNS = 6;
@@ -163,10 +163,12 @@ export default function TypographyPanel( {
163
163
  ( { fontFamily: f } ) => f === newValue
164
164
  )?.slug;
165
165
  onChange(
166
- immutableSet(
166
+ setImmutably(
167
167
  value,
168
168
  [ 'typography', 'fontFamily' ],
169
- slug ? `var:preset|font-family|${ slug }` : newValue
169
+ slug
170
+ ? `var:preset|font-family|${ slug }`
171
+ : newValue || undefined
170
172
  )
171
173
  );
172
174
  };
@@ -188,7 +190,11 @@ export default function TypographyPanel( {
188
190
  : newValue;
189
191
 
190
192
  onChange(
191
- immutableSet( value, [ 'typography', 'fontSize' ], actualValue )
193
+ setImmutably(
194
+ value,
195
+ [ 'typography', 'fontSize' ],
196
+ actualValue || undefined
197
+ )
192
198
  );
193
199
  };
194
200
  const hasFontSize = () => !! value?.typography?.fontSize;
@@ -209,8 +215,8 @@ export default function TypographyPanel( {
209
215
  ...value,
210
216
  typography: {
211
217
  ...value?.typography,
212
- fontStyle: newFontStyle,
213
- fontWeight: newFontWeight,
218
+ fontStyle: newFontStyle || undefined,
219
+ fontWeight: newFontWeight || undefined,
214
220
  },
215
221
  } );
216
222
  };
@@ -225,7 +231,11 @@ export default function TypographyPanel( {
225
231
  const lineHeight = decodeValue( inheritedValue?.typography?.lineHeight );
226
232
  const setLineHeight = ( newValue ) => {
227
233
  onChange(
228
- immutableSet( value, [ 'typography', 'lineHeight' ], newValue )
234
+ setImmutably(
235
+ value,
236
+ [ 'typography', 'lineHeight' ],
237
+ newValue || undefined
238
+ )
229
239
  );
230
240
  };
231
241
  const hasLineHeight = () => !! value?.typography?.lineHeight;
@@ -238,7 +248,11 @@ export default function TypographyPanel( {
238
248
  );
239
249
  const setLetterSpacing = ( newValue ) => {
240
250
  onChange(
241
- immutableSet( value, [ 'typography', 'letterSpacing' ], newValue )
251
+ setImmutably(
252
+ value,
253
+ [ 'typography', 'letterSpacing' ],
254
+ newValue || undefined
255
+ )
242
256
  );
243
257
  };
244
258
  const hasLetterSpacing = () => !! value?.typography?.letterSpacing;
@@ -249,7 +263,11 @@ export default function TypographyPanel( {
249
263
  const textColumns = decodeValue( inheritedValue?.typography?.textColumns );
250
264
  const setTextColumns = ( newValue ) => {
251
265
  onChange(
252
- immutableSet( value, [ 'typography', 'textColumns' ], newValue )
266
+ setImmutably(
267
+ value,
268
+ [ 'typography', 'textColumns' ],
269
+ newValue || undefined
270
+ )
253
271
  );
254
272
  };
255
273
  const hasTextColumns = () => !! value?.typography?.textColumns;
@@ -262,7 +280,11 @@ export default function TypographyPanel( {
262
280
  );
263
281
  const setTextTransform = ( newValue ) => {
264
282
  onChange(
265
- immutableSet( value, [ 'typography', 'textTransform' ], newValue )
283
+ setImmutably(
284
+ value,
285
+ [ 'typography', 'textTransform' ],
286
+ newValue || undefined
287
+ )
266
288
  );
267
289
  };
268
290
  const hasTextTransform = () => !! value?.typography?.textTransform;
@@ -275,7 +297,11 @@ export default function TypographyPanel( {
275
297
  );
276
298
  const setTextDecoration = ( newValue ) => {
277
299
  onChange(
278
- immutableSet( value, [ 'typography', 'textDecoration' ], newValue )
300
+ setImmutably(
301
+ value,
302
+ [ 'typography', 'textDecoration' ],
303
+ newValue || undefined
304
+ )
279
305
  );
280
306
  };
281
307
  const hasTextDecoration = () => !! value?.typography?.textDecoration;