@wordpress/block-editor 13.0.3 → 13.0.5

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 (85) hide show
  1. package/build/components/global-styles/background-panel.js +2 -1
  2. package/build/components/global-styles/background-panel.js.map +1 -1
  3. package/build/components/global-styles/border-panel.js +2 -1
  4. package/build/components/global-styles/border-panel.js.map +1 -1
  5. package/build/components/global-styles/color-panel.js +2 -1
  6. package/build/components/global-styles/color-panel.js.map +1 -1
  7. package/build/components/global-styles/dimensions-panel.js +2 -1
  8. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  9. package/build/components/global-styles/filters-panel.js +2 -1
  10. package/build/components/global-styles/filters-panel.js.map +1 -1
  11. package/build/components/global-styles/image-settings-panel.js +2 -1
  12. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  13. package/build/components/global-styles/typography-panel.js +2 -1
  14. package/build/components/global-styles/typography-panel.js.map +1 -1
  15. package/build/components/global-styles/use-global-styles-output.js +8 -8
  16. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  17. package/build/components/global-styles/utils.js +17 -7
  18. package/build/components/global-styles/utils.js.map +1 -1
  19. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  20. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  21. package/build/hooks/block-style-variation.js +171 -6
  22. package/build/hooks/block-style-variation.js.map +1 -1
  23. package/build/hooks/duotone.js +16 -11
  24. package/build/hooks/duotone.js.map +1 -1
  25. package/build/hooks/index.js +7 -1
  26. package/build/hooks/index.js.map +1 -1
  27. package/build/hooks/use-bindings-attributes.js +11 -6
  28. package/build/hooks/use-bindings-attributes.js.map +1 -1
  29. package/build/hooks/utils.js +2 -0
  30. package/build/hooks/utils.js.map +1 -1
  31. package/build/private-apis.js +2 -1
  32. package/build/private-apis.js.map +1 -1
  33. package/build-module/components/global-styles/background-panel.js +3 -2
  34. package/build-module/components/global-styles/background-panel.js.map +1 -1
  35. package/build-module/components/global-styles/border-panel.js +3 -2
  36. package/build-module/components/global-styles/border-panel.js.map +1 -1
  37. package/build-module/components/global-styles/color-panel.js +3 -2
  38. package/build-module/components/global-styles/color-panel.js.map +1 -1
  39. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  40. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  41. package/build-module/components/global-styles/filters-panel.js +3 -2
  42. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  43. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  44. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  45. package/build-module/components/global-styles/typography-panel.js +3 -2
  46. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  47. package/build-module/components/global-styles/use-global-styles-output.js +8 -8
  48. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  49. package/build-module/components/global-styles/utils.js +15 -6
  50. package/build-module/components/global-styles/utils.js.map +1 -1
  51. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  52. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  53. package/build-module/hooks/block-style-variation.js +170 -6
  54. package/build-module/hooks/block-style-variation.js.map +1 -1
  55. package/build-module/hooks/duotone.js +16 -11
  56. package/build-module/hooks/duotone.js.map +1 -1
  57. package/build-module/hooks/index.js +1 -0
  58. package/build-module/hooks/index.js.map +1 -1
  59. package/build-module/hooks/use-bindings-attributes.js +11 -6
  60. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  61. package/build-module/hooks/utils.js +2 -0
  62. package/build-module/hooks/utils.js.map +1 -1
  63. package/build-module/private-apis.js +3 -2
  64. package/build-module/private-apis.js.map +1 -1
  65. package/build-style/content-rtl.css +1 -0
  66. package/build-style/content.css +1 -0
  67. package/package.json +2 -2
  68. package/src/components/global-styles/background-panel.js +3 -2
  69. package/src/components/global-styles/border-panel.js +3 -2
  70. package/src/components/global-styles/color-panel.js +3 -2
  71. package/src/components/global-styles/dimensions-panel.js +3 -2
  72. package/src/components/global-styles/filters-panel.js +3 -2
  73. package/src/components/global-styles/image-settings-panel.js +3 -2
  74. package/src/components/global-styles/typography-panel.js +3 -2
  75. package/src/components/global-styles/use-global-styles-output.js +8 -8
  76. package/src/components/global-styles/utils.js +17 -6
  77. package/src/components/iframe/content.scss +1 -0
  78. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  79. package/src/hooks/block-style-variation.js +204 -5
  80. package/src/hooks/duotone.js +16 -12
  81. package/src/hooks/index.js +1 -0
  82. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  83. package/src/hooks/use-bindings-attributes.js +13 -4
  84. package/src/hooks/utils.js +2 -0
  85. package/src/private-apis.js +6 -1
@@ -1 +1 @@
1
- {"version":3,"names":["fastDeepEqual","getTypographyFontSizeValue","getValueFromObjectPath","ROOT_BLOCK_SELECTOR","ROOT_CSS_PROPERTIES_SELECTOR","PRESET_METADATA","path","valueKey","cssVarInfix","classes","classSuffix","propertyName","valueFunc","slug","preset","settings","size","STYLE_PATH_TO_CSS_VAR_INFIX","shadow","STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE","TOOLSPANEL_DROPDOWNMENU_PROPS","popoverProps","placement","offset","findInPresetsBy","features","blockName","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","origin","presets","presetObject","find","highestPresetObjectWithSameSlug","undefined","getPresetVariableFromValue","variableStylePath","presetPropertyValue","metadata","data","getValueFromPresetVariable","variable","presetType","result","getValueFromVariable","getValueFromCustomVariable","_getValueFromObjectPa","ref","refPath","split","USER_VALUE_PREFIX","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","parsedVar","startsWith","slice","length","endsWith","type","scopeSelector","scope","selector","scopes","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","scopeFeatureSelectors","featureSelectors","Object","entries","feature","subfeature","subfeatureSelector","appendToSelector","toAppend","includes","newSelectors","map","sel","areGlobalStyleConfigsEqual","original","variation","styles","getBlockStyleVariationSelector","blockSelector","variationClass","ancestorRegex","addVariationClass","_match","group1","group2","part","replace"],"sources":["@wordpress/block-editor/src/components/global-styles/utils.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * Internal dependencies\n */\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_CSS_PROPERTIES_SELECTOR = ':root';\n\nexport const PRESET_METADATA = [\n\t{\n\t\tpath: [ 'color', 'palette' ],\n\t\tvalueKey: 'color',\n\t\tcssVarInfix: 'color',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'color', propertyName: 'color' },\n\t\t\t{\n\t\t\t\tclassSuffix: 'background-color',\n\t\t\t\tpropertyName: 'background-color',\n\t\t\t},\n\t\t\t{\n\t\t\t\tclassSuffix: 'border-color',\n\t\t\t\tpropertyName: 'border-color',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'gradients' ],\n\t\tvalueKey: 'gradient',\n\t\tcssVarInfix: 'gradient',\n\t\tclasses: [\n\t\t\t{\n\t\t\t\tclassSuffix: 'gradient-background',\n\t\t\t\tpropertyName: 'background',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'duotone' ],\n\t\tvalueKey: 'colors',\n\t\tcssVarInfix: 'duotone',\n\t\tvalueFunc: ( { slug } ) => `url( '#wp-duotone-${ slug }' )`,\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'shadow', 'presets' ],\n\t\tvalueKey: 'shadow',\n\t\tcssVarInfix: 'shadow',\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontSizes' ],\n\t\tvalueFunc: ( preset, settings ) =>\n\t\t\tgetTypographyFontSizeValue( preset, settings ),\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'font-size',\n\t\tclasses: [ { classSuffix: 'font-size', propertyName: 'font-size' } ],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontFamilies' ],\n\t\tvalueKey: 'fontFamily',\n\t\tcssVarInfix: 'font-family',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'font-family', propertyName: 'font-family' },\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'spacing', 'spacingSizes' ],\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'spacing',\n\t\tvalueFunc: ( { size } ) => size,\n\t\tclasses: [],\n\t},\n];\n\nexport const STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'filter.duotone': 'duotone',\n\t'elements.link.color.text': 'color',\n\t'elements.link.:hover.color.text': 'color',\n\t'elements.link.typography.fontFamily': 'font-family',\n\t'elements.link.typography.fontSize': 'font-size',\n\t'elements.button.color.text': 'color',\n\t'elements.button.color.background': 'color',\n\t'elements.caption.color.text': 'color',\n\t'elements.button.typography.fontFamily': 'font-family',\n\t'elements.button.typography.fontSize': 'font-size',\n\t'elements.heading.color': 'color',\n\t'elements.heading.color.background': 'color',\n\t'elements.heading.typography.fontFamily': 'font-family',\n\t'elements.heading.gradient': 'gradient',\n\t'elements.heading.color.gradient': 'gradient',\n\t'elements.h1.color': 'color',\n\t'elements.h1.color.background': 'color',\n\t'elements.h1.typography.fontFamily': 'font-family',\n\t'elements.h1.color.gradient': 'gradient',\n\t'elements.h2.color': 'color',\n\t'elements.h2.color.background': 'color',\n\t'elements.h2.typography.fontFamily': 'font-family',\n\t'elements.h2.color.gradient': 'gradient',\n\t'elements.h3.color': 'color',\n\t'elements.h3.color.background': 'color',\n\t'elements.h3.typography.fontFamily': 'font-family',\n\t'elements.h3.color.gradient': 'gradient',\n\t'elements.h4.color': 'color',\n\t'elements.h4.color.background': 'color',\n\t'elements.h4.typography.fontFamily': 'font-family',\n\t'elements.h4.color.gradient': 'gradient',\n\t'elements.h5.color': 'color',\n\t'elements.h5.color.background': 'color',\n\t'elements.h5.typography.fontFamily': 'font-family',\n\t'elements.h5.color.gradient': 'gradient',\n\t'elements.h6.color': 'color',\n\t'elements.h6.color.background': 'color',\n\t'elements.h6.typography.fontFamily': 'font-family',\n\t'elements.h6.color.gradient': 'gradient',\n\t'color.gradient': 'gradient',\n\tshadow: 'shadow',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\n};\n\n// A static list of block attributes that store global style preset slugs.\nexport const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {\n\t'color.background': 'backgroundColor',\n\t'color.text': 'textColor',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'fontSize',\n\t'typography.fontFamily': 'fontFamily',\n};\n\nexport const TOOLSPANEL_DROPDOWNMENU_PROPS = {\n\tpopoverProps: {\n\t\tplacement: 'left-start',\n\t\toffset: 259, // Inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t},\n};\n\nfunction findInPresetsBy(\n\tfeatures,\n\tblockName,\n\tpresetPath,\n\tpresetProperty,\n\tpresetValueValue\n) {\n\t// Block presets take priority above root level presets.\n\tconst orderedPresetsByOrigin = [\n\t\tgetValueFromObjectPath( features, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t...presetPath,\n\t\t] ),\n\t\tgetValueFromObjectPath( features, presetPath ),\n\t];\n\n\tfor ( const presetByOrigin of orderedPresetsByOrigin ) {\n\t\tif ( presetByOrigin ) {\n\t\t\t// Preset origins ordered by priority.\n\t\t\tconst origins = [ 'custom', 'theme', 'default' ];\n\t\t\tfor ( const origin of origins ) {\n\t\t\t\tconst presets = presetByOrigin[ origin ];\n\t\t\t\tif ( presets ) {\n\t\t\t\t\tconst presetObject = presets.find(\n\t\t\t\t\t\t( preset ) =>\n\t\t\t\t\t\t\tpreset[ presetProperty ] === presetValueValue\n\t\t\t\t\t);\n\t\t\t\t\tif ( presetObject ) {\n\t\t\t\t\t\tif ( presetProperty === 'slug' ) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If there is a highest priority preset with the same slug but different value the preset we found was overwritten and should be ignored.\n\t\t\t\t\t\tconst highestPresetObjectWithSameSlug = findInPresetsBy(\n\t\t\t\t\t\t\tfeatures,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpresetPath,\n\t\t\t\t\t\t\t'slug',\n\t\t\t\t\t\t\tpresetObject.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thighestPresetObjectWithSameSlug[\n\t\t\t\t\t\t\t\tpresetProperty\n\t\t\t\t\t\t\t] === presetObject[ presetProperty ]\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function getPresetVariableFromValue(\n\tfeatures,\n\tblockName,\n\tvariableStylePath,\n\tpresetPropertyValue\n) {\n\tif ( ! presetPropertyValue ) {\n\t\treturn presetPropertyValue;\n\t}\n\n\tconst cssVarInfix = STYLE_PATH_TO_CSS_VAR_INFIX[ variableStylePath ];\n\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === cssVarInfix\n\t);\n\n\tif ( ! metadata ) {\n\t\t// The property doesn't have preset data\n\t\t// so the value should be returned as it is.\n\t\treturn presetPropertyValue;\n\t}\n\tconst { valueKey, path } = metadata;\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\n\t\tblockName,\n\t\tpath,\n\t\tvalueKey,\n\t\tpresetPropertyValue\n\t);\n\n\tif ( ! presetObject ) {\n\t\t// Value wasn't found in the presets,\n\t\t// so it must be a custom value.\n\t\treturn presetPropertyValue;\n\t}\n\n\treturn `var:preset|${ cssVarInfix }|${ presetObject.slug }`;\n}\n\nfunction getValueFromPresetVariable(\n\tfeatures,\n\tblockName,\n\tvariable,\n\t[ presetType, slug ]\n) {\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === presetType\n\t);\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures.settings,\n\t\tblockName,\n\t\tmetadata.path,\n\t\t'slug',\n\t\tslug\n\t);\n\n\tif ( presetObject ) {\n\t\tconst { valueKey } = metadata;\n\t\tconst result = presetObject[ valueKey ];\n\t\treturn getValueFromVariable( features, blockName, result );\n\t}\n\n\treturn variable;\n}\n\nfunction getValueFromCustomVariable( features, blockName, variable, path ) {\n\tconst result =\n\t\tgetValueFromObjectPath( features.settings, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t'custom',\n\t\t\t...path,\n\t\t] ) ??\n\t\tgetValueFromObjectPath( features.settings, [ 'custom', ...path ] );\n\tif ( ! result ) {\n\t\treturn variable;\n\t}\n\t// A variable may reference another variable so we need recursion until we find the value.\n\treturn getValueFromVariable( features, blockName, result );\n}\n\n/**\n * Attempts to fetch the value of a theme.json CSS variable.\n *\n * @param {Object} features GlobalStylesContext config, e.g., user, base or merged. Represents the theme.json tree.\n * @param {string} blockName The name of a block as represented in the styles property. E.g., 'root' for root-level, and 'core/${blockName}' for blocks.\n * @param {string|*} variable An incoming style value. A CSS var value is expected, but it could be any value.\n * @return {string|*|{ref}} The value of the CSS var, if found. If not found, the passed variable argument.\n */\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || typeof variable !== 'string' ) {\n\t\tif ( variable?.ref && typeof variable?.ref === 'string' ) {\n\t\t\tconst refPath = variable.ref.split( '.' );\n\t\t\tvariable = getValueFromObjectPath( features, refPath );\n\t\t\t// Presence of another ref indicates a reference to another dynamic value.\n\t\t\t// Pointing to another dynamic value is not supported.\n\t\t\tif ( ! variable || !! variable?.ref ) {\n\t\t\t\treturn variable;\n\t\t\t}\n\t\t} else {\n\t\t\treturn variable;\n\t\t}\n\t}\n\tconst USER_VALUE_PREFIX = 'var:';\n\tconst THEME_VALUE_PREFIX = 'var(--wp--';\n\tconst THEME_VALUE_SUFFIX = ')';\n\n\tlet parsedVar;\n\n\tif ( variable.startsWith( USER_VALUE_PREFIX ) ) {\n\t\tparsedVar = variable.slice( USER_VALUE_PREFIX.length ).split( '|' );\n\t} else if (\n\t\tvariable.startsWith( THEME_VALUE_PREFIX ) &&\n\t\tvariable.endsWith( THEME_VALUE_SUFFIX )\n\t) {\n\t\tparsedVar = variable\n\t\t\t.slice( THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length )\n\t\t\t.split( '--' );\n\t} else {\n\t\t// We don't know how to parse the value: either is raw of uses complex CSS such as `calc(1px * var(--wp--variable) )`\n\t\treturn variable;\n\t}\n\n\tconst [ type, ...path ] = parsedVar;\n\tif ( type === 'preset' ) {\n\t\treturn getValueFromPresetVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\tif ( type === 'custom' ) {\n\t\treturn getValueFromCustomVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\treturn variable;\n}\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nexport function scopeSelector( scope, selector ) {\n\tif ( ! scope || ! selector ) {\n\t\treturn selector;\n\t}\n\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Scopes a collection of selectors for features and subfeatures.\n *\n * @example\n * ```js\n * const scope = '.custom-scope';\n * const selectors = {\n * color: '.wp-my-block p',\n * typography: { fontSize: '.wp-my-block caption' },\n * };\n * const result = scopeFeatureSelector( scope, selectors );\n * // result is {\n * // color: '.custom-scope .wp-my-block p',\n * // typography: { fonSize: '.custom-scope .wp-my-block caption' },\n * // }\n * ```\n *\n * @param {string} scope Selector to scope collection of selectors with.\n * @param {Object} selectors Collection of feature selectors e.g.\n *\n * @return {Object|undefined} Scoped collection of feature selectors.\n */\nexport function scopeFeatureSelectors( scope, selectors ) {\n\tif ( ! scope || ! selectors ) {\n\t\treturn;\n\t}\n\n\tconst featureSelectors = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\tif ( typeof selector === 'string' ) {\n\t\t\tfeatureSelectors[ feature ] = scopeSelector( scope, selector );\n\t\t}\n\n\t\tif ( typeof selector === 'object' ) {\n\t\t\tfeatureSelectors[ feature ] = {};\n\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\tfeatureSelectors[ feature ][ subfeature ] = scopeSelector(\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tsubfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn featureSelectors;\n}\n\n/**\n * Appends a sub-selector to an existing one.\n *\n * Given the compounded `selector` \"h1, h2, h3\"\n * and the `toAppend` selector \".some-class\" the result will be\n * \"h1.some-class, h2.some-class, h3.some-class\".\n *\n * @param {string} selector Original selector.\n * @param {string} toAppend Selector to append.\n *\n * @return {string} The new selector.\n */\nexport function appendToSelector( selector, toAppend ) {\n\tif ( ! selector.includes( ',' ) ) {\n\t\treturn selector + toAppend;\n\t}\n\tconst selectors = selector.split( ',' );\n\tconst newSelectors = selectors.map( ( sel ) => sel + toAppend );\n\treturn newSelectors.join( ',' );\n}\n\n/**\n * Compares global style variations according to their styles and settings properties.\n *\n * @example\n * ```js\n * const globalStyles = { styles: { typography: { fontSize: '10px' } }, settings: {} };\n * const variation = { styles: { typography: { fontSize: '10000px' } }, settings: {} };\n * const isEqual = areGlobalStyleConfigsEqual( globalStyles, variation );\n * // false\n * ```\n *\n * @param {Object} original A global styles object.\n * @param {Object} variation A global styles object.\n *\n * @return {boolean} Whether `original` and `variation` match.\n */\nexport function areGlobalStyleConfigsEqual( original, variation ) {\n\tif ( typeof original !== 'object' || typeof variation !== 'object' ) {\n\t\treturn original === variation;\n\t}\n\treturn (\n\t\tfastDeepEqual( original?.styles, variation?.styles ) &&\n\t\tfastDeepEqual( original?.settings, variation?.settings )\n\t);\n}\n\n/**\n * Generates the selector for a block style variation by creating the\n * appropriate CSS class and adding it to the ancestor portion of the block's\n * selector.\n *\n * For example, take the Button block which has a compound selector:\n * `.wp-block-button .wp-block-button__link`. With a variation named 'custom',\n * the class `.is-style-custom` should be added to the `.wp-block-button`\n * ancestor only.\n *\n * This function will take into account comma separated and complex selectors.\n *\n * @param {string} variation Name for the variation.\n * @param {string} blockSelector CSS selector for the block.\n *\n * @return {string} CSS selector for the block style variation.\n */\nexport function getBlockStyleVariationSelector( variation, blockSelector ) {\n\tconst variationClass = `.is-style-${ variation }`;\n\n\tif ( ! blockSelector ) {\n\t\treturn variationClass;\n\t}\n\n\tconst ancestorRegex = /((?::\\([^)]+\\))?\\s*)([^\\s:]+)/;\n\tconst addVariationClass = ( _match, group1, group2 ) => {\n\t\treturn group1 + group2 + variationClass;\n\t};\n\n\tconst result = blockSelector\n\t\t.split( ',' )\n\t\t.map( ( part ) => part.replace( ancestorRegex, addVariationClass ) );\n\n\treturn result.join( ',' );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["fastDeepEqual","useViewportMatch","getTypographyFontSizeValue","getValueFromObjectPath","ROOT_BLOCK_SELECTOR","ROOT_CSS_PROPERTIES_SELECTOR","PRESET_METADATA","path","valueKey","cssVarInfix","classes","classSuffix","propertyName","valueFunc","slug","preset","settings","size","STYLE_PATH_TO_CSS_VAR_INFIX","shadow","STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE","useToolsPanelDropdownMenuProps","isMobile","popoverProps","placement","offset","findInPresetsBy","features","blockName","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","origin","presets","presetObject","find","highestPresetObjectWithSameSlug","undefined","getPresetVariableFromValue","variableStylePath","presetPropertyValue","metadata","data","getValueFromPresetVariable","variable","presetType","result","getValueFromVariable","getValueFromCustomVariable","_getValueFromObjectPa","ref","refPath","split","USER_VALUE_PREFIX","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","parsedVar","startsWith","slice","length","endsWith","type","scopeSelector","scope","selector","scopes","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","scopeFeatureSelectors","featureSelectors","Object","entries","feature","subfeature","subfeatureSelector","appendToSelector","toAppend","includes","newSelectors","map","sel","areGlobalStyleConfigsEqual","original","variation","styles","getBlockStyleVariationSelector","blockSelector","variationClass","ancestorRegex","addVariationClass","_match","group1","group2","part","replace"],"sources":["@wordpress/block-editor/src/components/global-styles/utils.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_CSS_PROPERTIES_SELECTOR = ':root';\n\nexport const PRESET_METADATA = [\n\t{\n\t\tpath: [ 'color', 'palette' ],\n\t\tvalueKey: 'color',\n\t\tcssVarInfix: 'color',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'color', propertyName: 'color' },\n\t\t\t{\n\t\t\t\tclassSuffix: 'background-color',\n\t\t\t\tpropertyName: 'background-color',\n\t\t\t},\n\t\t\t{\n\t\t\t\tclassSuffix: 'border-color',\n\t\t\t\tpropertyName: 'border-color',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'gradients' ],\n\t\tvalueKey: 'gradient',\n\t\tcssVarInfix: 'gradient',\n\t\tclasses: [\n\t\t\t{\n\t\t\t\tclassSuffix: 'gradient-background',\n\t\t\t\tpropertyName: 'background',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'duotone' ],\n\t\tvalueKey: 'colors',\n\t\tcssVarInfix: 'duotone',\n\t\tvalueFunc: ( { slug } ) => `url( '#wp-duotone-${ slug }' )`,\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'shadow', 'presets' ],\n\t\tvalueKey: 'shadow',\n\t\tcssVarInfix: 'shadow',\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontSizes' ],\n\t\tvalueFunc: ( preset, settings ) =>\n\t\t\tgetTypographyFontSizeValue( preset, settings ),\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'font-size',\n\t\tclasses: [ { classSuffix: 'font-size', propertyName: 'font-size' } ],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontFamilies' ],\n\t\tvalueKey: 'fontFamily',\n\t\tcssVarInfix: 'font-family',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'font-family', propertyName: 'font-family' },\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'spacing', 'spacingSizes' ],\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'spacing',\n\t\tvalueFunc: ( { size } ) => size,\n\t\tclasses: [],\n\t},\n];\n\nexport const STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'filter.duotone': 'duotone',\n\t'elements.link.color.text': 'color',\n\t'elements.link.:hover.color.text': 'color',\n\t'elements.link.typography.fontFamily': 'font-family',\n\t'elements.link.typography.fontSize': 'font-size',\n\t'elements.button.color.text': 'color',\n\t'elements.button.color.background': 'color',\n\t'elements.caption.color.text': 'color',\n\t'elements.button.typography.fontFamily': 'font-family',\n\t'elements.button.typography.fontSize': 'font-size',\n\t'elements.heading.color': 'color',\n\t'elements.heading.color.background': 'color',\n\t'elements.heading.typography.fontFamily': 'font-family',\n\t'elements.heading.gradient': 'gradient',\n\t'elements.heading.color.gradient': 'gradient',\n\t'elements.h1.color': 'color',\n\t'elements.h1.color.background': 'color',\n\t'elements.h1.typography.fontFamily': 'font-family',\n\t'elements.h1.color.gradient': 'gradient',\n\t'elements.h2.color': 'color',\n\t'elements.h2.color.background': 'color',\n\t'elements.h2.typography.fontFamily': 'font-family',\n\t'elements.h2.color.gradient': 'gradient',\n\t'elements.h3.color': 'color',\n\t'elements.h3.color.background': 'color',\n\t'elements.h3.typography.fontFamily': 'font-family',\n\t'elements.h3.color.gradient': 'gradient',\n\t'elements.h4.color': 'color',\n\t'elements.h4.color.background': 'color',\n\t'elements.h4.typography.fontFamily': 'font-family',\n\t'elements.h4.color.gradient': 'gradient',\n\t'elements.h5.color': 'color',\n\t'elements.h5.color.background': 'color',\n\t'elements.h5.typography.fontFamily': 'font-family',\n\t'elements.h5.color.gradient': 'gradient',\n\t'elements.h6.color': 'color',\n\t'elements.h6.color.background': 'color',\n\t'elements.h6.typography.fontFamily': 'font-family',\n\t'elements.h6.color.gradient': 'gradient',\n\t'color.gradient': 'gradient',\n\tshadow: 'shadow',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\n};\n\n// A static list of block attributes that store global style preset slugs.\nexport const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {\n\t'color.background': 'backgroundColor',\n\t'color.text': 'textColor',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'fontSize',\n\t'typography.fontFamily': 'fontFamily',\n};\n\nexport function useToolsPanelDropdownMenuProps() {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n}\n\nfunction findInPresetsBy(\n\tfeatures,\n\tblockName,\n\tpresetPath,\n\tpresetProperty,\n\tpresetValueValue\n) {\n\t// Block presets take priority above root level presets.\n\tconst orderedPresetsByOrigin = [\n\t\tgetValueFromObjectPath( features, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t...presetPath,\n\t\t] ),\n\t\tgetValueFromObjectPath( features, presetPath ),\n\t];\n\n\tfor ( const presetByOrigin of orderedPresetsByOrigin ) {\n\t\tif ( presetByOrigin ) {\n\t\t\t// Preset origins ordered by priority.\n\t\t\tconst origins = [ 'custom', 'theme', 'default' ];\n\t\t\tfor ( const origin of origins ) {\n\t\t\t\tconst presets = presetByOrigin[ origin ];\n\t\t\t\tif ( presets ) {\n\t\t\t\t\tconst presetObject = presets.find(\n\t\t\t\t\t\t( preset ) =>\n\t\t\t\t\t\t\tpreset[ presetProperty ] === presetValueValue\n\t\t\t\t\t);\n\t\t\t\t\tif ( presetObject ) {\n\t\t\t\t\t\tif ( presetProperty === 'slug' ) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If there is a highest priority preset with the same slug but different value the preset we found was overwritten and should be ignored.\n\t\t\t\t\t\tconst highestPresetObjectWithSameSlug = findInPresetsBy(\n\t\t\t\t\t\t\tfeatures,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpresetPath,\n\t\t\t\t\t\t\t'slug',\n\t\t\t\t\t\t\tpresetObject.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thighestPresetObjectWithSameSlug[\n\t\t\t\t\t\t\t\tpresetProperty\n\t\t\t\t\t\t\t] === presetObject[ presetProperty ]\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function getPresetVariableFromValue(\n\tfeatures,\n\tblockName,\n\tvariableStylePath,\n\tpresetPropertyValue\n) {\n\tif ( ! presetPropertyValue ) {\n\t\treturn presetPropertyValue;\n\t}\n\n\tconst cssVarInfix = STYLE_PATH_TO_CSS_VAR_INFIX[ variableStylePath ];\n\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === cssVarInfix\n\t);\n\n\tif ( ! metadata ) {\n\t\t// The property doesn't have preset data\n\t\t// so the value should be returned as it is.\n\t\treturn presetPropertyValue;\n\t}\n\tconst { valueKey, path } = metadata;\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\n\t\tblockName,\n\t\tpath,\n\t\tvalueKey,\n\t\tpresetPropertyValue\n\t);\n\n\tif ( ! presetObject ) {\n\t\t// Value wasn't found in the presets,\n\t\t// so it must be a custom value.\n\t\treturn presetPropertyValue;\n\t}\n\n\treturn `var:preset|${ cssVarInfix }|${ presetObject.slug }`;\n}\n\nfunction getValueFromPresetVariable(\n\tfeatures,\n\tblockName,\n\tvariable,\n\t[ presetType, slug ]\n) {\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === presetType\n\t);\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures.settings,\n\t\tblockName,\n\t\tmetadata.path,\n\t\t'slug',\n\t\tslug\n\t);\n\n\tif ( presetObject ) {\n\t\tconst { valueKey } = metadata;\n\t\tconst result = presetObject[ valueKey ];\n\t\treturn getValueFromVariable( features, blockName, result );\n\t}\n\n\treturn variable;\n}\n\nfunction getValueFromCustomVariable( features, blockName, variable, path ) {\n\tconst result =\n\t\tgetValueFromObjectPath( features.settings, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t'custom',\n\t\t\t...path,\n\t\t] ) ??\n\t\tgetValueFromObjectPath( features.settings, [ 'custom', ...path ] );\n\tif ( ! result ) {\n\t\treturn variable;\n\t}\n\t// A variable may reference another variable so we need recursion until we find the value.\n\treturn getValueFromVariable( features, blockName, result );\n}\n\n/**\n * Attempts to fetch the value of a theme.json CSS variable.\n *\n * @param {Object} features GlobalStylesContext config, e.g., user, base or merged. Represents the theme.json tree.\n * @param {string} blockName The name of a block as represented in the styles property. E.g., 'root' for root-level, and 'core/${blockName}' for blocks.\n * @param {string|*} variable An incoming style value. A CSS var value is expected, but it could be any value.\n * @return {string|*|{ref}} The value of the CSS var, if found. If not found, the passed variable argument.\n */\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || typeof variable !== 'string' ) {\n\t\tif ( variable?.ref && typeof variable?.ref === 'string' ) {\n\t\t\tconst refPath = variable.ref.split( '.' );\n\t\t\tvariable = getValueFromObjectPath( features, refPath );\n\t\t\t// Presence of another ref indicates a reference to another dynamic value.\n\t\t\t// Pointing to another dynamic value is not supported.\n\t\t\tif ( ! variable || !! variable?.ref ) {\n\t\t\t\treturn variable;\n\t\t\t}\n\t\t} else {\n\t\t\treturn variable;\n\t\t}\n\t}\n\tconst USER_VALUE_PREFIX = 'var:';\n\tconst THEME_VALUE_PREFIX = 'var(--wp--';\n\tconst THEME_VALUE_SUFFIX = ')';\n\n\tlet parsedVar;\n\n\tif ( variable.startsWith( USER_VALUE_PREFIX ) ) {\n\t\tparsedVar = variable.slice( USER_VALUE_PREFIX.length ).split( '|' );\n\t} else if (\n\t\tvariable.startsWith( THEME_VALUE_PREFIX ) &&\n\t\tvariable.endsWith( THEME_VALUE_SUFFIX )\n\t) {\n\t\tparsedVar = variable\n\t\t\t.slice( THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length )\n\t\t\t.split( '--' );\n\t} else {\n\t\t// We don't know how to parse the value: either is raw of uses complex CSS such as `calc(1px * var(--wp--variable) )`\n\t\treturn variable;\n\t}\n\n\tconst [ type, ...path ] = parsedVar;\n\tif ( type === 'preset' ) {\n\t\treturn getValueFromPresetVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\tif ( type === 'custom' ) {\n\t\treturn getValueFromCustomVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\treturn variable;\n}\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nexport function scopeSelector( scope, selector ) {\n\tif ( ! scope || ! selector ) {\n\t\treturn selector;\n\t}\n\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Scopes a collection of selectors for features and subfeatures.\n *\n * @example\n * ```js\n * const scope = '.custom-scope';\n * const selectors = {\n * color: '.wp-my-block p',\n * typography: { fontSize: '.wp-my-block caption' },\n * };\n * const result = scopeFeatureSelector( scope, selectors );\n * // result is {\n * // color: '.custom-scope .wp-my-block p',\n * // typography: { fonSize: '.custom-scope .wp-my-block caption' },\n * // }\n * ```\n *\n * @param {string} scope Selector to scope collection of selectors with.\n * @param {Object} selectors Collection of feature selectors e.g.\n *\n * @return {Object|undefined} Scoped collection of feature selectors.\n */\nexport function scopeFeatureSelectors( scope, selectors ) {\n\tif ( ! scope || ! selectors ) {\n\t\treturn;\n\t}\n\n\tconst featureSelectors = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\tif ( typeof selector === 'string' ) {\n\t\t\tfeatureSelectors[ feature ] = scopeSelector( scope, selector );\n\t\t}\n\n\t\tif ( typeof selector === 'object' ) {\n\t\t\tfeatureSelectors[ feature ] = {};\n\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\tfeatureSelectors[ feature ][ subfeature ] = scopeSelector(\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tsubfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn featureSelectors;\n}\n\n/**\n * Appends a sub-selector to an existing one.\n *\n * Given the compounded `selector` \"h1, h2, h3\"\n * and the `toAppend` selector \".some-class\" the result will be\n * \"h1.some-class, h2.some-class, h3.some-class\".\n *\n * @param {string} selector Original selector.\n * @param {string} toAppend Selector to append.\n *\n * @return {string} The new selector.\n */\nexport function appendToSelector( selector, toAppend ) {\n\tif ( ! selector.includes( ',' ) ) {\n\t\treturn selector + toAppend;\n\t}\n\tconst selectors = selector.split( ',' );\n\tconst newSelectors = selectors.map( ( sel ) => sel + toAppend );\n\treturn newSelectors.join( ',' );\n}\n\n/**\n * Compares global style variations according to their styles and settings properties.\n *\n * @example\n * ```js\n * const globalStyles = { styles: { typography: { fontSize: '10px' } }, settings: {} };\n * const variation = { styles: { typography: { fontSize: '10000px' } }, settings: {} };\n * const isEqual = areGlobalStyleConfigsEqual( globalStyles, variation );\n * // false\n * ```\n *\n * @param {Object} original A global styles object.\n * @param {Object} variation A global styles object.\n *\n * @return {boolean} Whether `original` and `variation` match.\n */\nexport function areGlobalStyleConfigsEqual( original, variation ) {\n\tif ( typeof original !== 'object' || typeof variation !== 'object' ) {\n\t\treturn original === variation;\n\t}\n\treturn (\n\t\tfastDeepEqual( original?.styles, variation?.styles ) &&\n\t\tfastDeepEqual( original?.settings, variation?.settings )\n\t);\n}\n\n/**\n * Generates the selector for a block style variation by creating the\n * appropriate CSS class and adding it to the ancestor portion of the block's\n * selector.\n *\n * For example, take the Button block which has a compound selector:\n * `.wp-block-button .wp-block-button__link`. With a variation named 'custom',\n * the class `.is-style-custom` should be added to the `.wp-block-button`\n * ancestor only.\n *\n * This function will take into account comma separated and complex selectors.\n *\n * @param {string} variation Name for the variation.\n * @param {string} blockSelector CSS selector for the block.\n *\n * @return {string} CSS selector for the block style variation.\n */\nexport function getBlockStyleVariationSelector( variation, blockSelector ) {\n\tconst variationClass = `.is-style-${ variation }`;\n\n\tif ( ! blockSelector ) {\n\t\treturn variationClass;\n\t}\n\n\tconst ancestorRegex = /((?::\\([^)]+\\))?\\s*)([^\\s:]+)/;\n\tconst addVariationClass = ( _match, group1, group2 ) => {\n\t\treturn group1 + group2 + variationClass;\n\t};\n\n\tconst result = blockSelector\n\t\t.split( ',' )\n\t\t.map( ( part ) => part.replace( ancestorRegex, addVariationClass ) );\n\n\treturn result.join( ',' );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@ import { useCallback } from '@wordpress/element';
10
10
  */
11
11
  import { store as blockEditorStore } from '../../store';
12
12
  import { cleanEmptyObject } from '../../hooks/utils';
13
- import { TOOLSPANEL_DROPDOWNMENU_PROPS } from '../global-styles/utils';
13
+ import { useToolsPanelDropdownMenuProps } from '../global-styles/utils';
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
15
  export default function BlockSupportToolsPanel({
16
16
  children,
@@ -26,6 +26,7 @@ export default function BlockSupportToolsPanel({
26
26
  getSelectedBlockClientId,
27
27
  hasMultiSelection
28
28
  } = useSelect(blockEditorStore);
29
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
29
30
  const panelId = getSelectedBlockClientId();
30
31
  const resetAll = useCallback((resetFilters = []) => {
31
32
  const newAttributes = {};
@@ -63,7 +64,7 @@ export default function BlockSupportToolsPanel({
63
64
  ,
64
65
  __experimentalFirstVisibleItemClass: "first",
65
66
  __experimentalLastVisibleItemClass: "last",
66
- dropdownMenuProps: TOOLSPANEL_DROPDOWNMENU_PROPS,
67
+ dropdownMenuProps: dropdownMenuProps,
67
68
  children: children
68
69
  }, panelId);
69
70
  }
@@ -1 +1 @@
1
- {"version":3,"names":["__experimentalToolsPanel","ToolsPanel","useDispatch","useSelect","useCallback","store","blockEditorStore","cleanEmptyObject","TOOLSPANEL_DROPDOWNMENU_PROPS","jsx","_jsx","BlockSupportToolsPanel","children","group","label","updateBlockAttributes","getBlockAttributes","getMultiSelectedBlockClientIds","getSelectedBlockClientId","hasMultiSelection","panelId","resetAll","resetFilters","newAttributes","clientIds","forEach","clientId","style","newBlockAttributes","resetFilter","className","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass","dropdownMenuProps"],"sources":["@wordpress/block-editor/src/components/inspector-controls/block-support-tools-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { TOOLSPANEL_DROPDOWNMENU_PROPS } from '../global-styles/utils';\n\nexport default function BlockSupportToolsPanel( { children, group, label } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetMultiSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\thasMultiSelection,\n\t} = useSelect( blockEditorStore );\n\n\tconst panelId = getSelectedBlockClientId();\n\tconst resetAll = useCallback(\n\t\t( resetFilters = [] ) => {\n\t\t\tconst newAttributes = {};\n\n\t\t\tconst clientIds = hasMultiSelection()\n\t\t\t\t? getMultiSelectedBlockClientIds()\n\t\t\t\t: [ panelId ];\n\n\t\t\tclientIds.forEach( ( clientId ) => {\n\t\t\t\tconst { style } = getBlockAttributes( clientId );\n\t\t\t\tlet newBlockAttributes = { style };\n\n\t\t\t\tresetFilters.forEach( ( resetFilter ) => {\n\t\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\t\t...resetFilter( newBlockAttributes ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Enforce a cleaned style object.\n\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\tstyle: cleanEmptyObject( newBlockAttributes.style ),\n\t\t\t\t};\n\n\t\t\t\tnewAttributes[ clientId ] = newBlockAttributes;\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes, true );\n\t\t},\n\t\t[\n\t\t\tgetBlockAttributes,\n\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\tpanelId,\n\t\t\tupdateBlockAttributes,\n\t\t]\n\t);\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tclassName={ `${ group }-block-support-panel` }\n\t\t\tlabel={ label }\n\t\t\tresetAll={ resetAll }\n\t\t\tkey={ panelId }\n\t\t\tpanelId={ panelId }\n\t\t\thasInnerWrapper\n\t\t\tshouldRenderPlaceholderItems // Required to maintain fills ordering.\n\t\t\t__experimentalFirstVisibleItemClass=\"first\"\n\t\t\t__experimentalLastVisibleItemClass=\"last\"\n\t\t\tdropdownMenuProps={ TOOLSPANEL_DROPDOWNMENU_PROPS }\n\t\t>\n\t\t\t{ children }\n\t\t</ToolsPanel>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,wBAAwB,IAAIC,UAAU,QAAQ,uBAAuB;AAC9E,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,WAAW,QAAQ,oBAAoB;;AAEhD;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,6BAA6B,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvE,eAAe,SAASC,sBAAsBA,CAAE;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAM,CAAC,EAAG;EAC5E,MAAM;IAAEC;EAAsB,CAAC,GAAGb,WAAW,CAAEI,gBAAiB,CAAC;EACjE,MAAM;IACLU,kBAAkB;IAClBC,8BAA8B;IAC9BC,wBAAwB;IACxBC;EACD,CAAC,GAAGhB,SAAS,CAAEG,gBAAiB,CAAC;EAEjC,MAAMc,OAAO,GAAGF,wBAAwB,CAAC,CAAC;EAC1C,MAAMG,QAAQ,GAAGjB,WAAW,CAC3B,CAAEkB,YAAY,GAAG,EAAE,KAAM;IACxB,MAAMC,aAAa,GAAG,CAAC,CAAC;IAExB,MAAMC,SAAS,GAAGL,iBAAiB,CAAC,CAAC,GAClCF,8BAA8B,CAAC,CAAC,GAChC,CAAEG,OAAO,CAAE;IAEdI,SAAS,CAACC,OAAO,CAAIC,QAAQ,IAAM;MAClC,MAAM;QAAEC;MAAM,CAAC,GAAGX,kBAAkB,CAAEU,QAAS,CAAC;MAChD,IAAIE,kBAAkB,GAAG;QAAED;MAAM,CAAC;MAElCL,YAAY,CAACG,OAAO,CAAII,WAAW,IAAM;QACxCD,kBAAkB,GAAG;UACpB,GAAGA,kBAAkB;UACrB,GAAGC,WAAW,CAAED,kBAAmB;QACpC,CAAC;MACF,CAAE,CAAC;;MAEH;MACAA,kBAAkB,GAAG;QACpB,GAAGA,kBAAkB;QACrBD,KAAK,EAAEpB,gBAAgB,CAAEqB,kBAAkB,CAACD,KAAM;MACnD,CAAC;MAEDJ,aAAa,CAAEG,QAAQ,CAAE,GAAGE,kBAAkB;IAC/C,CAAE,CAAC;IAEHb,qBAAqB,CAAES,SAAS,EAAED,aAAa,EAAE,IAAK,CAAC;EACxD,CAAC,EACD,CACCP,kBAAkB,EAClBC,8BAA8B,EAC9BE,iBAAiB,EACjBC,OAAO,EACPL,qBAAqB,CAEvB,CAAC;EAED,oBACCL,IAAA,CAACT,UAAU;IACV6B,SAAS,EAAI,GAAGjB,KAAO,sBAAuB;IAC9CC,KAAK,EAAGA,KAAO;IACfO,QAAQ,EAAGA,QAAU;IAErBD,OAAO,EAAGA,OAAS;IACnBW,eAAe;IACfC,4BAA4B,OAAC;IAAA;IAC7BC,mCAAmC,EAAC,OAAO;IAC3CC,kCAAkC,EAAC,MAAM;IACzCC,iBAAiB,EAAG3B,6BAA+B;IAAAI,QAAA,EAEjDA;EAAQ,GARJQ,OASK,CAAC;AAEf","ignoreList":[]}
1
+ {"version":3,"names":["__experimentalToolsPanel","ToolsPanel","useDispatch","useSelect","useCallback","store","blockEditorStore","cleanEmptyObject","useToolsPanelDropdownMenuProps","jsx","_jsx","BlockSupportToolsPanel","children","group","label","updateBlockAttributes","getBlockAttributes","getMultiSelectedBlockClientIds","getSelectedBlockClientId","hasMultiSelection","dropdownMenuProps","panelId","resetAll","resetFilters","newAttributes","clientIds","forEach","clientId","style","newBlockAttributes","resetFilter","className","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass"],"sources":["@wordpress/block-editor/src/components/inspector-controls/block-support-tools-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { useToolsPanelDropdownMenuProps } from '../global-styles/utils';\n\nexport default function BlockSupportToolsPanel( { children, group, label } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetMultiSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\thasMultiSelection,\n\t} = useSelect( blockEditorStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst panelId = getSelectedBlockClientId();\n\tconst resetAll = useCallback(\n\t\t( resetFilters = [] ) => {\n\t\t\tconst newAttributes = {};\n\n\t\t\tconst clientIds = hasMultiSelection()\n\t\t\t\t? getMultiSelectedBlockClientIds()\n\t\t\t\t: [ panelId ];\n\n\t\t\tclientIds.forEach( ( clientId ) => {\n\t\t\t\tconst { style } = getBlockAttributes( clientId );\n\t\t\t\tlet newBlockAttributes = { style };\n\n\t\t\t\tresetFilters.forEach( ( resetFilter ) => {\n\t\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\t\t...resetFilter( newBlockAttributes ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Enforce a cleaned style object.\n\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\tstyle: cleanEmptyObject( newBlockAttributes.style ),\n\t\t\t\t};\n\n\t\t\t\tnewAttributes[ clientId ] = newBlockAttributes;\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes, true );\n\t\t},\n\t\t[\n\t\t\tgetBlockAttributes,\n\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\tpanelId,\n\t\t\tupdateBlockAttributes,\n\t\t]\n\t);\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tclassName={ `${ group }-block-support-panel` }\n\t\t\tlabel={ label }\n\t\t\tresetAll={ resetAll }\n\t\t\tkey={ panelId }\n\t\t\tpanelId={ panelId }\n\t\t\thasInnerWrapper\n\t\t\tshouldRenderPlaceholderItems // Required to maintain fills ordering.\n\t\t\t__experimentalFirstVisibleItemClass=\"first\"\n\t\t\t__experimentalLastVisibleItemClass=\"last\"\n\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t>\n\t\t\t{ children }\n\t\t</ToolsPanel>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,wBAAwB,IAAIC,UAAU,QAAQ,uBAAuB;AAC9E,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,WAAW,QAAQ,oBAAoB;;AAEhD;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,8BAA8B,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAExE,eAAe,SAASC,sBAAsBA,CAAE;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAM,CAAC,EAAG;EAC5E,MAAM;IAAEC;EAAsB,CAAC,GAAGb,WAAW,CAAEI,gBAAiB,CAAC;EACjE,MAAM;IACLU,kBAAkB;IAClBC,8BAA8B;IAC9BC,wBAAwB;IACxBC;EACD,CAAC,GAAGhB,SAAS,CAAEG,gBAAiB,CAAC;EACjC,MAAMc,iBAAiB,GAAGZ,8BAA8B,CAAC,CAAC;EAC1D,MAAMa,OAAO,GAAGH,wBAAwB,CAAC,CAAC;EAC1C,MAAMI,QAAQ,GAAGlB,WAAW,CAC3B,CAAEmB,YAAY,GAAG,EAAE,KAAM;IACxB,MAAMC,aAAa,GAAG,CAAC,CAAC;IAExB,MAAMC,SAAS,GAAGN,iBAAiB,CAAC,CAAC,GAClCF,8BAA8B,CAAC,CAAC,GAChC,CAAEI,OAAO,CAAE;IAEdI,SAAS,CAACC,OAAO,CAAIC,QAAQ,IAAM;MAClC,MAAM;QAAEC;MAAM,CAAC,GAAGZ,kBAAkB,CAAEW,QAAS,CAAC;MAChD,IAAIE,kBAAkB,GAAG;QAAED;MAAM,CAAC;MAElCL,YAAY,CAACG,OAAO,CAAII,WAAW,IAAM;QACxCD,kBAAkB,GAAG;UACpB,GAAGA,kBAAkB;UACrB,GAAGC,WAAW,CAAED,kBAAmB;QACpC,CAAC;MACF,CAAE,CAAC;;MAEH;MACAA,kBAAkB,GAAG;QACpB,GAAGA,kBAAkB;QACrBD,KAAK,EAAErB,gBAAgB,CAAEsB,kBAAkB,CAACD,KAAM;MACnD,CAAC;MAEDJ,aAAa,CAAEG,QAAQ,CAAE,GAAGE,kBAAkB;IAC/C,CAAE,CAAC;IAEHd,qBAAqB,CAAEU,SAAS,EAAED,aAAa,EAAE,IAAK,CAAC;EACxD,CAAC,EACD,CACCR,kBAAkB,EAClBC,8BAA8B,EAC9BE,iBAAiB,EACjBE,OAAO,EACPN,qBAAqB,CAEvB,CAAC;EAED,oBACCL,IAAA,CAACT,UAAU;IACV8B,SAAS,EAAI,GAAGlB,KAAO,sBAAuB;IAC9CC,KAAK,EAAGA,KAAO;IACfQ,QAAQ,EAAGA,QAAU;IAErBD,OAAO,EAAGA,OAAS;IACnBW,eAAe;IACfC,4BAA4B,OAAC;IAAA;IAC7BC,mCAAmC,EAAC,OAAO;IAC3CC,kCAAkC,EAAC,MAAM;IACzCf,iBAAiB,EAAGA,iBAAmB;IAAAR,QAAA,EAErCA;EAAQ,GARJS,OASK,CAAC;AAEf","ignoreList":[]}
@@ -10,8 +10,12 @@ import { useContext, useMemo } from '@wordpress/element';
10
10
  */
11
11
  import { GlobalStylesContext, toStyles, getBlockSelectors } from '../components/global-styles';
12
12
  import { useStyleOverride } from './utils';
13
+ import { getValueFromObjectPath } from '../utils/object';
13
14
  import { store as blockEditorStore } from '../store';
14
15
  import { globalStylesDataKey } from '../store/private-keys';
16
+ import { unlock } from '../lock-unlock';
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { Fragment as _Fragment } from "react/jsx-runtime";
15
19
  const VARIATION_PREFIX = 'is-style-';
16
20
  function getVariationMatches(className) {
17
21
  if (!className) {
@@ -50,7 +54,164 @@ function getVariationNameFromClass(className, registeredStyles = []) {
50
54
  }
51
55
  return null;
52
56
  }
53
- function useBlockSyleVariation(name, variation, clientId) {
57
+
58
+ // A helper component to apply a style override using the useStyleOverride hook.
59
+ function OverrideStyles({
60
+ override
61
+ }) {
62
+ useStyleOverride(override);
63
+ }
64
+
65
+ /**
66
+ * This component is used to generate new block style variation overrides
67
+ * based on an incoming theme config. If a matching style is found in the config,
68
+ * a new override is created and returned. The overrides can be used in conjunction with
69
+ * useStyleOverride to apply the new styles to the editor. Its use is
70
+ * subject to change.
71
+ *
72
+ * @param {Object} props Props.
73
+ * @param {Object} props.config A global styles object, containing settings and styles.
74
+ * @return {JSX.Element|undefined} An array of new block variation overrides.
75
+ */
76
+ export function __unstableBlockStyleVariationOverridesWithConfig({
77
+ config
78
+ }) {
79
+ const {
80
+ getBlockStyles,
81
+ overrides
82
+ } = useSelect(select => ({
83
+ getBlockStyles: select(blocksStore).getBlockStyles,
84
+ overrides: unlock(select(blockEditorStore)).getStyleOverrides()
85
+ }), []);
86
+ const {
87
+ getBlockName
88
+ } = useSelect(blockEditorStore);
89
+ const overridesWithConfig = useMemo(() => {
90
+ if (!overrides?.length) {
91
+ return;
92
+ }
93
+ const newOverrides = [];
94
+ const overriddenClientIds = [];
95
+ for (const [, override] of overrides) {
96
+ if (override?.variation && override?.clientId &&
97
+ /*
98
+ * Because this component overwrites existing style overrides,
99
+ * filter out any overrides that are already present in the store.
100
+ */
101
+ !overriddenClientIds.includes(override.clientId)) {
102
+ const blockName = getBlockName(override.clientId);
103
+ const configStyles = config?.styles?.blocks?.[blockName]?.variations?.[override.variation];
104
+ if (configStyles) {
105
+ const variationConfig = {
106
+ settings: config?.settings,
107
+ // The variation style data is all that is needed to generate
108
+ // the styles for the current application to a block. The variation
109
+ // name is updated to match the instance specific class name.
110
+ styles: {
111
+ blocks: {
112
+ [blockName]: {
113
+ variations: {
114
+ [`${override.variation}-${override.clientId}`]: configStyles
115
+ }
116
+ }
117
+ }
118
+ }
119
+ };
120
+ const blockSelectors = getBlockSelectors(getBlockTypes(), getBlockStyles, override.clientId);
121
+ const hasBlockGapSupport = false;
122
+ const hasFallbackGapSupport = true;
123
+ const disableLayoutStyles = true;
124
+ const disableRootPadding = true;
125
+ const variationStyles = toStyles(variationConfig, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport, disableLayoutStyles, disableRootPadding, {
126
+ blockGap: false,
127
+ blockStyles: true,
128
+ layoutStyles: false,
129
+ marginReset: false,
130
+ presets: false,
131
+ rootPadding: false,
132
+ variationStyles: true
133
+ });
134
+ newOverrides.push({
135
+ id: `${override.variation}-${override.clientId}`,
136
+ css: variationStyles,
137
+ __unstableType: 'variation',
138
+ variation: override.variation,
139
+ // The clientId will be stored with the override and used to ensure
140
+ // the order of overrides matches the order of blocks so that the
141
+ // correct CSS cascade is maintained.
142
+ clientId: override.clientId
143
+ });
144
+ overriddenClientIds.push(override.clientId);
145
+ }
146
+ }
147
+ }
148
+ return newOverrides;
149
+ }, [config, overrides, getBlockStyles, getBlockName]);
150
+ if (!overridesWithConfig || !overridesWithConfig.length) {
151
+ return;
152
+ }
153
+ return /*#__PURE__*/_jsx(_Fragment, {
154
+ children: overridesWithConfig.map(override => /*#__PURE__*/_jsx(OverrideStyles, {
155
+ override: override
156
+ }, override.id))
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Retrieves any variation styles data and resolves any referenced values.
162
+ *
163
+ * @param {Object} globalStyles A complete global styles object, containing settings and styles.
164
+ * @param {string} name The name of the desired block type.
165
+ * @param {variation} variation The of the block style variation to retrieve data for.
166
+ *
167
+ * @return {Object|undefined} The global styles data for the specified variation.
168
+ */
169
+ export function getVariationStylesWithRefValues(globalStyles, name, variation) {
170
+ if (!globalStyles?.styles?.blocks?.[name]?.variations?.[variation]) {
171
+ return;
172
+ }
173
+
174
+ // Helper to recursively look for `ref` values to resolve.
175
+ const replaceRefs = variationStyles => {
176
+ Object.keys(variationStyles).forEach(key => {
177
+ const value = variationStyles[key];
178
+
179
+ // Only process objects.
180
+ if (typeof value === 'object' && value !== null) {
181
+ // Process `ref` value if present.
182
+ if (value.ref !== undefined) {
183
+ if (typeof value.ref !== 'string' || value.ref.trim() === '') {
184
+ // Remove invalid ref.
185
+ delete variationStyles[key];
186
+ } else {
187
+ // Resolve `ref` value.
188
+ const refValue = getValueFromObjectPath(globalStyles, value.ref);
189
+ if (refValue) {
190
+ variationStyles[key] = refValue;
191
+ } else {
192
+ delete variationStyles[key];
193
+ }
194
+ }
195
+ } else {
196
+ // Recursively resolve `ref` values in nested objects.
197
+ replaceRefs(value);
198
+
199
+ // After recursion, if value is empty due to explicitly
200
+ // `undefined` ref value, remove it.
201
+ if (Object.keys(value).length === 0) {
202
+ delete variationStyles[key];
203
+ }
204
+ }
205
+ }
206
+ });
207
+ };
208
+
209
+ // Deep clone variation node to avoid mutating it within global styles and losing refs.
210
+ const styles = JSON.parse(JSON.stringify(globalStyles.styles.blocks[name].variations[variation]));
211
+ replaceRefs(styles);
212
+ return styles;
213
+ }
214
+ function useBlockStyleVariation(name, variation, clientId) {
54
215
  // Prefer global styles data in GlobalStylesContext, which are available
55
216
  // if in the site editor. Otherwise fall back to whatever is in the
56
217
  // editor settings and available in the post editor.
@@ -68,11 +229,13 @@ function useBlockSyleVariation(name, variation, clientId) {
68
229
  };
69
230
  }, []);
70
231
  return useMemo(() => {
71
- var _mergedConfig$styles, _mergedConfig$setting;
72
- const styles = (_mergedConfig$styles = mergedConfig?.styles) !== null && _mergedConfig$styles !== void 0 ? _mergedConfig$styles : globalStyles;
73
- const variationStyles = styles?.blocks?.[name]?.variations?.[variation];
74
- return {
232
+ var _mergedConfig$setting, _mergedConfig$styles, _mergedConfig$setting2;
233
+ const variationStyles = getVariationStylesWithRefValues({
75
234
  settings: (_mergedConfig$setting = mergedConfig?.settings) !== null && _mergedConfig$setting !== void 0 ? _mergedConfig$setting : globalSettings,
235
+ styles: (_mergedConfig$styles = mergedConfig?.styles) !== null && _mergedConfig$styles !== void 0 ? _mergedConfig$styles : globalStyles
236
+ }, name, variation);
237
+ return {
238
+ settings: (_mergedConfig$setting2 = mergedConfig?.settings) !== null && _mergedConfig$setting2 !== void 0 ? _mergedConfig$setting2 : globalSettings,
76
239
  // The variation style data is all that is needed to generate
77
240
  // the styles for the current application to a block. The variation
78
241
  // name is updated to match the instance specific class name.
@@ -106,7 +269,7 @@ function useBlockProps({
106
269
  const {
107
270
  settings,
108
271
  styles
109
- } = useBlockSyleVariation(name, variation, clientId);
272
+ } = useBlockStyleVariation(name, variation, clientId);
110
273
  const variationStyles = useMemo(() => {
111
274
  if (!variation) {
112
275
  return;
@@ -134,6 +297,7 @@ function useBlockProps({
134
297
  id: `variation-${clientId}`,
135
298
  css: variationStyles,
136
299
  __unstableType: 'variation',
300
+ variation,
137
301
  // The clientId will be stored with the override and used to ensure
138
302
  // the order of overrides matches the order of blocks so that the
139
303
  // correct CSS cascade is maintained.
@@ -1 +1 @@
1
- {"version":3,"names":["getBlockTypes","store","blocksStore","useSelect","useContext","useMemo","GlobalStylesContext","toStyles","getBlockSelectors","useStyleOverride","blockEditorStore","globalStylesDataKey","VARIATION_PREFIX","getVariationMatches","className","split","reduce","matches","name","startsWith","match","slice","length","push","getVariationNameFromClass","registeredStyles","variation","some","style","useBlockSyleVariation","clientId","merged","mergedConfig","globalSettings","globalStyles","select","settings","getSettings","__experimentalFeatures","_mergedConfig$styles","_mergedConfig$setting","styles","variationStyles","blocks","variations","useBlockProps","getBlockStyles","variationClass","variationConfig","blockSelectors","hasBlockGapSupport","hasFallbackGapSupport","disableLayoutStyles","disableRootPadding","blockGap","blockStyles","layoutStyles","marginReset","presets","rootPadding","id","css","__unstableType","hasSupport","attributeKeys","isMatch"],"sources":["@wordpress/block-editor/src/hooks/block-style-variation.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockTypes, store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGlobalStylesContext,\n\ttoStyles,\n\tgetBlockSelectors,\n} from '../components/global-styles';\nimport { useStyleOverride } from './utils';\nimport { store as blockEditorStore } from '../store';\nimport { globalStylesDataKey } from '../store/private-keys';\n\nconst VARIATION_PREFIX = 'is-style-';\n\nfunction getVariationMatches( className ) {\n\tif ( ! className ) {\n\t\treturn [];\n\t}\n\treturn className.split( /\\s+/ ).reduce( ( matches, name ) => {\n\t\tif ( name.startsWith( VARIATION_PREFIX ) ) {\n\t\t\tconst match = name.slice( VARIATION_PREFIX.length );\n\t\t\tif ( match !== 'default' ) {\n\t\t\t\tmatches.push( match );\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}, [] );\n}\n\n/**\n * Get the first block style variation that has been registered from the class string.\n *\n * @param {string} className CSS class string for a block.\n * @param {Array} registeredStyles Currently registered block styles.\n *\n * @return {string|null} The name of the first registered variation.\n */\nfunction getVariationNameFromClass( className, registeredStyles = [] ) {\n\t// The global flag affects how capturing groups work in JS. So the regex\n\t// below will only return full CSS classes not just the variation name.\n\tconst matches = getVariationMatches( className );\n\n\tif ( ! matches ) {\n\t\treturn null;\n\t}\n\n\tfor ( const variation of matches ) {\n\t\tif ( registeredStyles.some( ( style ) => style.name === variation ) ) {\n\t\t\treturn variation;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction useBlockSyleVariation( name, variation, clientId ) {\n\t// Prefer global styles data in GlobalStylesContext, which are available\n\t// if in the site editor. Otherwise fall back to whatever is in the\n\t// editor settings and available in the post editor.\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst { globalSettings, globalStyles } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tglobalSettings: settings.__experimentalFeatures,\n\t\t\tglobalStyles: settings[ globalStylesDataKey ],\n\t\t};\n\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst styles = mergedConfig?.styles ?? globalStyles;\n\t\tconst variationStyles =\n\t\t\tstyles?.blocks?.[ name ]?.variations?.[ variation ];\n\n\t\treturn {\n\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t// The variation style data is all that is needed to generate\n\t\t\t// the styles for the current application to a block. The variation\n\t\t\t// name is updated to match the instance specific class name.\n\t\t\tstyles: {\n\t\t\t\tblocks: {\n\t\t\t\t\t[ name ]: {\n\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t[ `${ variation }-${ clientId }` ]: variationStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}, [\n\t\tmergedConfig,\n\t\tglobalSettings,\n\t\tglobalStyles,\n\t\tvariation,\n\t\tclientId,\n\t\tname,\n\t] );\n}\n\n// Rather than leveraging `useInstanceId` here, the `clientId` is used.\n// This is so that the variation style override's ID is predictable\n// when the order of applied style variations changes.\nfunction useBlockProps( { name, className, clientId } ) {\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\tconst registeredStyles = getBlockStyles( name );\n\tconst variation = getVariationNameFromClass( className, registeredStyles );\n\tconst variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;\n\n\tconst { settings, styles } = useBlockSyleVariation(\n\t\tname,\n\t\tvariation,\n\t\tclientId\n\t);\n\n\tconst variationStyles = useMemo( () => {\n\t\tif ( ! variation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst variationConfig = { settings, styles };\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles,\n\t\t\tclientId\n\t\t);\n\t\tconst hasBlockGapSupport = false;\n\t\tconst hasFallbackGapSupport = true;\n\t\tconst disableLayoutStyles = true;\n\t\tconst disableRootPadding = true;\n\n\t\treturn toStyles(\n\t\t\tvariationConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding,\n\t\t\t{\n\t\t\t\tblockGap: false,\n\t\t\t\tblockStyles: true,\n\t\t\t\tlayoutStyles: false,\n\t\t\t\tmarginReset: false,\n\t\t\t\tpresets: false,\n\t\t\t\trootPadding: false,\n\t\t\t\tvariationStyles: true,\n\t\t\t}\n\t\t);\n\t}, [ variation, settings, styles, getBlockStyles, clientId ] );\n\n\tuseStyleOverride( {\n\t\tid: `variation-${ clientId }`,\n\t\tcss: variationStyles,\n\t\t__unstableType: 'variation',\n\t\t// The clientId will be stored with the override and used to ensure\n\t\t// the order of overrides matches the order of blocks so that the\n\t\t// correct CSS cascade is maintained.\n\t\tclientId,\n\t} );\n\n\treturn variation ? { className: variationClass } : {};\n}\n\nexport default {\n\thasSupport: () => true,\n\tattributeKeys: [ 'className' ],\n\tisMatch: ( { className } ) => getVariationMatches( className ).length > 0,\n\tuseBlockProps,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getBlockTypes","store","blocksStore","useSelect","useContext","useMemo","GlobalStylesContext","toStyles","getBlockSelectors","useStyleOverride","getValueFromObjectPath","blockEditorStore","globalStylesDataKey","unlock","jsx","_jsx","Fragment","_Fragment","VARIATION_PREFIX","getVariationMatches","className","split","reduce","matches","name","startsWith","match","slice","length","push","getVariationNameFromClass","registeredStyles","variation","some","style","OverrideStyles","override","__unstableBlockStyleVariationOverridesWithConfig","config","getBlockStyles","overrides","select","getStyleOverrides","getBlockName","overridesWithConfig","newOverrides","overriddenClientIds","clientId","includes","blockName","configStyles","styles","blocks","variations","variationConfig","settings","blockSelectors","hasBlockGapSupport","hasFallbackGapSupport","disableLayoutStyles","disableRootPadding","variationStyles","blockGap","blockStyles","layoutStyles","marginReset","presets","rootPadding","id","css","__unstableType","children","map","getVariationStylesWithRefValues","globalStyles","replaceRefs","Object","keys","forEach","key","value","ref","undefined","trim","refValue","JSON","parse","stringify","useBlockStyleVariation","merged","mergedConfig","globalSettings","getSettings","__experimentalFeatures","_mergedConfig$setting","_mergedConfig$styles","_mergedConfig$setting2","useBlockProps","variationClass","hasSupport","attributeKeys","isMatch"],"sources":["@wordpress/block-editor/src/hooks/block-style-variation.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockTypes, store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGlobalStylesContext,\n\ttoStyles,\n\tgetBlockSelectors,\n} from '../components/global-styles';\nimport { useStyleOverride } from './utils';\nimport { getValueFromObjectPath } from '../utils/object';\nimport { store as blockEditorStore } from '../store';\nimport { globalStylesDataKey } from '../store/private-keys';\nimport { unlock } from '../lock-unlock';\n\nconst VARIATION_PREFIX = 'is-style-';\n\nfunction getVariationMatches( className ) {\n\tif ( ! className ) {\n\t\treturn [];\n\t}\n\treturn className.split( /\\s+/ ).reduce( ( matches, name ) => {\n\t\tif ( name.startsWith( VARIATION_PREFIX ) ) {\n\t\t\tconst match = name.slice( VARIATION_PREFIX.length );\n\t\t\tif ( match !== 'default' ) {\n\t\t\t\tmatches.push( match );\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}, [] );\n}\n\n/**\n * Get the first block style variation that has been registered from the class string.\n *\n * @param {string} className CSS class string for a block.\n * @param {Array} registeredStyles Currently registered block styles.\n *\n * @return {string|null} The name of the first registered variation.\n */\nfunction getVariationNameFromClass( className, registeredStyles = [] ) {\n\t// The global flag affects how capturing groups work in JS. So the regex\n\t// below will only return full CSS classes not just the variation name.\n\tconst matches = getVariationMatches( className );\n\n\tif ( ! matches ) {\n\t\treturn null;\n\t}\n\n\tfor ( const variation of matches ) {\n\t\tif ( registeredStyles.some( ( style ) => style.name === variation ) ) {\n\t\t\treturn variation;\n\t\t}\n\t}\n\treturn null;\n}\n\n// A helper component to apply a style override using the useStyleOverride hook.\nfunction OverrideStyles( { override } ) {\n\tuseStyleOverride( override );\n}\n\n/**\n * This component is used to generate new block style variation overrides\n * based on an incoming theme config. If a matching style is found in the config,\n * a new override is created and returned. The overrides can be used in conjunction with\n * useStyleOverride to apply the new styles to the editor. Its use is\n * subject to change.\n *\n * @param {Object} props Props.\n * @param {Object} props.config A global styles object, containing settings and styles.\n * @return {JSX.Element|undefined} An array of new block variation overrides.\n */\nexport function __unstableBlockStyleVariationOverridesWithConfig( { config } ) {\n\tconst { getBlockStyles, overrides } = useSelect(\n\t\t( select ) => ( {\n\t\t\tgetBlockStyles: select( blocksStore ).getBlockStyles,\n\t\t\toverrides: unlock( select( blockEditorStore ) ).getStyleOverrides(),\n\t\t} ),\n\t\t[]\n\t);\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\n\tconst overridesWithConfig = useMemo( () => {\n\t\tif ( ! overrides?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst newOverrides = [];\n\t\tconst overriddenClientIds = [];\n\t\tfor ( const [ , override ] of overrides ) {\n\t\t\tif (\n\t\t\t\toverride?.variation &&\n\t\t\t\toverride?.clientId &&\n\t\t\t\t/*\n\t\t\t\t * Because this component overwrites existing style overrides,\n\t\t\t\t * filter out any overrides that are already present in the store.\n\t\t\t\t */\n\t\t\t\t! overriddenClientIds.includes( override.clientId )\n\t\t\t) {\n\t\t\t\tconst blockName = getBlockName( override.clientId );\n\t\t\t\tconst configStyles =\n\t\t\t\t\tconfig?.styles?.blocks?.[ blockName ]?.variations?.[\n\t\t\t\t\t\toverride.variation\n\t\t\t\t\t];\n\t\t\t\tif ( configStyles ) {\n\t\t\t\t\tconst variationConfig = {\n\t\t\t\t\t\tsettings: config?.settings,\n\t\t\t\t\t\t// The variation style data is all that is needed to generate\n\t\t\t\t\t\t// the styles for the current application to a block. The variation\n\t\t\t\t\t\t// name is updated to match the instance specific class name.\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\tblocks: {\n\t\t\t\t\t\t\t\t[ blockName ]: {\n\t\t\t\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t\t\t\t[ `${ override.variation }-${ override.clientId }` ]:\n\t\t\t\t\t\t\t\t\t\t\tconfigStyles,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tconst blockSelectors = getBlockSelectors(\n\t\t\t\t\t\tgetBlockTypes(),\n\t\t\t\t\t\tgetBlockStyles,\n\t\t\t\t\t\toverride.clientId\n\t\t\t\t\t);\n\t\t\t\t\tconst hasBlockGapSupport = false;\n\t\t\t\t\tconst hasFallbackGapSupport = true;\n\t\t\t\t\tconst disableLayoutStyles = true;\n\t\t\t\t\tconst disableRootPadding = true;\n\t\t\t\t\tconst variationStyles = toStyles(\n\t\t\t\t\t\tvariationConfig,\n\t\t\t\t\t\tblockSelectors,\n\t\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\t\tdisableLayoutStyles,\n\t\t\t\t\t\tdisableRootPadding,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblockGap: false,\n\t\t\t\t\t\t\tblockStyles: true,\n\t\t\t\t\t\t\tlayoutStyles: false,\n\t\t\t\t\t\t\tmarginReset: false,\n\t\t\t\t\t\t\tpresets: false,\n\t\t\t\t\t\t\trootPadding: false,\n\t\t\t\t\t\t\tvariationStyles: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tnewOverrides.push( {\n\t\t\t\t\t\tid: `${ override.variation }-${ override.clientId }`,\n\t\t\t\t\t\tcss: variationStyles,\n\t\t\t\t\t\t__unstableType: 'variation',\n\t\t\t\t\t\tvariation: override.variation,\n\t\t\t\t\t\t// The clientId will be stored with the override and used to ensure\n\t\t\t\t\t\t// the order of overrides matches the order of blocks so that the\n\t\t\t\t\t\t// correct CSS cascade is maintained.\n\t\t\t\t\t\tclientId: override.clientId,\n\t\t\t\t\t} );\n\t\t\t\t\toverriddenClientIds.push( override.clientId );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn newOverrides;\n\t}, [ config, overrides, getBlockStyles, getBlockName ] );\n\n\tif ( ! overridesWithConfig || ! overridesWithConfig.length ) {\n\t\treturn;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ overridesWithConfig.map( ( override ) => (\n\t\t\t\t<OverrideStyles key={ override.id } override={ override } />\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\n/**\n * Retrieves any variation styles data and resolves any referenced values.\n *\n * @param {Object} globalStyles A complete global styles object, containing settings and styles.\n * @param {string} name The name of the desired block type.\n * @param {variation} variation The of the block style variation to retrieve data for.\n *\n * @return {Object|undefined} The global styles data for the specified variation.\n */\nexport function getVariationStylesWithRefValues(\n\tglobalStyles,\n\tname,\n\tvariation\n) {\n\tif ( ! globalStyles?.styles?.blocks?.[ name ]?.variations?.[ variation ] ) {\n\t\treturn;\n\t}\n\n\t// Helper to recursively look for `ref` values to resolve.\n\tconst replaceRefs = ( variationStyles ) => {\n\t\tObject.keys( variationStyles ).forEach( ( key ) => {\n\t\t\tconst value = variationStyles[ key ];\n\n\t\t\t// Only process objects.\n\t\t\tif ( typeof value === 'object' && value !== null ) {\n\t\t\t\t// Process `ref` value if present.\n\t\t\t\tif ( value.ref !== undefined ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value.ref !== 'string' ||\n\t\t\t\t\t\tvalue.ref.trim() === ''\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Remove invalid ref.\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Resolve `ref` value.\n\t\t\t\t\t\tconst refValue = getValueFromObjectPath(\n\t\t\t\t\t\t\tglobalStyles,\n\t\t\t\t\t\t\tvalue.ref\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( refValue ) {\n\t\t\t\t\t\t\tvariationStyles[ key ] = refValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Recursively resolve `ref` values in nested objects.\n\t\t\t\t\treplaceRefs( value );\n\n\t\t\t\t\t// After recursion, if value is empty due to explicitly\n\t\t\t\t\t// `undefined` ref value, remove it.\n\t\t\t\t\tif ( Object.keys( value ).length === 0 ) {\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\t// Deep clone variation node to avoid mutating it within global styles and losing refs.\n\tconst styles = JSON.parse(\n\t\tJSON.stringify(\n\t\t\tglobalStyles.styles.blocks[ name ].variations[ variation ]\n\t\t)\n\t);\n\treplaceRefs( styles );\n\n\treturn styles;\n}\n\nfunction useBlockStyleVariation( name, variation, clientId ) {\n\t// Prefer global styles data in GlobalStylesContext, which are available\n\t// if in the site editor. Otherwise fall back to whatever is in the\n\t// editor settings and available in the post editor.\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst { globalSettings, globalStyles } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tglobalSettings: settings.__experimentalFeatures,\n\t\t\tglobalStyles: settings[ globalStylesDataKey ],\n\t\t};\n\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst variationStyles = getVariationStylesWithRefValues(\n\t\t\t{\n\t\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t\tstyles: mergedConfig?.styles ?? globalStyles,\n\t\t\t},\n\t\t\tname,\n\t\t\tvariation\n\t\t);\n\n\t\treturn {\n\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t// The variation style data is all that is needed to generate\n\t\t\t// the styles for the current application to a block. The variation\n\t\t\t// name is updated to match the instance specific class name.\n\t\t\tstyles: {\n\t\t\t\tblocks: {\n\t\t\t\t\t[ name ]: {\n\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t[ `${ variation }-${ clientId }` ]: variationStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}, [\n\t\tmergedConfig,\n\t\tglobalSettings,\n\t\tglobalStyles,\n\t\tvariation,\n\t\tclientId,\n\t\tname,\n\t] );\n}\n\n// Rather than leveraging `useInstanceId` here, the `clientId` is used.\n// This is so that the variation style override's ID is predictable\n// when the order of applied style variations changes.\nfunction useBlockProps( { name, className, clientId } ) {\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\tconst registeredStyles = getBlockStyles( name );\n\tconst variation = getVariationNameFromClass( className, registeredStyles );\n\tconst variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;\n\n\tconst { settings, styles } = useBlockStyleVariation(\n\t\tname,\n\t\tvariation,\n\t\tclientId\n\t);\n\n\tconst variationStyles = useMemo( () => {\n\t\tif ( ! variation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst variationConfig = { settings, styles };\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles,\n\t\t\tclientId\n\t\t);\n\t\tconst hasBlockGapSupport = false;\n\t\tconst hasFallbackGapSupport = true;\n\t\tconst disableLayoutStyles = true;\n\t\tconst disableRootPadding = true;\n\n\t\treturn toStyles(\n\t\t\tvariationConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding,\n\t\t\t{\n\t\t\t\tblockGap: false,\n\t\t\t\tblockStyles: true,\n\t\t\t\tlayoutStyles: false,\n\t\t\t\tmarginReset: false,\n\t\t\t\tpresets: false,\n\t\t\t\trootPadding: false,\n\t\t\t\tvariationStyles: true,\n\t\t\t}\n\t\t);\n\t}, [ variation, settings, styles, getBlockStyles, clientId ] );\n\n\tuseStyleOverride( {\n\t\tid: `variation-${ clientId }`,\n\t\tcss: variationStyles,\n\t\t__unstableType: 'variation',\n\t\tvariation,\n\t\t// The clientId will be stored with the override and used to ensure\n\t\t// the order of overrides matches the order of blocks so that the\n\t\t// correct CSS cascade is maintained.\n\t\tclientId,\n\t} );\n\n\treturn variation ? { className: variationClass } : {};\n}\n\nexport default {\n\thasSupport: () => true,\n\tattributeKeys: [ 'className' ],\n\tisMatch: ( { className } ) => getVariationMatches( className ).length > 0,\n\tuseBlockProps,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -233,25 +233,30 @@ function useDuotoneStyles({
233
233
  return;
234
234
  }
235
235
 
236
- // Safari does not always update the duotone filter when the duotone colors
237
- // are changed. When using Safari, force the block element to be repainted by
238
- // the browser to ensure any changes are reflected visually. This logic matches
239
- // that used on the site frontend in `block-supports/duotone.php`.
236
+ // Safari does not always update the duotone filter when the duotone
237
+ // colors are changed. When using Safari, force the block element to be
238
+ // repainted by the browser to ensure any changes are reflected
239
+ // visually. This logic matches that used on the site frontend in
240
+ // `block-supports/duotone.php`.
240
241
  if (blockElement && isSafari) {
241
242
  const display = blockElement.style.display;
242
- // Switch to `inline-block` to force a repaint. In the editor, `inline-block`
243
- // is used instead of `none` to ensure that scroll position is not affected,
244
- // as `none` results in the editor scrolling to the top of the block.
243
+ // Switch to `inline-block` to force a repaint. In the editor,
244
+ // `inline-block` is used instead of `none` to ensure that scroll
245
+ // position is not affected, as `none` results in the editor
246
+ // scrolling to the top of the block.
245
247
  blockElement.style.display = 'inline-block';
246
- // Simply accessing el.offsetHeight flushes layout and style
247
- // changes in WebKit without having to wait for setTimeout.
248
+ // Simply accessing el.offsetHeight flushes layout and style changes
249
+ // in WebKit without having to wait for setTimeout.
248
250
  // eslint-disable-next-line no-unused-expressions
249
251
  blockElement.offsetHeight;
250
252
  blockElement.style.display = display;
251
253
  }
252
- }, [isValidFilter, blockElement]);
254
+ // `colors` must be a dependency so this effect runs when the colors
255
+ // change in Safari.
256
+ }, [isValidFilter, blockElement, colors]);
253
257
  }
254
258
  function useBlockProps({
259
+ clientId,
255
260
  name,
256
261
  style
257
262
  }) {
@@ -287,7 +292,7 @@ function useBlockProps({
287
292
  const filterClass = `wp-duotone-${id}`;
288
293
  const shouldRender = selector && attribute;
289
294
  useDuotoneStyles({
290
- clientId: id,
295
+ clientId,
291
296
  id: filterClass,
292
297
  selector,
293
298
  attribute