@@ -7,22 +7,26 @@ import { __ } from '@wordpress/i18n'
77const PRESET_MAPPING = {
88 fontSizes : {
99 settings : [ 'typography' , 'fontSizes' ] ,
10- defaultEnabled : [ 'typography' , 'defaultFontSizes' ] ,
10+ defaultSizes : 'typography.fontSizes.default' ,
11+ defaultEnabled : 'typography.defaultFontSizes' ,
1112 prefix : 'font-size' ,
1213 } ,
1314 spacingSizes : {
1415 settings : [ 'spacing' , 'spacingSizes' ] ,
15- defaultEnabled : [ 'typography' , 'defaultSpacingSizes' ] ,
16+ defaultSizes : 'spacing.spacingSizes.default' ,
17+ defaultEnabled : 'spacing.defaultSpacingSizes' ,
1618 prefix : 'spacing' ,
1719 } ,
1820 blockHeights : {
1921 settings : [ 'blockHeights' ] ,
20- defaultEnabled : [ ] ,
22+ defaultSizes : '' ,
23+ defaultEnabled : '' ,
2124 prefix : 'block-height' ,
2225 } ,
2326 borderRadius : {
2427 settings : [ 'borderRadius' ] ,
25- defaultEnabled : [ ] ,
28+ defaultSizes : '' ,
29+ defaultEnabled : '' ,
2630 prefix : 'border-radius' ,
2731 } ,
2832}
@@ -36,7 +40,7 @@ const nonePreset = {
3640export const usePresetControls = property => {
3741 // Get the theme presets for the property
3842 const [
39- themePresets ,
43+ _themePresets ,
4044
4145 /**
4246 * Dev note:
@@ -45,14 +49,14 @@ export const usePresetControls = property => {
4549 * will use default presets, and theme presets with the same slugs will be ignored.
4650 * Therefore, we also need to get the default presets if the `defaultSizesEnabled` is `true` and merge it with the theme presets.
4751 *
48- * https://make.wordpress.org/core/2024/06/19/theme-json-version-3/#:~:text=Breaking%20changes%20in%20version%203
52+ * See: https://make.wordpress.org/core/2024/06/19/theme-json-version-3/#:~:text=Breaking%20changes%20in%20version%203
4953 * */
5054 wpDefaultPresets ,
5155 defaultSizesEnabled ,
5256 ] = useSettings (
5357 PRESET_MAPPING [ property ] . settings . join ( '.' ) ,
54- [ ... PRESET_MAPPING [ property ] . settings , 'default' ] . join ( '.' ) ,
55- PRESET_MAPPING [ property ] . defaultEnabled . join ( '.' )
58+ PRESET_MAPPING [ property ] . defaultSizes ,
59+ PRESET_MAPPING [ property ] . defaultEnabled
5660 )
5761
5862 // Get all custom presets
@@ -61,14 +65,19 @@ export const usePresetControls = property => {
6165 return { allCustomPresets : { ..._customPresetControls } }
6266 } , [ ] )
6367
68+ let themePresets = _themePresets
6469 const hasThemePresets = Array . isArray ( themePresets ) && themePresets . length > 0
6570
71+ // Merge theme presets with default presets when default sizes are enabled.
72+ // This happens when settings like `typography.defaultFontSizes` or `spacing.defaultSpacingSizes`
73+ // are not explicitly set to `false` in theme.json v3.
74+ if ( hasThemePresets && wpDefaultPresets && defaultSizesEnabled !== false ) {
75+ themePresets = [ ..._themePresets , ...wpDefaultPresets ]
76+ }
77+
6678 // Get the theme/default presets if the user have one, else return the stackable presets
6779 const basePresets = hasThemePresets
68- ? ( wpDefaultPresets && defaultSizesEnabled !== false
69- ? [ ...themePresets , ...wpDefaultPresets ] // merge theme and default preset sizes
70- : themePresets
71- )
80+ ? themePresets
7281 : PRESET_MAPPING [ property ] . settings . reduce ( ( acc , key ) => acc ?. [ key ] , DEFAULT_PRESETS . settings )
7382
7483 // Returns the base presets overriden by the custom presets
0 commit comments