@wordpress/edit-site 4.11.0 → 4.12.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/add-new-template/add-custom-template-modal.js +4 -2
- package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
- package/build/components/add-new-template/new-template.js +22 -2
- package/build/components/add-new-template/new-template.js.map +1 -1
- package/build/components/add-new-template/utils.js +152 -28
- package/build/components/add-new-template/utils.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +6 -2
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/screen-color-palette.js +1 -1
- package/build/components/global-styles/screen-color-palette.js.map +1 -1
- package/build/components/global-styles/screen-colors.js +51 -7
- package/build/components/global-styles/screen-colors.js.map +1 -1
- package/build/components/global-styles/screen-heading-color.js +157 -0
- package/build/components/global-styles/screen-heading-color.js.map +1 -0
- package/build/components/global-styles/screen-typography-element.js +4 -0
- package/build/components/global-styles/screen-typography-element.js.map +1 -1
- package/build/components/global-styles/screen-typography.js +5 -0
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +73 -12
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/typography-utils.js +217 -0
- package/build/components/global-styles/typography-utils.js.map +1 -0
- package/build/components/global-styles/ui.js +11 -0
- package/build/components/global-styles/ui.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +61 -40
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +17 -2
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/header/index.js +15 -4
- package/build/components/header/index.js.map +1 -1
- package/build/components/header/undo-redo/redo.js +2 -1
- package/build/components/header/undo-redo/redo.js.map +1 -1
- package/build/components/list/actions/index.js +1 -1
- package/build/components/list/actions/index.js.map +1 -1
- package/build/components/save-button/index.js +2 -3
- package/build/components/save-button/index.js.map +1 -1
- package/build/components/sidebar/navigation-menu-sidebar/navigation-menu.js +2 -2
- package/build/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +1 -1
- package/build/components/sidebar/template-card/template-actions.js +1 -1
- package/build/components/sidebar/template-card/template-actions.js.map +1 -1
- package/build/components/template-details/index.js +1 -1
- package/build/components/template-details/index.js.map +1 -1
- package/build/components/template-details/template-areas.js +1 -1
- package/build/components/template-details/template-areas.js.map +1 -1
- package/build/components/template-part-converter/convert-to-template-part.js +4 -1
- package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build-module/components/add-new-template/add-custom-template-modal.js +4 -2
- package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
- package/build-module/components/add-new-template/new-template.js +21 -3
- package/build-module/components/add-new-template/new-template.js.map +1 -1
- package/build-module/components/add-new-template/utils.js +147 -26
- package/build-module/components/add-new-template/utils.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +6 -2
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/screen-color-palette.js +1 -1
- package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
- package/build-module/components/global-styles/screen-colors.js +51 -7
- package/build-module/components/global-styles/screen-colors.js.map +1 -1
- package/build-module/components/global-styles/screen-heading-color.js +143 -0
- package/build-module/components/global-styles/screen-heading-color.js.map +1 -0
- package/build-module/components/global-styles/screen-typography-element.js +4 -0
- package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js +5 -0
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +74 -13
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/typography-utils.js +204 -0
- package/build-module/components/global-styles/typography-utils.js.map +1 -0
- package/build-module/components/global-styles/ui.js +10 -0
- package/build-module/components/global-styles/ui.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +61 -44
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +16 -2
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/header/index.js +17 -6
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/header/undo-redo/redo.js +3 -2
- package/build-module/components/header/undo-redo/redo.js.map +1 -1
- package/build-module/components/list/actions/index.js +1 -1
- package/build-module/components/list/actions/index.js.map +1 -1
- package/build-module/components/save-button/index.js +3 -4
- package/build-module/components/save-button/index.js.map +1 -1
- package/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js +3 -3
- package/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +1 -1
- package/build-module/components/sidebar/template-card/template-actions.js +1 -1
- package/build-module/components/sidebar/template-card/template-actions.js.map +1 -1
- package/build-module/components/template-details/index.js +1 -1
- package/build-module/components/template-details/index.js.map +1 -1
- package/build-module/components/template-details/template-areas.js +1 -1
- package/build-module/components/template-details/template-areas.js.map +1 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js +3 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build-style/style-rtl.css +13 -4
- package/build-style/style.css +13 -4
- package/package.json +29 -29
- package/src/components/add-new-template/add-custom-template-modal.js +12 -3
- package/src/components/add-new-template/new-template.js +40 -20
- package/src/components/add-new-template/utils.js +145 -16
- package/src/components/global-styles/dimensions-panel.js +5 -3
- package/src/components/global-styles/hooks.js +1 -0
- package/src/components/global-styles/screen-color-palette.js +1 -1
- package/src/components/global-styles/screen-colors.js +46 -4
- package/src/components/global-styles/screen-heading-color.js +201 -0
- package/src/components/global-styles/screen-typography-element.js +4 -0
- package/src/components/global-styles/screen-typography.js +6 -0
- package/src/components/global-styles/style.scss +13 -6
- package/src/components/global-styles/test/typography-utils.js +130 -0
- package/src/components/global-styles/test/use-global-styles-output.js +66 -3
- package/src/components/global-styles/typography-panel.js +85 -16
- package/src/components/global-styles/typography-utils.js +228 -0
- package/src/components/global-styles/ui.js +13 -0
- package/src/components/global-styles/use-global-styles-output.js +79 -48
- package/src/components/global-styles/utils.js +10 -0
- package/src/components/header/index.js +28 -3
- package/src/components/header/undo-redo/redo.js +6 -2
- package/src/components/list/actions/index.js +3 -1
- package/src/components/save-button/index.js +10 -13
- package/src/components/sidebar/navigation-menu-sidebar/navigation-menu.js +1 -5
- package/src/components/sidebar/template-card/template-actions.js +3 -1
- package/src/components/template-details/index.js +3 -1
- package/src/components/template-details/template-areas.js +3 -1
- package/src/components/template-part-converter/convert-to-template-part.js +3 -1
|
@@ -3,15 +3,16 @@ import { createElement } from "@wordpress/element";
|
|
|
3
3
|
/**
|
|
4
4
|
* External dependencies
|
|
5
5
|
*/
|
|
6
|
-
import { first, forEach, get, isEmpty, kebabCase, pickBy, reduce, set
|
|
6
|
+
import { first, forEach, get, isEmpty, kebabCase, pickBy, reduce, set } from 'lodash';
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { __EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY, __EXPERIMENTAL_ELEMENTS as ELEMENTS, getBlockTypes } from '@wordpress/blocks';
|
|
12
|
-
import {
|
|
12
|
+
import { useSelect } from '@wordpress/data';
|
|
13
|
+
import { useContext, useMemo } from '@wordpress/element';
|
|
13
14
|
import { getCSSRules } from '@wordpress/style-engine';
|
|
14
|
-
import { __unstablePresetDuotoneFilter as PresetDuotoneFilter, __experimentalGetGapCSSValue as getGapCSSValue } from '@wordpress/block-editor';
|
|
15
|
+
import { __unstablePresetDuotoneFilter as PresetDuotoneFilter, __experimentalGetGapCSSValue as getGapCSSValue, store as blockEditorStore } from '@wordpress/block-editor';
|
|
15
16
|
/**
|
|
16
17
|
* Internal dependencies
|
|
17
18
|
*/
|
|
@@ -33,7 +34,7 @@ function compileStyleValue(uncompiledValue) {
|
|
|
33
34
|
const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
|
|
34
35
|
const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
|
|
35
36
|
|
|
36
|
-
if (startsWith(
|
|
37
|
+
if (uncompiledValue !== null && uncompiledValue !== void 0 && uncompiledValue.startsWith(VARIABLE_REFERENCE_PREFIX)) {
|
|
37
38
|
const variable = uncompiledValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
|
|
38
39
|
return `var(--wp--${variable})`;
|
|
39
40
|
}
|
|
@@ -44,13 +45,15 @@ function compileStyleValue(uncompiledValue) {
|
|
|
44
45
|
* Transform given preset tree into a set of style declarations.
|
|
45
46
|
*
|
|
46
47
|
* @param {Object} blockPresets
|
|
48
|
+
* @param {Object} mergedSettings Merged theme.json settings.
|
|
47
49
|
*
|
|
48
|
-
* @return {Array} An array of style declarations.
|
|
50
|
+
* @return {Array<Object>} An array of style declarations.
|
|
49
51
|
*/
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
function getPresetsDeclarations() {
|
|
53
55
|
let blockPresets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
56
|
+
let mergedSettings = arguments.length > 1 ? arguments[1] : undefined;
|
|
54
57
|
return reduce(PRESET_METADATA, (declarations, _ref) => {
|
|
55
58
|
let {
|
|
56
59
|
path,
|
|
@@ -62,10 +65,10 @@ function getPresetsDeclarations() {
|
|
|
62
65
|
['default', 'theme', 'custom'].forEach(origin => {
|
|
63
66
|
if (presetByOrigin[origin]) {
|
|
64
67
|
presetByOrigin[origin].forEach(value => {
|
|
65
|
-
if (valueKey) {
|
|
68
|
+
if (valueKey && !valueFunc) {
|
|
66
69
|
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${value[valueKey]}`);
|
|
67
70
|
} else if (valueFunc && typeof valueFunc === 'function') {
|
|
68
|
-
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${valueFunc(value)}`);
|
|
71
|
+
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${valueFunc(value, mergedSettings)}`);
|
|
69
72
|
}
|
|
70
73
|
});
|
|
71
74
|
}
|
|
@@ -163,7 +166,7 @@ function flattenTree() {
|
|
|
163
166
|
*/
|
|
164
167
|
|
|
165
168
|
|
|
166
|
-
function getStylesDeclarations() {
|
|
169
|
+
export function getStylesDeclarations() {
|
|
167
170
|
let blockStyles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
168
171
|
let selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
169
172
|
let useRootPaddingAlign = arguments.length > 2 ? arguments[2] : undefined;
|
|
@@ -186,7 +189,12 @@ function getStylesDeclarations() {
|
|
|
186
189
|
return declarations;
|
|
187
190
|
}
|
|
188
191
|
|
|
189
|
-
const styleValue = get(blockStyles, pathToValue);
|
|
192
|
+
const styleValue = get(blockStyles, pathToValue); // Root-level padding styles don't currently support strings with CSS shorthand values.
|
|
193
|
+
// This may change: https://github.com/WordPress/gutenberg/issues/40132.
|
|
194
|
+
|
|
195
|
+
if (key === '--wp--style--root--padding' && (typeof styleValue === 'string' || !useRootPaddingAlign)) {
|
|
196
|
+
return declarations;
|
|
197
|
+
}
|
|
190
198
|
|
|
191
199
|
if (!!properties && typeof styleValue !== 'string') {
|
|
192
200
|
Object.entries(properties).forEach(entry => {
|
|
@@ -201,26 +209,22 @@ function getStylesDeclarations() {
|
|
|
201
209
|
const cssProperty = name.startsWith('--') ? name : kebabCase(name);
|
|
202
210
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(styleValue, [prop]))}`);
|
|
203
211
|
});
|
|
204
|
-
} else if (key === '--wp--style--root--padding' && typeof styleValue === 'string') {
|
|
205
|
-
// Root-level padding styles don't currently support strings with CSS shorthand values.
|
|
206
|
-
// This may change: https://github.com/WordPress/gutenberg/issues/40132.
|
|
207
|
-
return declarations;
|
|
208
212
|
} else if (get(blockStyles, pathToValue, false)) {
|
|
209
213
|
const cssProperty = key.startsWith('--') ? key : kebabCase(key);
|
|
210
214
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(blockStyles, pathToValue))}`);
|
|
211
215
|
}
|
|
212
216
|
|
|
213
217
|
return declarations;
|
|
214
|
-
}, []);
|
|
215
|
-
|
|
216
|
-
if (isRoot && useRootPaddingAlign) {
|
|
217
|
-
return output;
|
|
218
|
-
} // The goal is to move everything to server side generated engine styles
|
|
218
|
+
}, []); // The goal is to move everything to server side generated engine styles
|
|
219
219
|
// This is temporary as we absorb more and more styles into the engine.
|
|
220
220
|
|
|
221
|
-
|
|
222
221
|
const extraRules = getCSSRules(blockStyles);
|
|
223
222
|
extraRules.forEach(rule => {
|
|
223
|
+
// Don't output padding properties if padding variables are set.
|
|
224
|
+
if (isRoot && useRootPaddingAlign && rule.key.startsWith('padding')) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
|
|
224
228
|
const cssProperty = rule.key.startsWith('--') ? rule.key : kebabCase(rule.key);
|
|
225
229
|
output.push(`${cssProperty}: ${compileStyleValue(rule.value)}`);
|
|
226
230
|
});
|
|
@@ -240,7 +244,6 @@ function getStylesDeclarations() {
|
|
|
240
244
|
* @return {string} Generated CSS rules for the layout styles.
|
|
241
245
|
*/
|
|
242
246
|
|
|
243
|
-
|
|
244
247
|
export function getLayoutStyles(_ref6) {
|
|
245
248
|
var _style$spacing, _tree$settings, _tree$settings$layout, _tree$settings2, _tree$settings2$layou;
|
|
246
249
|
|
|
@@ -289,7 +292,15 @@ export function getLayoutStyles(_ref6) {
|
|
|
289
292
|
}
|
|
290
293
|
|
|
291
294
|
if (declarations.length) {
|
|
292
|
-
|
|
295
|
+
let combinedSelector = '';
|
|
296
|
+
|
|
297
|
+
if (!hasBlockGapSupport) {
|
|
298
|
+
// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.
|
|
299
|
+
combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:where(.${className}${(spacingStyle === null || spacingStyle === void 0 ? void 0 : spacingStyle.selector) || ''})` : `:where(${selector}.${className}${(spacingStyle === null || spacingStyle === void 0 ? void 0 : spacingStyle.selector) || ''})`;
|
|
300
|
+
} else {
|
|
301
|
+
combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `${selector} .${className}${(spacingStyle === null || spacingStyle === void 0 ? void 0 : spacingStyle.selector) || ''}` : `${selector}.${className}${(spacingStyle === null || spacingStyle === void 0 ? void 0 : spacingStyle.selector) || ''}`;
|
|
302
|
+
}
|
|
303
|
+
|
|
293
304
|
ruleset += `${combinedSelector} { ${declarations.join('; ')}; }`;
|
|
294
305
|
}
|
|
295
306
|
});
|
|
@@ -338,7 +349,7 @@ export function getLayoutStyles(_ref6) {
|
|
|
338
349
|
return ruleset;
|
|
339
350
|
}
|
|
340
351
|
export const getNodesWithStyles = (tree, blockSelectors) => {
|
|
341
|
-
var _tree$
|
|
352
|
+
var _tree$styles3;
|
|
342
353
|
|
|
343
354
|
const nodes = [];
|
|
344
355
|
|
|
@@ -358,16 +369,20 @@ export const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
358
369
|
});
|
|
359
370
|
}
|
|
360
371
|
|
|
361
|
-
forEach(
|
|
362
|
-
|
|
372
|
+
forEach(ELEMENTS, (selector, name) => {
|
|
373
|
+
var _tree$styles;
|
|
374
|
+
|
|
375
|
+
if (!!((_tree$styles = tree.styles) !== null && _tree$styles !== void 0 && _tree$styles.elements[name])) {
|
|
376
|
+
var _tree$styles2;
|
|
377
|
+
|
|
363
378
|
nodes.push({
|
|
364
|
-
styles:
|
|
365
|
-
selector
|
|
379
|
+
styles: (_tree$styles2 = tree.styles) === null || _tree$styles2 === void 0 ? void 0 : _tree$styles2.elements[name],
|
|
380
|
+
selector
|
|
366
381
|
});
|
|
367
382
|
}
|
|
368
383
|
}); // Iterate over blocks: they can have styles & elements.
|
|
369
384
|
|
|
370
|
-
forEach((_tree$
|
|
385
|
+
forEach((_tree$styles3 = tree.styles) === null || _tree$styles3 === void 0 ? void 0 : _tree$styles3.blocks, (node, blockName) => {
|
|
371
386
|
var _blockSelectors$block;
|
|
372
387
|
|
|
373
388
|
const blockStyles = pickStyleKeys(node);
|
|
@@ -457,7 +472,7 @@ export const toCustomProperties = (tree, blockSelectors) => {
|
|
|
457
472
|
custom,
|
|
458
473
|
selector
|
|
459
474
|
} = _ref12;
|
|
460
|
-
const declarations = getPresetsDeclarations(presets);
|
|
475
|
+
const declarations = getPresetsDeclarations(presets, tree === null || tree === void 0 ? void 0 : tree.settings);
|
|
461
476
|
const customProps = flattenTree(custom, '--wp--custom--', '--');
|
|
462
477
|
|
|
463
478
|
if (customProps.length > 0) {
|
|
@@ -470,9 +485,10 @@ export const toCustomProperties = (tree, blockSelectors) => {
|
|
|
470
485
|
});
|
|
471
486
|
return ruleset;
|
|
472
487
|
};
|
|
473
|
-
export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport)
|
|
488
|
+
export const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport) {
|
|
474
489
|
var _tree$settings5;
|
|
475
490
|
|
|
491
|
+
let disableLayoutStyles = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
476
492
|
const nodesWithStyles = getNodesWithStyles(tree, blockSelectors);
|
|
477
493
|
const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
|
|
478
494
|
const useRootPaddingAlign = tree === null || tree === void 0 ? void 0 : (_tree$settings5 = tree.settings) === null || _tree$settings5 === void 0 ? void 0 : _tree$settings5.useRootPaddingAwareAlignments;
|
|
@@ -540,7 +556,7 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
540
556
|
} // Process blockGap and layout styles.
|
|
541
557
|
|
|
542
558
|
|
|
543
|
-
if (ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport) {
|
|
559
|
+
if (!disableLayoutStyles && (ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport)) {
|
|
544
560
|
ruleset += getLayoutStyles({
|
|
545
561
|
tree,
|
|
546
562
|
style: styles,
|
|
@@ -594,10 +610,10 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
594
610
|
ruleset = ruleset + '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
|
|
595
611
|
|
|
596
612
|
if (hasBlockGapSupport) {
|
|
597
|
-
var _tree$
|
|
613
|
+
var _tree$styles4, _tree$styles4$spacing;
|
|
598
614
|
|
|
599
615
|
// Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.
|
|
600
|
-
const gapValue = getGapCSSValue(tree === null || tree === void 0 ? void 0 : (_tree$
|
|
616
|
+
const gapValue = getGapCSSValue(tree === null || tree === void 0 ? void 0 : (_tree$styles4 = tree.styles) === null || _tree$styles4 === void 0 ? void 0 : (_tree$styles4$spacing = _tree$styles4.spacing) === null || _tree$styles4$spacing === void 0 ? void 0 : _tree$styles4$spacing.blockGap) || '0.5em';
|
|
601
617
|
ruleset = ruleset + '.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }';
|
|
602
618
|
ruleset = ruleset + `.wp-site-blocks > * + * { margin-block-start: ${gapValue}; }`;
|
|
603
619
|
}
|
|
@@ -664,9 +680,6 @@ export const getBlockSelectors = blockTypes => {
|
|
|
664
680
|
return result;
|
|
665
681
|
};
|
|
666
682
|
export function useGlobalStylesOutput() {
|
|
667
|
-
const [stylesheets, setStylesheets] = useState([]);
|
|
668
|
-
const [settings, setSettings] = useState({});
|
|
669
|
-
const [svgFilters, setSvgFilters] = useState({});
|
|
670
683
|
const {
|
|
671
684
|
merged: mergedConfig
|
|
672
685
|
} = useContext(GlobalStylesContext);
|
|
@@ -674,25 +687,29 @@ export function useGlobalStylesOutput() {
|
|
|
674
687
|
const hasBlockGapSupport = blockGap !== null;
|
|
675
688
|
const hasFallbackGapSupport = !hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.
|
|
676
689
|
|
|
677
|
-
|
|
690
|
+
const disableLayoutStyles = useSelect(select => {
|
|
691
|
+
const {
|
|
692
|
+
getSettings
|
|
693
|
+
} = select(blockEditorStore);
|
|
694
|
+
return !!getSettings().disableLayoutStyles;
|
|
695
|
+
});
|
|
696
|
+
return useMemo(() => {
|
|
678
697
|
if (!(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.styles) || !(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.settings)) {
|
|
679
|
-
return;
|
|
698
|
+
return [];
|
|
680
699
|
}
|
|
681
700
|
|
|
682
701
|
const blockSelectors = getBlockSelectors(getBlockTypes());
|
|
683
702
|
const customProperties = toCustomProperties(mergedConfig, blockSelectors);
|
|
684
|
-
const globalStyles = toStyles(mergedConfig, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport);
|
|
703
|
+
const globalStyles = toStyles(mergedConfig, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport, disableLayoutStyles);
|
|
685
704
|
const filters = toSvgFilters(mergedConfig, blockSelectors);
|
|
686
|
-
|
|
705
|
+
const stylesheets = [{
|
|
687
706
|
css: customProperties,
|
|
688
707
|
isGlobalStyles: true
|
|
689
708
|
}, {
|
|
690
709
|
css: globalStyles,
|
|
691
710
|
isGlobalStyles: true
|
|
692
|
-
}]
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
}, [hasBlockGapSupport, hasFallbackGapSupport, mergedConfig]);
|
|
696
|
-
return [stylesheets, settings, svgFilters, hasBlockGapSupport];
|
|
711
|
+
}];
|
|
712
|
+
return [stylesheets, mergedConfig.settings, filters];
|
|
713
|
+
}, [hasBlockGapSupport, hasFallbackGapSupport, mergedConfig, disableLayoutStyles]);
|
|
697
714
|
}
|
|
698
715
|
//# 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","kebabCase","pickBy","reduce","set","startsWith","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","__EXPERIMENTAL_ELEMENTS","ELEMENTS","getBlockTypes","useEffect","useState","useContext","getCSSRules","__unstablePresetDuotoneFilter","PresetDuotoneFilter","__experimentalGetGapCSSValue","getGapCSSValue","PRESET_METADATA","ROOT_BLOCK_SELECTOR","scopeSelector","GlobalStylesContext","useSetting","BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS","__experimentalBorder","color","spacing","typography","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","useRootPaddingAlign","isRoot","output","properties","useEngine","rootOnly","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","getLayoutStyles","tree","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","blocks","node","blockName","duotoneSelector","hasLayoutSupport","featureSelectors","elementName","sel","elementSelectors","elementSelector","getNodesWithSettings","pickPresets","presets","custom","blockCustom","toCustomProperties","customProps","toStyles","nodesWithStyles","nodesWithSettings","useRootPaddingAwareAlignments","featureName","featureSelector","featureStyles","featureDeclarations","duotoneStyles","duotoneDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","_selector","pseudoRule","toSvgFilters","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","__experimentalDuotone","__experimentalLayout","__experimentalDefault","featureKey","undefined","useGlobalStylesOutput","stylesheets","setStylesheets","setSettings","svgFilters","setSvgFilters","merged","mergedConfig","customProperties","globalStyles","filters","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\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 {\n\t__unstablePresetDuotoneFilter as PresetDuotoneFilter,\n\t__experimentalGetGapCSSValue as getGapCSSValue,\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\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 * @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 * @return {Array} An array of style declarations.\n */\nfunction getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign\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\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 (\n\t\t\t\tkey === '--wp--style--root--padding' &&\n\t\t\t\ttypeof styleValue === 'string'\n\t\t\t) {\n\t\t\t\t// Root-level padding styles don't currently support strings with CSS shorthand values.\n\t\t\t\t// This may change: https://github.com/WordPress/gutenberg/issues/40132.\n\t\t\t\treturn declarations;\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\tif ( isRoot && useRootPaddingAlign ) {\n\t\treturn output;\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\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\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\tconst combinedSelector =\n\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t? `${ selector } .${ className }${\n\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t }`\n\t\t\t\t\t\t\t\t\t: `${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\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\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\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\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 = (\n\ttree,\n\tblockSelectors,\n\thasBlockGapSupport,\n\thasFallbackGapSupport\n) => {\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\tconst useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;\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 ( useRootPaddingAlign ) {\n\t\truleset =\n\t\t\t'body { margin: 0; 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\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\treturn;\n\t\t\t\t}\n\t\t\t\truleset =\n\t\t\t\t\truleset +\n\t\t\t\t\t`${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t';'\n\t\t\t\t\t) };}`;\n\t\t\t}\n\n\t\t\t// Process blockGap and layout styles.\n\t\t\tif ( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport ) {\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);\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 [ stylesheets, setStylesheets ] = useState( [] );\n\tconst [ settings, setSettings ] = useState( {} );\n\tconst [ svgFilters, setSvgFilters ] = useState( {} );\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\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(\n\t\t\tmergedConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport\n\t\t);\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}, [ hasBlockGapSupport, hasFallbackGapSupport, mergedConfig ] );\n\n\treturn [ stylesheets, settings, svgFilters, hasBlockGapSupport ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/use-global-styles-output.js"],"names":["first","forEach","get","isEmpty","kebabCase","pickBy","reduce","set","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","__EXPERIMENTAL_ELEMENTS","ELEMENTS","getBlockTypes","useSelect","useContext","useMemo","getCSSRules","__unstablePresetDuotoneFilter","PresetDuotoneFilter","__experimentalGetGapCSSValue","getGapCSSValue","store","blockEditorStore","PRESET_METADATA","ROOT_BLOCK_SELECTOR","scopeSelector","GlobalStylesContext","useSetting","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","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","useRootPaddingAlign","isRoot","output","properties","useEngine","rootOnly","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","getLayoutStyles","tree","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","blocks","node","blockName","duotoneSelector","hasLayoutSupport","featureSelectors","elementName","sel","elementSelectors","elementSelector","getNodesWithSettings","pickPresets","presets","custom","blockCustom","toCustomProperties","customProps","toStyles","disableLayoutStyles","nodesWithStyles","nodesWithSettings","useRootPaddingAwareAlignments","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","select","getSettings","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\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 * @return {Array} An array of style declarations.\n */\nexport function getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign\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\t\toutput.push( `${ cssProperty }: ${ compileStyleValue( rule.value ) }` );\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\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 ( useRootPaddingAlign ) {\n\t\truleset =\n\t\t\t'body { margin: 0; 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\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\treturn;\n\t\t\t\t}\n\t\t\t\truleset =\n\t\t\t\t\truleset +\n\t\t\t\t\t`${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t';'\n\t\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);\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"]}
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { get, find } from 'lodash';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { getTypographyFontSizeValue } from './typography-utils';
|
|
5
10
|
/* Supporting data. */
|
|
6
11
|
|
|
7
12
|
export const ROOT_BLOCK_NAME = 'root';
|
|
@@ -41,6 +46,12 @@ export const PRESET_METADATA = [{
|
|
|
41
46
|
classes: []
|
|
42
47
|
}, {
|
|
43
48
|
path: ['typography', 'fontSizes'],
|
|
49
|
+
valueFunc: (preset, _ref2) => {
|
|
50
|
+
let {
|
|
51
|
+
typography: typographySettings
|
|
52
|
+
} = _ref2;
|
|
53
|
+
return getTypographyFontSizeValue(preset, typographySettings);
|
|
54
|
+
},
|
|
44
55
|
valueKey: 'size',
|
|
45
56
|
cssVarInfix: 'font-size',
|
|
46
57
|
classes: [{
|
|
@@ -62,6 +73,9 @@ const STYLE_PATH_TO_CSS_VAR_INFIX = {
|
|
|
62
73
|
'elements.link.color.text': 'color',
|
|
63
74
|
'elements.button.color.text': 'color',
|
|
64
75
|
'elements.button.backgroundColor': 'background-color',
|
|
76
|
+
'elements.heading.color': 'color',
|
|
77
|
+
'elements.heading.backgroundColor': 'background-color',
|
|
78
|
+
'elements.heading.gradient': 'gradient',
|
|
65
79
|
'color.gradient': 'gradient',
|
|
66
80
|
'typography.fontSize': 'font-size',
|
|
67
81
|
'typography.fontFamily': 'font-family'
|
|
@@ -131,8 +145,8 @@ export function getPresetVariableFromValue(features, blockName, variableStylePat
|
|
|
131
145
|
return `var:preset|${cssVarInfix}|${presetObject.slug}`;
|
|
132
146
|
}
|
|
133
147
|
|
|
134
|
-
function getValueFromPresetVariable(features, blockName, variable,
|
|
135
|
-
let [presetType, slug] =
|
|
148
|
+
function getValueFromPresetVariable(features, blockName, variable, _ref3) {
|
|
149
|
+
let [presetType, slug] = _ref3;
|
|
136
150
|
const metadata = find(PRESET_METADATA, ['cssVarInfix', presetType]);
|
|
137
151
|
|
|
138
152
|
if (!metadata) {
|