diff --git a/src/hooks/use-preset-controls.js b/src/hooks/use-preset-controls.js index 8c35b4b9c1..8bacdde9cb 100644 --- a/src/hooks/use-preset-controls.js +++ b/src/hooks/use-preset-controls.js @@ -72,7 +72,18 @@ export const usePresetControls = property => { // This happens when settings like `typography.defaultFontSizes` or `spacing.defaultSpacingSizes` // are not explicitly set to `false` in theme.json v3. if ( hasThemePresets && wpDefaultPresets && defaultSizesEnabled !== false ) { - themePresets = [ ..._themePresets, ...wpDefaultPresets ] + // Create a set for removing duplicates. + const existingSlugs = new Set() + _themePresets.forEach( item => { + if ( item && typeof item.slug === 'string' ) { + existingSlugs.add( item.slug ) + } + } ) + + themePresets = [ + ..._themePresets, + ...wpDefaultPresets.filter( item => ! existingSlugs.has( item.slug ) ), + ] } // Get the theme/default presets if the user have one, else return the stackable presets