@wordpress/edit-site 4.13.1-next.957ca95e4c.0 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/components/block-editor/index.js +20 -10
- package/build/components/block-editor/index.js.map +1 -1
- package/build/components/block-editor/resizable-editor.js +8 -1
- package/build/components/block-editor/resizable-editor.js.map +1 -1
- package/build/components/editor/index.js +9 -4
- package/build/components/editor/index.js.map +1 -1
- package/build/components/global-styles/gradients-palette-panel.js +6 -2
- package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +4 -2
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +41 -29
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/header/index.js +41 -5
- package/build/components/header/index.js.map +1 -1
- package/build/components/list/header.js +15 -2
- package/build/components/list/header.js.map +1 -1
- package/build/components/navigation-sidebar/navigation-panel/index.js +10 -4
- package/build/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
- package/build/components/sidebar/index.js +8 -3
- package/build/components/sidebar/index.js.map +1 -1
- package/build/components/template-part-converter/convert-to-template-part.js +16 -0
- package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build/index.js +4 -1
- package/build/index.js.map +1 -1
- package/build-module/components/block-editor/index.js +20 -9
- package/build-module/components/block-editor/index.js.map +1 -1
- package/build-module/components/block-editor/resizable-editor.js +9 -2
- package/build-module/components/block-editor/resizable-editor.js.map +1 -1
- package/build-module/components/editor/index.js +10 -5
- package/build-module/components/editor/index.js.map +1 -1
- package/build-module/components/global-styles/gradients-palette-panel.js +6 -2
- package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +5 -3
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +42 -30
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/header/index.js +42 -7
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/list/header.js +14 -2
- package/build-module/components/list/header.js.map +1 -1
- package/build-module/components/navigation-sidebar/navigation-panel/index.js +11 -5
- package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
- package/build-module/components/sidebar/index.js +7 -3
- package/build-module/components/sidebar/index.js.map +1 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js +16 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build-module/index.js +4 -1
- package/build-module/index.js.map +1 -1
- package/build-style/style-rtl.css +28 -16
- package/build-style/style.css +28 -16
- package/package.json +29 -29
- package/src/components/block-editor/index.js +34 -16
- package/src/components/block-editor/resizable-editor.js +10 -3
- package/src/components/code-editor/style.scss +2 -3
- package/src/components/editor/index.js +12 -5
- package/src/components/global-styles/gradients-palette-panel.js +25 -12
- package/src/components/global-styles/hooks.js +5 -3
- package/src/components/global-styles/use-global-styles-output.js +66 -57
- package/src/components/header/index.js +61 -21
- package/src/components/header/style.scss +9 -0
- package/src/components/list/header.js +15 -5
- package/src/components/navigation-sidebar/navigation-panel/index.js +30 -24
- package/src/components/sidebar/index.js +23 -20
- package/src/components/template-part-converter/convert-to-template-part.js +14 -1
- package/src/index.js +4 -0
- package/src/style.scss +1 -0
|
@@ -210,7 +210,7 @@ function getStylesDeclarations() {
|
|
|
210
210
|
|
|
211
211
|
const pathToValue = value;
|
|
212
212
|
|
|
213
|
-
if (
|
|
213
|
+
if (pathToValue[0] === 'elements' || useEngine) {
|
|
214
214
|
return declarations;
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -317,8 +317,8 @@ function getLayoutStyles(_ref6) {
|
|
|
317
317
|
spacingStyles
|
|
318
318
|
} = _ref7;
|
|
319
319
|
|
|
320
|
-
// Allow
|
|
321
|
-
if (!hasBlockGapSupport && '
|
|
320
|
+
// Allow outputting fallback gap styles for flex layout type when block gap support isn't available.
|
|
321
|
+
if (!hasBlockGapSupport && 'flex' !== name) {
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
324
|
|
|
@@ -392,7 +392,7 @@ function getLayoutStyles(_ref6) {
|
|
|
392
392
|
}
|
|
393
393
|
|
|
394
394
|
const getNodesWithStyles = (tree, blockSelectors) => {
|
|
395
|
-
var _tree$styles3;
|
|
395
|
+
var _tree$styles$blocks, _tree$styles3;
|
|
396
396
|
|
|
397
397
|
const nodes = [];
|
|
398
398
|
|
|
@@ -412,9 +412,11 @@ const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
412
412
|
});
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
|
|
415
|
+
Object.entries(_blocks.__EXPERIMENTAL_ELEMENTS).forEach(_ref11 => {
|
|
416
416
|
var _tree$styles;
|
|
417
417
|
|
|
418
|
+
let [name, selector] = _ref11;
|
|
419
|
+
|
|
418
420
|
if (!!((_tree$styles = tree.styles) !== null && _tree$styles !== void 0 && _tree$styles.elements[name])) {
|
|
419
421
|
var _tree$styles2;
|
|
420
422
|
|
|
@@ -425,9 +427,10 @@ const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
425
427
|
}
|
|
426
428
|
}); // Iterate over blocks: they can have styles & elements.
|
|
427
429
|
|
|
428
|
-
|
|
429
|
-
var _blockSelectors$block;
|
|
430
|
+
Object.entries((_tree$styles$blocks = (_tree$styles3 = tree.styles) === null || _tree$styles3 === void 0 ? void 0 : _tree$styles3.blocks) !== null && _tree$styles$blocks !== void 0 ? _tree$styles$blocks : {}).forEach(_ref12 => {
|
|
431
|
+
var _blockSelectors$block, _node$elements;
|
|
430
432
|
|
|
433
|
+
let [blockName, node] = _ref12;
|
|
431
434
|
const blockStyles = pickStyleKeys(node);
|
|
432
435
|
|
|
433
436
|
if (!!blockStyles && !!(blockSelectors !== null && blockSelectors !== void 0 && (_blockSelectors$block = blockSelectors[blockName]) !== null && _blockSelectors$block !== void 0 && _blockSelectors$block.selector)) {
|
|
@@ -441,7 +444,9 @@ const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
441
444
|
});
|
|
442
445
|
}
|
|
443
446
|
|
|
444
|
-
(
|
|
447
|
+
Object.entries((_node$elements = node === null || node === void 0 ? void 0 : node.elements) !== null && _node$elements !== void 0 ? _node$elements : {}).forEach(_ref13 => {
|
|
448
|
+
let [elementName, value] = _ref13;
|
|
449
|
+
|
|
445
450
|
if (!!value && !!(blockSelectors !== null && blockSelectors !== void 0 && blockSelectors[blockName]) && !!(_blocks.__EXPERIMENTAL_ELEMENTS !== null && _blocks.__EXPERIMENTAL_ELEMENTS !== void 0 && _blocks.__EXPERIMENTAL_ELEMENTS[elementName])) {
|
|
446
451
|
nodes.push({
|
|
447
452
|
styles: value,
|
|
@@ -460,7 +465,7 @@ const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
460
465
|
exports.getNodesWithStyles = getNodesWithStyles;
|
|
461
466
|
|
|
462
467
|
const getNodesWithSettings = (tree, blockSelectors) => {
|
|
463
|
-
var _tree$settings3, _tree$settings4;
|
|
468
|
+
var _tree$settings3, _tree$settings$blocks, _tree$settings4;
|
|
464
469
|
|
|
465
470
|
const nodes = [];
|
|
466
471
|
|
|
@@ -471,10 +476,10 @@ const getNodesWithSettings = (tree, blockSelectors) => {
|
|
|
471
476
|
const pickPresets = treeToPickFrom => {
|
|
472
477
|
const presets = {};
|
|
473
478
|
|
|
474
|
-
_utils.PRESET_METADATA.forEach(
|
|
479
|
+
_utils.PRESET_METADATA.forEach(_ref14 => {
|
|
475
480
|
let {
|
|
476
481
|
path
|
|
477
|
-
} =
|
|
482
|
+
} = _ref14;
|
|
478
483
|
const value = (0, _lodash.get)(treeToPickFrom, path, false);
|
|
479
484
|
|
|
480
485
|
if (value !== false) {
|
|
@@ -498,7 +503,8 @@ const getNodesWithSettings = (tree, blockSelectors) => {
|
|
|
498
503
|
} // Blocks.
|
|
499
504
|
|
|
500
505
|
|
|
501
|
-
|
|
506
|
+
Object.entries((_tree$settings$blocks = (_tree$settings4 = tree.settings) === null || _tree$settings4 === void 0 ? void 0 : _tree$settings4.blocks) !== null && _tree$settings$blocks !== void 0 ? _tree$settings$blocks : {}).forEach(_ref15 => {
|
|
507
|
+
let [blockName, node] = _ref15;
|
|
502
508
|
const blockPresets = pickPresets(node);
|
|
503
509
|
const blockCustom = node.custom;
|
|
504
510
|
|
|
@@ -518,12 +524,12 @@ exports.getNodesWithSettings = getNodesWithSettings;
|
|
|
518
524
|
const toCustomProperties = (tree, blockSelectors) => {
|
|
519
525
|
const settings = getNodesWithSettings(tree, blockSelectors);
|
|
520
526
|
let ruleset = '';
|
|
521
|
-
settings.forEach(
|
|
527
|
+
settings.forEach(_ref16 => {
|
|
522
528
|
let {
|
|
523
529
|
presets,
|
|
524
530
|
custom,
|
|
525
531
|
selector
|
|
526
|
-
} =
|
|
532
|
+
} = _ref16;
|
|
527
533
|
const declarations = getPresetsDeclarations(presets, tree === null || tree === void 0 ? void 0 : tree.settings);
|
|
528
534
|
const customProps = flattenTree(custom, '--wp--custom--', '--');
|
|
529
535
|
|
|
@@ -571,11 +577,17 @@ const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallback
|
|
|
571
577
|
}
|
|
572
578
|
|
|
573
579
|
if (useRootPaddingAlign) {
|
|
574
|
-
ruleset +=
|
|
580
|
+
ruleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }
|
|
581
|
+
.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
|
|
582
|
+
.has-global-padding :where(.has-global-padding) { padding-right: 0; padding-left: 0; }
|
|
583
|
+
.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }
|
|
584
|
+
.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; }
|
|
585
|
+
.has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }
|
|
586
|
+
.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0;`;
|
|
575
587
|
}
|
|
576
588
|
|
|
577
589
|
ruleset += '}';
|
|
578
|
-
nodesWithStyles.forEach(
|
|
590
|
+
nodesWithStyles.forEach(_ref17 => {
|
|
579
591
|
let {
|
|
580
592
|
selector,
|
|
581
593
|
duotoneSelector,
|
|
@@ -583,13 +595,13 @@ const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallback
|
|
|
583
595
|
fallbackGapValue,
|
|
584
596
|
hasLayoutSupport,
|
|
585
597
|
featureSelectors
|
|
586
|
-
} =
|
|
598
|
+
} = _ref17;
|
|
587
599
|
|
|
588
600
|
// Process styles for block support features with custom feature level
|
|
589
601
|
// CSS selectors set.
|
|
590
602
|
if (featureSelectors) {
|
|
591
|
-
Object.entries(featureSelectors).forEach(
|
|
592
|
-
let [featureName, featureSelector] =
|
|
603
|
+
Object.entries(featureSelectors).forEach(_ref18 => {
|
|
604
|
+
let [featureName, featureSelector] = _ref18;
|
|
593
605
|
|
|
594
606
|
if (styles !== null && styles !== void 0 && styles[featureName]) {
|
|
595
607
|
const featureStyles = {
|
|
@@ -641,14 +653,14 @@ const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallback
|
|
|
641
653
|
} // Check for pseudo selector in `styles` and handle separately.
|
|
642
654
|
|
|
643
655
|
|
|
644
|
-
const pseudoSelectorStyles = Object.entries(styles).filter(
|
|
645
|
-
let [key] =
|
|
656
|
+
const pseudoSelectorStyles = Object.entries(styles).filter(_ref19 => {
|
|
657
|
+
let [key] = _ref19;
|
|
646
658
|
return key.startsWith(':');
|
|
647
659
|
});
|
|
648
660
|
|
|
649
661
|
if (pseudoSelectorStyles !== null && pseudoSelectorStyles !== void 0 && pseudoSelectorStyles.length) {
|
|
650
|
-
pseudoSelectorStyles.forEach(
|
|
651
|
-
let [pseudoKey, pseudoStyle] =
|
|
662
|
+
pseudoSelectorStyles.forEach(_ref20 => {
|
|
663
|
+
let [pseudoKey, pseudoStyle] = _ref20;
|
|
652
664
|
const pseudoDeclarations = getStylesDeclarations(pseudoStyle);
|
|
653
665
|
|
|
654
666
|
if (!(pseudoDeclarations !== null && pseudoDeclarations !== void 0 && pseudoDeclarations.length)) {
|
|
@@ -684,11 +696,11 @@ const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallback
|
|
|
684
696
|
ruleset = ruleset + `.wp-site-blocks > * + * { margin-block-start: ${gapValue}; }`;
|
|
685
697
|
}
|
|
686
698
|
|
|
687
|
-
nodesWithSettings.forEach(
|
|
699
|
+
nodesWithSettings.forEach(_ref21 => {
|
|
688
700
|
let {
|
|
689
701
|
selector,
|
|
690
702
|
presets
|
|
691
|
-
} =
|
|
703
|
+
} = _ref21;
|
|
692
704
|
|
|
693
705
|
if (_utils.ROOT_BLOCK_SELECTOR === selector) {
|
|
694
706
|
// Do not add extra specificity for top-level classes.
|
|
@@ -708,10 +720,10 @@ exports.toStyles = toStyles;
|
|
|
708
720
|
|
|
709
721
|
function toSvgFilters(tree, blockSelectors) {
|
|
710
722
|
const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
|
|
711
|
-
return nodesWithSettings.flatMap(
|
|
723
|
+
return nodesWithSettings.flatMap(_ref22 => {
|
|
712
724
|
let {
|
|
713
725
|
presets
|
|
714
|
-
} =
|
|
726
|
+
} = _ref22;
|
|
715
727
|
return getPresetsSvgFilters(presets);
|
|
716
728
|
});
|
|
717
729
|
}
|
|
@@ -728,10 +740,10 @@ const getBlockSelectors = blockTypes => {
|
|
|
728
740
|
const fallbackGapValue = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports4 = blockType.supports) === null || _blockType$supports4 === void 0 ? void 0 : (_blockType$supports4$ = _blockType$supports4.spacing) === null || _blockType$supports4$ === void 0 ? void 0 : (_blockType$supports4$2 = _blockType$supports4$.blockGap) === null || _blockType$supports4$2 === void 0 ? void 0 : _blockType$supports4$2.__experimentalDefault; // For each block support feature add any custom selectors.
|
|
729
741
|
|
|
730
742
|
const featureSelectors = {};
|
|
731
|
-
Object.entries(BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS).forEach(
|
|
743
|
+
Object.entries(BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS).forEach(_ref23 => {
|
|
732
744
|
var _blockType$supports5, _blockType$supports5$;
|
|
733
745
|
|
|
734
|
-
let [featureKey, featureName] =
|
|
746
|
+
let [featureKey, featureName] = _ref23;
|
|
735
747
|
const featureSelector = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports5 = blockType.supports) === null || _blockType$supports5 === void 0 ? void 0 : (_blockType$supports5$ = _blockType$supports5[featureKey]) === null || _blockType$supports5$ === void 0 ? void 0 : _blockType$supports5$.__experimentalSelector;
|
|
736
748
|
|
|
737
749
|
if (featureSelector) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/use-global-styles-output.js"],"names":["BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS","__experimentalBorder","color","spacing","typography","compileStyleValue","uncompiledValue","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","startsWith","variable","slice","length","split","join","getPresetsDeclarations","blockPresets","mergedSettings","PRESET_METADATA","declarations","path","valueKey","valueFunc","cssVarInfix","presetByOrigin","forEach","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","useRootPaddingAlign","tree","isRoot","ROOT_BLOCK_SELECTOR","output","STYLE_PROPERTY","properties","useEngine","rootOnly","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","ruleValue","ref","refPath","getLayoutStyles","style","hasBlockGapSupport","hasFallbackGapSupport","fallbackGapValue","ruleset","gapValue","blockGap","settings","layout","definitions","values","className","spacingStyles","spacingStyle","rules","cssValue","combinedSelector","validDisplayModes","displayMode","baseStyles","includes","baseStyle","getNodesWithStyles","blockSelectors","nodes","styles","pickStyleKeys","treeToPickFrom","ELEMENTS","elements","blocks","node","blockName","duotoneSelector","hasLayoutSupport","featureSelectors","elementName","sel","elementSelectors","elementSelector","getNodesWithSettings","pickPresets","presets","custom","blockCustom","toCustomProperties","customProps","toStyles","disableLayoutStyles","nodesWithStyles","nodesWithSettings","useRootPaddingAwareAlignments","contentSize","wideSize","featureName","featureSelector","featureStyles","featureDeclarations","duotoneStyles","duotoneDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","_selector","pseudoRule","toSvgFilters","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","__experimentalDuotone","__experimentalLayout","__experimentalDefault","featureKey","undefined","useGlobalStylesOutput","merged","mergedConfig","GlobalStylesContext","select","getSettings","blockEditorStore","customProperties","globalStyles","filters","stylesheets","css","isGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tfirst,\n\tforEach,\n\tget,\n\tisEmpty,\n\tkebabCase,\n\tpickBy,\n\treduce,\n\tset,\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 { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\nimport { getCSSRules } from '@wordpress/style-engine';\nimport {\n\t__unstablePresetDuotoneFilter as PresetDuotoneFilter,\n\t__experimentalGetGapCSSValue as getGapCSSValue,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { PRESET_METADATA, ROOT_BLOCK_SELECTOR, scopeSelector } from './utils';\nimport { GlobalStylesContext } from './context';\nimport { useSetting } from './hooks';\n\n// List of block support features that can have their related styles\n// generated under their own feature level selector rather than the block's.\nconst BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {\n\t__experimentalBorder: 'border',\n\tcolor: 'color',\n\tspacing: 'spacing',\n\ttypography: 'typography',\n};\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\n\tif ( uncompiledValue?.startsWith?.( 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 * @param {Object} mergedSettings Merged theme.json settings.\n *\n * @return {Array<Object>} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {}, mergedSettings ) {\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 && ! valueFunc ) {\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, mergedSettings ) }`\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 * @param {string} selector The selector these declarations should attach to.\n *\n * @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.\n *\n * @param {Object} tree A theme.json tree containing layout definitions.\n *\n * @return {Array} An array of style declarations.\n */\nexport function getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign,\n\ttree = {}\n) {\n\tconst isRoot = ROOT_BLOCK_SELECTOR === selector;\n\tconst output = reduce(\n\t\tSTYLE_PROPERTY,\n\t\t( declarations, { value, properties, useEngine, rootOnly }, key ) => {\n\t\t\tif ( rootOnly && ! isRoot ) {\n\t\t\t\treturn declarations;\n\t\t\t}\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\t// Root-level padding styles don't currently support strings with CSS shorthand values.\n\t\t\t// This may change: https://github.com/WordPress/gutenberg/issues/40132.\n\t\t\tif (\n\t\t\t\tkey === '--wp--style--root--padding' &&\n\t\t\t\t( typeof styleValue === 'string' || ! useRootPaddingAlign )\n\t\t\t) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tif ( !! properties && typeof styleValue !== 'string' ) {\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 = name.startsWith( '--' )\n\t\t\t\t\t\t? name\n\t\t\t\t\t\t: 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 );\n\textraRules.forEach( ( rule ) => {\n\t\t// Don't output padding properties if padding variables are set.\n\t\tif (\n\t\t\tisRoot &&\n\t\t\tuseRootPaddingAlign &&\n\t\t\trule.key.startsWith( 'padding' )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\n\t\tlet ruleValue = rule.value;\n\t\tif ( typeof ruleValue !== 'string' && ruleValue?.ref ) {\n\t\t\tconst refPath = ruleValue.ref.split( '.' );\n\t\t\truleValue = get( tree, 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 ( ! ruleValue || !! ruleValue?.ref ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\toutput.push( `${ cssProperty }: ${ ruleValue }` );\n\t} );\n\n\treturn output;\n}\n\n/**\n * Get generated CSS for layout styles by looking up layout definitions provided\n * in theme.json, and outputting common layout styles, and specific blockGap values.\n *\n * @param {Object} props\n * @param {Object} props.tree A theme.json tree containing layout definitions.\n * @param {Object} props.style A style object containing spacing values.\n * @param {string} props.selector Selector used to group together layout styling rules.\n * @param {boolean} props.hasBlockGapSupport Whether or not the theme opts-in to blockGap support.\n * @param {boolean} props.hasFallbackGapSupport Whether or not the theme allows fallback gap styles.\n * @param {?string} props.fallbackGapValue An optional fallback gap value if no real gap value is available.\n * @return {string} Generated CSS rules for the layout styles.\n */\nexport function getLayoutStyles( {\n\ttree,\n\tstyle,\n\tselector,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tfallbackGapValue,\n} ) {\n\tlet ruleset = '';\n\tlet gapValue = hasBlockGapSupport\n\t\t? getGapCSSValue( style?.spacing?.blockGap )\n\t\t: '';\n\n\t// Ensure a fallback gap value for the root layout definitions,\n\t// and use a fallback value if one is provided for the current block.\n\tif ( hasFallbackGapSupport ) {\n\t\tif ( selector === ROOT_BLOCK_SELECTOR ) {\n\t\t\tgapValue = ! gapValue ? '0.5em' : gapValue;\n\t\t} else if ( ! hasBlockGapSupport && fallbackGapValue ) {\n\t\t\tgapValue = fallbackGapValue;\n\t\t}\n\t}\n\n\tif ( gapValue && tree?.settings?.layout?.definitions ) {\n\t\tObject.values( tree.settings.layout.definitions ).forEach(\n\t\t\t( { className, name, spacingStyles } ) => {\n\t\t\t\t// Allow skipping default layout for themes that opt-in to block styles, but opt-out of blockGap.\n\t\t\t\tif ( ! hasBlockGapSupport && 'default' === name ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( spacingStyles?.length ) {\n\t\t\t\t\tspacingStyles.forEach( ( spacingStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( spacingStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( spacingStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${\n\t\t\t\t\t\t\t\t\t\t\tcssValue ? cssValue : gapValue\n\t\t\t\t\t\t\t\t\t\t}`\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\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tlet combinedSelector = '';\n\n\t\t\t\t\t\t\tif ( ! hasBlockGapSupport ) {\n\t\t\t\t\t\t\t\t// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:where(.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`\n\t\t\t\t\t\t\t\t\t\t: `:where(${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `${ selector } .${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`\n\t\t\t\t\t\t\t\t\t\t: `${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\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}\n\t\t\t}\n\t\t);\n\t\t// For backwards compatibility, ensure the legacy block gap CSS variable is still available.\n\t\tif ( selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport ) {\n\t\t\truleset += `${ selector } { --wp--style--block-gap: ${ gapValue }; }`;\n\t\t}\n\t}\n\n\t// Output base styles\n\tif (\n\t\tselector === ROOT_BLOCK_SELECTOR &&\n\t\ttree?.settings?.layout?.definitions\n\t) {\n\t\tconst validDisplayModes = [ 'block', 'flex', 'grid' ];\n\t\tObject.values( tree.settings.layout.definitions ).forEach(\n\t\t\t( { className, displayMode, baseStyles } ) => {\n\t\t\t\tif (\n\t\t\t\t\tdisplayMode &&\n\t\t\t\t\tvalidDisplayModes.includes( displayMode )\n\t\t\t\t) {\n\t\t\t\t\truleset += `${ selector } .${ className } { display:${ displayMode }; }`;\n\t\t\t\t}\n\n\t\t\t\tif ( baseStyles?.length ) {\n\t\t\t\t\tbaseStyles.forEach( ( baseStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( baseStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( baseStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${ cssValue }`\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\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tconst combinedSelector = `${ selector } .${ className }${\n\t\t\t\t\t\t\t\tbaseStyle?.selector || ''\n\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\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}\n\t\t\t}\n\t\t);\n\t}\n\n\treturn ruleset;\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\n\tforEach( ELEMENTS, ( selector, name ) => {\n\t\tif ( !! tree.styles?.elements[ name ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: tree.styles?.elements[ name ],\n\t\t\t\tselector,\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\tduotoneSelector: blockSelectors[ blockName ].duotoneSelector,\n\t\t\t\tfallbackGapValue: blockSelectors[ blockName ].fallbackGapValue,\n\t\t\t\thasLayoutSupport: blockSelectors[ blockName ].hasLayoutSupport,\n\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\tstyles: blockStyles,\n\t\t\t\tfeatureSelectors: blockSelectors[ blockName ].featureSelectors,\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 ) => {\n\t\t\t\t\t\t\tconst elementSelectors =\n\t\t\t\t\t\t\t\tELEMENTS[ elementName ].split( ',' );\n\t\t\t\t\t\t\treturn elementSelectors.map(\n\t\t\t\t\t\t\t\t( elementSelector ) =>\n\t\t\t\t\t\t\t\t\tsel + ' ' + elementSelector\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} )\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\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets, tree?.settings );\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 = (\n\ttree,\n\tblockSelectors,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tdisableLayoutStyles = false\n) => {\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\tconst useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;\n\tconst { contentSize, wideSize } = tree?.settings?.layout || {};\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\n\tif ( contentSize ) {\n\t\truleset += ` --wp--style--global--content-size: ${ contentSize };`;\n\t}\n\n\tif ( wideSize ) {\n\t\truleset += ` --wp--style--global--wide-size: ${ wideSize };`;\n\t}\n\n\tif ( useRootPaddingAlign ) {\n\t\truleset +=\n\t\t\t'padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) } .has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); } .has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); } .has-global-padding > .alignfull > :where([class*=\"wp-block-\"]:not(.alignfull):not([class*=\"__\"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left);';\n\t}\n\n\truleset += '}';\n\n\tnodesWithStyles.forEach(\n\t\t( {\n\t\t\tselector,\n\t\t\tduotoneSelector,\n\t\t\tstyles,\n\t\t\tfallbackGapValue,\n\t\t\thasLayoutSupport,\n\t\t\tfeatureSelectors,\n\t\t} ) => {\n\t\t\t// Process styles for block support features with custom feature level\n\t\t\t// CSS selectors set.\n\t\t\tif ( featureSelectors ) {\n\t\t\t\tObject.entries( featureSelectors ).forEach(\n\t\t\t\t\t( [ featureName, featureSelector ] ) => {\n\t\t\t\t\t\tif ( styles?.[ featureName ] ) {\n\t\t\t\t\t\t\tconst featureStyles = {\n\t\t\t\t\t\t\t\t[ featureName ]: styles[ featureName ],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst featureDeclarations =\n\t\t\t\t\t\t\t\tgetStylesDeclarations( featureStyles );\n\t\t\t\t\t\t\tdelete styles[ featureName ];\n\n\t\t\t\t\t\t\tif ( !! featureDeclarations.length ) {\n\t\t\t\t\t\t\t\truleset =\n\t\t\t\t\t\t\t\t\truleset +\n\t\t\t\t\t\t\t\t\t`${ featureSelector }{${ featureDeclarations.join(\n\t\t\t\t\t\t\t\t\t\t';'\n\t\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);\n\t\t\t}\n\n\t\t\tconst duotoneStyles = {};\n\t\t\tif ( styles?.filter ) {\n\t\t\t\tduotoneStyles.filter = styles.filter;\n\t\t\t\tdelete styles.filter;\n\t\t\t}\n\n\t\t\t// Process duotone styles (they use color.__experimentalDuotone selector).\n\t\t\tif ( duotoneSelector ) {\n\t\t\t\tconst duotoneDeclarations =\n\t\t\t\t\tgetStylesDeclarations( duotoneStyles );\n\t\t\t\tif ( duotoneDeclarations.length > 0 ) {\n\t\t\t\t\truleset =\n\t\t\t\t\t\truleset +\n\t\t\t\t\t\t`${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process blockGap and layout styles.\n\t\t\tif (\n\t\t\t\t! disableLayoutStyles &&\n\t\t\t\t( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )\n\t\t\t) {\n\t\t\t\truleset += getLayoutStyles( {\n\t\t\t\t\ttree,\n\t\t\t\t\tstyle: styles,\n\t\t\t\t\tselector,\n\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\tfallbackGapValue,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Process the remaining block styles (they use either normal block class or __experimentalSelector).\n\t\t\tconst declarations = getStylesDeclarations(\n\t\t\t\tstyles,\n\t\t\t\tselector,\n\t\t\t\tuseRootPaddingAlign,\n\t\t\t\ttree\n\t\t\t);\n\t\t\tif ( declarations?.length ) {\n\t\t\t\truleset =\n\t\t\t\t\truleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t\t}\n\n\t\t\t// Check for pseudo selector in `styles` and handle separately.\n\t\t\tconst pseudoSelectorStyles = Object.entries( styles ).filter(\n\t\t\t\t( [ key ] ) => key.startsWith( ':' )\n\t\t\t);\n\n\t\t\tif ( pseudoSelectorStyles?.length ) {\n\t\t\t\tpseudoSelectorStyles.forEach(\n\t\t\t\t\t( [ pseudoKey, pseudoStyle ] ) => {\n\t\t\t\t\t\tconst pseudoDeclarations =\n\t\t\t\t\t\t\tgetStylesDeclarations( pseudoStyle );\n\n\t\t\t\t\t\tif ( ! pseudoDeclarations?.length ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// `selector` maybe provided in a form\n\t\t\t\t\t\t// where block level selectors have sub element\n\t\t\t\t\t\t// selectors appended to them as a comma separated\n\t\t\t\t\t\t// string.\n\t\t\t\t\t\t// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;\n\t\t\t\t\t\t// Split and append pseudo selector to create\n\t\t\t\t\t\t// the proper rules to target the elements.\n\t\t\t\t\t\tconst _selector = selector\n\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t.map( ( sel ) => sel + pseudoKey )\n\t\t\t\t\t\t\t.join( ',' );\n\n\t\t\t\t\t\tconst pseudoRule = `${ _selector }{${ pseudoDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\n\t\t\t\t\t\truleset = ruleset + pseudoRule;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t);\n\n\t/* Add alignment / layout styles */\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';\n\n\tif ( hasBlockGapSupport ) {\n\t\t// Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.\n\t\tconst gapValue =\n\t\t\tgetGapCSSValue( tree?.styles?.spacing?.blockGap ) || '0.5em';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t`.wp-site-blocks > * + * { margin-block-start: ${ gapValue }; }`;\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\nexport const 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\tconst hasLayoutSupport = !! blockType?.supports?.__experimentalLayout;\n\t\tconst fallbackGapValue =\n\t\t\tblockType?.supports?.spacing?.blockGap?.__experimentalDefault;\n\n\t\t// For each block support feature add any custom selectors.\n\t\tconst featureSelectors = {};\n\t\tObject.entries( BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS ).forEach(\n\t\t\t( [ featureKey, featureName ] ) => {\n\t\t\t\tconst featureSelector =\n\t\t\t\t\tblockType?.supports?.[ featureKey ]?.__experimentalSelector;\n\n\t\t\t\tif ( featureSelector ) {\n\t\t\t\t\tfeatureSelectors[ featureName ] = scopeSelector(\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\tfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tresult[ name ] = {\n\t\t\tduotoneSelector,\n\t\t\tfallbackGapValue,\n\t\t\tfeatureSelectors: Object.keys( featureSelectors ).length\n\t\t\t\t? featureSelectors\n\t\t\t\t: undefined,\n\t\t\thasLayoutSupport,\n\t\t\tname,\n\t\t\tselector,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\nexport function useGlobalStylesOutput() {\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst [ blockGap ] = useSetting( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGap !== null;\n\tconst hasFallbackGapSupport = ! hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.\n\tconst disableLayoutStyles = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().disableLayoutStyles;\n\t} );\n\n\treturn useMemo( () => {\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(\n\t\t\tmergedConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles\n\t\t);\n\t\tconst filters = toSvgFilters( mergedConfig, blockSelectors );\n\t\tconst stylesheets = [\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\n\t\treturn [ stylesheets, mergedConfig.settings, filters ];\n\t}, [\n\t\thasBlockGapSupport,\n\t\thasFallbackGapSupport,\n\t\tmergedConfig,\n\t\tdisableLayoutStyles,\n\t] );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/use-global-styles-output.js"],"names":["BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS","__experimentalBorder","color","spacing","typography","compileStyleValue","uncompiledValue","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","startsWith","variable","slice","length","split","join","getPresetsDeclarations","blockPresets","mergedSettings","PRESET_METADATA","declarations","path","valueKey","valueFunc","cssVarInfix","presetByOrigin","forEach","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","useRootPaddingAlign","tree","isRoot","ROOT_BLOCK_SELECTOR","output","STYLE_PROPERTY","properties","useEngine","rootOnly","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","ruleValue","ref","refPath","getLayoutStyles","style","hasBlockGapSupport","hasFallbackGapSupport","fallbackGapValue","ruleset","gapValue","blockGap","settings","layout","definitions","values","className","spacingStyles","spacingStyle","rules","cssValue","combinedSelector","validDisplayModes","displayMode","baseStyles","includes","baseStyle","getNodesWithStyles","blockSelectors","nodes","styles","pickStyleKeys","treeToPickFrom","ELEMENTS","elements","blocks","blockName","node","duotoneSelector","hasLayoutSupport","featureSelectors","elementName","sel","elementSelectors","elementSelector","getNodesWithSettings","pickPresets","presets","custom","blockCustom","toCustomProperties","customProps","toStyles","disableLayoutStyles","nodesWithStyles","nodesWithSettings","useRootPaddingAwareAlignments","contentSize","wideSize","featureName","featureSelector","featureStyles","featureDeclarations","duotoneStyles","duotoneDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","_selector","pseudoRule","toSvgFilters","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","__experimentalDuotone","__experimentalLayout","__experimentalDefault","featureKey","undefined","useGlobalStylesOutput","merged","mergedConfig","GlobalStylesContext","select","getSettings","blockEditorStore","customProperties","globalStyles","filters","stylesheets","css","isGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, isEmpty, kebabCase, pickBy, reduce, set } 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 { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\nimport { getCSSRules } from '@wordpress/style-engine';\nimport {\n\t__unstablePresetDuotoneFilter as PresetDuotoneFilter,\n\t__experimentalGetGapCSSValue as getGapCSSValue,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { PRESET_METADATA, ROOT_BLOCK_SELECTOR, scopeSelector } from './utils';\nimport { GlobalStylesContext } from './context';\nimport { useSetting } from './hooks';\n\n// List of block support features that can have their related styles\n// generated under their own feature level selector rather than the block's.\nconst BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {\n\t__experimentalBorder: 'border',\n\tcolor: 'color',\n\tspacing: 'spacing',\n\ttypography: 'typography',\n};\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\n\tif ( uncompiledValue?.startsWith?.( 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 * @param {Object} mergedSettings Merged theme.json settings.\n *\n * @return {Array<Object>} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {}, mergedSettings ) {\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 && ! valueFunc ) {\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, mergedSettings ) }`\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 * @param {string} selector The selector these declarations should attach to.\n *\n * @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.\n *\n * @param {Object} tree A theme.json tree containing layout definitions.\n *\n * @return {Array} An array of style declarations.\n */\nexport function getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign,\n\ttree = {}\n) {\n\tconst isRoot = ROOT_BLOCK_SELECTOR === selector;\n\tconst output = reduce(\n\t\tSTYLE_PROPERTY,\n\t\t( declarations, { value, properties, useEngine, rootOnly }, key ) => {\n\t\t\tif ( rootOnly && ! isRoot ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\t\t\tconst pathToValue = value;\n\t\t\tif ( pathToValue[ 0 ] === '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\t// Root-level padding styles don't currently support strings with CSS shorthand values.\n\t\t\t// This may change: https://github.com/WordPress/gutenberg/issues/40132.\n\t\t\tif (\n\t\t\t\tkey === '--wp--style--root--padding' &&\n\t\t\t\t( typeof styleValue === 'string' || ! useRootPaddingAlign )\n\t\t\t) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tif ( !! properties && typeof styleValue !== 'string' ) {\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 = name.startsWith( '--' )\n\t\t\t\t\t\t? name\n\t\t\t\t\t\t: 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 );\n\textraRules.forEach( ( rule ) => {\n\t\t// Don't output padding properties if padding variables are set.\n\t\tif (\n\t\t\tisRoot &&\n\t\t\tuseRootPaddingAlign &&\n\t\t\trule.key.startsWith( 'padding' )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\n\t\tlet ruleValue = rule.value;\n\t\tif ( typeof ruleValue !== 'string' && ruleValue?.ref ) {\n\t\t\tconst refPath = ruleValue.ref.split( '.' );\n\t\t\truleValue = get( tree, 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 ( ! ruleValue || !! ruleValue?.ref ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\toutput.push( `${ cssProperty }: ${ ruleValue }` );\n\t} );\n\n\treturn output;\n}\n\n/**\n * Get generated CSS for layout styles by looking up layout definitions provided\n * in theme.json, and outputting common layout styles, and specific blockGap values.\n *\n * @param {Object} props\n * @param {Object} props.tree A theme.json tree containing layout definitions.\n * @param {Object} props.style A style object containing spacing values.\n * @param {string} props.selector Selector used to group together layout styling rules.\n * @param {boolean} props.hasBlockGapSupport Whether or not the theme opts-in to blockGap support.\n * @param {boolean} props.hasFallbackGapSupport Whether or not the theme allows fallback gap styles.\n * @param {?string} props.fallbackGapValue An optional fallback gap value if no real gap value is available.\n * @return {string} Generated CSS rules for the layout styles.\n */\nexport function getLayoutStyles( {\n\ttree,\n\tstyle,\n\tselector,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tfallbackGapValue,\n} ) {\n\tlet ruleset = '';\n\tlet gapValue = hasBlockGapSupport\n\t\t? getGapCSSValue( style?.spacing?.blockGap )\n\t\t: '';\n\n\t// Ensure a fallback gap value for the root layout definitions,\n\t// and use a fallback value if one is provided for the current block.\n\tif ( hasFallbackGapSupport ) {\n\t\tif ( selector === ROOT_BLOCK_SELECTOR ) {\n\t\t\tgapValue = ! gapValue ? '0.5em' : gapValue;\n\t\t} else if ( ! hasBlockGapSupport && fallbackGapValue ) {\n\t\t\tgapValue = fallbackGapValue;\n\t\t}\n\t}\n\n\tif ( gapValue && tree?.settings?.layout?.definitions ) {\n\t\tObject.values( tree.settings.layout.definitions ).forEach(\n\t\t\t( { className, name, spacingStyles } ) => {\n\t\t\t\t// Allow outputting fallback gap styles for flex layout type when block gap support isn't available.\n\t\t\t\tif ( ! hasBlockGapSupport && 'flex' !== name ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( spacingStyles?.length ) {\n\t\t\t\t\tspacingStyles.forEach( ( spacingStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( spacingStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( spacingStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${\n\t\t\t\t\t\t\t\t\t\t\tcssValue ? cssValue : gapValue\n\t\t\t\t\t\t\t\t\t\t}`\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\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tlet combinedSelector = '';\n\n\t\t\t\t\t\t\tif ( ! hasBlockGapSupport ) {\n\t\t\t\t\t\t\t\t// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:where(.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`\n\t\t\t\t\t\t\t\t\t\t: `:where(${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `${ selector } .${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`\n\t\t\t\t\t\t\t\t\t\t: `${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\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}\n\t\t\t}\n\t\t);\n\t\t// For backwards compatibility, ensure the legacy block gap CSS variable is still available.\n\t\tif ( selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport ) {\n\t\t\truleset += `${ selector } { --wp--style--block-gap: ${ gapValue }; }`;\n\t\t}\n\t}\n\n\t// Output base styles\n\tif (\n\t\tselector === ROOT_BLOCK_SELECTOR &&\n\t\ttree?.settings?.layout?.definitions\n\t) {\n\t\tconst validDisplayModes = [ 'block', 'flex', 'grid' ];\n\t\tObject.values( tree.settings.layout.definitions ).forEach(\n\t\t\t( { className, displayMode, baseStyles } ) => {\n\t\t\t\tif (\n\t\t\t\t\tdisplayMode &&\n\t\t\t\t\tvalidDisplayModes.includes( displayMode )\n\t\t\t\t) {\n\t\t\t\t\truleset += `${ selector } .${ className } { display:${ displayMode }; }`;\n\t\t\t\t}\n\n\t\t\t\tif ( baseStyles?.length ) {\n\t\t\t\t\tbaseStyles.forEach( ( baseStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( baseStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( baseStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${ cssValue }`\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\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tconst combinedSelector = `${ selector } .${ className }${\n\t\t\t\t\t\t\t\tbaseStyle?.selector || ''\n\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\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}\n\t\t\t}\n\t\t);\n\t}\n\n\treturn ruleset;\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\n\tObject.entries( ELEMENTS ).forEach( ( [ name, selector ] ) => {\n\t\tif ( !! tree.styles?.elements[ name ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: tree.styles?.elements[ name ],\n\t\t\t\tselector,\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Iterate over blocks: they can have styles & elements.\n\tObject.entries( tree.styles?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockStyles = pickStyleKeys( node );\n\t\t\tif (\n\t\t\t\t!! blockStyles &&\n\t\t\t\t!! blockSelectors?.[ blockName ]?.selector\n\t\t\t) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tduotoneSelector:\n\t\t\t\t\t\tblockSelectors[ blockName ].duotoneSelector,\n\t\t\t\t\tfallbackGapValue:\n\t\t\t\t\t\tblockSelectors[ blockName ].fallbackGapValue,\n\t\t\t\t\thasLayoutSupport:\n\t\t\t\t\t\tblockSelectors[ blockName ].hasLayoutSupport,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\t\tstyles: blockStyles,\n\t\t\t\t\tfeatureSelectors:\n\t\t\t\t\t\tblockSelectors[ blockName ].featureSelectors,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tObject.entries( node?.elements ?? {} ).forEach(\n\t\t\t\t( [ elementName, value ] ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!! value &&\n\t\t\t\t\t\t!! blockSelectors?.[ blockName ] &&\n\t\t\t\t\t\t!! ELEMENTS?.[ elementName ]\n\t\t\t\t\t) {\n\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\tstyles: value,\n\t\t\t\t\t\t\tselector: blockSelectors[ blockName ].selector\n\t\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t\t.map( ( sel ) => {\n\t\t\t\t\t\t\t\t\tconst elementSelectors =\n\t\t\t\t\t\t\t\t\t\tELEMENTS[ elementName ].split( ',' );\n\t\t\t\t\t\t\t\t\treturn elementSelectors.map(\n\t\t\t\t\t\t\t\t\t\t( elementSelector ) =>\n\t\t\t\t\t\t\t\t\t\t\tsel + ' ' + elementSelector\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\t.join( ',' ),\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\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\tObject.entries( tree.settings?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockPresets = pickPresets( node );\n\t\t\tconst blockCustom = node.custom;\n\t\t\tif ( ! isEmpty( blockPresets ) || !! blockCustom ) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tpresets: blockPresets,\n\t\t\t\t\tcustom: blockCustom,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\t} );\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\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets, tree?.settings );\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 = (\n\ttree,\n\tblockSelectors,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tdisableLayoutStyles = false\n) => {\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\tconst useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;\n\tconst { contentSize, wideSize } = tree?.settings?.layout || {};\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\n\tif ( contentSize ) {\n\t\truleset += ` --wp--style--global--content-size: ${ contentSize };`;\n\t}\n\n\tif ( wideSize ) {\n\t\truleset += ` --wp--style--global--wide-size: ${ wideSize };`;\n\t}\n\n\tif ( useRootPaddingAlign ) {\n\t\truleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) } \n\t\t\t.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); } \n\t\t\t.has-global-padding :where(.has-global-padding) { padding-right: 0; padding-left: 0; } \n\t\t\t.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); } \n\t\t\t.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; } \n\t\t\t.has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*=\"wp-block-\"]:not(.alignfull):not([class*=\"__\"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); } \n\t\t\t.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*=\"wp-block-\"]:not(.alignfull):not([class*=\"__\"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0;`;\n\t}\n\n\truleset += '}';\n\n\tnodesWithStyles.forEach(\n\t\t( {\n\t\t\tselector,\n\t\t\tduotoneSelector,\n\t\t\tstyles,\n\t\t\tfallbackGapValue,\n\t\t\thasLayoutSupport,\n\t\t\tfeatureSelectors,\n\t\t} ) => {\n\t\t\t// Process styles for block support features with custom feature level\n\t\t\t// CSS selectors set.\n\t\t\tif ( featureSelectors ) {\n\t\t\t\tObject.entries( featureSelectors ).forEach(\n\t\t\t\t\t( [ featureName, featureSelector ] ) => {\n\t\t\t\t\t\tif ( styles?.[ featureName ] ) {\n\t\t\t\t\t\t\tconst featureStyles = {\n\t\t\t\t\t\t\t\t[ featureName ]: styles[ featureName ],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst featureDeclarations =\n\t\t\t\t\t\t\t\tgetStylesDeclarations( featureStyles );\n\t\t\t\t\t\t\tdelete styles[ featureName ];\n\n\t\t\t\t\t\t\tif ( !! featureDeclarations.length ) {\n\t\t\t\t\t\t\t\truleset =\n\t\t\t\t\t\t\t\t\truleset +\n\t\t\t\t\t\t\t\t\t`${ featureSelector }{${ featureDeclarations.join(\n\t\t\t\t\t\t\t\t\t\t';'\n\t\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);\n\t\t\t}\n\n\t\t\tconst duotoneStyles = {};\n\t\t\tif ( styles?.filter ) {\n\t\t\t\tduotoneStyles.filter = styles.filter;\n\t\t\t\tdelete styles.filter;\n\t\t\t}\n\n\t\t\t// Process duotone styles (they use color.__experimentalDuotone selector).\n\t\t\tif ( duotoneSelector ) {\n\t\t\t\tconst duotoneDeclarations =\n\t\t\t\t\tgetStylesDeclarations( duotoneStyles );\n\t\t\t\tif ( duotoneDeclarations.length > 0 ) {\n\t\t\t\t\truleset =\n\t\t\t\t\t\truleset +\n\t\t\t\t\t\t`${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process blockGap and layout styles.\n\t\t\tif (\n\t\t\t\t! disableLayoutStyles &&\n\t\t\t\t( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )\n\t\t\t) {\n\t\t\t\truleset += getLayoutStyles( {\n\t\t\t\t\ttree,\n\t\t\t\t\tstyle: styles,\n\t\t\t\t\tselector,\n\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\tfallbackGapValue,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Process the remaining block styles (they use either normal block class or __experimentalSelector).\n\t\t\tconst declarations = getStylesDeclarations(\n\t\t\t\tstyles,\n\t\t\t\tselector,\n\t\t\t\tuseRootPaddingAlign,\n\t\t\t\ttree\n\t\t\t);\n\t\t\tif ( declarations?.length ) {\n\t\t\t\truleset =\n\t\t\t\t\truleset + `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t\t}\n\n\t\t\t// Check for pseudo selector in `styles` and handle separately.\n\t\t\tconst pseudoSelectorStyles = Object.entries( styles ).filter(\n\t\t\t\t( [ key ] ) => key.startsWith( ':' )\n\t\t\t);\n\n\t\t\tif ( pseudoSelectorStyles?.length ) {\n\t\t\t\tpseudoSelectorStyles.forEach(\n\t\t\t\t\t( [ pseudoKey, pseudoStyle ] ) => {\n\t\t\t\t\t\tconst pseudoDeclarations =\n\t\t\t\t\t\t\tgetStylesDeclarations( pseudoStyle );\n\n\t\t\t\t\t\tif ( ! pseudoDeclarations?.length ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// `selector` maybe provided in a form\n\t\t\t\t\t\t// where block level selectors have sub element\n\t\t\t\t\t\t// selectors appended to them as a comma separated\n\t\t\t\t\t\t// string.\n\t\t\t\t\t\t// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;\n\t\t\t\t\t\t// Split and append pseudo selector to create\n\t\t\t\t\t\t// the proper rules to target the elements.\n\t\t\t\t\t\tconst _selector = selector\n\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t.map( ( sel ) => sel + pseudoKey )\n\t\t\t\t\t\t\t.join( ',' );\n\n\t\t\t\t\t\tconst pseudoRule = `${ _selector }{${ pseudoDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\n\t\t\t\t\t\truleset = ruleset + pseudoRule;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t);\n\n\t/* Add alignment / layout styles */\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';\n\truleset =\n\t\truleset +\n\t\t'.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';\n\n\tif ( hasBlockGapSupport ) {\n\t\t// Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.\n\t\tconst gapValue =\n\t\t\tgetGapCSSValue( tree?.styles?.spacing?.blockGap ) || '0.5em';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t`.wp-site-blocks > * + * { margin-block-start: ${ gapValue }; }`;\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\nexport const 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\tconst hasLayoutSupport = !! blockType?.supports?.__experimentalLayout;\n\t\tconst fallbackGapValue =\n\t\t\tblockType?.supports?.spacing?.blockGap?.__experimentalDefault;\n\n\t\t// For each block support feature add any custom selectors.\n\t\tconst featureSelectors = {};\n\t\tObject.entries( BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS ).forEach(\n\t\t\t( [ featureKey, featureName ] ) => {\n\t\t\t\tconst featureSelector =\n\t\t\t\t\tblockType?.supports?.[ featureKey ]?.__experimentalSelector;\n\n\t\t\t\tif ( featureSelector ) {\n\t\t\t\t\tfeatureSelectors[ featureName ] = scopeSelector(\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\tfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tresult[ name ] = {\n\t\t\tduotoneSelector,\n\t\t\tfallbackGapValue,\n\t\t\tfeatureSelectors: Object.keys( featureSelectors ).length\n\t\t\t\t? featureSelectors\n\t\t\t\t: undefined,\n\t\t\thasLayoutSupport,\n\t\t\tname,\n\t\t\tselector,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\nexport function useGlobalStylesOutput() {\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst [ blockGap ] = useSetting( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGap !== null;\n\tconst hasFallbackGapSupport = ! hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.\n\tconst disableLayoutStyles = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().disableLayoutStyles;\n\t} );\n\n\treturn useMemo( () => {\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(\n\t\t\tmergedConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles\n\t\t);\n\t\tconst filters = toSvgFilters( mergedConfig, blockSelectors );\n\t\tconst stylesheets = [\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\n\t\treturn [ stylesheets, mergedConfig.settings, filters ];\n\t}, [\n\t\thasBlockGapSupport,\n\t\thasFallbackGapSupport,\n\t\tmergedConfig,\n\t\tdisableLayoutStyles,\n\t] );\n}\n"]}
|
|
@@ -9,6 +9,8 @@ exports.default = Header;
|
|
|
9
9
|
|
|
10
10
|
var _element = require("@wordpress/element");
|
|
11
11
|
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
|
|
12
14
|
var _compose = require("@wordpress/compose");
|
|
13
15
|
|
|
14
16
|
var _blockEditor = require("@wordpress/block-editor");
|
|
@@ -43,6 +45,10 @@ var _templateDetails = _interopRequireDefault(require("../template-details"));
|
|
|
43
45
|
|
|
44
46
|
var _store = require("../../store");
|
|
45
47
|
|
|
48
|
+
/**
|
|
49
|
+
* External dependencies
|
|
50
|
+
*/
|
|
51
|
+
|
|
46
52
|
/**
|
|
47
53
|
* WordPress dependencies
|
|
48
54
|
*/
|
|
@@ -55,6 +61,8 @@ const preventDefault = event => {
|
|
|
55
61
|
};
|
|
56
62
|
|
|
57
63
|
function Header(_ref) {
|
|
64
|
+
var _window;
|
|
65
|
+
|
|
58
66
|
let {
|
|
59
67
|
openEntitiesSavedStates,
|
|
60
68
|
isEntitiesSavedStatesOpen,
|
|
@@ -71,7 +79,8 @@ function Header(_ref) {
|
|
|
71
79
|
listViewShortcut,
|
|
72
80
|
isLoaded,
|
|
73
81
|
isVisualMode,
|
|
74
|
-
settings
|
|
82
|
+
settings,
|
|
83
|
+
blockEditorMode
|
|
75
84
|
} = (0, _data.useSelect)(select => {
|
|
76
85
|
const {
|
|
77
86
|
__experimentalGetPreviewDeviceType,
|
|
@@ -91,6 +100,9 @@ function Header(_ref) {
|
|
|
91
100
|
const {
|
|
92
101
|
getShortcutRepresentation
|
|
93
102
|
} = select(_keyboardShortcuts.store);
|
|
103
|
+
const {
|
|
104
|
+
__unstableGetEditorMode
|
|
105
|
+
} = select(_blockEditor.store);
|
|
94
106
|
const postType = getEditedPostType();
|
|
95
107
|
const postId = getEditedPostId();
|
|
96
108
|
const record = getEditedEntityRecord('postType', postType, postId);
|
|
@@ -107,7 +119,8 @@ function Header(_ref) {
|
|
|
107
119
|
isListViewOpen: isListViewOpened(),
|
|
108
120
|
listViewShortcut: getShortcutRepresentation('core/edit-site/toggle-list-view'),
|
|
109
121
|
isVisualMode: getEditorMode() === 'visual',
|
|
110
|
-
settings: getSettings()
|
|
122
|
+
settings: getSettings(),
|
|
123
|
+
blockEditorMode: __unstableGetEditorMode()
|
|
111
124
|
};
|
|
112
125
|
}, []);
|
|
113
126
|
const {
|
|
@@ -115,6 +128,9 @@ function Header(_ref) {
|
|
|
115
128
|
setIsInserterOpened,
|
|
116
129
|
setIsListViewOpened
|
|
117
130
|
} = (0, _data.useDispatch)(_store.store);
|
|
131
|
+
const {
|
|
132
|
+
__unstableSetEditorMode
|
|
133
|
+
} = (0, _data.useDispatch)(_blockEditor.store);
|
|
118
134
|
const isLargeViewport = (0, _compose.useViewportMatch)('medium');
|
|
119
135
|
const openInserter = (0, _element.useCallback)(() => {
|
|
120
136
|
if (isInserterOpen) {
|
|
@@ -130,6 +146,8 @@ function Header(_ref) {
|
|
|
130
146
|
|
|
131
147
|
const longLabel = (0, _i18n._x)('Toggle block inserter', 'Generic label for block inserter button');
|
|
132
148
|
const shortLabel = !isInserterOpen ? (0, _i18n.__)('Add') : (0, _i18n.__)('Close');
|
|
149
|
+
const isZoomedOutViewExperimentEnabled = ((_window = window) === null || _window === void 0 ? void 0 : _window.__experimentalEnableZoomedOutView) && isVisualMode;
|
|
150
|
+
const isZoomedOutView = blockEditorMode === 'zoom-out';
|
|
133
151
|
return (0, _element.createElement)("div", {
|
|
134
152
|
className: "edit-site-header"
|
|
135
153
|
}, (0, _element.createElement)(_blockEditor.NavigableToolbar, {
|
|
@@ -165,8 +183,8 @@ function Header(_ref) {
|
|
|
165
183
|
}), (0, _element.createElement)(_components.ToolbarItem, {
|
|
166
184
|
as: _components.Button,
|
|
167
185
|
className: "edit-site-header-toolbar__list-view-toggle",
|
|
186
|
+
disabled: !isVisualMode && isZoomedOutView,
|
|
168
187
|
icon: _icons.listView,
|
|
169
|
-
disabled: !isVisualMode,
|
|
170
188
|
isPressed: isListViewOpen
|
|
171
189
|
/* translators: button label text should, if possible, be under 16 characters. */
|
|
172
190
|
,
|
|
@@ -175,6 +193,20 @@ function Header(_ref) {
|
|
|
175
193
|
shortcut: listViewShortcut,
|
|
176
194
|
showTooltip: !showIconLabels,
|
|
177
195
|
variant: showIconLabels ? 'tertiary' : undefined
|
|
196
|
+
}), isZoomedOutViewExperimentEnabled && (0, _element.createElement)(_components.ToolbarItem, {
|
|
197
|
+
as: _components.Button,
|
|
198
|
+
className: "edit-site-header-toolbar__zoom-out-view-toggle",
|
|
199
|
+
icon: _icons.chevronUpDown,
|
|
200
|
+
isPressed: isZoomedOutView
|
|
201
|
+
/* translators: button label text should, if possible, be under 16 characters. */
|
|
202
|
+
,
|
|
203
|
+
label: (0, _i18n.__)('Zoom-out View'),
|
|
204
|
+
onClick: () => {
|
|
205
|
+
setPreviewDeviceType('desktop');
|
|
206
|
+
setIsListViewOpened(false);
|
|
207
|
+
|
|
208
|
+
__unstableSetEditorMode(isZoomedOutView ? 'edit' : 'zoom-out');
|
|
209
|
+
}
|
|
178
210
|
})))), (0, _element.createElement)("div", {
|
|
179
211
|
className: "edit-site-header_center"
|
|
180
212
|
}, (0, _element.createElement)(_documentActions.default, {
|
|
@@ -194,7 +226,11 @@ function Header(_ref) {
|
|
|
194
226
|
className: "edit-site-header_end"
|
|
195
227
|
}, (0, _element.createElement)("div", {
|
|
196
228
|
className: "edit-site-header__actions"
|
|
197
|
-
}, !isFocusMode && (0, _element.createElement)(
|
|
229
|
+
}, !isFocusMode && (0, _element.createElement)("div", {
|
|
230
|
+
className: (0, _classnames.default)('edit-site-header__actions__preview-options', {
|
|
231
|
+
'is-zoomed-out': isZoomedOutView
|
|
232
|
+
})
|
|
233
|
+
}, (0, _element.createElement)(_blockEditor.__experimentalPreviewOptions, {
|
|
198
234
|
deviceType: deviceType,
|
|
199
235
|
setDeviceType: setPreviewDeviceType
|
|
200
236
|
}, (0, _element.createElement)(_components.MenuGroup, null, (0, _element.createElement)(_components.MenuItem, {
|
|
@@ -205,7 +241,7 @@ function Header(_ref) {
|
|
|
205
241
|
as: "span"
|
|
206
242
|
},
|
|
207
243
|
/* translators: accessibility text */
|
|
208
|
-
(0, _i18n.__)('(opens in a new tab)'))))), (0, _element.createElement)(_saveButton.default, {
|
|
244
|
+
(0, _i18n.__)('(opens in a new tab)')))))), (0, _element.createElement)(_saveButton.default, {
|
|
209
245
|
openEntitiesSavedStates: openEntitiesSavedStates,
|
|
210
246
|
isEntitiesSavedStatesOpen: isEntitiesSavedStatesOpen
|
|
211
247
|
}), (0, _element.createElement)(_interface.PinnedItems.Slot, {
|