@wordpress/edit-site 4.11.0 → 4.13.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 +4 -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 +29 -4
- 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/block-editor/resizable-editor.js +26 -12
- package/build/components/block-editor/resizable-editor.js.map +1 -1
- package/build/components/global-styles/border-panel.js +3 -3
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +98 -8
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +4 -4
- 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 +82 -14
- 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 +102 -49
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +54 -5
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/header/document-actions/index.js +1 -0
- package/build/components/header/document-actions/index.js.map +1 -1
- package/build/components/header/index.js +20 -6
- package/build/components/header/index.js.map +1 -1
- package/build/components/header/mode-switcher/index.js +0 -4
- package/build/components/header/mode-switcher/index.js.map +1 -1
- package/build/components/header/more-menu/index.js +13 -3
- package/build/components/header/more-menu/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/default-sidebar.js +11 -1
- package/build/components/sidebar/default-sidebar.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/plugin-sidebar/index.js +11 -1
- package/build/components/sidebar/plugin-sidebar/index.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/edit-template-title.js +1 -1
- package/build/components/template-details/edit-template-title.js.map +1 -1
- package/build/components/template-details/index.js +19 -9
- 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-details/template-part-area-selector.js +47 -0
- package/build/components/template-details/template-part-area-selector.js.map +1 -0
- 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/index.js +1 -1
- package/build/index.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 +29 -6
- 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/block-editor/resizable-editor.js +26 -12
- package/build-module/components/block-editor/resizable-editor.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +3 -3
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +96 -9
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +4 -4
- 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 +83 -15
- 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 +102 -53
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +53 -5
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/header/document-actions/index.js +1 -0
- package/build-module/components/header/document-actions/index.js.map +1 -1
- package/build-module/components/header/index.js +22 -8
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/header/mode-switcher/index.js +0 -4
- package/build-module/components/header/mode-switcher/index.js.map +1 -1
- package/build-module/components/header/more-menu/index.js +13 -3
- package/build-module/components/header/more-menu/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/default-sidebar.js +9 -1
- package/build-module/components/sidebar/default-sidebar.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/plugin-sidebar/index.js +9 -1
- package/build-module/components/sidebar/plugin-sidebar/index.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/edit-template-title.js +1 -1
- package/build-module/components/template-details/edit-template-title.js.map +1 -1
- package/build-module/components/template-details/index.js +19 -10
- 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-details/template-part-area-selector.js +35 -0
- package/build-module/components/template-details/template-part-area-selector.js.map +1 -0
- 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-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-style/style-rtl.css +15 -8
- package/build-style/style.css +15 -8
- 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 +53 -24
- package/src/components/add-new-template/utils.js +145 -16
- package/src/components/block-editor/resizable-editor.js +28 -18
- package/src/components/editor/style.scss +1 -0
- package/src/components/global-styles/border-panel.js +3 -3
- package/src/components/global-styles/dimensions-panel.js +139 -33
- package/src/components/global-styles/hooks.js +4 -3
- 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 +14 -6
- package/src/components/global-styles/test/typography-utils.js +130 -0
- package/src/components/global-styles/test/use-global-styles-output.js +79 -3
- package/src/components/global-styles/test/utils.js +68 -8
- package/src/components/global-styles/typography-panel.js +119 -48
- 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 +119 -61
- package/src/components/global-styles/utils.js +39 -4
- package/src/components/header/document-actions/index.js +3 -0
- package/src/components/header/index.js +32 -4
- package/src/components/header/mode-switcher/index.js +0 -3
- package/src/components/header/more-menu/index.js +7 -2
- 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/default-sidebar.js +12 -0
- package/src/components/sidebar/navigation-menu-sidebar/navigation-menu.js +1 -5
- package/src/components/sidebar/plugin-sidebar/index.js +12 -0
- package/src/components/sidebar/template-card/template-actions.js +3 -1
- package/src/components/template-details/edit-template-title.js +7 -3
- package/src/components/template-details/index.js +23 -8
- package/src/components/template-details/style.scss +0 -5
- package/src/components/template-details/template-areas.js +3 -1
- package/src/components/template-details/template-part-area-selector.js +38 -0
- package/src/components/template-part-converter/convert-to-template-part.js +3 -1
- package/src/index.js +1 -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
|
*/
|
|
@@ -29,11 +30,13 @@ const BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {
|
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
function compileStyleValue(uncompiledValue) {
|
|
33
|
+
var _uncompiledValue$star;
|
|
34
|
+
|
|
32
35
|
const VARIABLE_REFERENCE_PREFIX = 'var:';
|
|
33
36
|
const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
|
|
34
37
|
const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
|
|
35
38
|
|
|
36
|
-
if (startsWith(uncompiledValue, VARIABLE_REFERENCE_PREFIX)) {
|
|
39
|
+
if (uncompiledValue !== null && uncompiledValue !== void 0 && (_uncompiledValue$star = uncompiledValue.startsWith) !== null && _uncompiledValue$star !== void 0 && _uncompiledValue$star.call(uncompiledValue, VARIABLE_REFERENCE_PREFIX)) {
|
|
37
40
|
const variable = uncompiledValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
|
|
38
41
|
return `var(--wp--${variable})`;
|
|
39
42
|
}
|
|
@@ -44,13 +47,15 @@ function compileStyleValue(uncompiledValue) {
|
|
|
44
47
|
* Transform given preset tree into a set of style declarations.
|
|
45
48
|
*
|
|
46
49
|
* @param {Object} blockPresets
|
|
50
|
+
* @param {Object} mergedSettings Merged theme.json settings.
|
|
47
51
|
*
|
|
48
|
-
* @return {Array} An array of style declarations.
|
|
52
|
+
* @return {Array<Object>} An array of style declarations.
|
|
49
53
|
*/
|
|
50
54
|
|
|
51
55
|
|
|
52
56
|
function getPresetsDeclarations() {
|
|
53
57
|
let blockPresets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
58
|
+
let mergedSettings = arguments.length > 1 ? arguments[1] : undefined;
|
|
54
59
|
return reduce(PRESET_METADATA, (declarations, _ref) => {
|
|
55
60
|
let {
|
|
56
61
|
path,
|
|
@@ -62,10 +67,10 @@ function getPresetsDeclarations() {
|
|
|
62
67
|
['default', 'theme', 'custom'].forEach(origin => {
|
|
63
68
|
if (presetByOrigin[origin]) {
|
|
64
69
|
presetByOrigin[origin].forEach(value => {
|
|
65
|
-
if (valueKey) {
|
|
70
|
+
if (valueKey && !valueFunc) {
|
|
66
71
|
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${value[valueKey]}`);
|
|
67
72
|
} else if (valueFunc && typeof valueFunc === 'function') {
|
|
68
|
-
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${valueFunc(value)}`);
|
|
73
|
+
declarations.push(`--wp--preset--${cssVarInfix}--${kebabCase(value.slug)}: ${valueFunc(value, mergedSettings)}`);
|
|
69
74
|
}
|
|
70
75
|
});
|
|
71
76
|
}
|
|
@@ -159,14 +164,17 @@ function flattenTree() {
|
|
|
159
164
|
*
|
|
160
165
|
* @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.
|
|
161
166
|
*
|
|
167
|
+
* @param {Object} tree A theme.json tree containing layout definitions.
|
|
168
|
+
*
|
|
162
169
|
* @return {Array} An array of style declarations.
|
|
163
170
|
*/
|
|
164
171
|
|
|
165
172
|
|
|
166
|
-
function getStylesDeclarations() {
|
|
173
|
+
export function getStylesDeclarations() {
|
|
167
174
|
let blockStyles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
168
175
|
let selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
169
176
|
let useRootPaddingAlign = arguments.length > 2 ? arguments[2] : undefined;
|
|
177
|
+
let tree = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
170
178
|
const isRoot = ROOT_BLOCK_SELECTOR === selector;
|
|
171
179
|
const output = reduce(STYLE_PROPERTY, (declarations, _ref5, key) => {
|
|
172
180
|
let {
|
|
@@ -186,7 +194,12 @@ function getStylesDeclarations() {
|
|
|
186
194
|
return declarations;
|
|
187
195
|
}
|
|
188
196
|
|
|
189
|
-
const styleValue = get(blockStyles, pathToValue);
|
|
197
|
+
const styleValue = get(blockStyles, pathToValue); // Root-level padding styles don't currently support strings with CSS shorthand values.
|
|
198
|
+
// This may change: https://github.com/WordPress/gutenberg/issues/40132.
|
|
199
|
+
|
|
200
|
+
if (key === '--wp--style--root--padding' && (typeof styleValue === 'string' || !useRootPaddingAlign)) {
|
|
201
|
+
return declarations;
|
|
202
|
+
}
|
|
190
203
|
|
|
191
204
|
if (!!properties && typeof styleValue !== 'string') {
|
|
192
205
|
Object.entries(properties).forEach(entry => {
|
|
@@ -201,28 +214,40 @@ function getStylesDeclarations() {
|
|
|
201
214
|
const cssProperty = name.startsWith('--') ? name : kebabCase(name);
|
|
202
215
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(styleValue, [prop]))}`);
|
|
203
216
|
});
|
|
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
217
|
} else if (get(blockStyles, pathToValue, false)) {
|
|
209
218
|
const cssProperty = key.startsWith('--') ? key : kebabCase(key);
|
|
210
219
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(blockStyles, pathToValue))}`);
|
|
211
220
|
}
|
|
212
221
|
|
|
213
222
|
return declarations;
|
|
214
|
-
}, []);
|
|
215
|
-
|
|
216
|
-
if (isRoot && useRootPaddingAlign) {
|
|
217
|
-
return output;
|
|
218
|
-
} // The goal is to move everything to server side generated engine styles
|
|
223
|
+
}, []); // The goal is to move everything to server side generated engine styles
|
|
219
224
|
// This is temporary as we absorb more and more styles into the engine.
|
|
220
225
|
|
|
221
|
-
|
|
222
226
|
const extraRules = getCSSRules(blockStyles);
|
|
223
227
|
extraRules.forEach(rule => {
|
|
228
|
+
var _ruleValue;
|
|
229
|
+
|
|
230
|
+
// Don't output padding properties if padding variables are set.
|
|
231
|
+
if (isRoot && useRootPaddingAlign && rule.key.startsWith('padding')) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
224
235
|
const cssProperty = rule.key.startsWith('--') ? rule.key : kebabCase(rule.key);
|
|
225
|
-
|
|
236
|
+
let ruleValue = rule.value;
|
|
237
|
+
|
|
238
|
+
if (typeof ruleValue !== 'string' && (_ruleValue = ruleValue) !== null && _ruleValue !== void 0 && _ruleValue.ref) {
|
|
239
|
+
var _ruleValue2;
|
|
240
|
+
|
|
241
|
+
const refPath = ruleValue.ref.split('.');
|
|
242
|
+
ruleValue = get(tree, refPath); // Presence of another ref indicates a reference to another dynamic value.
|
|
243
|
+
// Pointing to another dynamic value is not supported.
|
|
244
|
+
|
|
245
|
+
if (!ruleValue || !!((_ruleValue2 = ruleValue) !== null && _ruleValue2 !== void 0 && _ruleValue2.ref)) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
output.push(`${cssProperty}: ${ruleValue}`);
|
|
226
251
|
});
|
|
227
252
|
return output;
|
|
228
253
|
}
|
|
@@ -240,7 +265,6 @@ function getStylesDeclarations() {
|
|
|
240
265
|
* @return {string} Generated CSS rules for the layout styles.
|
|
241
266
|
*/
|
|
242
267
|
|
|
243
|
-
|
|
244
268
|
export function getLayoutStyles(_ref6) {
|
|
245
269
|
var _style$spacing, _tree$settings, _tree$settings$layout, _tree$settings2, _tree$settings2$layou;
|
|
246
270
|
|
|
@@ -289,7 +313,15 @@ export function getLayoutStyles(_ref6) {
|
|
|
289
313
|
}
|
|
290
314
|
|
|
291
315
|
if (declarations.length) {
|
|
292
|
-
|
|
316
|
+
let combinedSelector = '';
|
|
317
|
+
|
|
318
|
+
if (!hasBlockGapSupport) {
|
|
319
|
+
// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.
|
|
320
|
+
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) || ''})`;
|
|
321
|
+
} else {
|
|
322
|
+
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) || ''}`;
|
|
323
|
+
}
|
|
324
|
+
|
|
293
325
|
ruleset += `${combinedSelector} { ${declarations.join('; ')}; }`;
|
|
294
326
|
}
|
|
295
327
|
});
|
|
@@ -338,7 +370,7 @@ export function getLayoutStyles(_ref6) {
|
|
|
338
370
|
return ruleset;
|
|
339
371
|
}
|
|
340
372
|
export const getNodesWithStyles = (tree, blockSelectors) => {
|
|
341
|
-
var _tree$
|
|
373
|
+
var _tree$styles3;
|
|
342
374
|
|
|
343
375
|
const nodes = [];
|
|
344
376
|
|
|
@@ -358,16 +390,20 @@ export const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
358
390
|
});
|
|
359
391
|
}
|
|
360
392
|
|
|
361
|
-
forEach(
|
|
362
|
-
|
|
393
|
+
forEach(ELEMENTS, (selector, name) => {
|
|
394
|
+
var _tree$styles;
|
|
395
|
+
|
|
396
|
+
if (!!((_tree$styles = tree.styles) !== null && _tree$styles !== void 0 && _tree$styles.elements[name])) {
|
|
397
|
+
var _tree$styles2;
|
|
398
|
+
|
|
363
399
|
nodes.push({
|
|
364
|
-
styles:
|
|
365
|
-
selector
|
|
400
|
+
styles: (_tree$styles2 = tree.styles) === null || _tree$styles2 === void 0 ? void 0 : _tree$styles2.elements[name],
|
|
401
|
+
selector
|
|
366
402
|
});
|
|
367
403
|
}
|
|
368
404
|
}); // Iterate over blocks: they can have styles & elements.
|
|
369
405
|
|
|
370
|
-
forEach((_tree$
|
|
406
|
+
forEach((_tree$styles3 = tree.styles) === null || _tree$styles3 === void 0 ? void 0 : _tree$styles3.blocks, (node, blockName) => {
|
|
371
407
|
var _blockSelectors$block;
|
|
372
408
|
|
|
373
409
|
const blockStyles = pickStyleKeys(node);
|
|
@@ -457,7 +493,7 @@ export const toCustomProperties = (tree, blockSelectors) => {
|
|
|
457
493
|
custom,
|
|
458
494
|
selector
|
|
459
495
|
} = _ref12;
|
|
460
|
-
const declarations = getPresetsDeclarations(presets);
|
|
496
|
+
const declarations = getPresetsDeclarations(presets, tree === null || tree === void 0 ? void 0 : tree.settings);
|
|
461
497
|
const customProps = flattenTree(custom, '--wp--custom--', '--');
|
|
462
498
|
|
|
463
499
|
if (customProps.length > 0) {
|
|
@@ -470,12 +506,17 @@ export const toCustomProperties = (tree, blockSelectors) => {
|
|
|
470
506
|
});
|
|
471
507
|
return ruleset;
|
|
472
508
|
};
|
|
473
|
-
export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport)
|
|
474
|
-
var _tree$settings5;
|
|
509
|
+
export const toStyles = function (tree, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport) {
|
|
510
|
+
var _tree$settings5, _tree$settings6;
|
|
475
511
|
|
|
512
|
+
let disableLayoutStyles = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
476
513
|
const nodesWithStyles = getNodesWithStyles(tree, blockSelectors);
|
|
477
514
|
const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
|
|
478
515
|
const useRootPaddingAlign = tree === null || tree === void 0 ? void 0 : (_tree$settings5 = tree.settings) === null || _tree$settings5 === void 0 ? void 0 : _tree$settings5.useRootPaddingAwareAlignments;
|
|
516
|
+
const {
|
|
517
|
+
contentSize,
|
|
518
|
+
wideSize
|
|
519
|
+
} = (tree === null || tree === void 0 ? void 0 : (_tree$settings6 = tree.settings) === null || _tree$settings6 === void 0 ? void 0 : _tree$settings6.layout) || {};
|
|
479
520
|
/*
|
|
480
521
|
* Reset default browser margin on the root body element.
|
|
481
522
|
* This is set on the root selector **before** generating the ruleset
|
|
@@ -485,12 +526,21 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
485
526
|
* @link https://github.com/WordPress/gutenberg/issues/36147.
|
|
486
527
|
*/
|
|
487
528
|
|
|
488
|
-
let ruleset = 'body {margin: 0;
|
|
529
|
+
let ruleset = 'body {margin: 0;';
|
|
530
|
+
|
|
531
|
+
if (contentSize) {
|
|
532
|
+
ruleset += ` --wp--style--global--content-size: ${contentSize};`;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
if (wideSize) {
|
|
536
|
+
ruleset += ` --wp--style--global--wide-size: ${wideSize};`;
|
|
537
|
+
}
|
|
489
538
|
|
|
490
539
|
if (useRootPaddingAlign) {
|
|
491
|
-
ruleset
|
|
540
|
+
ruleset += '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);';
|
|
492
541
|
}
|
|
493
542
|
|
|
543
|
+
ruleset += '}';
|
|
494
544
|
nodesWithStyles.forEach(_ref13 => {
|
|
495
545
|
let {
|
|
496
546
|
selector,
|
|
@@ -532,15 +582,13 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
532
582
|
if (duotoneSelector) {
|
|
533
583
|
const duotoneDeclarations = getStylesDeclarations(duotoneStyles);
|
|
534
584
|
|
|
535
|
-
if (duotoneDeclarations.length
|
|
536
|
-
|
|
585
|
+
if (duotoneDeclarations.length > 0) {
|
|
586
|
+
ruleset = ruleset + `${duotoneSelector}{${duotoneDeclarations.join(';')};}`;
|
|
537
587
|
}
|
|
538
|
-
|
|
539
|
-
ruleset = ruleset + `${duotoneSelector}{${duotoneDeclarations.join(';')};}`;
|
|
540
588
|
} // Process blockGap and layout styles.
|
|
541
589
|
|
|
542
590
|
|
|
543
|
-
if (ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport) {
|
|
591
|
+
if (!disableLayoutStyles && (ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport)) {
|
|
544
592
|
ruleset += getLayoutStyles({
|
|
545
593
|
tree,
|
|
546
594
|
style: styles,
|
|
@@ -552,7 +600,7 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
552
600
|
} // Process the remaining block styles (they use either normal block class or __experimentalSelector).
|
|
553
601
|
|
|
554
602
|
|
|
555
|
-
const declarations = getStylesDeclarations(styles, selector, useRootPaddingAlign);
|
|
603
|
+
const declarations = getStylesDeclarations(styles, selector, useRootPaddingAlign, tree);
|
|
556
604
|
|
|
557
605
|
if (declarations !== null && declarations !== void 0 && declarations.length) {
|
|
558
606
|
ruleset = ruleset + `${selector}{${declarations.join(';')};}`;
|
|
@@ -594,10 +642,10 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
594
642
|
ruleset = ruleset + '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
|
|
595
643
|
|
|
596
644
|
if (hasBlockGapSupport) {
|
|
597
|
-
var _tree$
|
|
645
|
+
var _tree$styles4, _tree$styles4$spacing;
|
|
598
646
|
|
|
599
647
|
// 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$
|
|
648
|
+
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
649
|
ruleset = ruleset + '.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }';
|
|
602
650
|
ruleset = ruleset + `.wp-site-blocks > * + * { margin-block-start: ${gapValue}; }`;
|
|
603
651
|
}
|
|
@@ -664,9 +712,6 @@ export const getBlockSelectors = blockTypes => {
|
|
|
664
712
|
return result;
|
|
665
713
|
};
|
|
666
714
|
export function useGlobalStylesOutput() {
|
|
667
|
-
const [stylesheets, setStylesheets] = useState([]);
|
|
668
|
-
const [settings, setSettings] = useState({});
|
|
669
|
-
const [svgFilters, setSvgFilters] = useState({});
|
|
670
715
|
const {
|
|
671
716
|
merged: mergedConfig
|
|
672
717
|
} = useContext(GlobalStylesContext);
|
|
@@ -674,25 +719,29 @@ export function useGlobalStylesOutput() {
|
|
|
674
719
|
const hasBlockGapSupport = blockGap !== null;
|
|
675
720
|
const hasFallbackGapSupport = !hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.
|
|
676
721
|
|
|
677
|
-
|
|
722
|
+
const disableLayoutStyles = useSelect(select => {
|
|
723
|
+
const {
|
|
724
|
+
getSettings
|
|
725
|
+
} = select(blockEditorStore);
|
|
726
|
+
return !!getSettings().disableLayoutStyles;
|
|
727
|
+
});
|
|
728
|
+
return useMemo(() => {
|
|
678
729
|
if (!(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.styles) || !(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.settings)) {
|
|
679
|
-
return;
|
|
730
|
+
return [];
|
|
680
731
|
}
|
|
681
732
|
|
|
682
733
|
const blockSelectors = getBlockSelectors(getBlockTypes());
|
|
683
734
|
const customProperties = toCustomProperties(mergedConfig, blockSelectors);
|
|
684
|
-
const globalStyles = toStyles(mergedConfig, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport);
|
|
735
|
+
const globalStyles = toStyles(mergedConfig, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport, disableLayoutStyles);
|
|
685
736
|
const filters = toSvgFilters(mergedConfig, blockSelectors);
|
|
686
|
-
|
|
737
|
+
const stylesheets = [{
|
|
687
738
|
css: customProperties,
|
|
688
739
|
isGlobalStyles: true
|
|
689
740
|
}, {
|
|
690
741
|
css: globalStyles,
|
|
691
742
|
isGlobalStyles: true
|
|
692
|
-
}]
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
}, [hasBlockGapSupport, hasFallbackGapSupport, mergedConfig]);
|
|
696
|
-
return [stylesheets, settings, svgFilters, hasBlockGapSupport];
|
|
743
|
+
}];
|
|
744
|
+
return [stylesheets, mergedConfig.settings, filters];
|
|
745
|
+
}, [hasBlockGapSupport, hasFallbackGapSupport, mergedConfig, disableLayoutStyles]);
|
|
697
746
|
}
|
|
698
747
|
//# 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","tree","isRoot","output","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","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","select","getSettings","customProperties","globalStyles","filters","stylesheets","css","isGlobalStyles"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,KADD,EAECC,OAFD,EAGCC,GAHD,EAICC,OAJD,EAKCC,SALD,EAMCC,MAND,EAOCC,MAPD,EAQCC,GARD,QASO,QATP;AAWA;AACA;AACA;;AACA,SACCC,6BAA6B,IAAIC,cADlC,EAECC,uBAAuB,IAAIC,QAF5B,EAGCC,aAHD,QAIO,mBAJP;AAKA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SAASC,UAAT,EAAqBC,OAArB,QAAoC,oBAApC;AACA,SAASC,WAAT,QAA4B,yBAA5B;AACA,SACCC,6BAA6B,IAAIC,mBADlC,EAECC,4BAA4B,IAAIC,cAFjC,EAGCC,KAAK,IAAIC,gBAHV,QAIO,yBAJP;AAMA;AACA;AACA;;AACA,SAASC,eAAT,EAA0BC,mBAA1B,EAA+CC,aAA/C,QAAoE,SAApE;AACA,SAASC,mBAAT,QAAoC,WAApC;AACA,SAASC,UAAT,QAA2B,SAA3B,C,CAEA;AACA;;AACA,MAAMC,qCAAqC,GAAG;AAC7CC,EAAAA,oBAAoB,EAAE,QADuB;AAE7CC,EAAAA,KAAK,EAAE,OAFsC;AAG7CC,EAAAA,OAAO,EAAE,SAHoC;AAI7CC,EAAAA,UAAU,EAAE;AAJiC,CAA9C;;AAOA,SAASC,iBAAT,CAA4BC,eAA5B,EAA8C;AAAA;;AAC7C,QAAMC,yBAAyB,GAAG,MAAlC;AACA,QAAMC,uCAAuC,GAAG,GAAhD;AACA,QAAMC,mCAAmC,GAAG,IAA5C;;AAEA,MAAKH,eAAL,aAAKA,eAAL,wCAAKA,eAAe,CAAEI,UAAtB,kDAAK,2BAAAJ,eAAe,EAAgBC,yBAAhB,CAApB,EAAkE;AACjE,UAAMI,QAAQ,GAAGL,eAAe,CAC9BM,KADe,CACRL,yBAAyB,CAACM,MADlB,EAEfC,KAFe,CAERN,uCAFQ,EAGfO,IAHe,CAGTN,mCAHS,CAAjB;AAIA,WAAQ,aAAaE,QAAU,GAA/B;AACA;;AACD,SAAOL,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASU,sBAAT,GAAqE;AAAA,MAApCC,YAAoC,uEAArB,EAAqB;AAAA,MAAjBC,cAAiB;AACpE,SAAOxC,MAAM,CACZiB,eADY,EAEZ,CAAEwB,YAAF,WAAgE;AAAA,QAAhD;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,QAAR;AAAkBC,MAAAA,SAAlB;AAA6BC,MAAAA;AAA7B,KAAgD;AAC/D,UAAMC,cAAc,GAAGlD,GAAG,CAAE2C,YAAF,EAAgBG,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiC/C,OAAjC,CAA4CoD,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBpD,OAAzB,CAAoCqD,KAAF,IAAa;AAC9C,cAAKL,QAAQ,IAAI,CAAEC,SAAnB,EAA+B;AAC9BH,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAK/C,SAAS,CAC5CkD,KAAK,CAACE,IADsC,CAE1C,KAAKF,KAAK,CAAEL,QAAF,CAAc,EAH5B;AAKA,WAND,MAMO,IACNC,SAAS,IACT,OAAOA,SAAP,KAAqB,UAFf,EAGL;AACDH,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAK/C,SAAS,CAC5CkD,KAAK,CAACE,IADsC,CAE1C,KAAKN,SAAS,CAAEI,KAAF,EAASR,cAAT,CAA2B,EAH7C;AAKA;AACD,SAjBD;AAkBA;AACD,KArBD;AAuBA,WAAOC,YAAP;AACA,GA5BW,EA6BZ,EA7BY,CAAb;AA+BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASU,iBAAT,CAA4BC,aAA5B,EAA+D;AAAA,MAApBb,YAAoB,uEAAL,EAAK;AAC9D,SAAOvC,MAAM,CACZiB,eADY,EAEZ,CAAEwB,YAAF,YAAoD;AAAA,QAApC;AAAEC,MAAAA,IAAF;AAAQG,MAAAA,WAAR;AAAqBQ,MAAAA;AAArB,KAAoC;;AACnD,QAAK,CAAEA,OAAP,EAAiB;AAChB,aAAOZ,YAAP;AACA;;AAED,UAAMK,cAAc,GAAGlD,GAAG,CAAE2C,YAAF,EAAgBG,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiC/C,OAAjC,CAA4CoD,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBpD,OAAzB,CAAkC,SAAgB;AAAA,cAAd;AAAEuD,YAAAA;AAAF,WAAc;AACjDG,UAAAA,OAAO,CAAC1D,OAAR,CAAiB,SAAqC;AAAA,gBAAnC;AAAE2D,cAAAA,WAAF;AAAeC,cAAAA;AAAf,aAAmC;AACrD,kBAAMC,kBAAkB,GAAI,QAAQ1D,SAAS,CAC5CoD,IAD4C,CAE1C,IAAII,WAAa,EAFpB;AAGA,kBAAMG,aAAa,GAAGL,aAAa,CACjChB,KADoB,CACb,GADa,EACP;AADO,aAEpBsB,GAFoB,CAGlBC,QAAF,IACE,GAAGA,QAAU,GAAGH,kBAAoB,EAJlB,EAMpBnB,IANoB,CAMd,GANc,CAAtB;AAOA,kBAAMW,KAAK,GAAI,qBAAqBH,WAAa,KAAK/C,SAAS,CAC9DoD,IAD8D,CAE5D,GAFH;AAGAT,YAAAA,YAAY,IAAK,GAAGgB,aAAe,IAAIF,YAAc,KAAKP,KAAO,eAAjE;AACA,WAfD;AAgBA,SAjBD;AAkBA;AACD,KArBD;AAsBA,WAAOP,YAAP;AACA,GA/BW,EAgCZ,EAhCY,CAAb;AAkCA;;AAED,SAASmB,oBAAT,GAAmD;AAAA,MAApBrB,YAAoB,uEAAL,EAAK;AAClD,SAAOtB,eAAe,CAAC4C,MAAhB,EACN;AACEC,EAAAA,QAAF,IAAgBA,QAAQ,CAACpB,IAAT,CAAcqB,EAAd,CAAkB,CAAC,CAAnB,MAA2B,SAFrC,EAGLC,OAHK,CAGMF,QAAF,IAAgB;AAC1B,UAAMhB,cAAc,GAAGlD,GAAG,CAAE2C,YAAF,EAAgBuB,QAAQ,CAACpB,IAAzB,EAA+B,EAA/B,CAA1B;AACA,WAAO,CAAE,SAAF,EAAa,OAAb,EACLmB,MADK,CACKd,MAAF,IAAcD,cAAc,CAAEC,MAAF,CAD/B,EAELiB,OAFK,CAEMjB,MAAF,IACTD,cAAc,CAAEC,MAAF,CAAd,CAAyBW,GAAzB,CAAgCO,MAAF,IAC7B,cAAC,mBAAD;AACC,MAAA,MAAM,EAAGA,MADV;AAEC,MAAA,GAAG,EAAGA,MAAM,CAACf;AAFd,MADD,CAHK,CAAP;AAUA,GAfM,CAAP;AAgBA;;AAED,SAASgB,WAAT,GAAkD;AAAA,MAA5BC,KAA4B,uEAApB,EAAoB;AAAA,MAAhBC,MAAgB;AAAA,MAARC,KAAQ;AACjD,MAAIC,MAAM,GAAG,EAAb;AACAC,EAAAA,MAAM,CAACC,IAAP,CAAaL,KAAb,EAAqBxE,OAArB,CAAgC8E,GAAF,IAAW;AACxC,UAAMC,MAAM,GAAGN,MAAM,GAAGtE,SAAS,CAAE2E,GAAG,CAACE,OAAJ,CAAa,GAAb,EAAkB,GAAlB,CAAF,CAAjC;AACA,UAAMC,OAAO,GAAGT,KAAK,CAAEM,GAAF,CAArB;;AAEA,QAAKG,OAAO,YAAYL,MAAxB,EAAiC;AAChC,YAAMM,SAAS,GAAGH,MAAM,GAAGL,KAA3B;AACAC,MAAAA,MAAM,GAAG,CAAE,GAAGA,MAAL,EAAa,GAAGJ,WAAW,CAAEU,OAAF,EAAWC,SAAX,EAAsBR,KAAtB,CAA3B,CAAT;AACA,KAHD,MAGO;AACNC,MAAAA,MAAM,CAACrB,IAAP,CAAc,GAAGyB,MAAQ,KAAKE,OAAS,EAAvC;AACA;AACD,GAVD;AAWA,SAAON,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASQ,qBAAT,GAKL;AAAA,MAJDC,WAIC,uEAJa,EAIb;AAAA,MAHDpB,QAGC,uEAHU,EAGV;AAAA,MAFDqB,mBAEC;AAAA,MADDC,IACC,uEADM,EACN;AACD,QAAMC,MAAM,GAAGhE,mBAAmB,KAAKyC,QAAvC;AACA,QAAMwB,MAAM,GAAGnF,MAAM,CACpBG,cADoB,EAEpB,CAAEsC,YAAF,SAA4DgC,GAA5D,KAAqE;AAAA,QAArD;AAAEzB,MAAAA,KAAF;AAASoC,MAAAA,UAAT;AAAqBC,MAAAA,SAArB;AAAgCC,MAAAA;AAAhC,KAAqD;;AACpE,QAAKA,QAAQ,IAAI,CAAEJ,MAAnB,EAA4B;AAC3B,aAAOzC,YAAP;AACA;;AACD,UAAM8C,WAAW,GAAGvC,KAApB;;AACA,QAAKtD,KAAK,CAAE6F,WAAF,CAAL,KAAyB,UAAzB,IAAuCF,SAA5C,EAAwD;AACvD,aAAO5C,YAAP;AACA;;AAED,UAAM+C,UAAU,GAAG5F,GAAG,CAAEmF,WAAF,EAAeQ,WAAf,CAAtB,CAToE,CAWpE;AACA;;AACA,QACCd,GAAG,KAAK,4BAAR,KACE,OAAOe,UAAP,KAAsB,QAAtB,IAAkC,CAAER,mBADtC,CADD,EAGE;AACD,aAAOvC,YAAP;AACA;;AAED,QAAK,CAAC,CAAE2C,UAAH,IAAiB,OAAOI,UAAP,KAAsB,QAA5C,EAAuD;AACtDjB,MAAAA,MAAM,CAACkB,OAAP,CAAgBL,UAAhB,EAA6BzF,OAA7B,CAAwC+F,KAAF,IAAa;AAClD,cAAM,CAAEC,IAAF,EAAQC,IAAR,IAAiBF,KAAvB;;AAEA,YAAK,CAAE9F,GAAG,CAAE4F,UAAF,EAAc,CAAEI,IAAF,CAAd,EAAwB,KAAxB,CAAV,EAA4C;AAC3C;AACA;AACA;AACA;;AAED,cAAMC,WAAW,GAAGF,IAAI,CAAC3D,UAAL,CAAiB,IAAjB,IACjB2D,IADiB,GAEjB7F,SAAS,CAAE6F,IAAF,CAFZ;AAGAlD,QAAAA,YAAY,CAACQ,IAAb,CACE,GAAG4C,WAAa,KAAKlE,iBAAiB,CACtC/B,GAAG,CAAE4F,UAAF,EAAc,CAAEI,IAAF,CAAd,CADmC,CAEpC,EAHJ;AAKA,OAjBD;AAkBA,KAnBD,MAmBO,IAAKhG,GAAG,CAAEmF,WAAF,EAAeQ,WAAf,EAA4B,KAA5B,CAAR,EAA8C;AACpD,YAAMM,WAAW,GAAGpB,GAAG,CAACzC,UAAJ,CAAgB,IAAhB,IACjByC,GADiB,GAEjB3E,SAAS,CAAE2E,GAAF,CAFZ;AAGAhC,MAAAA,YAAY,CAACQ,IAAb,CACE,GAAG4C,WAAa,KAAKlE,iBAAiB,CACtC/B,GAAG,CAAEmF,WAAF,EAAeQ,WAAf,CADmC,CAEpC,EAHJ;AAKA;;AAED,WAAO9C,YAAP;AACA,GArDmB,EAsDpB,EAtDoB,CAArB,CAFC,CA2DD;AACA;;AACA,QAAMqD,UAAU,GAAGpF,WAAW,CAAEqE,WAAF,CAA9B;AACAe,EAAAA,UAAU,CAACnG,OAAX,CAAsBoG,IAAF,IAAY;AAAA;;AAC/B;AACA,QACCb,MAAM,IACNF,mBADA,IAEAe,IAAI,CAACtB,GAAL,CAASzC,UAAT,CAAqB,SAArB,CAHD,EAIE;AACD;AACA;;AACD,UAAM6D,WAAW,GAAGE,IAAI,CAACtB,GAAL,CAASzC,UAAT,CAAqB,IAArB,IACjB+D,IAAI,CAACtB,GADY,GAEjB3E,SAAS,CAAEiG,IAAI,CAACtB,GAAP,CAFZ;AAIA,QAAIuB,SAAS,GAAGD,IAAI,CAAC/C,KAArB;;AACA,QAAK,OAAOgD,SAAP,KAAqB,QAArB,kBAAiCA,SAAjC,uCAAiC,WAAWC,GAAjD,EAAuD;AAAA;;AACtD,YAAMC,OAAO,GAAGF,SAAS,CAACC,GAAV,CAAc7D,KAAd,CAAqB,GAArB,CAAhB;AACA4D,MAAAA,SAAS,GAAGpG,GAAG,CAAEqF,IAAF,EAAQiB,OAAR,CAAf,CAFsD,CAGtD;AACA;;AACA,UAAK,CAAEF,SAAF,IAAe,CAAC,iBAAEA,SAAF,wCAAE,YAAWC,GAAb,CAArB,EAAwC;AACvC;AACA;AACD;;AAEDd,IAAAA,MAAM,CAAClC,IAAP,CAAc,GAAG4C,WAAa,KAAKG,SAAW,EAA9C;AACA,GAzBD;AA2BA,SAAOb,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASgB,eAAT,QAOH;AAAA;;AAAA,MAP6B;AAChClB,IAAAA,IADgC;AAEhCmB,IAAAA,KAFgC;AAGhCzC,IAAAA,QAHgC;AAIhC0C,IAAAA,kBAJgC;AAKhCC,IAAAA,qBALgC;AAMhCC,IAAAA;AANgC,GAO7B;AACH,MAAIC,OAAO,GAAG,EAAd;AACA,MAAIC,QAAQ,GAAGJ,kBAAkB,GAC9BvF,cAAc,CAAEsF,KAAF,aAAEA,KAAF,yCAAEA,KAAK,CAAE3E,OAAT,mDAAE,eAAgBiF,QAAlB,CADgB,GAE9B,EAFH,CAFG,CAMH;AACA;;AACA,MAAKJ,qBAAL,EAA6B;AAC5B,QAAK3C,QAAQ,KAAKzC,mBAAlB,EAAwC;AACvCuF,MAAAA,QAAQ,GAAG,CAAEA,QAAF,GAAa,OAAb,GAAuBA,QAAlC;AACA,KAFD,MAEO,IAAK,CAAEJ,kBAAF,IAAwBE,gBAA7B,EAAgD;AACtDE,MAAAA,QAAQ,GAAGF,gBAAX;AACA;AACD;;AAED,MAAKE,QAAQ,IAAIxB,IAAJ,aAAIA,IAAJ,iCAAIA,IAAI,CAAE0B,QAAV,oEAAI,eAAgBC,MAApB,kDAAI,sBAAwBC,WAAzC,EAAuD;AACtDtC,IAAAA,MAAM,CAACuC,MAAP,CAAe7B,IAAI,CAAC0B,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkDlH,OAAlD,CACC,SAA0C;AAAA,UAAxC;AAAEoH,QAAAA,SAAF;AAAapB,QAAAA,IAAb;AAAmBqB,QAAAA;AAAnB,OAAwC;;AACzC;AACA,UAAK,CAAEX,kBAAF,IAAwB,cAAcV,IAA3C,EAAkD;AACjD;AACA;;AAED,UAAKqB,aAAL,aAAKA,aAAL,eAAKA,aAAa,CAAE7E,MAApB,EAA6B;AAC5B6E,QAAAA,aAAa,CAACrH,OAAd,CAAyBsH,YAAF,IAAoB;AAC1C,gBAAMxE,YAAY,GAAG,EAArB;;AAEA,cAAKwE,YAAY,CAACC,KAAlB,EAA0B;AACzB3C,YAAAA,MAAM,CAACkB,OAAP,CAAgBwB,YAAY,CAACC,KAA7B,EAAqCvH,OAArC,CACC,SAAiC;AAAA,kBAA/B,CAAEkG,WAAF,EAAesB,QAAf,CAA+B;AAChC1E,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAG4C,WAAa,KAChBsB,QAAQ,GAAGA,QAAH,GAAcV,QACtB,EAHF;AAKA,aAPF;AASA;;AAED,cAAKhE,YAAY,CAACN,MAAlB,EAA2B;AAC1B,gBAAIiF,gBAAgB,GAAG,EAAvB;;AAEA,gBAAK,CAAEf,kBAAP,EAA4B;AAC3B;AACAe,cAAAA,gBAAgB,GACfzD,QAAQ,KAAKzC,mBAAb,GACI,WAAW6F,SAAW,GACvB,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEtD,QAAd,KAA0B,EACzB,GAHJ,GAII,UAAUA,QAAU,IAAIoD,SAAW,GACpC,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEtD,QAAd,KAA0B,EACzB,GAPL;AAQA,aAVD,MAUO;AACNyD,cAAAA,gBAAgB,GACfzD,QAAQ,KAAKzC,mBAAb,GACI,GAAGyC,QAAU,KAAKoD,SAAW,GAC9B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEtD,QAAd,KAA0B,EACzB,EAHJ,GAII,GAAGA,QAAU,IAAIoD,SAAW,GAC7B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEtD,QAAd,KAA0B,EACzB,EAPL;AAQA;;AACD6C,YAAAA,OAAO,IAAK,GAAGY,gBAAkB,MAAM3E,YAAY,CAACJ,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SA1CD;AA2CA;AACD,KApDF,EADsD,CAuDtD;;AACA,QAAKsB,QAAQ,KAAKzC,mBAAb,IAAoCmF,kBAAzC,EAA8D;AAC7DG,MAAAA,OAAO,IAAK,GAAG7C,QAAU,8BAA8B8C,QAAU,KAAjE;AACA;AACD,GA3EE,CA6EH;;;AACA,MACC9C,QAAQ,KAAKzC,mBAAb,IACA+D,IADA,aACAA,IADA,kCACAA,IAAI,CAAE0B,QADN,qEACA,gBAAgBC,MADhB,kDACA,sBAAwBC,WAFzB,EAGE;AACD,UAAMQ,iBAAiB,GAAG,CAAE,OAAF,EAAW,MAAX,EAAmB,MAAnB,CAA1B;AACA9C,IAAAA,MAAM,CAACuC,MAAP,CAAe7B,IAAI,CAAC0B,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkDlH,OAAlD,CACC,SAA8C;AAAA,UAA5C;AAAEoH,QAAAA,SAAF;AAAaO,QAAAA,WAAb;AAA0BC,QAAAA;AAA1B,OAA4C;;AAC7C,UACCD,WAAW,IACXD,iBAAiB,CAACG,QAAlB,CAA4BF,WAA5B,CAFD,EAGE;AACDd,QAAAA,OAAO,IAAK,GAAG7C,QAAU,KAAKoD,SAAW,cAAcO,WAAa,KAApE;AACA;;AAED,UAAKC,UAAL,aAAKA,UAAL,eAAKA,UAAU,CAAEpF,MAAjB,EAA0B;AACzBoF,QAAAA,UAAU,CAAC5H,OAAX,CAAsB8H,SAAF,IAAiB;AACpC,gBAAMhF,YAAY,GAAG,EAArB;;AAEA,cAAKgF,SAAS,CAACP,KAAf,EAAuB;AACtB3C,YAAAA,MAAM,CAACkB,OAAP,CAAgBgC,SAAS,CAACP,KAA1B,EAAkCvH,OAAlC,CACC,UAAiC;AAAA,kBAA/B,CAAEkG,WAAF,EAAesB,QAAf,CAA+B;AAChC1E,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAG4C,WAAa,KAAKsB,QAAU,EADjC;AAGA,aALF;AAOA;;AAED,cAAK1E,YAAY,CAACN,MAAlB,EAA2B;AAC1B,kBAAMiF,gBAAgB,GAAI,GAAGzD,QAAU,KAAKoD,SAAW,GACtD,CAAAU,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAE9D,QAAX,KAAuB,EACvB,EAFD;AAGA6C,YAAAA,OAAO,IAAK,GAAGY,gBAAkB,MAAM3E,YAAY,CAACJ,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SArBD;AAsBA;AACD,KAjCF;AAmCA;;AAED,SAAOmE,OAAP;AACA;AAED,OAAO,MAAMkB,kBAAkB,GAAG,CAAEzC,IAAF,EAAQ0C,cAAR,KAA4B;AAAA;;AAC7D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAE3C,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAE4C,MAAR,CAAL,EAAsB;AACrB,WAAOD,KAAP;AACA;;AAED,QAAME,aAAa,GAAKC,cAAF,IACrBhI,MAAM,CAAEgI,cAAF,EAAkB,CAAE/E,KAAF,EAASyB,GAAT,KACvB,CAAE,QAAF,EAAY,OAAZ,EAAqB,SAArB,EAAgC,YAAhC,EAA8C,QAA9C,EAAyD+C,QAAzD,CACC/C,GADD,CADK,CADP,CAP6D,CAc7D;;;AACA,QAAMoD,MAAM,GAAGC,aAAa,CAAE7C,IAAI,CAAC4C,MAAP,CAA5B;;AACA,MAAK,CAAC,CAAEA,MAAR,EAAiB;AAChBD,IAAAA,KAAK,CAAC3E,IAAN,CAAY;AACX4E,MAAAA,MADW;AAEXlE,MAAAA,QAAQ,EAAEzC;AAFC,KAAZ;AAIA;;AAEDvB,EAAAA,OAAO,CAAEU,QAAF,EAAY,CAAEsD,QAAF,EAAYgC,IAAZ,KAAsB;AAAA;;AACxC,QAAK,CAAC,kBAAEV,IAAI,CAAC4C,MAAP,yCAAE,aAAaG,QAAb,CAAuBrC,IAAvB,CAAF,CAAN,EAAwC;AAAA;;AACvCiC,MAAAA,KAAK,CAAC3E,IAAN,CAAY;AACX4E,QAAAA,MAAM,mBAAE5C,IAAI,CAAC4C,MAAP,kDAAE,cAAaG,QAAb,CAAuBrC,IAAvB,CADG;AAEXhC,QAAAA;AAFW,OAAZ;AAIA;AACD,GAPM,CAAP,CAvB6D,CAgC7D;;AACAhE,EAAAA,OAAO,kBAAEsF,IAAI,CAAC4C,MAAP,kDAAE,cAAaI,MAAf,EAAuB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AAAA;;AACpD,UAAMpD,WAAW,GAAG+C,aAAa,CAAEI,IAAF,CAAjC;;AACA,QAAK,CAAC,CAAEnD,WAAH,IAAkB,CAAC,EAAE4C,cAAF,aAAEA,cAAF,wCAAEA,cAAc,CAAIQ,SAAJ,CAAhB,kDAAE,sBAA+BxE,QAAjC,CAAxB,EAAoE;AACnEiE,MAAAA,KAAK,CAAC3E,IAAN,CAAY;AACXmF,QAAAA,eAAe,EAAET,cAAc,CAAEQ,SAAF,CAAd,CAA4BC,eADlC;AAEX7B,QAAAA,gBAAgB,EAAEoB,cAAc,CAAEQ,SAAF,CAAd,CAA4B5B,gBAFnC;AAGX8B,QAAAA,gBAAgB,EAAEV,cAAc,CAAEQ,SAAF,CAAd,CAA4BE,gBAHnC;AAIX1E,QAAAA,QAAQ,EAAEgE,cAAc,CAAEQ,SAAF,CAAd,CAA4BxE,QAJ3B;AAKXkE,QAAAA,MAAM,EAAE9C,WALG;AAMXuD,QAAAA,gBAAgB,EAAEX,cAAc,CAAEQ,SAAF,CAAd,CAA4BG;AANnC,OAAZ;AAQA;;AAED3I,IAAAA,OAAO,CAAEuI,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEF,QAAR,EAAkB,CAAEhF,KAAF,EAASuF,WAAT,KAA0B;AAClD,UACC,CAAC,CAAEvF,KAAH,IACA,CAAC,EAAE2E,cAAF,aAAEA,cAAF,eAAEA,cAAc,CAAIQ,SAAJ,CAAhB,CADD,IAEA,CAAC,EAAE9H,QAAF,aAAEA,QAAF,eAAEA,QAAQ,CAAIkI,WAAJ,CAAV,CAHF,EAIE;AACDX,QAAAA,KAAK,CAAC3E,IAAN,CAAY;AACX4E,UAAAA,MAAM,EAAE7E,KADG;AAEXW,UAAAA,QAAQ,EAAEgE,cAAc,CAAEQ,SAAF,CAAd,CAA4BxE,QAA5B,CACRvB,KADQ,CACD,GADC,EAERsB,GAFQ,CAED8E,GAAF,IAAW;AAChB,kBAAMC,gBAAgB,GACrBpI,QAAQ,CAAEkI,WAAF,CAAR,CAAwBnG,KAAxB,CAA+B,GAA/B,CADD;AAEA,mBAAOqG,gBAAgB,CAAC/E,GAAjB,CACJgF,eAAF,IACCF,GAAG,GAAG,GAAN,GAAYE,eAFP,CAAP;AAIA,WATQ,EAURrG,IAVQ,CAUF,GAVE;AAFC,SAAZ;AAcA;AACD,KArBM,CAAP;AAsBA,GAnCM,CAAP;AAqCA,SAAOuF,KAAP;AACA,CAvEM;AAyEP,OAAO,MAAMe,oBAAoB,GAAG,CAAE1D,IAAF,EAAQ0C,cAAR,KAA4B;AAAA;;AAC/D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAE3C,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAE0B,QAAR,CAAL,EAAwB;AACvB,WAAOiB,KAAP;AACA;;AAED,QAAMgB,WAAW,GAAKb,cAAF,IAAsB;AACzC,UAAMc,OAAO,GAAG,EAAhB;AACA5H,IAAAA,eAAe,CAACtB,OAAhB,CAAyB,UAAgB;AAAA,UAAd;AAAE+C,QAAAA;AAAF,OAAc;AACxC,YAAMM,KAAK,GAAGpD,GAAG,CAAEmI,cAAF,EAAkBrF,IAAlB,EAAwB,KAAxB,CAAjB;;AACA,UAAKM,KAAK,KAAK,KAAf,EAAuB;AACtB/C,QAAAA,GAAG,CAAE4I,OAAF,EAAWnG,IAAX,EAAiBM,KAAjB,CAAH;AACA;AACD,KALD;AAMA,WAAO6F,OAAP;AACA,GATD,CAP+D,CAkB/D;;;AACA,QAAMA,OAAO,GAAGD,WAAW,CAAE3D,IAAI,CAAC0B,QAAP,CAA3B;AACA,QAAMmC,MAAM,sBAAG7D,IAAI,CAAC0B,QAAR,oDAAG,gBAAemC,MAA9B;;AACA,MAAK,CAAEjJ,OAAO,CAAEgJ,OAAF,CAAT,IAAwB,CAAC,CAAEC,MAAhC,EAAyC;AACxClB,IAAAA,KAAK,CAAC3E,IAAN,CAAY;AACX4F,MAAAA,OADW;AAEXC,MAAAA,MAFW;AAGXnF,MAAAA,QAAQ,EAAEzC;AAHC,KAAZ;AAKA,GA3B8D,CA6B/D;;;AACAvB,EAAAA,OAAO,oBAAEsF,IAAI,CAAC0B,QAAP,oDAAE,gBAAesB,MAAjB,EAAyB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AACtD,UAAM5F,YAAY,GAAGqG,WAAW,CAAEV,IAAF,CAAhC;AACA,UAAMa,WAAW,GAAGb,IAAI,CAACY,MAAzB;;AACA,QAAK,CAAEjJ,OAAO,CAAE0C,YAAF,CAAT,IAA6B,CAAC,CAAEwG,WAArC,EAAmD;AAClDnB,MAAAA,KAAK,CAAC3E,IAAN,CAAY;AACX4F,QAAAA,OAAO,EAAEtG,YADE;AAEXuG,QAAAA,MAAM,EAAEC,WAFG;AAGXpF,QAAAA,QAAQ,EAAEgE,cAAc,CAAEQ,SAAF,CAAd,CAA4BxE;AAH3B,OAAZ;AAKA;AACD,GAVM,CAAP;AAYA,SAAOiE,KAAP;AACA,CA3CM;AA6CP,OAAO,MAAMoB,kBAAkB,GAAG,CAAE/D,IAAF,EAAQ0C,cAAR,KAA4B;AAC7D,QAAMhB,QAAQ,GAAGgC,oBAAoB,CAAE1D,IAAF,EAAQ0C,cAAR,CAArC;AACA,MAAInB,OAAO,GAAG,EAAd;AACAG,EAAAA,QAAQ,CAAChH,OAAT,CAAkB,UAAqC;AAAA,QAAnC;AAAEkJ,MAAAA,OAAF;AAAWC,MAAAA,MAAX;AAAmBnF,MAAAA;AAAnB,KAAmC;AACtD,UAAMlB,YAAY,GAAGH,sBAAsB,CAAEuG,OAAF,EAAW5D,IAAX,aAAWA,IAAX,uBAAWA,IAAI,CAAE0B,QAAjB,CAA3C;AACA,UAAMsC,WAAW,GAAG/E,WAAW,CAAE4E,MAAF,EAAU,gBAAV,EAA4B,IAA5B,CAA/B;;AACA,QAAKG,WAAW,CAAC9G,MAAZ,GAAqB,CAA1B,EAA8B;AAC7BM,MAAAA,YAAY,CAACQ,IAAb,CAAmB,GAAGgG,WAAtB;AACA;;AAED,QAAKxG,YAAY,CAACN,MAAb,GAAsB,CAA3B,EAA+B;AAC9BqE,MAAAA,OAAO,GAAGA,OAAO,GAAI,GAAG7C,QAAU,IAAIlB,YAAY,CAACJ,IAAb,CAAmB,GAAnB,CAA0B,IAAhE;AACA;AACD,GAVD;AAYA,SAAOmE,OAAP;AACA,CAhBM;AAkBP,OAAO,MAAM0C,QAAQ,GAAG,UACvBjE,IADuB,EAEvB0C,cAFuB,EAGvBtB,kBAHuB,EAIvBC,qBAJuB,EAMnB;AAAA;;AAAA,MADJ6C,mBACI,uEADkB,KAClB;AACJ,QAAMC,eAAe,GAAG1B,kBAAkB,CAAEzC,IAAF,EAAQ0C,cAAR,CAA1C;AACA,QAAM0B,iBAAiB,GAAGV,oBAAoB,CAAE1D,IAAF,EAAQ0C,cAAR,CAA9C;AACA,QAAM3C,mBAAmB,GAAGC,IAAH,aAAGA,IAAH,0CAAGA,IAAI,CAAE0B,QAAT,oDAAG,gBAAgB2C,6BAA5C;AACA,QAAM;AAAEC,IAAAA,WAAF;AAAeC,IAAAA;AAAf,MAA4B,CAAAvE,IAAI,SAAJ,IAAAA,IAAI,WAAJ,+BAAAA,IAAI,CAAE0B,QAAN,oEAAgBC,MAAhB,KAA0B,EAA5D;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,MAAIJ,OAAO,GAAG,kBAAd;;AAEA,MAAK+C,WAAL,EAAmB;AAClB/C,IAAAA,OAAO,IAAK,uCAAuC+C,WAAa,GAAhE;AACA;;AAED,MAAKC,QAAL,EAAgB;AACfhD,IAAAA,OAAO,IAAK,oCAAoCgD,QAAU,GAA1D;AACA;;AAED,MAAKxE,mBAAL,EAA2B;AAC1BwB,IAAAA,OAAO,IACN,6pBADD;AAEA;;AAEDA,EAAAA,OAAO,IAAI,GAAX;AAEA4C,EAAAA,eAAe,CAACzJ,OAAhB,CACC,UAOO;AAAA,QAPL;AACDgE,MAAAA,QADC;AAEDyE,MAAAA,eAFC;AAGDP,MAAAA,MAHC;AAIDtB,MAAAA,gBAJC;AAKD8B,MAAAA,gBALC;AAMDC,MAAAA;AANC,KAOK;;AACN;AACA;AACA,QAAKA,gBAAL,EAAwB;AACvB/D,MAAAA,MAAM,CAACkB,OAAP,CAAgB6C,gBAAhB,EAAmC3I,OAAnC,CACC,UAAwC;AAAA,YAAtC,CAAE8J,WAAF,EAAeC,eAAf,CAAsC;;AACvC,YAAK7B,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAI4B,WAAJ,CAAX,EAA+B;AAC9B,gBAAME,aAAa,GAAG;AACrB,aAAEF,WAAF,GAAiB5B,MAAM,CAAE4B,WAAF;AADF,WAAtB;AAGA,gBAAMG,mBAAmB,GACxB9E,qBAAqB,CAAE6E,aAAF,CADtB;AAEA,iBAAO9B,MAAM,CAAE4B,WAAF,CAAb;;AAEA,cAAK,CAAC,CAAEG,mBAAmB,CAACzH,MAA5B,EAAqC;AACpCqE,YAAAA,OAAO,GACNA,OAAO,GACN,GAAGkD,eAAiB,IAAIE,mBAAmB,CAACvH,IAApB,CACxB,GADwB,CAEtB,IAJJ;AAKA;AACD;AACD,OAlBF;AAoBA;;AAED,UAAMwH,aAAa,GAAG,EAAtB;;AACA,QAAKhC,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAEhE,MAAb,EAAsB;AACrBgG,MAAAA,aAAa,CAAChG,MAAd,GAAuBgE,MAAM,CAAChE,MAA9B;AACA,aAAOgE,MAAM,CAAChE,MAAd;AACA,KA9BK,CAgCN;;;AACA,QAAKuE,eAAL,EAAuB;AACtB,YAAM0B,mBAAmB,GACxBhF,qBAAqB,CAAE+E,aAAF,CADtB;;AAEA,UAAKC,mBAAmB,CAAC3H,MAApB,GAA6B,CAAlC,EAAsC;AACrCqE,QAAAA,OAAO,GACNA,OAAO,GACN,GAAG4B,eAAiB,IAAI0B,mBAAmB,CAACzH,IAApB,CACxB,GADwB,CAEtB,IAJJ;AAKA;AACD,KA3CK,CA6CN;;;AACA,QACC,CAAE8G,mBAAF,KACEjI,mBAAmB,KAAKyC,QAAxB,IAAoC0E,gBADtC,CADD,EAGE;AACD7B,MAAAA,OAAO,IAAIL,eAAe,CAAE;AAC3BlB,QAAAA,IAD2B;AAE3BmB,QAAAA,KAAK,EAAEyB,MAFoB;AAG3BlE,QAAAA,QAH2B;AAI3B0C,QAAAA,kBAJ2B;AAK3BC,QAAAA,qBAL2B;AAM3BC,QAAAA;AAN2B,OAAF,CAA1B;AAQA,KA1DK,CA4DN;;;AACA,UAAM9D,YAAY,GAAGqC,qBAAqB,CACzC+C,MADyC,EAEzClE,QAFyC,EAGzCqB,mBAHyC,EAIzCC,IAJyC,CAA1C;;AAMA,QAAKxC,YAAL,aAAKA,YAAL,eAAKA,YAAY,CAAEN,MAAnB,EAA4B;AAC3BqE,MAAAA,OAAO,GACNA,OAAO,GAAI,GAAG7C,QAAU,IAAIlB,YAAY,CAACJ,IAAb,CAAmB,GAAnB,CAA0B,IADvD;AAEA,KAtEK,CAwEN;;;AACA,UAAM0H,oBAAoB,GAAGxF,MAAM,CAACkB,OAAP,CAAgBoC,MAAhB,EAAyBhE,MAAzB,CAC5B;AAAA,UAAE,CAAEY,GAAF,CAAF;AAAA,aAAeA,GAAG,CAACzC,UAAJ,CAAgB,GAAhB,CAAf;AAAA,KAD4B,CAA7B;;AAIA,QAAK+H,oBAAL,aAAKA,oBAAL,eAAKA,oBAAoB,CAAE5H,MAA3B,EAAoC;AACnC4H,MAAAA,oBAAoB,CAACpK,OAArB,CACC,UAAkC;AAAA,YAAhC,CAAEqK,SAAF,EAAaC,WAAb,CAAgC;AACjC,cAAMC,kBAAkB,GACvBpF,qBAAqB,CAAEmF,WAAF,CADtB;;AAGA,YAAK,EAAEC,kBAAF,aAAEA,kBAAF,eAAEA,kBAAkB,CAAE/H,MAAtB,CAAL,EAAoC;AACnC;AACA,SANgC,CAQjC;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,cAAMgI,SAAS,GAAGxG,QAAQ,CACxBvB,KADgB,CACT,GADS,EAEhBsB,GAFgB,CAET8E,GAAF,IAAWA,GAAG,GAAGwB,SAFN,EAGhB3H,IAHgB,CAGV,GAHU,CAAlB;;AAKA,cAAM+H,UAAU,GAAI,GAAGD,SAAW,IAAID,kBAAkB,CAAC7H,IAAnB,CACrC,GADqC,CAEnC,IAFH;AAIAmE,QAAAA,OAAO,GAAGA,OAAO,GAAG4D,UAApB;AACA,OA1BF;AA4BA;AACD,GAnHF;AAsHA;;AACA5D,EAAAA,OAAO,GACNA,OAAO,GACP,kEAFD;AAGAA,EAAAA,OAAO,GACNA,OAAO,GACP,mEAFD;AAGAA,EAAAA,OAAO,GACNA,OAAO,GACP,oGAFD;;AAIA,MAAKH,kBAAL,EAA0B;AAAA;;AACzB;AACA,UAAMI,QAAQ,GACb3F,cAAc,CAAEmE,IAAF,aAAEA,IAAF,wCAAEA,IAAI,CAAE4C,MAAR,2EAAE,cAAcpG,OAAhB,0DAAE,sBAAuBiF,QAAzB,CAAd,IAAqD,OADtD;AAEAF,IAAAA,OAAO,GACNA,OAAO,GACP,qEAFD;AAGAA,IAAAA,OAAO,GACNA,OAAO,GACN,iDAAiDC,QAAU,KAF7D;AAGA;;AAED4C,EAAAA,iBAAiB,CAAC1J,OAAlB,CAA2B,UAA6B;AAAA,QAA3B;AAAEgE,MAAAA,QAAF;AAAYkF,MAAAA;AAAZ,KAA2B;;AACvD,QAAK3H,mBAAmB,KAAKyC,QAA7B,EAAwC;AACvC;AACAA,MAAAA,QAAQ,GAAG,EAAX;AACA;;AAED,UAAMN,OAAO,GAAGF,iBAAiB,CAAEQ,QAAF,EAAYkF,OAAZ,CAAjC;;AACA,QAAK,CAAEhJ,OAAO,CAAEwD,OAAF,CAAd,EAA4B;AAC3BmD,MAAAA,OAAO,GAAGA,OAAO,GAAGnD,OAApB;AACA;AACD,GAVD;AAYA,SAAOmD,OAAP;AACA,CA/LM;AAiMP,OAAO,SAAS6D,YAAT,CAAuBpF,IAAvB,EAA6B0C,cAA7B,EAA8C;AACpD,QAAM0B,iBAAiB,GAAGV,oBAAoB,CAAE1D,IAAF,EAAQ0C,cAAR,CAA9C;AACA,SAAO0B,iBAAiB,CAACrF,OAAlB,CAA2B,UAAmB;AAAA,QAAjB;AAAE6E,MAAAA;AAAF,KAAiB;AACpD,WAAOjF,oBAAoB,CAAEiF,OAAF,CAA3B;AACA,GAFM,CAAP;AAGA;AAED,OAAO,MAAMyB,iBAAiB,GAAKC,UAAF,IAAkB;AAClD,QAAMjG,MAAM,GAAG,EAAf;AACAiG,EAAAA,UAAU,CAAC5K,OAAX,CAAsB6K,SAAF,IAAiB;AAAA;;AACpC,UAAM7E,IAAI,GAAG6E,SAAS,CAAC7E,IAAvB;AACA,UAAMhC,QAAQ,4BACb6G,SADa,aACbA,SADa,8CACbA,SAAS,CAAEC,QADE,wDACb,oBAAqBC,sBADR,yEAEb,eAAe/E,IAAI,CAAChB,OAAL,CAAc,OAAd,EAAuB,EAAvB,EAA4BA,OAA5B,CAAqC,GAArC,EAA0C,GAA1C,CAFhB;AAGA,UAAMyD,eAAe,4BACpBoC,SADoB,aACpBA,SADoB,+CACpBA,SAAS,CAAEC,QADS,kFACpB,qBAAqBjJ,KADD,0DACpB,sBAA4BmJ,qBADR,yEACiC,IADtD;AAEA,UAAMtC,gBAAgB,GAAG,CAAC,EAAEmC,SAAF,aAAEA,SAAF,uCAAEA,SAAS,CAAEC,QAAb,iDAAE,qBAAqBG,oBAAvB,CAA1B;AACA,UAAMrE,gBAAgB,GACrBiE,SADqB,aACrBA,SADqB,+CACrBA,SAAS,CAAEC,QADU,kFACrB,qBAAqBhJ,OADA,oFACrB,sBAA8BiF,QADT,2DACrB,uBAAwCmE,qBADzC,CARoC,CAWpC;;AACA,UAAMvC,gBAAgB,GAAG,EAAzB;AACA/D,IAAAA,MAAM,CAACkB,OAAP,CAAgBnE,qCAAhB,EAAwD3B,OAAxD,CACC,UAAmC;AAAA;;AAAA,UAAjC,CAAEmL,UAAF,EAAcrB,WAAd,CAAiC;AAClC,YAAMC,eAAe,GACpBc,SADoB,aACpBA,SADoB,+CACpBA,SAAS,CAAEC,QADS,kFACpB,qBAAuBK,UAAvB,CADoB,0DACpB,sBAAqCJ,sBADtC;;AAGA,UAAKhB,eAAL,EAAuB;AACtBpB,QAAAA,gBAAgB,CAAEmB,WAAF,CAAhB,GAAkCtI,aAAa,CAC9CwC,QAD8C,EAE9C+F,eAF8C,CAA/C;AAIA;AACD,KAXF;AAcApF,IAAAA,MAAM,CAAEqB,IAAF,CAAN,GAAiB;AAChByC,MAAAA,eADgB;AAEhB7B,MAAAA,gBAFgB;AAGhB+B,MAAAA,gBAAgB,EAAE/D,MAAM,CAACC,IAAP,CAAa8D,gBAAb,EAAgCnG,MAAhC,GACfmG,gBADe,GAEfyC,SALa;AAMhB1C,MAAAA,gBANgB;AAOhB1C,MAAAA,IAPgB;AAQhBhC,MAAAA;AARgB,KAAjB;AAUA,GArCD;AAuCA,SAAOW,MAAP;AACA,CA1CM;AA4CP,OAAO,SAAS0G,qBAAT,GAAiC;AACvC,QAAM;AAAEC,IAAAA,MAAM,EAAEC;AAAV,MAA2B1K,UAAU,CAAEY,mBAAF,CAA3C;AACA,QAAM,CAAEsF,QAAF,IAAerF,UAAU,CAAE,kBAAF,CAA/B;AACA,QAAMgF,kBAAkB,GAAGK,QAAQ,KAAK,IAAxC;AACA,QAAMJ,qBAAqB,GAAG,CAAED,kBAAhC,CAJuC,CAIa;;AACpD,QAAM8C,mBAAmB,GAAG5I,SAAS,CAAI4K,MAAF,IAAc;AACpD,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAM,CAAEnK,gBAAF,CAA9B;AACA,WAAO,CAAC,CAAEoK,WAAW,GAAGjC,mBAAxB;AACA,GAHoC,CAArC;AAKA,SAAO1I,OAAO,CAAE,MAAM;AACrB,QAAK,EAAEyK,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAErD,MAAhB,KAA0B,EAAEqD,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAEvE,QAAhB,CAA/B,EAA0D;AACzD,aAAO,EAAP;AACA;;AAED,UAAMgB,cAAc,GAAG2C,iBAAiB,CAAEhK,aAAa,EAAf,CAAxC;AACA,UAAM+K,gBAAgB,GAAGrC,kBAAkB,CAC1CkC,YAD0C,EAE1CvD,cAF0C,CAA3C;AAIA,UAAM2D,YAAY,GAAGpC,QAAQ,CAC5BgC,YAD4B,EAE5BvD,cAF4B,EAG5BtB,kBAH4B,EAI5BC,qBAJ4B,EAK5B6C,mBAL4B,CAA7B;AAOA,UAAMoC,OAAO,GAAGlB,YAAY,CAAEa,YAAF,EAAgBvD,cAAhB,CAA5B;AACA,UAAM6D,WAAW,GAAG,CACnB;AACCC,MAAAA,GAAG,EAAEJ,gBADN;AAECK,MAAAA,cAAc,EAAE;AAFjB,KADmB,EAKnB;AACCD,MAAAA,GAAG,EAAEH,YADN;AAECI,MAAAA,cAAc,EAAE;AAFjB,KALmB,CAApB;AAWA,WAAO,CAAEF,WAAF,EAAeN,YAAY,CAACvE,QAA5B,EAAsC4E,OAAtC,CAAP;AACA,GA9Ba,EA8BX,CACFlF,kBADE,EAEFC,qBAFE,EAGF4E,YAHE,EAIF/B,mBAJE,CA9BW,CAAd;AAoCA","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"]}
|