@wordpress/edit-site 4.3.2 → 4.3.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.
@@ -1,3 +1,5 @@
1
+ import { createElement } from "@wordpress/element";
2
+
1
3
  /**
2
4
  * External dependencies
3
5
  */
@@ -9,6 +11,7 @@ import { first, forEach, get, isEmpty, isString, kebabCase, pickBy, reduce, set,
9
11
  import { __EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY, __EXPERIMENTAL_ELEMENTS as ELEMENTS, getBlockTypes } from '@wordpress/blocks';
10
12
  import { useEffect, useState, useContext } from '@wordpress/element';
11
13
  import { getCSSRules } from '@wordpress/style-engine';
14
+ import { __unstablePresetDuotoneFilter as PresetDuotoneFilter } from '@wordpress/block-editor';
12
15
  /**
13
16
  * Internal dependencies
14
17
  */
@@ -47,13 +50,18 @@ function getPresetsDeclarations() {
47
50
  let {
48
51
  path,
49
52
  valueKey,
53
+ valueFunc,
50
54
  cssVarInfix
51
55
  } = _ref;
52
56
  const presetByOrigin = get(blockPresets, path, []);
53
57
  ['default', 'theme', 'custom'].forEach(origin => {
54
58
  if (presetByOrigin[origin]) {
55
59
  presetByOrigin[origin].forEach(value => {
56
- declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${value[valueKey]}`);
60
+ if (valueKey) {
61
+ declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${value[valueKey]}`);
62
+ } else if (valueFunc && typeof valueFunc === 'function') {
63
+ declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${valueFunc(value)}`);
64
+ }
57
65
  });
58
66
  }
59
67
  });
@@ -107,6 +115,18 @@ function getPresetsClasses(blockSelector) {
107
115
  }, '');
108
116
  }
109
117
 
118
+ function getPresetsSvgFilters() {
119
+ let blockPresets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
120
+ return PRESET_METADATA.filter( // Duotone are the only type of filters for now.
121
+ metadata => metadata.path.at(-1) === 'duotone').flatMap(metadata => {
122
+ const presetByOrigin = get(blockPresets, metadata.path, {});
123
+ return ['default', 'theme'].filter(origin => presetByOrigin[origin]).flatMap(origin => presetByOrigin[origin].map(preset => createElement(PresetDuotoneFilter, {
124
+ preset: preset,
125
+ key: preset.slug
126
+ })));
127
+ });
128
+ }
129
+
110
130
  function flattenTree() {
111
131
  let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
112
132
  let prefix = arguments.length > 1 ? arguments[1] : undefined;
@@ -195,7 +215,7 @@ export const getNodesWithStyles = (tree, blockSelectors) => {
195
215
  return nodes;
196
216
  }
197
217
 
198
- const pickStyleKeys = treeToPickFrom => pickBy(treeToPickFrom, (value, key) => ['border', 'color', 'spacing', 'typography'].includes(key)); // Top-level.
218
+ const pickStyleKeys = treeToPickFrom => pickBy(treeToPickFrom, (value, key) => ['border', 'color', 'spacing', 'typography', 'filter'].includes(key)); // Top-level.
199
219
 
200
220
 
201
221
  const styles = pickStyleKeys(tree.styles);
@@ -224,7 +244,8 @@ export const getNodesWithStyles = (tree, blockSelectors) => {
224
244
  if (!!blockStyles && !!(blockSelectors !== null && blockSelectors !== void 0 && (_blockSelectors$block = blockSelectors[blockName]) !== null && _blockSelectors$block !== void 0 && _blockSelectors$block.selector)) {
225
245
  nodes.push({
226
246
  styles: blockStyles,
227
- selector: blockSelectors[blockName].selector
247
+ selector: blockSelectors[blockName].selector,
248
+ duotoneSelector: blockSelectors[blockName].duotoneSelector
228
249
  });
229
250
  }
230
251
 
@@ -315,12 +336,41 @@ export const toCustomProperties = (tree, blockSelectors) => {
315
336
  export const toStyles = (tree, blockSelectors) => {
316
337
  const nodesWithStyles = getNodesWithStyles(tree, blockSelectors);
317
338
  const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
318
- let ruleset = '.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }';
339
+ /*
340
+ * Reset default browser margin on the root body element.
341
+ * This is set on the root selector **before** generating the ruleset
342
+ * from the `theme.json`. This is to ensure that if the `theme.json` declares
343
+ * `margin` in its `spacing` declaration for the `body` element then these
344
+ * user-generated values take precedence in the CSS cascade.
345
+ * @link https://github.com/WordPress/gutenberg/issues/36147.
346
+ */
347
+
348
+ let ruleset = 'body {margin: 0;}';
319
349
  nodesWithStyles.forEach(_ref8 => {
320
350
  let {
321
351
  selector,
352
+ duotoneSelector,
322
353
  styles
323
354
  } = _ref8;
355
+ const duotoneStyles = {};
356
+
357
+ if (styles !== null && styles !== void 0 && styles.filter) {
358
+ duotoneStyles.filter = styles.filter;
359
+ delete styles.filter;
360
+ } // Process duotone styles (they use color.__experimentalDuotone selector).
361
+
362
+
363
+ if (duotoneSelector) {
364
+ const duotoneDeclarations = getStylesDeclarations(duotoneStyles);
365
+
366
+ if (duotoneDeclarations.length === 0) {
367
+ return;
368
+ }
369
+
370
+ ruleset = ruleset + `${duotoneSelector}{${duotoneDeclarations.join(';')};}`;
371
+ } // Process the remaning block styles (they use either normal block class or __experimentalSelector).
372
+
373
+
324
374
  const declarations = getStylesDeclarations(styles);
325
375
 
326
376
  if (declarations.length === 0) {
@@ -348,17 +398,28 @@ export const toStyles = (tree, blockSelectors) => {
348
398
  });
349
399
  return ruleset;
350
400
  };
401
+ export function toSvgFilters(tree, blockSelectors) {
402
+ const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
403
+ return nodesWithSettings.flatMap(_ref10 => {
404
+ let {
405
+ presets
406
+ } = _ref10;
407
+ return getPresetsSvgFilters(presets);
408
+ });
409
+ }
351
410
 
352
411
  const getBlockSelectors = blockTypes => {
353
412
  const result = {};
354
413
  blockTypes.forEach(blockType => {
355
- var _blockType$supports$_, _blockType$supports;
414
+ var _blockType$supports$_, _blockType$supports, _blockType$supports$c, _blockType$supports2, _blockType$supports2$;
356
415
 
357
416
  const name = blockType.name;
358
417
  const selector = (_blockType$supports$_ = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports = blockType.supports) === null || _blockType$supports === void 0 ? void 0 : _blockType$supports.__experimentalSelector) !== null && _blockType$supports$_ !== void 0 ? _blockType$supports$_ : '.wp-block-' + name.replace('core/', '').replace('/', '-');
418
+ const duotoneSelector = (_blockType$supports$c = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports2 = blockType.supports) === null || _blockType$supports2 === void 0 ? void 0 : (_blockType$supports2$ = _blockType$supports2.color) === null || _blockType$supports2$ === void 0 ? void 0 : _blockType$supports2$.__experimentalDuotone) !== null && _blockType$supports$c !== void 0 ? _blockType$supports$c : null;
359
419
  result[name] = {
360
420
  name,
361
- selector
421
+ selector,
422
+ duotoneSelector
362
423
  };
363
424
  });
364
425
  return result;
@@ -367,6 +428,7 @@ const getBlockSelectors = blockTypes => {
367
428
  export function useGlobalStylesOutput() {
368
429
  const [stylesheets, setStylesheets] = useState([]);
369
430
  const [settings, setSettings] = useState({});
431
+ const [svgFilters, setSvgFilters] = useState({});
370
432
  const {
371
433
  merged: mergedConfig
372
434
  } = useContext(GlobalStylesContext);
@@ -378,6 +440,7 @@ export function useGlobalStylesOutput() {
378
440
  const blockSelectors = getBlockSelectors(getBlockTypes());
379
441
  const customProperties = toCustomProperties(mergedConfig, blockSelectors);
380
442
  const globalStyles = toStyles(mergedConfig, blockSelectors);
443
+ const filters = toSvgFilters(mergedConfig, blockSelectors);
381
444
  setStylesheets([{
382
445
  css: customProperties,
383
446
  isGlobalStyles: true
@@ -386,7 +449,8 @@ export function useGlobalStylesOutput() {
386
449
  isGlobalStyles: true
387
450
  }]);
388
451
  setSettings(mergedConfig.settings);
452
+ setSvgFilters(filters);
389
453
  }, [mergedConfig]);
390
- return [stylesheets, settings];
454
+ return [stylesheets, settings, svgFilters];
391
455
  }
392
456
  //# sourceMappingURL=use-global-styles-output.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/use-global-styles-output.js"],"names":["first","forEach","get","isEmpty","isString","kebabCase","pickBy","reduce","set","startsWith","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","__EXPERIMENTAL_ELEMENTS","ELEMENTS","getBlockTypes","useEffect","useState","useContext","getCSSRules","PRESET_METADATA","ROOT_BLOCK_SELECTOR","GlobalStylesContext","compileStyleValue","uncompiledValue","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","variable","slice","length","split","join","getPresetsDeclarations","blockPresets","declarations","path","valueKey","cssVarInfix","presetByOrigin","origin","value","push","slug","getPresetsClasses","blockSelector","classes","classSuffix","propertyName","classSelectorToUse","selectorToUse","map","selector","flattenTree","input","prefix","token","result","Object","keys","key","newKey","replace","newLeaf","newPrefix","getStylesDeclarations","blockStyles","output","properties","useEngine","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","getNodesWithStyles","tree","blockSelectors","nodes","styles","pickStyleKeys","treeToPickFrom","includes","elements","blocks","node","blockName","elementName","sel","getNodesWithSettings","settings","pickPresets","presets","custom","blockCustom","toCustomProperties","ruleset","customProps","toStyles","nodesWithStyles","nodesWithSettings","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","useGlobalStylesOutput","stylesheets","setStylesheets","setSettings","merged","mergedConfig","customProperties","globalStyles","css","isGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tfirst,\n\tforEach,\n\tget,\n\tisEmpty,\n\tisString,\n\tkebabCase,\n\tpickBy,\n\treduce,\n\tset,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n\tgetBlockTypes,\n} from '@wordpress/blocks';\nimport { useEffect, useState, useContext } from '@wordpress/element';\nimport { getCSSRules } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Internal dependencies\n */\nimport { PRESET_METADATA, ROOT_BLOCK_SELECTOR } from './utils';\nimport { GlobalStylesContext } from './context';\n\nfunction compileStyleValue( uncompiledValue ) {\n\tconst VARIABLE_REFERENCE_PREFIX = 'var:';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';\n\tif ( startsWith( uncompiledValue, VARIABLE_REFERENCE_PREFIX ) ) {\n\t\tconst variable = uncompiledValue\n\t\t\t.slice( VARIABLE_REFERENCE_PREFIX.length )\n\t\t\t.split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )\n\t\t\t.join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );\n\t\treturn `var(--wp--${ variable })`;\n\t}\n\treturn uncompiledValue;\n}\n\n/**\n * Transform given preset tree into a set of style declarations.\n *\n * @param {Object} blockPresets\n *\n * @return {Array} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, valueKey, cssVarInfix } ) => {\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( value ) => {\n\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t) }: ${ value[ valueKey ] }`\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n}\n\n/**\n * Transform given preset tree into a set of preset class declarations.\n *\n * @param {string} blockSelector\n * @param {Object} blockPresets\n * @return {string} CSS declarations for the preset classes.\n */\nfunction getPresetsClasses( blockSelector, blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, cssVarInfix, classes } ) => {\n\t\t\tif ( ! classes ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( { slug } ) => {\n\t\t\t\t\t\tclasses.forEach( ( { classSuffix, propertyName } ) => {\n\t\t\t\t\t\t\tconst classSelectorToUse = `.has-${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) }-${ classSuffix }`;\n\t\t\t\t\t\t\tconst selectorToUse = blockSelector\n\t\t\t\t\t\t\t\t.split( ',' ) // Selector can be \"h1, h2, h3\"\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t`${ selector }${ classSelectorToUse }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ',' );\n\t\t\t\t\t\t\tconst value = `var(--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) })`;\n\t\t\t\t\t\t\tdeclarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;\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\treturn declarations;\n\t\t},\n\t\t''\n\t);\n}\n\nfunction flattenTree( input = {}, prefix, token ) {\n\tlet result = [];\n\tObject.keys( input ).forEach( ( key ) => {\n\t\tconst newKey = prefix + kebabCase( key.replace( '/', '-' ) );\n\t\tconst newLeaf = input[ key ];\n\n\t\tif ( newLeaf instanceof Object ) {\n\t\t\tconst newPrefix = newKey + token;\n\t\t\tresult = [ ...result, ...flattenTree( newLeaf, newPrefix, token ) ];\n\t\t} else {\n\t\t\tresult.push( `${ newKey }: ${ newLeaf }` );\n\t\t}\n\t} );\n\treturn result;\n}\n\n/**\n * Transform given style tree into a set of style declarations.\n *\n * @param {Object} blockStyles Block styles.\n *\n * @return {Array} An array of style declarations.\n */\nfunction getStylesDeclarations( blockStyles = {} ) {\n\tconst output = reduce(\n\t\tSTYLE_PROPERTY,\n\t\t( declarations, { value, properties, useEngine }, key ) => {\n\t\t\tconst pathToValue = value;\n\t\t\tif ( first( pathToValue ) === 'elements' || useEngine ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst styleValue = get( blockStyles, pathToValue );\n\n\t\t\tif ( !! properties && ! isString( styleValue ) ) {\n\t\t\t\tObject.entries( properties ).forEach( ( entry ) => {\n\t\t\t\t\tconst [ name, prop ] = entry;\n\n\t\t\t\t\tif ( ! get( styleValue, [ prop ], false ) ) {\n\t\t\t\t\t\t// Do not create a declaration\n\t\t\t\t\t\t// for sub-properties that don't have any value.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cssProperty = kebabCase( name );\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t`${ cssProperty }: ${ compileStyleValue(\n\t\t\t\t\t\t\tget( styleValue, [ prop ] )\n\t\t\t\t\t\t) }`\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else if ( get( blockStyles, pathToValue, false ) ) {\n\t\t\t\tconst cssProperty = key.startsWith( '--' )\n\t\t\t\t\t? key\n\t\t\t\t\t: kebabCase( key );\n\t\t\t\tdeclarations.push(\n\t\t\t\t\t`${ cssProperty }: ${ compileStyleValue(\n\t\t\t\t\t\tget( blockStyles, pathToValue )\n\t\t\t\t\t) }`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tconst extraRules = getCSSRules( blockStyles, { selector: 'self' } );\n\textraRules.forEach( ( rule ) => {\n\t\tif ( rule.selector !== 'self' ) {\n\t\t\tthrow \"This style can't be added as inline style\";\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\t\toutput.push( `${ cssProperty }: ${ compileStyleValue( rule.value ) }` );\n\t} );\n\n\treturn output;\n}\n\nexport const getNodesWithStyles = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.styles ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickStyleKeys = ( treeToPickFrom ) =>\n\t\tpickBy( treeToPickFrom, ( value, key ) =>\n\t\t\t[ 'border', 'color', 'spacing', 'typography' ].includes( key )\n\t\t);\n\n\t// Top-level.\n\tconst styles = pickStyleKeys( tree.styles );\n\tif ( !! styles ) {\n\t\tnodes.push( {\n\t\t\tstyles,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t} );\n\t}\n\tforEach( tree.styles?.elements, ( value, key ) => {\n\t\tif ( !! value && !! ELEMENTS[ key ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: value,\n\t\t\t\tselector: ELEMENTS[ key ],\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Iterate over blocks: they can have styles & elements.\n\tforEach( tree.styles?.blocks, ( node, blockName ) => {\n\t\tconst blockStyles = pickStyleKeys( node );\n\t\tif ( !! blockStyles && !! blockSelectors?.[ blockName ]?.selector ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: blockStyles,\n\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t} );\n\t\t}\n\n\t\tforEach( node?.elements, ( value, elementName ) => {\n\t\t\tif (\n\t\t\t\t!! value &&\n\t\t\t\t!! blockSelectors?.[ blockName ] &&\n\t\t\t\t!! ELEMENTS?.[ elementName ]\n\t\t\t) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tstyles: value,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector\n\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t.map( ( sel ) => sel + ' ' + ELEMENTS[ elementName ] )\n\t\t\t\t\t\t.join( ',' ),\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn nodes;\n};\n\nexport const getNodesWithSettings = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.settings ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickPresets = ( treeToPickFrom ) => {\n\t\tconst presets = {};\n\t\tPRESET_METADATA.forEach( ( { path } ) => {\n\t\t\tconst value = get( treeToPickFrom, path, false );\n\t\t\tif ( value !== false ) {\n\t\t\t\tset( presets, path, value );\n\t\t\t}\n\t\t} );\n\t\treturn presets;\n\t};\n\n\t// Top-level.\n\tconst presets = pickPresets( tree.settings );\n\tconst custom = tree.settings?.custom;\n\tif ( ! isEmpty( presets ) || !! custom ) {\n\t\tnodes.push( {\n\t\t\tpresets,\n\t\t\tcustom,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t} );\n\t}\n\n\t// Blocks.\n\tforEach( tree.settings?.blocks, ( node, blockName ) => {\n\t\tconst blockPresets = pickPresets( node );\n\t\tconst blockCustom = node.custom;\n\t\tif ( ! isEmpty( blockPresets ) || !! blockCustom ) {\n\t\t\tnodes.push( {\n\t\t\t\tpresets: blockPresets,\n\t\t\t\tcustom: blockCustom,\n\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn nodes;\n};\n\nexport const toCustomProperties = ( tree, blockSelectors ) => {\n\tconst settings = getNodesWithSettings( tree, blockSelectors );\n\n\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets );\n\t\tconst customProps = flattenTree( custom, '--wp--custom--', '--' );\n\t\tif ( customProps.length > 0 ) {\n\t\t\tdeclarations.push( ...customProps );\n\t\t}\n\n\t\tif ( declarations.length > 0 ) {\n\t\t\truleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nexport const toStyles = ( tree, blockSelectors ) => {\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\n\tlet ruleset =\n\t\t'.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }';\n\tnodesWithStyles.forEach( ( { selector, styles } ) => {\n\t\tconst declarations = getStylesDeclarations( styles );\n\t\tif ( declarations.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\truleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t} );\n\n\tnodesWithSettings.forEach( ( { selector, presets } ) => {\n\t\tif ( ROOT_BLOCK_SELECTOR === selector ) {\n\t\t\t// Do not add extra specificity for top-level classes.\n\t\t\tselector = '';\n\t\t}\n\n\t\tconst classes = getPresetsClasses( selector, presets );\n\t\tif ( ! isEmpty( classes ) ) {\n\t\t\truleset = ruleset + classes;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nconst getBlockSelectors = ( blockTypes ) => {\n\tconst result = {};\n\tblockTypes.forEach( ( blockType ) => {\n\t\tconst name = blockType.name;\n\t\tconst selector =\n\t\t\tblockType?.supports?.__experimentalSelector ??\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t\tresult[ name ] = {\n\t\t\tname,\n\t\t\tselector,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\nexport function useGlobalStylesOutput() {\n\tconst [ stylesheets, setStylesheets ] = useState( [] );\n\tconst [ settings, setSettings ] = useState( {} );\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\n\tuseEffect( () => {\n\t\tif ( ! mergedConfig?.styles || ! mergedConfig?.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockSelectors = getBlockSelectors( getBlockTypes() );\n\t\tconst customProperties = toCustomProperties(\n\t\t\tmergedConfig,\n\t\t\tblockSelectors\n\t\t);\n\t\tconst globalStyles = toStyles( mergedConfig, blockSelectors );\n\t\tsetStylesheets( [\n\t\t\t{\n\t\t\t\tcss: customProperties,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcss: globalStyles,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t] );\n\t\tsetSettings( mergedConfig.settings );\n\t}, [ mergedConfig ] );\n\n\treturn [ stylesheets, settings ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/use-global-styles-output.js"],"names":["first","forEach","get","isEmpty","isString","kebabCase","pickBy","reduce","set","startsWith","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","__EXPERIMENTAL_ELEMENTS","ELEMENTS","getBlockTypes","useEffect","useState","useContext","getCSSRules","__unstablePresetDuotoneFilter","PresetDuotoneFilter","PRESET_METADATA","ROOT_BLOCK_SELECTOR","GlobalStylesContext","compileStyleValue","uncompiledValue","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","variable","slice","length","split","join","getPresetsDeclarations","blockPresets","declarations","path","valueKey","valueFunc","cssVarInfix","presetByOrigin","origin","value","push","slug","getPresetsClasses","blockSelector","classes","classSuffix","propertyName","classSelectorToUse","selectorToUse","map","selector","getPresetsSvgFilters","filter","metadata","at","flatMap","preset","flattenTree","input","prefix","token","result","Object","keys","key","newKey","replace","newLeaf","newPrefix","getStylesDeclarations","blockStyles","output","properties","useEngine","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","getNodesWithStyles","tree","blockSelectors","nodes","styles","pickStyleKeys","treeToPickFrom","includes","elements","blocks","node","blockName","duotoneSelector","elementName","sel","getNodesWithSettings","settings","pickPresets","presets","custom","blockCustom","toCustomProperties","ruleset","customProps","toStyles","nodesWithStyles","nodesWithSettings","duotoneStyles","duotoneDeclarations","toSvgFilters","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","color","__experimentalDuotone","useGlobalStylesOutput","stylesheets","setStylesheets","setSettings","svgFilters","setSvgFilters","merged","mergedConfig","customProperties","globalStyles","filters","css","isGlobalStyles"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,KADD,EAECC,OAFD,EAGCC,GAHD,EAICC,OAJD,EAKCC,QALD,EAMCC,SAND,EAOCC,MAPD,EAQCC,MARD,EASCC,GATD,EAUCC,UAVD,QAWO,QAXP;AAaA;AACA;AACA;;AACA,SACCC,6BAA6B,IAAIC,cADlC,EAECC,uBAAuB,IAAIC,QAF5B,EAGCC,aAHD,QAIO,mBAJP;AAKA,SAASC,SAAT,EAAoBC,QAApB,EAA8BC,UAA9B,QAAgD,oBAAhD;AACA,SAASC,WAAT,QAA4B,yBAA5B;AACA,SAASC,6BAA6B,IAAIC,mBAA1C,QAAqE,yBAArE;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AACA,SAASC,eAAT,EAA0BC,mBAA1B,QAAqD,SAArD;AACA,SAASC,mBAAT,QAAoC,WAApC;;AAEA,SAASC,iBAAT,CAA4BC,eAA5B,EAA8C;AAC7C,QAAMC,yBAAyB,GAAG,MAAlC;AACA,QAAMC,uCAAuC,GAAG,GAAhD;AACA,QAAMC,mCAAmC,GAAG,IAA5C;;AACA,MAAKnB,UAAU,CAAEgB,eAAF,EAAmBC,yBAAnB,CAAf,EAAgE;AAC/D,UAAMG,QAAQ,GAAGJ,eAAe,CAC9BK,KADe,CACRJ,yBAAyB,CAACK,MADlB,EAEfC,KAFe,CAERL,uCAFQ,EAGfM,IAHe,CAGTL,mCAHS,CAAjB;AAIA,WAAQ,aAAaC,QAAU,GAA/B;AACA;;AACD,SAAOJ,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASS,sBAAT,GAAqD;AAAA,MAApBC,YAAoB,uEAAL,EAAK;AACpD,SAAO5B,MAAM,CACZc,eADY,EAEZ,CAAEe,YAAF,WAAgE;AAAA,QAAhD;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,QAAR;AAAkBC,MAAAA,SAAlB;AAA6BC,MAAAA;AAA7B,KAAgD;AAC/D,UAAMC,cAAc,GAAGvC,GAAG,CAAEiC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiCpC,OAAjC,CAA4CyC,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBzC,OAAzB,CAAoC0C,KAAF,IAAa;AAC9C,cAAKL,QAAL,EAAgB;AACfF,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAKnC,SAAS,CAC5CsC,KAAK,CAACE,IADsC,CAE1C,KAAKF,KAAK,CAAEL,QAAF,CAAc,EAH5B;AAKA,WAND,MAMO,IACNC,SAAS,IACT,OAAOA,SAAP,KAAqB,UAFf,EAGL;AACDH,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAKnC,SAAS,CAC5CsC,KAAK,CAACE,IADsC,CAE1C,KAAKN,SAAS,CAAEI,KAAF,CAAW,EAH7B;AAKA;AACD,SAjBD;AAkBA;AACD,KArBD;AAuBA,WAAOP,YAAP;AACA,GA5BW,EA6BZ,EA7BY,CAAb;AA+BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASU,iBAAT,CAA4BC,aAA5B,EAA+D;AAAA,MAApBZ,YAAoB,uEAAL,EAAK;AAC9D,SAAO5B,MAAM,CACZc,eADY,EAEZ,CAAEe,YAAF,YAAoD;AAAA,QAApC;AAAEC,MAAAA,IAAF;AAAQG,MAAAA,WAAR;AAAqBQ,MAAAA;AAArB,KAAoC;;AACnD,QAAK,CAAEA,OAAP,EAAiB;AAChB,aAAOZ,YAAP;AACA;;AAED,UAAMK,cAAc,GAAGvC,GAAG,CAAEiC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiCpC,OAAjC,CAA4CyC,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBzC,OAAzB,CAAkC,SAAgB;AAAA,cAAd;AAAE4C,YAAAA;AAAF,WAAc;AACjDG,UAAAA,OAAO,CAAC/C,OAAR,CAAiB,SAAqC;AAAA,gBAAnC;AAAEgD,cAAAA,WAAF;AAAeC,cAAAA;AAAf,aAAmC;AACrD,kBAAMC,kBAAkB,GAAI,QAAQ9C,SAAS,CAC5CwC,IAD4C,CAE1C,IAAII,WAAa,EAFpB;AAGA,kBAAMG,aAAa,GAAGL,aAAa,CACjCf,KADoB,CACb,GADa,EACP;AADO,aAEpBqB,GAFoB,CAGlBC,QAAF,IACE,GAAGA,QAAU,GAAGH,kBAAoB,EAJlB,EAMpBlB,IANoB,CAMd,GANc,CAAtB;AAOA,kBAAMU,KAAK,GAAI,qBAAqBH,WAAa,KAAKnC,SAAS,CAC9DwC,IAD8D,CAE5D,GAFH;AAGAT,YAAAA,YAAY,IAAK,GAAGgB,aAAe,IAAIF,YAAc,KAAKP,KAAO,eAAjE;AACA,WAfD;AAgBA,SAjBD;AAkBA;AACD,KArBD;AAsBA,WAAOP,YAAP;AACA,GA/BW,EAgCZ,EAhCY,CAAb;AAkCA;;AAED,SAASmB,oBAAT,GAAmD;AAAA,MAApBpB,YAAoB,uEAAL,EAAK;AAClD,SAAOd,eAAe,CAACmC,MAAhB,EACN;AACEC,EAAAA,QAAF,IAAgBA,QAAQ,CAACpB,IAAT,CAAcqB,EAAd,CAAkB,CAAC,CAAnB,MAA2B,SAFrC,EAGLC,OAHK,CAGMF,QAAF,IAAgB;AAC1B,UAAMhB,cAAc,GAAGvC,GAAG,CAAEiC,YAAF,EAAgBsB,QAAQ,CAACpB,IAAzB,EAA+B,EAA/B,CAA1B;AACA,WAAO,CAAE,SAAF,EAAa,OAAb,EACLmB,MADK,CACKd,MAAF,IAAcD,cAAc,CAAEC,MAAF,CAD/B,EAELiB,OAFK,CAEMjB,MAAF,IACTD,cAAc,CAAEC,MAAF,CAAd,CAAyBW,GAAzB,CAAgCO,MAAF,IAC7B,cAAC,mBAAD;AACC,MAAA,MAAM,EAAGA,MADV;AAEC,MAAA,GAAG,EAAGA,MAAM,CAACf;AAFd,MADD,CAHK,CAAP;AAUA,GAfM,CAAP;AAgBA;;AAED,SAASgB,WAAT,GAAkD;AAAA,MAA5BC,KAA4B,uEAApB,EAAoB;AAAA,MAAhBC,MAAgB;AAAA,MAARC,KAAQ;AACjD,MAAIC,MAAM,GAAG,EAAb;AACAC,EAAAA,MAAM,CAACC,IAAP,CAAaL,KAAb,EAAqB7D,OAArB,CAAgCmE,GAAF,IAAW;AACxC,UAAMC,MAAM,GAAGN,MAAM,GAAG1D,SAAS,CAAE+D,GAAG,CAACE,OAAJ,CAAa,GAAb,EAAkB,GAAlB,CAAF,CAAjC;AACA,UAAMC,OAAO,GAAGT,KAAK,CAAEM,GAAF,CAArB;;AAEA,QAAKG,OAAO,YAAYL,MAAxB,EAAiC;AAChC,YAAMM,SAAS,GAAGH,MAAM,GAAGL,KAA3B;AACAC,MAAAA,MAAM,GAAG,CAAE,GAAGA,MAAL,EAAa,GAAGJ,WAAW,CAAEU,OAAF,EAAWC,SAAX,EAAsBR,KAAtB,CAA3B,CAAT;AACA,KAHD,MAGO;AACNC,MAAAA,MAAM,CAACrB,IAAP,CAAc,GAAGyB,MAAQ,KAAKE,OAAS,EAAvC;AACA;AACD,GAVD;AAWA,SAAON,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASQ,qBAAT,GAAmD;AAAA,MAAnBC,WAAmB,uEAAL,EAAK;AAClD,QAAMC,MAAM,GAAGpE,MAAM,CACpBI,cADoB,EAEpB,CAAEyB,YAAF,SAAkDgC,GAAlD,KAA2D;AAAA,QAA3C;AAAEzB,MAAAA,KAAF;AAASiC,MAAAA,UAAT;AAAqBC,MAAAA;AAArB,KAA2C;AAC1D,UAAMC,WAAW,GAAGnC,KAApB;;AACA,QAAK3C,KAAK,CAAE8E,WAAF,CAAL,KAAyB,UAAzB,IAAuCD,SAA5C,EAAwD;AACvD,aAAOzC,YAAP;AACA;;AAED,UAAM2C,UAAU,GAAG7E,GAAG,CAAEwE,WAAF,EAAeI,WAAf,CAAtB;;AAEA,QAAK,CAAC,CAAEF,UAAH,IAAiB,CAAExE,QAAQ,CAAE2E,UAAF,CAAhC,EAAiD;AAChDb,MAAAA,MAAM,CAACc,OAAP,CAAgBJ,UAAhB,EAA6B3E,OAA7B,CAAwCgF,KAAF,IAAa;AAClD,cAAM,CAAEC,IAAF,EAAQC,IAAR,IAAiBF,KAAvB;;AAEA,YAAK,CAAE/E,GAAG,CAAE6E,UAAF,EAAc,CAAEI,IAAF,CAAd,EAAwB,KAAxB,CAAV,EAA4C;AAC3C;AACA;AACA;AACA;;AAED,cAAMC,WAAW,GAAG/E,SAAS,CAAE6E,IAAF,CAA7B;AACA9C,QAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAAK5D,iBAAiB,CACtCtB,GAAG,CAAE6E,UAAF,EAAc,CAAEI,IAAF,CAAd,CADmC,CAEpC,EAHJ;AAKA,OAfD;AAgBA,KAjBD,MAiBO,IAAKjF,GAAG,CAAEwE,WAAF,EAAeI,WAAf,EAA4B,KAA5B,CAAR,EAA8C;AACpD,YAAMM,WAAW,GAAGhB,GAAG,CAAC3D,UAAJ,CAAgB,IAAhB,IACjB2D,GADiB,GAEjB/D,SAAS,CAAE+D,GAAF,CAFZ;AAGAhC,MAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAAK5D,iBAAiB,CACtCtB,GAAG,CAAEwE,WAAF,EAAeI,WAAf,CADmC,CAEpC,EAHJ;AAKA;;AAED,WAAO1C,YAAP;AACA,GAvCmB,EAwCpB,EAxCoB,CAArB,CADkD,CA4ClD;AACA;;AACA,QAAMiD,UAAU,GAAGnE,WAAW,CAAEwD,WAAF,EAAe;AAAEpB,IAAAA,QAAQ,EAAE;AAAZ,GAAf,CAA9B;AACA+B,EAAAA,UAAU,CAACpF,OAAX,CAAsBqF,IAAF,IAAY;AAC/B,QAAKA,IAAI,CAAChC,QAAL,KAAkB,MAAvB,EAAgC;AAC/B,YAAM,2CAAN;AACA;;AACD,UAAM8B,WAAW,GAAGE,IAAI,CAAClB,GAAL,CAAS3D,UAAT,CAAqB,IAArB,IACjB6E,IAAI,CAAClB,GADY,GAEjB/D,SAAS,CAAEiF,IAAI,CAAClB,GAAP,CAFZ;AAGAO,IAAAA,MAAM,CAAC/B,IAAP,CAAc,GAAGwC,WAAa,KAAK5D,iBAAiB,CAAE8D,IAAI,CAAC3C,KAAP,CAAgB,EAApE;AACA,GARD;AAUA,SAAOgC,MAAP;AACA;;AAED,OAAO,MAAMY,kBAAkB,GAAG,CAAEC,IAAF,EAAQC,cAAR,KAA4B;AAAA;;AAC7D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAEF,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAEG,MAAR,CAAL,EAAsB;AACrB,WAAOD,KAAP;AACA;;AAED,QAAME,aAAa,GAAKC,cAAF,IACrBvF,MAAM,CAAEuF,cAAF,EAAkB,CAAElD,KAAF,EAASyB,GAAT,KACvB,CAAE,QAAF,EAAY,OAAZ,EAAqB,SAArB,EAAgC,YAAhC,EAA8C,QAA9C,EAAyD0B,QAAzD,CACC1B,GADD,CADK,CADP,CAP6D,CAc7D;;;AACA,QAAMuB,MAAM,GAAGC,aAAa,CAAEJ,IAAI,CAACG,MAAP,CAA5B;;AACA,MAAK,CAAC,CAAEA,MAAR,EAAiB;AAChBD,IAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX+C,MAAAA,MADW;AAEXrC,MAAAA,QAAQ,EAAEhC;AAFC,KAAZ;AAIA;;AACDrB,EAAAA,OAAO,iBAAEuF,IAAI,CAACG,MAAP,iDAAE,aAAaI,QAAf,EAAyB,CAAEpD,KAAF,EAASyB,GAAT,KAAkB;AACjD,QAAK,CAAC,CAAEzB,KAAH,IAAY,CAAC,CAAE9B,QAAQ,CAAEuD,GAAF,CAA5B,EAAsC;AACrCsB,MAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX+C,QAAAA,MAAM,EAAEhD,KADG;AAEXW,QAAAA,QAAQ,EAAEzC,QAAQ,CAAEuD,GAAF;AAFP,OAAZ;AAIA;AACD,GAPM,CAAP,CAtB6D,CA+B7D;;AACAnE,EAAAA,OAAO,kBAAEuF,IAAI,CAACG,MAAP,kDAAE,cAAaK,MAAf,EAAuB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AAAA;;AACpD,UAAMxB,WAAW,GAAGkB,aAAa,CAAEK,IAAF,CAAjC;;AACA,QAAK,CAAC,CAAEvB,WAAH,IAAkB,CAAC,EAAEe,cAAF,aAAEA,cAAF,wCAAEA,cAAc,CAAIS,SAAJ,CAAhB,kDAAE,sBAA+B5C,QAAjC,CAAxB,EAAoE;AACnEoC,MAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX+C,QAAAA,MAAM,EAAEjB,WADG;AAEXpB,QAAAA,QAAQ,EAAEmC,cAAc,CAAES,SAAF,CAAd,CAA4B5C,QAF3B;AAGX6C,QAAAA,eAAe,EAAEV,cAAc,CAAES,SAAF,CAAd,CAA4BC;AAHlC,OAAZ;AAKA;;AAEDlG,IAAAA,OAAO,CAAEgG,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEF,QAAR,EAAkB,CAAEpD,KAAF,EAASyD,WAAT,KAA0B;AAClD,UACC,CAAC,CAAEzD,KAAH,IACA,CAAC,EAAE8C,cAAF,aAAEA,cAAF,eAAEA,cAAc,CAAIS,SAAJ,CAAhB,CADD,IAEA,CAAC,EAAErF,QAAF,aAAEA,QAAF,eAAEA,QAAQ,CAAIuF,WAAJ,CAAV,CAHF,EAIE;AACDV,QAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX+C,UAAAA,MAAM,EAAEhD,KADG;AAEXW,UAAAA,QAAQ,EAAEmC,cAAc,CAAES,SAAF,CAAd,CAA4B5C,QAA5B,CACRtB,KADQ,CACD,GADC,EAERqB,GAFQ,CAEDgD,GAAF,IAAWA,GAAG,GAAG,GAAN,GAAYxF,QAAQ,CAAEuF,WAAF,CAF5B,EAGRnE,IAHQ,CAGF,GAHE;AAFC,SAAZ;AAOA;AACD,KAdM,CAAP;AAeA,GAzBM,CAAP;AA2BA,SAAOyD,KAAP;AACA,CA5DM;AA8DP,OAAO,MAAMY,oBAAoB,GAAG,CAAEd,IAAF,EAAQC,cAAR,KAA4B;AAAA;;AAC/D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAEF,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAEe,QAAR,CAAL,EAAwB;AACvB,WAAOb,KAAP;AACA;;AAED,QAAMc,WAAW,GAAKX,cAAF,IAAsB;AACzC,UAAMY,OAAO,GAAG,EAAhB;AACApF,IAAAA,eAAe,CAACpB,OAAhB,CAAyB,SAAgB;AAAA,UAAd;AAAEoC,QAAAA;AAAF,OAAc;AACxC,YAAMM,KAAK,GAAGzC,GAAG,CAAE2F,cAAF,EAAkBxD,IAAlB,EAAwB,KAAxB,CAAjB;;AACA,UAAKM,KAAK,KAAK,KAAf,EAAuB;AACtBnC,QAAAA,GAAG,CAAEiG,OAAF,EAAWpE,IAAX,EAAiBM,KAAjB,CAAH;AACA;AACD,KALD;AAMA,WAAO8D,OAAP;AACA,GATD,CAP+D,CAkB/D;;;AACA,QAAMA,OAAO,GAAGD,WAAW,CAAEhB,IAAI,CAACe,QAAP,CAA3B;AACA,QAAMG,MAAM,qBAAGlB,IAAI,CAACe,QAAR,mDAAG,eAAeG,MAA9B;;AACA,MAAK,CAAEvG,OAAO,CAAEsG,OAAF,CAAT,IAAwB,CAAC,CAAEC,MAAhC,EAAyC;AACxChB,IAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX6D,MAAAA,OADW;AAEXC,MAAAA,MAFW;AAGXpD,MAAAA,QAAQ,EAAEhC;AAHC,KAAZ;AAKA,GA3B8D,CA6B/D;;;AACArB,EAAAA,OAAO,oBAAEuF,IAAI,CAACe,QAAP,oDAAE,gBAAeP,MAAjB,EAAyB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AACtD,UAAM/D,YAAY,GAAGqE,WAAW,CAAEP,IAAF,CAAhC;AACA,UAAMU,WAAW,GAAGV,IAAI,CAACS,MAAzB;;AACA,QAAK,CAAEvG,OAAO,CAAEgC,YAAF,CAAT,IAA6B,CAAC,CAAEwE,WAArC,EAAmD;AAClDjB,MAAAA,KAAK,CAAC9C,IAAN,CAAY;AACX6D,QAAAA,OAAO,EAAEtE,YADE;AAEXuE,QAAAA,MAAM,EAAEC,WAFG;AAGXrD,QAAAA,QAAQ,EAAEmC,cAAc,CAAES,SAAF,CAAd,CAA4B5C;AAH3B,OAAZ;AAKA;AACD,GAVM,CAAP;AAYA,SAAOoC,KAAP;AACA,CA3CM;AA6CP,OAAO,MAAMkB,kBAAkB,GAAG,CAAEpB,IAAF,EAAQC,cAAR,KAA4B;AAC7D,QAAMc,QAAQ,GAAGD,oBAAoB,CAAEd,IAAF,EAAQC,cAAR,CAArC;AAEA,MAAIoB,OAAO,GAAG,EAAd;AACAN,EAAAA,QAAQ,CAACtG,OAAT,CAAkB,SAAqC;AAAA,QAAnC;AAAEwG,MAAAA,OAAF;AAAWC,MAAAA,MAAX;AAAmBpD,MAAAA;AAAnB,KAAmC;AACtD,UAAMlB,YAAY,GAAGF,sBAAsB,CAAEuE,OAAF,CAA3C;AACA,UAAMK,WAAW,GAAGjD,WAAW,CAAE6C,MAAF,EAAU,gBAAV,EAA4B,IAA5B,CAA/B;;AACA,QAAKI,WAAW,CAAC/E,MAAZ,GAAqB,CAA1B,EAA8B;AAC7BK,MAAAA,YAAY,CAACQ,IAAb,CAAmB,GAAGkE,WAAtB;AACA;;AAED,QAAK1E,YAAY,CAACL,MAAb,GAAsB,CAA3B,EAA+B;AAC9B8E,MAAAA,OAAO,GAAGA,OAAO,GAAI,GAAGvD,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IAAhE;AACA;AACD,GAVD;AAYA,SAAO4E,OAAP;AACA,CAjBM;AAmBP,OAAO,MAAME,QAAQ,GAAG,CAAEvB,IAAF,EAAQC,cAAR,KAA4B;AACnD,QAAMuB,eAAe,GAAGzB,kBAAkB,CAAEC,IAAF,EAAQC,cAAR,CAA1C;AACA,QAAMwB,iBAAiB,GAAGX,oBAAoB,CAAEd,IAAF,EAAQC,cAAR,CAA9C;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,MAAIoB,OAAO,GAAG,mBAAd;AACAG,EAAAA,eAAe,CAAC/G,OAAhB,CAAyB,SAA6C;AAAA,QAA3C;AAAEqD,MAAAA,QAAF;AAAY6C,MAAAA,eAAZ;AAA6BR,MAAAA;AAA7B,KAA2C;AACrE,UAAMuB,aAAa,GAAG,EAAtB;;AACA,QAAKvB,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAEnC,MAAb,EAAsB;AACrB0D,MAAAA,aAAa,CAAC1D,MAAd,GAAuBmC,MAAM,CAACnC,MAA9B;AACA,aAAOmC,MAAM,CAACnC,MAAd;AACA,KALoE,CAOrE;;;AACA,QAAK2C,eAAL,EAAuB;AACtB,YAAMgB,mBAAmB,GAAG1C,qBAAqB,CAAEyC,aAAF,CAAjD;;AACA,UAAKC,mBAAmB,CAACpF,MAApB,KAA+B,CAApC,EAAwC;AACvC;AACA;;AACD8E,MAAAA,OAAO,GACNA,OAAO,GACN,GAAGV,eAAiB,IAAIgB,mBAAmB,CAAClF,IAApB,CAA0B,GAA1B,CAAiC,IAF3D;AAGA,KAhBoE,CAkBrE;;;AACA,UAAMG,YAAY,GAAGqC,qBAAqB,CAAEkB,MAAF,CAA1C;;AACA,QAAKvD,YAAY,CAACL,MAAb,KAAwB,CAA7B,EAAiC;AAChC;AACA;;AACD8E,IAAAA,OAAO,GAAGA,OAAO,GAAI,GAAGvD,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IAAhE;AACA,GAxBD;AA0BAgF,EAAAA,iBAAiB,CAAChH,OAAlB,CAA2B,SAA6B;AAAA,QAA3B;AAAEqD,MAAAA,QAAF;AAAYmD,MAAAA;AAAZ,KAA2B;;AACvD,QAAKnF,mBAAmB,KAAKgC,QAA7B,EAAwC;AACvC;AACAA,MAAAA,QAAQ,GAAG,EAAX;AACA;;AAED,UAAMN,OAAO,GAAGF,iBAAiB,CAAEQ,QAAF,EAAYmD,OAAZ,CAAjC;;AACA,QAAK,CAAEtG,OAAO,CAAE6C,OAAF,CAAd,EAA4B;AAC3B6D,MAAAA,OAAO,GAAGA,OAAO,GAAG7D,OAApB;AACA;AACD,GAVD;AAYA,SAAO6D,OAAP;AACA,CApDM;AAsDP,OAAO,SAASO,YAAT,CAAuB5B,IAAvB,EAA6BC,cAA7B,EAA8C;AACpD,QAAMwB,iBAAiB,GAAGX,oBAAoB,CAAEd,IAAF,EAAQC,cAAR,CAA9C;AACA,SAAOwB,iBAAiB,CAACtD,OAAlB,CAA2B,UAAmB;AAAA,QAAjB;AAAE8C,MAAAA;AAAF,KAAiB;AACpD,WAAOlD,oBAAoB,CAAEkD,OAAF,CAA3B;AACA,GAFM,CAAP;AAGA;;AAED,MAAMY,iBAAiB,GAAKC,UAAF,IAAkB;AAC3C,QAAMrD,MAAM,GAAG,EAAf;AACAqD,EAAAA,UAAU,CAACrH,OAAX,CAAsBsH,SAAF,IAAiB;AAAA;;AACpC,UAAMrC,IAAI,GAAGqC,SAAS,CAACrC,IAAvB;AACA,UAAM5B,QAAQ,4BACbiE,SADa,aACbA,SADa,8CACbA,SAAS,CAAEC,QADE,wDACb,oBAAqBC,sBADR,yEAEb,eAAevC,IAAI,CAACZ,OAAL,CAAc,OAAd,EAAuB,EAAvB,EAA4BA,OAA5B,CAAqC,GAArC,EAA0C,GAA1C,CAFhB;AAGA,UAAM6B,eAAe,4BACpBoB,SADoB,aACpBA,SADoB,+CACpBA,SAAS,CAAEC,QADS,kFACpB,qBAAqBE,KADD,0DACpB,sBAA4BC,qBADR,yEACiC,IADtD;AAEA1D,IAAAA,MAAM,CAAEiB,IAAF,CAAN,GAAiB;AAChBA,MAAAA,IADgB;AAEhB5B,MAAAA,QAFgB;AAGhB6C,MAAAA;AAHgB,KAAjB;AAKA,GAZD;AAcA,SAAOlC,MAAP;AACA,CAjBD;;AAmBA,OAAO,SAAS2D,qBAAT,GAAiC;AACvC,QAAM,CAAEC,WAAF,EAAeC,cAAf,IAAkC9G,QAAQ,CAAE,EAAF,CAAhD;AACA,QAAM,CAAEuF,QAAF,EAAYwB,WAAZ,IAA4B/G,QAAQ,CAAE,EAAF,CAA1C;AACA,QAAM,CAAEgH,UAAF,EAAcC,aAAd,IAAgCjH,QAAQ,CAAE,EAAF,CAA9C;AACA,QAAM;AAAEkH,IAAAA,MAAM,EAAEC;AAAV,MAA2BlH,UAAU,CAAEM,mBAAF,CAA3C;AAEAR,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK,EAAEoH,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAExC,MAAhB,KAA0B,EAAEwC,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAE5B,QAAhB,CAA/B,EAA0D;AACzD;AACA;;AAED,UAAMd,cAAc,GAAG4B,iBAAiB,CAAEvG,aAAa,EAAf,CAAxC;AACA,UAAMsH,gBAAgB,GAAGxB,kBAAkB,CAC1CuB,YAD0C,EAE1C1C,cAF0C,CAA3C;AAIA,UAAM4C,YAAY,GAAGtB,QAAQ,CAAEoB,YAAF,EAAgB1C,cAAhB,CAA7B;AACA,UAAM6C,OAAO,GAAGlB,YAAY,CAAEe,YAAF,EAAgB1C,cAAhB,CAA5B;AACAqC,IAAAA,cAAc,CAAE,CACf;AACCS,MAAAA,GAAG,EAAEH,gBADN;AAECI,MAAAA,cAAc,EAAE;AAFjB,KADe,EAKf;AACCD,MAAAA,GAAG,EAAEF,YADN;AAECG,MAAAA,cAAc,EAAE;AAFjB,KALe,CAAF,CAAd;AAUAT,IAAAA,WAAW,CAAEI,YAAY,CAAC5B,QAAf,CAAX;AACA0B,IAAAA,aAAa,CAAEK,OAAF,CAAb;AACA,GAxBQ,EAwBN,CAAEH,YAAF,CAxBM,CAAT;AA0BA,SAAO,CAAEN,WAAF,EAAetB,QAAf,EAAyByB,UAAzB,CAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tfirst,\n\tforEach,\n\tget,\n\tisEmpty,\n\tisString,\n\tkebabCase,\n\tpickBy,\n\treduce,\n\tset,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n\tgetBlockTypes,\n} from '@wordpress/blocks';\nimport { useEffect, useState, useContext } from '@wordpress/element';\nimport { getCSSRules } from '@wordpress/style-engine';\nimport { __unstablePresetDuotoneFilter as PresetDuotoneFilter } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Internal dependencies\n */\nimport { PRESET_METADATA, ROOT_BLOCK_SELECTOR } from './utils';\nimport { GlobalStylesContext } from './context';\n\nfunction compileStyleValue( uncompiledValue ) {\n\tconst VARIABLE_REFERENCE_PREFIX = 'var:';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';\n\tif ( startsWith( uncompiledValue, VARIABLE_REFERENCE_PREFIX ) ) {\n\t\tconst variable = uncompiledValue\n\t\t\t.slice( VARIABLE_REFERENCE_PREFIX.length )\n\t\t\t.split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )\n\t\t\t.join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );\n\t\treturn `var(--wp--${ variable })`;\n\t}\n\treturn uncompiledValue;\n}\n\n/**\n * Transform given preset tree into a set of style declarations.\n *\n * @param {Object} blockPresets\n *\n * @return {Array} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, valueKey, valueFunc, cssVarInfix } ) => {\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( value ) => {\n\t\t\t\t\t\tif ( valueKey ) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ value[ valueKey ] }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tvalueFunc &&\n\t\t\t\t\t\t\ttypeof valueFunc === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ valueFunc( value ) }`\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}\n\t\t\t} );\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n}\n\n/**\n * Transform given preset tree into a set of preset class declarations.\n *\n * @param {string} blockSelector\n * @param {Object} blockPresets\n * @return {string} CSS declarations for the preset classes.\n */\nfunction getPresetsClasses( blockSelector, blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, cssVarInfix, classes } ) => {\n\t\t\tif ( ! classes ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( { slug } ) => {\n\t\t\t\t\t\tclasses.forEach( ( { classSuffix, propertyName } ) => {\n\t\t\t\t\t\t\tconst classSelectorToUse = `.has-${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) }-${ classSuffix }`;\n\t\t\t\t\t\t\tconst selectorToUse = blockSelector\n\t\t\t\t\t\t\t\t.split( ',' ) // Selector can be \"h1, h2, h3\"\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t`${ selector }${ classSelectorToUse }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ',' );\n\t\t\t\t\t\t\tconst value = `var(--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) })`;\n\t\t\t\t\t\t\tdeclarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;\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\treturn declarations;\n\t\t},\n\t\t''\n\t);\n}\n\nfunction getPresetsSvgFilters( blockPresets = {} ) {\n\treturn PRESET_METADATA.filter(\n\t\t// Duotone are the only type of filters for now.\n\t\t( metadata ) => metadata.path.at( -1 ) === 'duotone'\n\t).flatMap( ( metadata ) => {\n\t\tconst presetByOrigin = get( blockPresets, metadata.path, {} );\n\t\treturn [ 'default', 'theme' ]\n\t\t\t.filter( ( origin ) => presetByOrigin[ origin ] )\n\t\t\t.flatMap( ( origin ) =>\n\t\t\t\tpresetByOrigin[ origin ].map( ( preset ) => (\n\t\t\t\t\t<PresetDuotoneFilter\n\t\t\t\t\t\tpreset={ preset }\n\t\t\t\t\t\tkey={ preset.slug }\n\t\t\t\t\t/>\n\t\t\t\t) )\n\t\t\t);\n\t} );\n}\n\nfunction flattenTree( input = {}, prefix, token ) {\n\tlet result = [];\n\tObject.keys( input ).forEach( ( key ) => {\n\t\tconst newKey = prefix + kebabCase( key.replace( '/', '-' ) );\n\t\tconst newLeaf = input[ key ];\n\n\t\tif ( newLeaf instanceof Object ) {\n\t\t\tconst newPrefix = newKey + token;\n\t\t\tresult = [ ...result, ...flattenTree( newLeaf, newPrefix, token ) ];\n\t\t} else {\n\t\t\tresult.push( `${ newKey }: ${ newLeaf }` );\n\t\t}\n\t} );\n\treturn result;\n}\n\n/**\n * Transform given style tree into a set of style declarations.\n *\n * @param {Object} blockStyles Block styles.\n *\n * @return {Array} An array of style declarations.\n */\nfunction getStylesDeclarations( blockStyles = {} ) {\n\tconst output = reduce(\n\t\tSTYLE_PROPERTY,\n\t\t( declarations, { value, properties, useEngine }, key ) => {\n\t\t\tconst pathToValue = value;\n\t\t\tif ( first( pathToValue ) === 'elements' || useEngine ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst styleValue = get( blockStyles, pathToValue );\n\n\t\t\tif ( !! properties && ! isString( styleValue ) ) {\n\t\t\t\tObject.entries( properties ).forEach( ( entry ) => {\n\t\t\t\t\tconst [ name, prop ] = entry;\n\n\t\t\t\t\tif ( ! get( styleValue, [ prop ], false ) ) {\n\t\t\t\t\t\t// Do not create a declaration\n\t\t\t\t\t\t// for sub-properties that don't have any value.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cssProperty = kebabCase( name );\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t`${ cssProperty }: ${ compileStyleValue(\n\t\t\t\t\t\t\tget( styleValue, [ prop ] )\n\t\t\t\t\t\t) }`\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else if ( get( blockStyles, pathToValue, false ) ) {\n\t\t\t\tconst cssProperty = key.startsWith( '--' )\n\t\t\t\t\t? key\n\t\t\t\t\t: kebabCase( key );\n\t\t\t\tdeclarations.push(\n\t\t\t\t\t`${ cssProperty }: ${ compileStyleValue(\n\t\t\t\t\t\tget( blockStyles, pathToValue )\n\t\t\t\t\t) }`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tconst extraRules = getCSSRules( blockStyles, { selector: 'self' } );\n\textraRules.forEach( ( rule ) => {\n\t\tif ( rule.selector !== 'self' ) {\n\t\t\tthrow \"This style can't be added as inline style\";\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\t\toutput.push( `${ cssProperty }: ${ compileStyleValue( rule.value ) }` );\n\t} );\n\n\treturn output;\n}\n\nexport const getNodesWithStyles = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.styles ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickStyleKeys = ( treeToPickFrom ) =>\n\t\tpickBy( treeToPickFrom, ( value, key ) =>\n\t\t\t[ 'border', 'color', 'spacing', 'typography', 'filter' ].includes(\n\t\t\t\tkey\n\t\t\t)\n\t\t);\n\n\t// Top-level.\n\tconst styles = pickStyleKeys( tree.styles );\n\tif ( !! styles ) {\n\t\tnodes.push( {\n\t\t\tstyles,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t} );\n\t}\n\tforEach( tree.styles?.elements, ( value, key ) => {\n\t\tif ( !! value && !! ELEMENTS[ key ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: value,\n\t\t\t\tselector: ELEMENTS[ key ],\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Iterate over blocks: they can have styles & elements.\n\tforEach( tree.styles?.blocks, ( node, blockName ) => {\n\t\tconst blockStyles = pickStyleKeys( node );\n\t\tif ( !! blockStyles && !! blockSelectors?.[ blockName ]?.selector ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: blockStyles,\n\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\tduotoneSelector: blockSelectors[ blockName ].duotoneSelector,\n\t\t\t} );\n\t\t}\n\n\t\tforEach( node?.elements, ( value, elementName ) => {\n\t\t\tif (\n\t\t\t\t!! value &&\n\t\t\t\t!! blockSelectors?.[ blockName ] &&\n\t\t\t\t!! ELEMENTS?.[ elementName ]\n\t\t\t) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tstyles: value,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector\n\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t.map( ( sel ) => sel + ' ' + ELEMENTS[ elementName ] )\n\t\t\t\t\t\t.join( ',' ),\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn nodes;\n};\n\nexport const getNodesWithSettings = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.settings ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickPresets = ( treeToPickFrom ) => {\n\t\tconst presets = {};\n\t\tPRESET_METADATA.forEach( ( { path } ) => {\n\t\t\tconst value = get( treeToPickFrom, path, false );\n\t\t\tif ( value !== false ) {\n\t\t\t\tset( presets, path, value );\n\t\t\t}\n\t\t} );\n\t\treturn presets;\n\t};\n\n\t// Top-level.\n\tconst presets = pickPresets( tree.settings );\n\tconst custom = tree.settings?.custom;\n\tif ( ! isEmpty( presets ) || !! custom ) {\n\t\tnodes.push( {\n\t\t\tpresets,\n\t\t\tcustom,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t} );\n\t}\n\n\t// Blocks.\n\tforEach( tree.settings?.blocks, ( node, blockName ) => {\n\t\tconst blockPresets = pickPresets( node );\n\t\tconst blockCustom = node.custom;\n\t\tif ( ! isEmpty( blockPresets ) || !! blockCustom ) {\n\t\t\tnodes.push( {\n\t\t\t\tpresets: blockPresets,\n\t\t\t\tcustom: blockCustom,\n\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn nodes;\n};\n\nexport const toCustomProperties = ( tree, blockSelectors ) => {\n\tconst settings = getNodesWithSettings( tree, blockSelectors );\n\n\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets );\n\t\tconst customProps = flattenTree( custom, '--wp--custom--', '--' );\n\t\tif ( customProps.length > 0 ) {\n\t\t\tdeclarations.push( ...customProps );\n\t\t}\n\n\t\tif ( declarations.length > 0 ) {\n\t\t\truleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nexport const toStyles = ( tree, blockSelectors ) => {\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\n\t/*\n\t * Reset default browser margin on the root body element.\n\t * This is set on the root selector **before** generating the ruleset\n\t * from the `theme.json`. This is to ensure that if the `theme.json` declares\n\t * `margin` in its `spacing` declaration for the `body` element then these\n\t * user-generated values take precedence in the CSS cascade.\n\t * @link https://github.com/WordPress/gutenberg/issues/36147.\n\t */\n\tlet ruleset = 'body {margin: 0;}';\n\tnodesWithStyles.forEach( ( { selector, duotoneSelector, styles } ) => {\n\t\tconst duotoneStyles = {};\n\t\tif ( styles?.filter ) {\n\t\t\tduotoneStyles.filter = styles.filter;\n\t\t\tdelete styles.filter;\n\t\t}\n\n\t\t// Process duotone styles (they use color.__experimentalDuotone selector).\n\t\tif ( duotoneSelector ) {\n\t\t\tconst duotoneDeclarations = getStylesDeclarations( duotoneStyles );\n\t\t\tif ( duotoneDeclarations.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\truleset =\n\t\t\t\truleset +\n\t\t\t\t`${ duotoneSelector }{${ duotoneDeclarations.join( ';' ) };}`;\n\t\t}\n\n\t\t// Process the remaning block styles (they use either normal block class or __experimentalSelector).\n\t\tconst declarations = getStylesDeclarations( styles );\n\t\tif ( declarations.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\truleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t} );\n\n\tnodesWithSettings.forEach( ( { selector, presets } ) => {\n\t\tif ( ROOT_BLOCK_SELECTOR === selector ) {\n\t\t\t// Do not add extra specificity for top-level classes.\n\t\t\tselector = '';\n\t\t}\n\n\t\tconst classes = getPresetsClasses( selector, presets );\n\t\tif ( ! isEmpty( classes ) ) {\n\t\t\truleset = ruleset + classes;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nexport function toSvgFilters( tree, blockSelectors ) {\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\treturn nodesWithSettings.flatMap( ( { presets } ) => {\n\t\treturn getPresetsSvgFilters( presets );\n\t} );\n}\n\nconst getBlockSelectors = ( blockTypes ) => {\n\tconst result = {};\n\tblockTypes.forEach( ( blockType ) => {\n\t\tconst name = blockType.name;\n\t\tconst selector =\n\t\t\tblockType?.supports?.__experimentalSelector ??\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t\tconst duotoneSelector =\n\t\t\tblockType?.supports?.color?.__experimentalDuotone ?? null;\n\t\tresult[ name ] = {\n\t\t\tname,\n\t\t\tselector,\n\t\t\tduotoneSelector,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\nexport function useGlobalStylesOutput() {\n\tconst [ stylesheets, setStylesheets ] = useState( [] );\n\tconst [ settings, setSettings ] = useState( {} );\n\tconst [ svgFilters, setSvgFilters ] = useState( {} );\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\n\tuseEffect( () => {\n\t\tif ( ! mergedConfig?.styles || ! mergedConfig?.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockSelectors = getBlockSelectors( getBlockTypes() );\n\t\tconst customProperties = toCustomProperties(\n\t\t\tmergedConfig,\n\t\t\tblockSelectors\n\t\t);\n\t\tconst globalStyles = toStyles( mergedConfig, blockSelectors );\n\t\tconst filters = toSvgFilters( mergedConfig, blockSelectors );\n\t\tsetStylesheets( [\n\t\t\t{\n\t\t\t\tcss: customProperties,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcss: globalStyles,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t] );\n\t\tsetSettings( mergedConfig.settings );\n\t\tsetSvgFilters( filters );\n\t}, [ mergedConfig ] );\n\n\treturn [ stylesheets, settings, svgFilters ];\n}\n"]}
@@ -29,6 +29,16 @@ export const PRESET_METADATA = [{
29
29
  classSuffix: 'gradient-background',
30
30
  propertyName: 'background'
31
31
  }]
32
+ }, {
33
+ path: ['color', 'duotone'],
34
+ cssVarInfix: 'duotone',
35
+ valueFunc: _ref => {
36
+ let {
37
+ slug
38
+ } = _ref;
39
+ return `url( '#wp-duotone-${slug}' )`;
40
+ },
41
+ classes: []
32
42
  }, {
33
43
  path: ['typography', 'fontSizes'],
34
44
  valueKey: 'size',
@@ -119,8 +129,8 @@ export function getPresetVariableFromValue(features, blockName, variableStylePat
119
129
  return `var:preset|${cssVarInfix}|${presetObject.slug}`;
120
130
  }
121
131
 
122
- function getValueFromPresetVariable(features, blockName, variable, _ref) {
123
- let [presetType, slug] = _ref;
132
+ function getValueFromPresetVariable(features, blockName, variable, _ref2) {
133
+ let [presetType, slug] = _ref2;
124
134
  const metadata = find(PRESET_METADATA, ['cssVarInfix', presetType]);
125
135
 
126
136
  if (!metadata) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/utils.js"],"names":["get","find","isString","ROOT_BLOCK_NAME","ROOT_BLOCK_SELECTOR","ROOT_BLOCK_SUPPORTS","PRESET_METADATA","path","valueKey","cssVarInfix","classes","classSuffix","propertyName","STYLE_PATH_TO_CSS_VAR_INFIX","findInPresetsBy","features","blockName","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","origin","presets","presetObject","preset","highestPresetObjectWithSameSlug","slug","undefined","getPresetVariableFromValue","variableStylePath","presetPropertyValue","metadata","getValueFromPresetVariable","variable","presetType","result","getValueFromVariable","getValueFromCustomVariable","USER_VALUE_PREFIX","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","parsedVar","startsWith","slice","length","split","endsWith","type"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, find, isString } from 'lodash';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_NAME = 'root';\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_BLOCK_SUPPORTS = [\n\t'background',\n\t'backgroundColor',\n\t'color',\n\t'linkColor',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'lineHeight',\n\t'textDecoration',\n\t'textTransform',\n\t'padding',\n];\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: [ 'typography', 'fontSizes' ],\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];\n\nconst STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'elements.link.color.text': 'color',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\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\tget( features, [ 'blocks', blockName, ...presetPath ] ),\n\t\tget( 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 = find(\n\t\t\t\t\t\tpresets,\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 = find( PRESET_METADATA, [ 'cssVarInfix', cssVarInfix ] );\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 = find( PRESET_METADATA, [ 'cssVarInfix', presetType ] );\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\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\tget( features, [ 'blocks', blockName, 'custom', ...path ] ) ??\n\t\tget( features, [ '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\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || ! isString( variable ) ) {\n\t\treturn variable;\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"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/utils.js"],"names":["get","find","isString","ROOT_BLOCK_NAME","ROOT_BLOCK_SELECTOR","ROOT_BLOCK_SUPPORTS","PRESET_METADATA","path","valueKey","cssVarInfix","classes","classSuffix","propertyName","valueFunc","slug","STYLE_PATH_TO_CSS_VAR_INFIX","findInPresetsBy","features","blockName","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","origin","presets","presetObject","preset","highestPresetObjectWithSameSlug","undefined","getPresetVariableFromValue","variableStylePath","presetPropertyValue","metadata","getValueFromPresetVariable","variable","presetType","result","getValueFromVariable","getValueFromCustomVariable","USER_VALUE_PREFIX","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","parsedVar","startsWith","slice","length","split","endsWith","type"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, find, isString } from 'lodash';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_NAME = 'root';\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_BLOCK_SUPPORTS = [\n\t'background',\n\t'backgroundColor',\n\t'color',\n\t'linkColor',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'lineHeight',\n\t'textDecoration',\n\t'textTransform',\n\t'padding',\n];\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\tcssVarInfix: 'duotone',\n\t\tvalueFunc: ( { slug } ) => `url( '#wp-duotone-${ slug }' )`,\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontSizes' ],\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];\n\nconst STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'elements.link.color.text': 'color',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\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\tget( features, [ 'blocks', blockName, ...presetPath ] ),\n\t\tget( 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 = find(\n\t\t\t\t\t\tpresets,\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 = find( PRESET_METADATA, [ 'cssVarInfix', cssVarInfix ] );\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 = find( PRESET_METADATA, [ 'cssVarInfix', presetType ] );\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\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\tget( features, [ 'blocks', blockName, 'custom', ...path ] ) ??\n\t\tget( features, [ '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\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || ! isString( variable ) ) {\n\t\treturn variable;\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/edit-site",
3
- "version": "4.3.2",
3
+ "version": "4.3.5",
4
4
  "description": "Edit Site Page module for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -29,28 +29,28 @@
29
29
  "@babel/runtime": "^7.16.0",
30
30
  "@wordpress/a11y": "^3.6.1",
31
31
  "@wordpress/api-fetch": "^6.3.1",
32
- "@wordpress/block-editor": "^8.5.2",
33
- "@wordpress/block-library": "^7.3.2",
34
- "@wordpress/blocks": "^11.5.2",
35
- "@wordpress/components": "^19.8.1",
32
+ "@wordpress/block-editor": "^8.5.4",
33
+ "@wordpress/block-library": "^7.3.5",
34
+ "@wordpress/blocks": "^11.5.3",
35
+ "@wordpress/components": "^19.8.3",
36
36
  "@wordpress/compose": "^5.4.1",
37
- "@wordpress/core-data": "^4.4.2",
37
+ "@wordpress/core-data": "^4.4.4",
38
38
  "@wordpress/data": "^6.6.1",
39
39
  "@wordpress/deprecated": "^3.6.1",
40
- "@wordpress/editor": "^12.5.2",
40
+ "@wordpress/editor": "^12.5.4",
41
41
  "@wordpress/element": "^4.4.1",
42
42
  "@wordpress/hooks": "^3.6.1",
43
43
  "@wordpress/html-entities": "^3.6.1",
44
44
  "@wordpress/i18n": "^4.6.1",
45
- "@wordpress/icons": "^8.2.1",
46
- "@wordpress/interface": "^4.5.1",
45
+ "@wordpress/icons": "^8.2.2",
46
+ "@wordpress/interface": "^4.5.3",
47
47
  "@wordpress/keyboard-shortcuts": "^3.4.1",
48
48
  "@wordpress/keycodes": "^3.6.1",
49
49
  "@wordpress/media-utils": "^3.4.1",
50
50
  "@wordpress/notices": "^3.6.1",
51
- "@wordpress/plugins": "^4.4.1",
52
- "@wordpress/preferences": "^1.2.1",
53
- "@wordpress/reusable-blocks": "^3.4.2",
51
+ "@wordpress/plugins": "^4.4.2",
52
+ "@wordpress/preferences": "^1.2.3",
53
+ "@wordpress/reusable-blocks": "^3.4.4",
54
54
  "@wordpress/style-engine": "^0.5.1",
55
55
  "@wordpress/url": "^3.7.1",
56
56
  "@wordpress/viewport": "^4.4.1",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "gitHead": "446565ecaa40370173c18926535e975ec5652b71"
71
+ "gitHead": "7efc8349abd18322bd93f318269ed2eaba25bcd8"
72
72
  }
@@ -36,7 +36,7 @@ const HANDLE_STYLES_OVERRIDE = {
36
36
  left: undefined,
37
37
  };
38
38
 
39
- function ResizableEditor( { enableResizing, settings, ...props } ) {
39
+ function ResizableEditor( { enableResizing, settings, children, ...props } ) {
40
40
  const deviceType = useSelect(
41
41
  ( select ) =>
42
42
  select( editSiteStore ).__experimentalGetPreviewDeviceType(),
@@ -182,7 +182,11 @@ function ResizableEditor( { enableResizing, settings, ...props } ) {
182
182
  name="editor-canvas"
183
183
  className="edit-site-visual-editor__editor-canvas"
184
184
  { ...props }
185
- />
185
+ >
186
+ { /* Filters need to be rendered before children to avoid Safari rendering issues. */ }
187
+ { settings.svgFilters }
188
+ { children }
189
+ </Iframe>
186
190
  </ResizableBox>
187
191
  );
188
192
  }
@@ -20,7 +20,7 @@ import { store as editSiteStore } from '../../store';
20
20
  import { useGlobalStylesOutput } from '../global-styles/use-global-styles-output';
21
21
 
22
22
  function useGlobalStylesRenderer() {
23
- const [ styles, settings ] = useGlobalStylesOutput();
23
+ const [ styles, settings, svgFilters ] = useGlobalStylesOutput();
24
24
  const { getSettings } = useSelect( editSiteStore );
25
25
  const { updateSettings } = useDispatch( editSiteStore );
26
26
 
@@ -37,6 +37,7 @@ function useGlobalStylesRenderer() {
37
37
  updateSettings( {
38
38
  ...currentStoreSettings,
39
39
  styles: [ ...nonGlobalStyles, ...styles ],
40
+ svgFilters,
40
41
  __experimentalFeatures: settings,
41
42
  } );
42
43
  }, [ styles, settings ] );
@@ -377,7 +377,9 @@ describe( 'global styles renderer', () => {
377
377
  };
378
378
 
379
379
  expect( toStyles( tree, blockSelectors ) ).toEqual(
380
- '.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }body{background-color: red;margin: 10px;padding: 10px;}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;}.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;}'
380
+ 'body {margin: 0;}' +
381
+ 'body{background-color: red;margin: 10px;padding: 10px;}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;}' +
382
+ '.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;}'
381
383
  );
382
384
  } );
383
385
  } );