@wordpress/edit-site 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/components/add-new-template/add-custom-template-modal.js +22 -42
- package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
- package/build/components/add-new-template/new-template.js +17 -20
- package/build/components/add-new-template/new-template.js.map +1 -1
- package/build/components/add-new-template/utils.js +366 -239
- package/build/components/add-new-template/utils.js.map +1 -1
- package/build/components/block-editor/index.js +1 -3
- package/build/components/block-editor/index.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +183 -13
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +95 -17
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +31 -0
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/header/index.js +7 -6
- package/build/components/header/index.js.map +1 -1
- package/build/hooks/index.js +2 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/template-part-edit.js +86 -0
- package/build/hooks/template-part-edit.js.map +1 -0
- package/build-module/components/add-new-template/add-custom-template-modal.js +23 -43
- 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 +18 -21
- package/build-module/components/add-new-template/new-template.js.map +1 -1
- package/build-module/components/add-new-template/utils.js +365 -227
- package/build-module/components/add-new-template/utils.js.map +1 -1
- package/build-module/components/block-editor/index.js +1 -2
- package/build-module/components/block-editor/index.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +183 -14
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +94 -22
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +29 -0
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/header/index.js +8 -6
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/template-part-edit.js +67 -0
- package/build-module/hooks/template-part-edit.js.map +1 -0
- package/build-style/style-rtl.css +25 -25
- package/build-style/style.css +25 -25
- package/package.json +29 -29
- package/src/components/add-new-template/add-custom-template-modal.js +27 -45
- package/src/components/add-new-template/new-template.js +27 -64
- package/src/components/add-new-template/style.scss +20 -8
- package/src/components/add-new-template/utils.js +398 -229
- package/src/components/block-editor/index.js +0 -2
- package/src/components/global-styles/dimensions-panel.js +207 -14
- package/src/components/global-styles/hooks.js +2 -0
- package/src/components/global-styles/test/use-global-styles-output.js +64 -1
- package/src/components/global-styles/use-global-styles-output.js +100 -8
- package/src/components/global-styles/utils.js +31 -0
- package/src/components/header/index.js +9 -10
- package/src/components/header/style.scss +5 -3
- package/src/components/sidebar/style.scss +4 -0
- package/src/hooks/index.js +1 -0
- package/src/hooks/template-part-edit.js +82 -0
- package/src/style.scss +0 -1
- package/build/components/edit-template-part-menu-button/index.js +0 -90
- package/build/components/edit-template-part-menu-button/index.js.map +0 -1
- package/build-module/components/edit-template-part-menu-button/index.js +0 -72
- package/build-module/components/edit-template-part-menu-button/index.js.map +0 -1
- package/src/components/edit-template-part-menu-button/index.js +0 -82
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/hooks.js"],"names":["get","cloneDeep","set","isEqual","has","_x","useContext","useCallback","useMemo","getBlockType","__EXPERIMENTAL_PATHS_WITH_MERGE","PATHS_WITH_MERGE","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","getValueFromVariable","getPresetVariableFromValue","GlobalStylesContext","EMPTY_CONFIG","settings","styles","useGlobalStylesReset","user","config","setUserConfig","canReset","useSetting","path","blockName","source","merged","mergedConfig","base","baseConfig","userConfig","fullPath","setSetting","newValue","currentConfig","newUserConfig","pathToSet","getSettingValueForContext","name","currentPath","getSettingValue","configToUse","result","custom","theme","default","resultWithFallback","useStyle","finalPath","setStyle","ROOT_BLOCK_SUPPORTS","getSupportedGlobalStylesPanels","blockType","supportKeys","supports","spacing","blockGap","__experimentalSkipSerialization","some","spacingType","push","Object","keys","forEach","styleName","support","requiresOptOut","useColorsPerOrigin","customColors","themeColors","defaultColors","shouldDisplayDefaultColors","length","colors","useGradientsPerOrigin","customGradients","themeGradients","defaultGradients","shouldDisplayDefaultGradients","gradients"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, cloneDeep, set, isEqual, has } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\nimport { useContext, useCallback, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\t__EXPERIMENTAL_PATHS_WITH_MERGE as PATHS_WITH_MERGE,\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, getPresetVariableFromValue } from './utils';\nimport { GlobalStylesContext } from './context';\n\nconst EMPTY_CONFIG = { settings: {}, styles: {} };\n\nexport const useGlobalStylesReset = () => {\n\tconst { user: config, setUserConfig } = useContext( GlobalStylesContext );\n\tconst canReset = !! config && ! isEqual( config, EMPTY_CONFIG );\n\treturn [\n\t\tcanReset,\n\t\tuseCallback(\n\t\t\t() => setUserConfig( () => EMPTY_CONFIG ),\n\t\t\t[ setUserConfig ]\n\t\t),\n\t];\n};\n\nexport function useSetting( path, blockName, source = 'all' ) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\n\tconst fullPath = ! blockName\n\t\t? `settings.${ path }`\n\t\t: `settings.blocks.${ blockName }.${ path }`;\n\n\tconst setSetting = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) => {\n\t\t\tconst newUserConfig = cloneDeep( currentConfig );\n\t\t\tconst pathToSet = PATHS_WITH_MERGE[ path ]\n\t\t\t\t? fullPath + '.custom'\n\t\t\t\t: fullPath;\n\t\t\tset( newUserConfig, pathToSet, newValue );\n\n\t\t\treturn newUserConfig;\n\t\t} );\n\t};\n\n\tconst getSettingValueForContext = ( name ) => {\n\t\tconst currentPath = ! name\n\t\t\t? `settings.${ path }`\n\t\t\t: `settings.blocks.${ name }.${ path }`;\n\n\t\tconst getSettingValue = ( configToUse ) => {\n\t\t\tconst result = get( configToUse, currentPath );\n\t\t\tif ( PATHS_WITH_MERGE[ path ] ) {\n\t\t\t\treturn result?.custom ?? result?.theme ?? result?.default;\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tlet result;\n\t\tswitch ( source ) {\n\t\t\tcase 'all':\n\t\t\t\tresult = getSettingValue( mergedConfig );\n\t\t\t\tbreak;\n\t\t\tcase 'user':\n\t\t\t\tresult = getSettingValue( userConfig );\n\t\t\t\tbreak;\n\t\t\tcase 'base':\n\t\t\t\tresult = getSettingValue( baseConfig );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow 'Unsupported source';\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Unlike styles settings get inherited from top level settings.\n\tconst resultWithFallback =\n\t\tgetSettingValueForContext( blockName ) ?? getSettingValueForContext();\n\n\treturn [ resultWithFallback, setSetting ];\n}\n\nexport function useStyle( path, blockName, source = 'all' ) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\tconst finalPath = ! blockName\n\t\t? `styles.${ path }`\n\t\t: `styles.blocks.${ blockName }.${ path }`;\n\n\tconst setStyle = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) => {\n\t\t\tconst newUserConfig = cloneDeep( currentConfig );\n\t\t\tset(\n\t\t\t\tnewUserConfig,\n\t\t\t\tfinalPath,\n\t\t\t\tgetPresetVariableFromValue(\n\t\t\t\t\tmergedConfig.settings,\n\t\t\t\t\tblockName,\n\t\t\t\t\tpath,\n\t\t\t\t\tnewValue\n\t\t\t\t)\n\t\t\t);\n\t\t\treturn newUserConfig;\n\t\t} );\n\t};\n\n\tlet result;\n\tswitch ( source ) {\n\t\tcase 'all':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tmergedConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( userConfig, finalPath ) ?? get( baseConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'user':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tmergedConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( userConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'base':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tbaseConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( baseConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unsupported source';\n\t}\n\n\treturn [ result, setStyle ];\n}\n\nconst ROOT_BLOCK_SUPPORTS = [\n\t'background',\n\t'backgroundColor',\n\t'color',\n\t'linkColor',\n\t'buttonColor',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'lineHeight',\n\t'textDecoration',\n\t'textTransform',\n\t'padding',\n];\n\nexport function getSupportedGlobalStylesPanels( name ) {\n\tif ( ! name ) {\n\t\treturn ROOT_BLOCK_SUPPORTS;\n\t}\n\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn [];\n\t}\n\n\tconst supportKeys = [];\n\n\t// Check for blockGap support.\n\t// Block spacing support doesn't map directly to a single style property, so needs to be handled separately.\n\t// Also, only allow `blockGap` support if serialization has not been skipped, to be sure global spacing can be applied.\n\tif (\n\t\tblockType?.supports?.spacing?.blockGap &&\n\t\tblockType?.supports?.spacing?.__experimentalSkipSerialization !==\n\t\t\ttrue &&\n\t\t! blockType?.supports?.spacing?.__experimentalSkipSerialization?.some?.(\n\t\t\t( spacingType ) => spacingType === 'blockGap'\n\t\t)\n\t) {\n\t\tsupportKeys.push( 'blockGap' );\n\t}\n\n\tObject.keys( STYLE_PROPERTY ).forEach( ( styleName ) => {\n\t\tif ( ! STYLE_PROPERTY[ styleName ].support ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Opting out means that, for certain support keys like background color,\n\t\t// blocks have to explicitly set the support value false. If the key is\n\t\t// unset, we still enable it.\n\t\tif ( STYLE_PROPERTY[ styleName ].requiresOptOut ) {\n\t\t\tif (\n\t\t\t\thas(\n\t\t\t\t\tblockType.supports,\n\t\t\t\t\tSTYLE_PROPERTY[ styleName ].support[ 0 ]\n\t\t\t\t) &&\n\t\t\t\tget(\n\t\t\t\t\tblockType.supports,\n\t\t\t\t\tSTYLE_PROPERTY[ styleName ].support\n\t\t\t\t) !== false\n\t\t\t) {\n\t\t\t\treturn supportKeys.push( styleName );\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tget(\n\t\t\t\tblockType.supports,\n\t\t\t\tSTYLE_PROPERTY[ styleName ].support,\n\t\t\t\tfalse\n\t\t\t)\n\t\t) {\n\t\t\treturn supportKeys.push( styleName );\n\t\t}\n\t} );\n\n\treturn supportKeys;\n}\n\nexport function useColorsPerOrigin( name ) {\n\tconst [ customColors ] = useSetting( 'color.palette.custom', name );\n\tconst [ themeColors ] = useSetting( 'color.palette.theme', name );\n\tconst [ defaultColors ] = useSetting( 'color.palette.default', name );\n\tconst [ shouldDisplayDefaultColors ] = useSetting( 'color.defaultPalette' );\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [ customColors, themeColors, defaultColors ] );\n}\n\nexport function useGradientsPerOrigin( name ) {\n\tconst [ customGradients ] = useSetting( 'color.gradients.custom', name );\n\tconst [ themeGradients ] = useSetting( 'color.gradients.theme', name );\n\tconst [ defaultGradients ] = useSetting( 'color.gradients.default', name );\n\tconst [ shouldDisplayDefaultGradients ] = useSetting(\n\t\t'color.defaultGradients'\n\t);\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [ customGradients, themeGradients, defaultGradients ] );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/hooks.js"],"names":["get","cloneDeep","set","isEqual","has","_x","useContext","useCallback","useMemo","getBlockType","__EXPERIMENTAL_PATHS_WITH_MERGE","PATHS_WITH_MERGE","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","getValueFromVariable","getPresetVariableFromValue","GlobalStylesContext","EMPTY_CONFIG","settings","styles","useGlobalStylesReset","user","config","setUserConfig","canReset","useSetting","path","blockName","source","merged","mergedConfig","base","baseConfig","userConfig","fullPath","setSetting","newValue","currentConfig","newUserConfig","pathToSet","getSettingValueForContext","name","currentPath","getSettingValue","configToUse","result","custom","theme","default","resultWithFallback","useStyle","finalPath","setStyle","ROOT_BLOCK_SUPPORTS","getSupportedGlobalStylesPanels","blockType","supportKeys","supports","spacing","blockGap","__experimentalSkipSerialization","some","spacingType","push","Object","keys","forEach","styleName","support","requiresOptOut","useColorsPerOrigin","customColors","themeColors","defaultColors","shouldDisplayDefaultColors","length","colors","useGradientsPerOrigin","customGradients","themeGradients","defaultGradients","shouldDisplayDefaultGradients","gradients"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, cloneDeep, set, isEqual, has } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\nimport { useContext, useCallback, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\t__EXPERIMENTAL_PATHS_WITH_MERGE as PATHS_WITH_MERGE,\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, getPresetVariableFromValue } from './utils';\nimport { GlobalStylesContext } from './context';\n\nconst EMPTY_CONFIG = { settings: {}, styles: {} };\n\nexport const useGlobalStylesReset = () => {\n\tconst { user: config, setUserConfig } = useContext( GlobalStylesContext );\n\tconst canReset = !! config && ! isEqual( config, EMPTY_CONFIG );\n\treturn [\n\t\tcanReset,\n\t\tuseCallback(\n\t\t\t() => setUserConfig( () => EMPTY_CONFIG ),\n\t\t\t[ setUserConfig ]\n\t\t),\n\t];\n};\n\nexport function useSetting( path, blockName, source = 'all' ) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\n\tconst fullPath = ! blockName\n\t\t? `settings.${ path }`\n\t\t: `settings.blocks.${ blockName }.${ path }`;\n\n\tconst setSetting = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) => {\n\t\t\tconst newUserConfig = cloneDeep( currentConfig );\n\t\t\tconst pathToSet = PATHS_WITH_MERGE[ path ]\n\t\t\t\t? fullPath + '.custom'\n\t\t\t\t: fullPath;\n\t\t\tset( newUserConfig, pathToSet, newValue );\n\n\t\t\treturn newUserConfig;\n\t\t} );\n\t};\n\n\tconst getSettingValueForContext = ( name ) => {\n\t\tconst currentPath = ! name\n\t\t\t? `settings.${ path }`\n\t\t\t: `settings.blocks.${ name }.${ path }`;\n\n\t\tconst getSettingValue = ( configToUse ) => {\n\t\t\tconst result = get( configToUse, currentPath );\n\t\t\tif ( PATHS_WITH_MERGE[ path ] ) {\n\t\t\t\treturn result?.custom ?? result?.theme ?? result?.default;\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tlet result;\n\t\tswitch ( source ) {\n\t\t\tcase 'all':\n\t\t\t\tresult = getSettingValue( mergedConfig );\n\t\t\t\tbreak;\n\t\t\tcase 'user':\n\t\t\t\tresult = getSettingValue( userConfig );\n\t\t\t\tbreak;\n\t\t\tcase 'base':\n\t\t\t\tresult = getSettingValue( baseConfig );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow 'Unsupported source';\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Unlike styles settings get inherited from top level settings.\n\tconst resultWithFallback =\n\t\tgetSettingValueForContext( blockName ) ?? getSettingValueForContext();\n\n\treturn [ resultWithFallback, setSetting ];\n}\n\nexport function useStyle( path, blockName, source = 'all' ) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\tconst finalPath = ! blockName\n\t\t? `styles.${ path }`\n\t\t: `styles.blocks.${ blockName }.${ path }`;\n\n\tconst setStyle = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) => {\n\t\t\tconst newUserConfig = cloneDeep( currentConfig );\n\t\t\tset(\n\t\t\t\tnewUserConfig,\n\t\t\t\tfinalPath,\n\t\t\t\tgetPresetVariableFromValue(\n\t\t\t\t\tmergedConfig.settings,\n\t\t\t\t\tblockName,\n\t\t\t\t\tpath,\n\t\t\t\t\tnewValue\n\t\t\t\t)\n\t\t\t);\n\t\t\treturn newUserConfig;\n\t\t} );\n\t};\n\n\tlet result;\n\tswitch ( source ) {\n\t\tcase 'all':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tmergedConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( userConfig, finalPath ) ?? get( baseConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'user':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tmergedConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( userConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tcase 'base':\n\t\t\tresult = getValueFromVariable(\n\t\t\t\tbaseConfig.settings,\n\t\t\t\tblockName,\n\t\t\t\tget( baseConfig, finalPath )\n\t\t\t);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unsupported source';\n\t}\n\n\treturn [ result, setStyle ];\n}\n\nconst ROOT_BLOCK_SUPPORTS = [\n\t'background',\n\t'backgroundColor',\n\t'color',\n\t'linkColor',\n\t'buttonColor',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'lineHeight',\n\t'textDecoration',\n\t'textTransform',\n\t'padding',\n\t'contentSize',\n\t'wideSize',\n];\n\nexport function getSupportedGlobalStylesPanels( name ) {\n\tif ( ! name ) {\n\t\treturn ROOT_BLOCK_SUPPORTS;\n\t}\n\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn [];\n\t}\n\n\tconst supportKeys = [];\n\n\t// Check for blockGap support.\n\t// Block spacing support doesn't map directly to a single style property, so needs to be handled separately.\n\t// Also, only allow `blockGap` support if serialization has not been skipped, to be sure global spacing can be applied.\n\tif (\n\t\tblockType?.supports?.spacing?.blockGap &&\n\t\tblockType?.supports?.spacing?.__experimentalSkipSerialization !==\n\t\t\ttrue &&\n\t\t! blockType?.supports?.spacing?.__experimentalSkipSerialization?.some?.(\n\t\t\t( spacingType ) => spacingType === 'blockGap'\n\t\t)\n\t) {\n\t\tsupportKeys.push( 'blockGap' );\n\t}\n\n\tObject.keys( STYLE_PROPERTY ).forEach( ( styleName ) => {\n\t\tif ( ! STYLE_PROPERTY[ styleName ].support ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Opting out means that, for certain support keys like background color,\n\t\t// blocks have to explicitly set the support value false. If the key is\n\t\t// unset, we still enable it.\n\t\tif ( STYLE_PROPERTY[ styleName ].requiresOptOut ) {\n\t\t\tif (\n\t\t\t\thas(\n\t\t\t\t\tblockType.supports,\n\t\t\t\t\tSTYLE_PROPERTY[ styleName ].support[ 0 ]\n\t\t\t\t) &&\n\t\t\t\tget(\n\t\t\t\t\tblockType.supports,\n\t\t\t\t\tSTYLE_PROPERTY[ styleName ].support\n\t\t\t\t) !== false\n\t\t\t) {\n\t\t\t\treturn supportKeys.push( styleName );\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tget(\n\t\t\t\tblockType.supports,\n\t\t\t\tSTYLE_PROPERTY[ styleName ].support,\n\t\t\t\tfalse\n\t\t\t)\n\t\t) {\n\t\t\treturn supportKeys.push( styleName );\n\t\t}\n\t} );\n\n\treturn supportKeys;\n}\n\nexport function useColorsPerOrigin( name ) {\n\tconst [ customColors ] = useSetting( 'color.palette.custom', name );\n\tconst [ themeColors ] = useSetting( 'color.palette.theme', name );\n\tconst [ defaultColors ] = useSetting( 'color.palette.default', name );\n\tconst [ shouldDisplayDefaultColors ] = useSetting( 'color.defaultPalette' );\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [ customColors, themeColors, defaultColors ] );\n}\n\nexport function useGradientsPerOrigin( name ) {\n\tconst [ customGradients ] = useSetting( 'color.gradients.custom', name );\n\tconst [ themeGradients ] = useSetting( 'color.gradients.theme', name );\n\tconst [ defaultGradients ] = useSetting( 'color.gradients.default', name );\n\tconst [ shouldDisplayDefaultGradients ] = useSetting(\n\t\t'color.defaultGradients'\n\t);\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [ customGradients, themeGradients, defaultGradients ] );\n}\n"]}
|
|
@@ -16,9 +16,17 @@ import { __unstablePresetDuotoneFilter as PresetDuotoneFilter, __experimentalGet
|
|
|
16
16
|
* Internal dependencies
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import { PRESET_METADATA, ROOT_BLOCK_SELECTOR } from './utils';
|
|
19
|
+
import { PRESET_METADATA, ROOT_BLOCK_SELECTOR, scopeSelector } from './utils';
|
|
20
20
|
import { GlobalStylesContext } from './context';
|
|
21
|
-
import { useSetting } from './hooks';
|
|
21
|
+
import { useSetting } from './hooks'; // List of block support features that can have their related styles
|
|
22
|
+
// generated under their own feature level selector rather than the block's.
|
|
23
|
+
|
|
24
|
+
const BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {
|
|
25
|
+
__experimentalBorder: 'border',
|
|
26
|
+
color: 'color',
|
|
27
|
+
spacing: 'spacing',
|
|
28
|
+
typography: 'typography'
|
|
29
|
+
};
|
|
22
30
|
|
|
23
31
|
function compileStyleValue(uncompiledValue) {
|
|
24
32
|
const VARIABLE_REFERENCE_PREFIX = 'var:';
|
|
@@ -145,7 +153,11 @@ function flattenTree() {
|
|
|
145
153
|
/**
|
|
146
154
|
* Transform given style tree into a set of style declarations.
|
|
147
155
|
*
|
|
148
|
-
* @param {Object}
|
|
156
|
+
* @param {Object} blockStyles Block styles.
|
|
157
|
+
*
|
|
158
|
+
* @param {string} selector The selector these declarations should attach to.
|
|
159
|
+
*
|
|
160
|
+
* @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.
|
|
149
161
|
*
|
|
150
162
|
* @return {Array} An array of style declarations.
|
|
151
163
|
*/
|
|
@@ -153,12 +165,21 @@ function flattenTree() {
|
|
|
153
165
|
|
|
154
166
|
function getStylesDeclarations() {
|
|
155
167
|
let blockStyles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
168
|
+
let selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
169
|
+
let useRootPaddingAlign = arguments.length > 2 ? arguments[2] : undefined;
|
|
170
|
+
const isRoot = ROOT_BLOCK_SELECTOR === selector;
|
|
156
171
|
const output = reduce(STYLE_PROPERTY, (declarations, _ref5, key) => {
|
|
157
172
|
let {
|
|
158
173
|
value,
|
|
159
174
|
properties,
|
|
160
|
-
useEngine
|
|
175
|
+
useEngine,
|
|
176
|
+
rootOnly
|
|
161
177
|
} = _ref5;
|
|
178
|
+
|
|
179
|
+
if (rootOnly && !isRoot) {
|
|
180
|
+
return declarations;
|
|
181
|
+
}
|
|
182
|
+
|
|
162
183
|
const pathToValue = value;
|
|
163
184
|
|
|
164
185
|
if (first(pathToValue) === 'elements' || useEngine) {
|
|
@@ -177,18 +198,27 @@ function getStylesDeclarations() {
|
|
|
177
198
|
return;
|
|
178
199
|
}
|
|
179
200
|
|
|
180
|
-
const cssProperty = kebabCase(name);
|
|
201
|
+
const cssProperty = name.startsWith('--') ? name : kebabCase(name);
|
|
181
202
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(styleValue, [prop]))}`);
|
|
182
203
|
});
|
|
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;
|
|
183
208
|
} else if (get(blockStyles, pathToValue, false)) {
|
|
184
209
|
const cssProperty = key.startsWith('--') ? key : kebabCase(key);
|
|
185
210
|
declarations.push(`${cssProperty}: ${compileStyleValue(get(blockStyles, pathToValue))}`);
|
|
186
211
|
}
|
|
187
212
|
|
|
188
213
|
return declarations;
|
|
189
|
-
}, []);
|
|
214
|
+
}, []);
|
|
215
|
+
|
|
216
|
+
if (isRoot && useRootPaddingAlign) {
|
|
217
|
+
return output;
|
|
218
|
+
} // The goal is to move everything to server side generated engine styles
|
|
190
219
|
// This is temporary as we absorb more and more styles into the engine.
|
|
191
220
|
|
|
221
|
+
|
|
192
222
|
const extraRules = getCSSRules(blockStyles);
|
|
193
223
|
extraRules.forEach(rule => {
|
|
194
224
|
const cssProperty = rule.key.startsWith('--') ? rule.key : kebabCase(rule.key);
|
|
@@ -348,7 +378,8 @@ export const getNodesWithStyles = (tree, blockSelectors) => {
|
|
|
348
378
|
fallbackGapValue: blockSelectors[blockName].fallbackGapValue,
|
|
349
379
|
hasLayoutSupport: blockSelectors[blockName].hasLayoutSupport,
|
|
350
380
|
selector: blockSelectors[blockName].selector,
|
|
351
|
-
styles: blockStyles
|
|
381
|
+
styles: blockStyles,
|
|
382
|
+
featureSelectors: blockSelectors[blockName].featureSelectors
|
|
352
383
|
});
|
|
353
384
|
}
|
|
354
385
|
|
|
@@ -440,8 +471,11 @@ export const toCustomProperties = (tree, blockSelectors) => {
|
|
|
440
471
|
return ruleset;
|
|
441
472
|
};
|
|
442
473
|
export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGapSupport) => {
|
|
474
|
+
var _tree$settings5;
|
|
475
|
+
|
|
443
476
|
const nodesWithStyles = getNodesWithStyles(tree, blockSelectors);
|
|
444
477
|
const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
|
|
478
|
+
const useRootPaddingAlign = tree === null || tree === void 0 ? void 0 : (_tree$settings5 = tree.settings) === null || _tree$settings5 === void 0 ? void 0 : _tree$settings5.useRootPaddingAwareAlignments;
|
|
445
479
|
/*
|
|
446
480
|
* Reset default browser margin on the root body element.
|
|
447
481
|
* This is set on the root selector **before** generating the ruleset
|
|
@@ -452,14 +486,41 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
452
486
|
*/
|
|
453
487
|
|
|
454
488
|
let ruleset = 'body {margin: 0;}';
|
|
489
|
+
|
|
490
|
+
if (useRootPaddingAlign) {
|
|
491
|
+
ruleset = '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); }';
|
|
492
|
+
}
|
|
493
|
+
|
|
455
494
|
nodesWithStyles.forEach(_ref13 => {
|
|
456
495
|
let {
|
|
457
496
|
selector,
|
|
458
497
|
duotoneSelector,
|
|
459
498
|
styles,
|
|
460
499
|
fallbackGapValue,
|
|
461
|
-
hasLayoutSupport
|
|
500
|
+
hasLayoutSupport,
|
|
501
|
+
featureSelectors
|
|
462
502
|
} = _ref13;
|
|
503
|
+
|
|
504
|
+
// Process styles for block support features with custom feature level
|
|
505
|
+
// CSS selectors set.
|
|
506
|
+
if (featureSelectors) {
|
|
507
|
+
Object.entries(featureSelectors).forEach(_ref14 => {
|
|
508
|
+
let [featureName, featureSelector] = _ref14;
|
|
509
|
+
|
|
510
|
+
if (styles !== null && styles !== void 0 && styles[featureName]) {
|
|
511
|
+
const featureStyles = {
|
|
512
|
+
[featureName]: styles[featureName]
|
|
513
|
+
};
|
|
514
|
+
const featureDeclarations = getStylesDeclarations(featureStyles);
|
|
515
|
+
delete styles[featureName];
|
|
516
|
+
|
|
517
|
+
if (!!featureDeclarations.length) {
|
|
518
|
+
ruleset = ruleset + `${featureSelector}{${featureDeclarations.join(';')} }`;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
|
|
463
524
|
const duotoneStyles = {};
|
|
464
525
|
|
|
465
526
|
if (styles !== null && styles !== void 0 && styles.filter) {
|
|
@@ -491,28 +552,28 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
491
552
|
} // Process the remaining block styles (they use either normal block class or __experimentalSelector).
|
|
492
553
|
|
|
493
554
|
|
|
494
|
-
const declarations = getStylesDeclarations(styles);
|
|
555
|
+
const declarations = getStylesDeclarations(styles, selector, useRootPaddingAlign);
|
|
495
556
|
|
|
496
557
|
if (declarations !== null && declarations !== void 0 && declarations.length) {
|
|
497
558
|
ruleset = ruleset + `${selector}{${declarations.join(';')};}`;
|
|
498
559
|
} // Check for pseudo selector in `styles` and handle separately.
|
|
499
560
|
|
|
500
561
|
|
|
501
|
-
const pseudoSelectorStyles = Object.entries(styles).filter(
|
|
502
|
-
let [key] =
|
|
562
|
+
const pseudoSelectorStyles = Object.entries(styles).filter(_ref15 => {
|
|
563
|
+
let [key] = _ref15;
|
|
503
564
|
return key.startsWith(':');
|
|
504
565
|
});
|
|
505
566
|
|
|
506
567
|
if (pseudoSelectorStyles !== null && pseudoSelectorStyles !== void 0 && pseudoSelectorStyles.length) {
|
|
507
|
-
pseudoSelectorStyles.forEach(
|
|
508
|
-
let [pseudoKey, pseudoStyle] =
|
|
568
|
+
pseudoSelectorStyles.forEach(_ref16 => {
|
|
569
|
+
let [pseudoKey, pseudoStyle] = _ref16;
|
|
509
570
|
const pseudoDeclarations = getStylesDeclarations(pseudoStyle);
|
|
510
571
|
|
|
511
572
|
if (!(pseudoDeclarations !== null && pseudoDeclarations !== void 0 && pseudoDeclarations.length)) {
|
|
512
573
|
return;
|
|
513
574
|
} // `selector` maybe provided in a form
|
|
514
575
|
// where block level selectors have sub element
|
|
515
|
-
// selectors appended to them as a comma
|
|
576
|
+
// selectors appended to them as a comma separated
|
|
516
577
|
// string.
|
|
517
578
|
// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;
|
|
518
579
|
// Split and append pseudo selector to create
|
|
@@ -541,11 +602,11 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
541
602
|
ruleset = ruleset + `.wp-site-blocks > * + * { margin-block-start: ${gapValue}; }`;
|
|
542
603
|
}
|
|
543
604
|
|
|
544
|
-
nodesWithSettings.forEach(
|
|
605
|
+
nodesWithSettings.forEach(_ref17 => {
|
|
545
606
|
let {
|
|
546
607
|
selector,
|
|
547
608
|
presets
|
|
548
|
-
} =
|
|
609
|
+
} = _ref17;
|
|
549
610
|
|
|
550
611
|
if (ROOT_BLOCK_SELECTOR === selector) {
|
|
551
612
|
// Do not add extra specificity for top-level classes.
|
|
@@ -562,15 +623,14 @@ export const toStyles = (tree, blockSelectors, hasBlockGapSupport, hasFallbackGa
|
|
|
562
623
|
};
|
|
563
624
|
export function toSvgFilters(tree, blockSelectors) {
|
|
564
625
|
const nodesWithSettings = getNodesWithSettings(tree, blockSelectors);
|
|
565
|
-
return nodesWithSettings.flatMap(
|
|
626
|
+
return nodesWithSettings.flatMap(_ref18 => {
|
|
566
627
|
let {
|
|
567
628
|
presets
|
|
568
|
-
} =
|
|
629
|
+
} = _ref18;
|
|
569
630
|
return getPresetsSvgFilters(presets);
|
|
570
631
|
});
|
|
571
632
|
}
|
|
572
|
-
|
|
573
|
-
const getBlockSelectors = blockTypes => {
|
|
633
|
+
export const getBlockSelectors = blockTypes => {
|
|
574
634
|
const result = {};
|
|
575
635
|
blockTypes.forEach(blockType => {
|
|
576
636
|
var _blockType$supports$_, _blockType$supports, _blockType$supports$c, _blockType$supports2, _blockType$supports2$, _blockType$supports3, _blockType$supports4, _blockType$supports4$, _blockType$supports4$2;
|
|
@@ -579,10 +639,23 @@ const getBlockSelectors = blockTypes => {
|
|
|
579
639
|
const selector = (_blockType$supports$_ = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports = blockType.supports) === null || _blockType$supports === void 0 ? void 0 : _blockType$supports.__experimentalSelector) !== null && _blockType$supports$_ !== void 0 ? _blockType$supports$_ : '.wp-block-' + name.replace('core/', '').replace('/', '-');
|
|
580
640
|
const duotoneSelector = (_blockType$supports$c = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports2 = blockType.supports) === null || _blockType$supports2 === void 0 ? void 0 : (_blockType$supports2$ = _blockType$supports2.color) === null || _blockType$supports2$ === void 0 ? void 0 : _blockType$supports2$.__experimentalDuotone) !== null && _blockType$supports$c !== void 0 ? _blockType$supports$c : null;
|
|
581
641
|
const hasLayoutSupport = !!(blockType !== null && blockType !== void 0 && (_blockType$supports3 = blockType.supports) !== null && _blockType$supports3 !== void 0 && _blockType$supports3.__experimentalLayout);
|
|
582
|
-
const fallbackGapValue = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports4 = blockType.supports) === null || _blockType$supports4 === void 0 ? void 0 : (_blockType$supports4$ = _blockType$supports4.spacing) === null || _blockType$supports4$ === void 0 ? void 0 : (_blockType$supports4$2 = _blockType$supports4$.blockGap) === null || _blockType$supports4$2 === void 0 ? void 0 : _blockType$supports4$2.__experimentalDefault;
|
|
642
|
+
const fallbackGapValue = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports4 = blockType.supports) === null || _blockType$supports4 === void 0 ? void 0 : (_blockType$supports4$ = _blockType$supports4.spacing) === null || _blockType$supports4$ === void 0 ? void 0 : (_blockType$supports4$2 = _blockType$supports4$.blockGap) === null || _blockType$supports4$2 === void 0 ? void 0 : _blockType$supports4$2.__experimentalDefault; // For each block support feature add any custom selectors.
|
|
643
|
+
|
|
644
|
+
const featureSelectors = {};
|
|
645
|
+
Object.entries(BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS).forEach(_ref19 => {
|
|
646
|
+
var _blockType$supports5, _blockType$supports5$;
|
|
647
|
+
|
|
648
|
+
let [featureKey, featureName] = _ref19;
|
|
649
|
+
const featureSelector = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports5 = blockType.supports) === null || _blockType$supports5 === void 0 ? void 0 : (_blockType$supports5$ = _blockType$supports5[featureKey]) === null || _blockType$supports5$ === void 0 ? void 0 : _blockType$supports5$.__experimentalSelector;
|
|
650
|
+
|
|
651
|
+
if (featureSelector) {
|
|
652
|
+
featureSelectors[featureName] = scopeSelector(selector, featureSelector);
|
|
653
|
+
}
|
|
654
|
+
});
|
|
583
655
|
result[name] = {
|
|
584
656
|
duotoneSelector,
|
|
585
657
|
fallbackGapValue,
|
|
658
|
+
featureSelectors: Object.keys(featureSelectors).length ? featureSelectors : undefined,
|
|
586
659
|
hasLayoutSupport,
|
|
587
660
|
name,
|
|
588
661
|
selector
|
|
@@ -590,7 +663,6 @@ const getBlockSelectors = blockTypes => {
|
|
|
590
663
|
});
|
|
591
664
|
return result;
|
|
592
665
|
};
|
|
593
|
-
|
|
594
666
|
export function useGlobalStylesOutput() {
|
|
595
667
|
const [stylesheets, setStylesheets] = useState([]);
|
|
596
668
|
const [settings, setSettings] = useState({});
|
|
@@ -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","GlobalStylesContext","useSetting","compileStyleValue","uncompiledValue","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","variable","slice","length","split","join","getPresetsDeclarations","blockPresets","declarations","path","valueKey","valueFunc","cssVarInfix","presetByOrigin","origin","value","push","slug","getPresetsClasses","blockSelector","classes","classSuffix","propertyName","classSelectorToUse","selectorToUse","map","selector","getPresetsSvgFilters","filter","metadata","at","flatMap","preset","flattenTree","input","prefix","token","result","Object","keys","key","newKey","replace","newLeaf","newPrefix","getStylesDeclarations","blockStyles","output","properties","useEngine","pathToValue","styleValue","entries","entry","name","prop","cssProperty","extraRules","rule","getLayoutStyles","tree","style","hasBlockGapSupport","hasFallbackGapSupport","fallbackGapValue","ruleset","gapValue","spacing","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","elementName","sel","elementSelectors","elementSelector","getNodesWithSettings","pickPresets","presets","custom","blockCustom","toCustomProperties","customProps","toStyles","nodesWithStyles","nodesWithSettings","duotoneStyles","duotoneDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","_selector","pseudoRule","toSvgFilters","getBlockSelectors","blockTypes","blockType","supports","__experimentalSelector","color","__experimentalDuotone","__experimentalLayout","__experimentalDefault","useGlobalStylesOutput","stylesheets","setStylesheets","setSettings","svgFilters","setSvgFilters","merged","mergedConfig","customProperties","globalStyles","filters","css","isGlobalStyles"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,KADD,EAECC,OAFD,EAGCC,GAHD,EAICC,OAJD,EAKCC,SALD,EAMCC,MAND,EAOCC,MAPD,EAQCC,GARD,EASCC,UATD,QAUO,QAVP;AAYA;AACA;AACA;;AACA,SACCC,6BAA6B,IAAIC,cADlC,EAECC,uBAAuB,IAAIC,QAF5B,EAGCC,aAHD,QAIO,mBAJP;AAKA,SAASC,SAAT,EAAoBC,QAApB,EAA8BC,UAA9B,QAAgD,oBAAhD;AACA,SAASC,WAAT,QAA4B,yBAA5B;AACA,SACCC,6BAA6B,IAAIC,mBADlC,EAECC,4BAA4B,IAAIC,cAFjC,QAGO,yBAHP;AAKA;AACA;AACA;;AACA,SAASC,eAAT,EAA0BC,mBAA1B,QAAqD,SAArD;AACA,SAASC,mBAAT,QAAoC,WAApC;AACA,SAASC,UAAT,QAA2B,SAA3B;;AAEA,SAASC,iBAAT,CAA4BC,eAA5B,EAA8C;AAC7C,QAAMC,yBAAyB,GAAG,MAAlC;AACA,QAAMC,uCAAuC,GAAG,GAAhD;AACA,QAAMC,mCAAmC,GAAG,IAA5C;;AACA,MAAKtB,UAAU,CAAEmB,eAAF,EAAmBC,yBAAnB,CAAf,EAAgE;AAC/D,UAAMG,QAAQ,GAAGJ,eAAe,CAC9BK,KADe,CACRJ,yBAAyB,CAACK,MADlB,EAEfC,KAFe,CAERL,uCAFQ,EAGfM,IAHe,CAGTL,mCAHS,CAAjB;AAIA,WAAQ,aAAaC,QAAU,GAA/B;AACA;;AACD,SAAOJ,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASS,sBAAT,GAAqD;AAAA,MAApBC,YAAoB,uEAAL,EAAK;AACpD,SAAO/B,MAAM,CACZgB,eADY,EAEZ,CAAEgB,YAAF,WAAgE;AAAA,QAAhD;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,QAAR;AAAkBC,MAAAA,SAAlB;AAA6BC,MAAAA;AAA7B,KAAgD;AAC/D,UAAMC,cAAc,GAAGzC,GAAG,CAAEmC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiCtC,OAAjC,CAA4C2C,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyB3C,OAAzB,CAAoC4C,KAAF,IAAa;AAC9C,cAAKL,QAAL,EAAgB;AACfF,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAKtC,SAAS,CAC5CyC,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,KAAKtC,SAAS,CAC5CyC,KAAK,CAACE,IADsC,CAE1C,KAAKN,SAAS,CAAEI,KAAF,CAAW,EAH7B;AAKA;AACD,SAjBD;AAkBA;AACD,KArBD;AAuBA,WAAOP,YAAP;AACA,GA5BW,EA6BZ,EA7BY,CAAb;AA+BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASU,iBAAT,CAA4BC,aAA5B,EAA+D;AAAA,MAApBZ,YAAoB,uEAAL,EAAK;AAC9D,SAAO/B,MAAM,CACZgB,eADY,EAEZ,CAAEgB,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,GAAGzC,GAAG,CAAEmC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiCtC,OAAjC,CAA4C2C,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyB3C,OAAzB,CAAkC,SAAgB;AAAA,cAAd;AAAE8C,YAAAA;AAAF,WAAc;AACjDG,UAAAA,OAAO,CAACjD,OAAR,CAAiB,SAAqC;AAAA,gBAAnC;AAAEkD,cAAAA,WAAF;AAAeC,cAAAA;AAAf,aAAmC;AACrD,kBAAMC,kBAAkB,GAAI,QAAQjD,SAAS,CAC5C2C,IAD4C,CAE1C,IAAII,WAAa,EAFpB;AAGA,kBAAMG,aAAa,GAAGL,aAAa,CACjCf,KADoB,CACb,GADa,EACP;AADO,aAEpBqB,GAFoB,CAGlBC,QAAF,IACE,GAAGA,QAAU,GAAGH,kBAAoB,EAJlB,EAMpBlB,IANoB,CAMd,GANc,CAAtB;AAOA,kBAAMU,KAAK,GAAI,qBAAqBH,WAAa,KAAKtC,SAAS,CAC9D2C,IAD8D,CAE5D,GAFH;AAGAT,YAAAA,YAAY,IAAK,GAAGgB,aAAe,IAAIF,YAAc,KAAKP,KAAO,eAAjE;AACA,WAfD;AAgBA,SAjBD;AAkBA;AACD,KArBD;AAsBA,WAAOP,YAAP;AACA,GA/BW,EAgCZ,EAhCY,CAAb;AAkCA;;AAED,SAASmB,oBAAT,GAAmD;AAAA,MAApBpB,YAAoB,uEAAL,EAAK;AAClD,SAAOf,eAAe,CAACoC,MAAhB,EACN;AACEC,EAAAA,QAAF,IAAgBA,QAAQ,CAACpB,IAAT,CAAcqB,EAAd,CAAkB,CAAC,CAAnB,MAA2B,SAFrC,EAGLC,OAHK,CAGMF,QAAF,IAAgB;AAC1B,UAAMhB,cAAc,GAAGzC,GAAG,CAAEmC,YAAF,EAAgBsB,QAAQ,CAACpB,IAAzB,EAA+B,EAA/B,CAA1B;AACA,WAAO,CAAE,SAAF,EAAa,OAAb,EACLmB,MADK,CACKd,MAAF,IAAcD,cAAc,CAAEC,MAAF,CAD/B,EAELiB,OAFK,CAEMjB,MAAF,IACTD,cAAc,CAAEC,MAAF,CAAd,CAAyBW,GAAzB,CAAgCO,MAAF,IAC7B,cAAC,mBAAD;AACC,MAAA,MAAM,EAAGA,MADV;AAEC,MAAA,GAAG,EAAGA,MAAM,CAACf;AAFd,MADD,CAHK,CAAP;AAUA,GAfM,CAAP;AAgBA;;AAED,SAASgB,WAAT,GAAkD;AAAA,MAA5BC,KAA4B,uEAApB,EAAoB;AAAA,MAAhBC,MAAgB;AAAA,MAARC,KAAQ;AACjD,MAAIC,MAAM,GAAG,EAAb;AACAC,EAAAA,MAAM,CAACC,IAAP,CAAaL,KAAb,EAAqB/D,OAArB,CAAgCqE,GAAF,IAAW;AACxC,UAAMC,MAAM,GAAGN,MAAM,GAAG7D,SAAS,CAAEkE,GAAG,CAACE,OAAJ,CAAa,GAAb,EAAkB,GAAlB,CAAF,CAAjC;AACA,UAAMC,OAAO,GAAGT,KAAK,CAAEM,GAAF,CAArB;;AAEA,QAAKG,OAAO,YAAYL,MAAxB,EAAiC;AAChC,YAAMM,SAAS,GAAGH,MAAM,GAAGL,KAA3B;AACAC,MAAAA,MAAM,GAAG,CAAE,GAAGA,MAAL,EAAa,GAAGJ,WAAW,CAAEU,OAAF,EAAWC,SAAX,EAAsBR,KAAtB,CAA3B,CAAT;AACA,KAHD,MAGO;AACNC,MAAAA,MAAM,CAACrB,IAAP,CAAc,GAAGyB,MAAQ,KAAKE,OAAS,EAAvC;AACA;AACD,GAVD;AAWA,SAAON,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASQ,qBAAT,GAAmD;AAAA,MAAnBC,WAAmB,uEAAL,EAAK;AAClD,QAAMC,MAAM,GAAGvE,MAAM,CACpBI,cADoB,EAEpB,CAAE4B,YAAF,SAAkDgC,GAAlD,KAA2D;AAAA,QAA3C;AAAEzB,MAAAA,KAAF;AAASiC,MAAAA,UAAT;AAAqBC,MAAAA;AAArB,KAA2C;AAC1D,UAAMC,WAAW,GAAGnC,KAApB;;AACA,QAAK7C,KAAK,CAAEgF,WAAF,CAAL,KAAyB,UAAzB,IAAuCD,SAA5C,EAAwD;AACvD,aAAOzC,YAAP;AACA;;AAED,UAAM2C,UAAU,GAAG/E,GAAG,CAAE0E,WAAF,EAAeI,WAAf,CAAtB;;AAEA,QAAK,CAAC,CAAEF,UAAH,IAAiB,OAAOG,UAAP,KAAsB,QAA5C,EAAuD;AACtDb,MAAAA,MAAM,CAACc,OAAP,CAAgBJ,UAAhB,EAA6B7E,OAA7B,CAAwCkF,KAAF,IAAa;AAClD,cAAM,CAAEC,IAAF,EAAQC,IAAR,IAAiBF,KAAvB;;AAEA,YAAK,CAAEjF,GAAG,CAAE+E,UAAF,EAAc,CAAEI,IAAF,CAAd,EAAwB,KAAxB,CAAV,EAA4C;AAC3C;AACA;AACA;AACA;;AAED,cAAMC,WAAW,GAAGlF,SAAS,CAAEgF,IAAF,CAA7B;AACA9C,QAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAAK5D,iBAAiB,CACtCxB,GAAG,CAAE+E,UAAF,EAAc,CAAEI,IAAF,CAAd,CADmC,CAEpC,EAHJ;AAKA,OAfD;AAgBA,KAjBD,MAiBO,IAAKnF,GAAG,CAAE0E,WAAF,EAAeI,WAAf,EAA4B,KAA5B,CAAR,EAA8C;AACpD,YAAMM,WAAW,GAAGhB,GAAG,CAAC9D,UAAJ,CAAgB,IAAhB,IACjB8D,GADiB,GAEjBlE,SAAS,CAAEkE,GAAF,CAFZ;AAGAhC,MAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAAK5D,iBAAiB,CACtCxB,GAAG,CAAE0E,WAAF,EAAeI,WAAf,CADmC,CAEpC,EAHJ;AAKA;;AAED,WAAO1C,YAAP;AACA,GAvCmB,EAwCpB,EAxCoB,CAArB,CADkD,CA4ClD;AACA;;AACA,QAAMiD,UAAU,GAAGtE,WAAW,CAAE2D,WAAF,CAA9B;AACAW,EAAAA,UAAU,CAACtF,OAAX,CAAsBuF,IAAF,IAAY;AAC/B,UAAMF,WAAW,GAAGE,IAAI,CAAClB,GAAL,CAAS9D,UAAT,CAAqB,IAArB,IACjBgF,IAAI,CAAClB,GADY,GAEjBlE,SAAS,CAAEoF,IAAI,CAAClB,GAAP,CAFZ;AAGAO,IAAAA,MAAM,CAAC/B,IAAP,CAAc,GAAGwC,WAAa,KAAK5D,iBAAiB,CAAE8D,IAAI,CAAC3C,KAAP,CAAgB,EAApE;AACA,GALD;AAOA,SAAOgC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASY,eAAT,QAOH;AAAA;;AAAA,MAP6B;AAChCC,IAAAA,IADgC;AAEhCC,IAAAA,KAFgC;AAGhCnC,IAAAA,QAHgC;AAIhCoC,IAAAA,kBAJgC;AAKhCC,IAAAA,qBALgC;AAMhCC,IAAAA;AANgC,GAO7B;AACH,MAAIC,OAAO,GAAG,EAAd;AACA,MAAIC,QAAQ,GAAGJ,kBAAkB,GAC9BvE,cAAc,CAAEsE,KAAF,aAAEA,KAAF,yCAAEA,KAAK,CAAEM,OAAT,mDAAE,eAAgBC,QAAlB,CADgB,GAE9B,EAFH,CAFG,CAMH;AACA;;AACA,MAAKL,qBAAL,EAA6B;AAC5B,QAAKrC,QAAQ,KAAKjC,mBAAlB,EAAwC;AACvCyE,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,IAAIN,IAAJ,aAAIA,IAAJ,iCAAIA,IAAI,CAAES,QAAV,oEAAI,eAAgBC,MAApB,kDAAI,sBAAwBC,WAAzC,EAAuD;AACtDjC,IAAAA,MAAM,CAACkC,MAAP,CAAeZ,IAAI,CAACS,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkDpG,OAAlD,CACC,SAA0C;AAAA,UAAxC;AAAEsG,QAAAA,SAAF;AAAanB,QAAAA,IAAb;AAAmBoB,QAAAA;AAAnB,OAAwC;;AACzC;AACA,UAAK,CAAEZ,kBAAF,IAAwB,cAAcR,IAA3C,EAAkD;AACjD;AACA;;AAED,UAAKoB,aAAL,aAAKA,aAAL,eAAKA,aAAa,CAAEvE,MAApB,EAA6B;AAC5BuE,QAAAA,aAAa,CAACvG,OAAd,CAAyBwG,YAAF,IAAoB;AAC1C,gBAAMnE,YAAY,GAAG,EAArB;;AAEA,cAAKmE,YAAY,CAACC,KAAlB,EAA0B;AACzBtC,YAAAA,MAAM,CAACc,OAAP,CAAgBuB,YAAY,CAACC,KAA7B,EAAqCzG,OAArC,CACC,SAAiC;AAAA,kBAA/B,CAAEqF,WAAF,EAAeqB,QAAf,CAA+B;AAChCrE,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAChBqB,QAAQ,GAAGA,QAAH,GAAcX,QACtB,EAHF;AAKA,aAPF;AASA;;AAED,cAAK1D,YAAY,CAACL,MAAlB,EAA2B;AAC1B,kBAAM2E,gBAAgB,GACrBpD,QAAQ,KAAKjC,mBAAb,GACI,GAAGiC,QAAU,KAAK+C,SAAW,GAC9B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEjD,QAAd,KAA0B,EACzB,EAHJ,GAII,GAAGA,QAAU,IAAI+C,SAAW,GAC7B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEjD,QAAd,KAA0B,EACzB,EAPL;AAQAuC,YAAAA,OAAO,IAAK,GAAGa,gBAAkB,MAAMtE,YAAY,CAACH,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SA5BD;AA6BA;AACD,KAtCF,EADsD,CAyCtD;;AACA,QAAKqB,QAAQ,KAAKjC,mBAAb,IAAoCqE,kBAAzC,EAA8D;AAC7DG,MAAAA,OAAO,IAAK,GAAGvC,QAAU,8BAA8BwC,QAAU,KAAjE;AACA;AACD,GA7DE,CA+DH;;;AACA,MACCxC,QAAQ,KAAKjC,mBAAb,IACAmE,IADA,aACAA,IADA,kCACAA,IAAI,CAAES,QADN,qEACA,gBAAgBC,MADhB,kDACA,sBAAwBC,WAFzB,EAGE;AACD,UAAMQ,iBAAiB,GAAG,CAAE,OAAF,EAAW,MAAX,EAAmB,MAAnB,CAA1B;AACAzC,IAAAA,MAAM,CAACkC,MAAP,CAAeZ,IAAI,CAACS,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkDpG,OAAlD,CACC,SAA8C;AAAA,UAA5C;AAAEsG,QAAAA,SAAF;AAAaO,QAAAA,WAAb;AAA0BC,QAAAA;AAA1B,OAA4C;;AAC7C,UACCD,WAAW,IACXD,iBAAiB,CAACG,QAAlB,CAA4BF,WAA5B,CAFD,EAGE;AACDf,QAAAA,OAAO,IAAK,GAAGvC,QAAU,KAAK+C,SAAW,cAAcO,WAAa,KAApE;AACA;;AAED,UAAKC,UAAL,aAAKA,UAAL,eAAKA,UAAU,CAAE9E,MAAjB,EAA0B;AACzB8E,QAAAA,UAAU,CAAC9G,OAAX,CAAsBgH,SAAF,IAAiB;AACpC,gBAAM3E,YAAY,GAAG,EAArB;;AAEA,cAAK2E,SAAS,CAACP,KAAf,EAAuB;AACtBtC,YAAAA,MAAM,CAACc,OAAP,CAAgB+B,SAAS,CAACP,KAA1B,EAAkCzG,OAAlC,CACC,UAAiC;AAAA,kBAA/B,CAAEqF,WAAF,EAAeqB,QAAf,CAA+B;AAChCrE,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAGwC,WAAa,KAAKqB,QAAU,EADjC;AAGA,aALF;AAOA;;AAED,cAAKrE,YAAY,CAACL,MAAlB,EAA2B;AAC1B,kBAAM2E,gBAAgB,GAAI,GAAGpD,QAAU,KAAK+C,SAAW,GACtD,CAAAU,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAEzD,QAAX,KAAuB,EACvB,EAFD;AAGAuC,YAAAA,OAAO,IAAK,GAAGa,gBAAkB,MAAMtE,YAAY,CAACH,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SArBD;AAsBA;AACD,KAjCF;AAmCA;;AAED,SAAO4D,OAAP;AACA;AAED,OAAO,MAAMmB,kBAAkB,GAAG,CAAExB,IAAF,EAAQyB,cAAR,KAA4B;AAAA;;AAC7D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAE1B,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAE2B,MAAR,CAAL,EAAsB;AACrB,WAAOD,KAAP;AACA;;AAED,QAAME,aAAa,GAAKC,cAAF,IACrBlH,MAAM,CAAEkH,cAAF,EAAkB,CAAE1E,KAAF,EAASyB,GAAT,KACvB,CAAE,QAAF,EAAY,OAAZ,EAAqB,SAArB,EAAgC,YAAhC,EAA8C,QAA9C,EAAyD0C,QAAzD,CACC1C,GADD,CADK,CADP,CAP6D,CAc7D;;;AACA,QAAM+C,MAAM,GAAGC,aAAa,CAAE5B,IAAI,CAAC2B,MAAP,CAA5B;;AACA,MAAK,CAAC,CAAEA,MAAR,EAAiB;AAChBD,IAAAA,KAAK,CAACtE,IAAN,CAAY;AACXuE,MAAAA,MADW;AAEX7D,MAAAA,QAAQ,EAAEjC;AAFC,KAAZ;AAIA;;AACDtB,EAAAA,OAAO,iBAAEyF,IAAI,CAAC2B,MAAP,iDAAE,aAAaG,QAAf,EAAyB,CAAE3E,KAAF,EAASyB,GAAT,KAAkB;AACjD,QAAK,CAAC,CAAEzB,KAAH,IAAY,CAAC,CAAEjC,QAAQ,CAAE0D,GAAF,CAA5B,EAAsC;AACrC8C,MAAAA,KAAK,CAACtE,IAAN,CAAY;AACXuE,QAAAA,MAAM,EAAExE,KADG;AAEXW,QAAAA,QAAQ,EAAE5C,QAAQ,CAAE0D,GAAF;AAFP,OAAZ;AAIA;AACD,GAPM,CAAP,CAtB6D,CA+B7D;;AACArE,EAAAA,OAAO,kBAAEyF,IAAI,CAAC2B,MAAP,kDAAE,cAAaI,MAAf,EAAuB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AAAA;;AACpD,UAAM/C,WAAW,GAAG0C,aAAa,CAAEI,IAAF,CAAjC;;AACA,QAAK,CAAC,CAAE9C,WAAH,IAAkB,CAAC,EAAEuC,cAAF,aAAEA,cAAF,wCAAEA,cAAc,CAAIQ,SAAJ,CAAhB,kDAAE,sBAA+BnE,QAAjC,CAAxB,EAAoE;AACnE4D,MAAAA,KAAK,CAACtE,IAAN,CAAY;AACX8E,QAAAA,eAAe,EAAET,cAAc,CAAEQ,SAAF,CAAd,CAA4BC,eADlC;AAEX9B,QAAAA,gBAAgB,EAAEqB,cAAc,CAAEQ,SAAF,CAAd,CAA4B7B,gBAFnC;AAGX+B,QAAAA,gBAAgB,EAAEV,cAAc,CAAEQ,SAAF,CAAd,CAA4BE,gBAHnC;AAIXrE,QAAAA,QAAQ,EAAE2D,cAAc,CAAEQ,SAAF,CAAd,CAA4BnE,QAJ3B;AAKX6D,QAAAA,MAAM,EAAEzC;AALG,OAAZ;AAOA;;AAED3E,IAAAA,OAAO,CAAEyH,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEF,QAAR,EAAkB,CAAE3E,KAAF,EAASiF,WAAT,KAA0B;AAClD,UACC,CAAC,CAAEjF,KAAH,IACA,CAAC,EAAEsE,cAAF,aAAEA,cAAF,eAAEA,cAAc,CAAIQ,SAAJ,CAAhB,CADD,IAEA,CAAC,EAAE/G,QAAF,aAAEA,QAAF,eAAEA,QAAQ,CAAIkH,WAAJ,CAAV,CAHF,EAIE;AACDV,QAAAA,KAAK,CAACtE,IAAN,CAAY;AACXuE,UAAAA,MAAM,EAAExE,KADG;AAEXW,UAAAA,QAAQ,EAAE2D,cAAc,CAAEQ,SAAF,CAAd,CAA4BnE,QAA5B,CACRtB,KADQ,CACD,GADC,EAERqB,GAFQ,CAEDwE,GAAF,IAAW;AAChB,kBAAMC,gBAAgB,GACrBpH,QAAQ,CAAEkH,WAAF,CAAR,CAAwB5F,KAAxB,CAA+B,GAA/B,CADD;AAEA,mBAAO8F,gBAAgB,CAACzE,GAAjB,CACJ0E,eAAF,IACCF,GAAG,GAAG,GAAN,GAAYE,eAFP,CAAP;AAIA,WATQ,EAUR9F,IAVQ,CAUF,GAVE;AAFC,SAAZ;AAcA;AACD,KArBM,CAAP;AAsBA,GAlCM,CAAP;AAoCA,SAAOiF,KAAP;AACA,CArEM;AAuEP,OAAO,MAAMc,oBAAoB,GAAG,CAAExC,IAAF,EAAQyB,cAAR,KAA4B;AAAA;;AAC/D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAE1B,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAES,QAAR,CAAL,EAAwB;AACvB,WAAOiB,KAAP;AACA;;AAED,QAAMe,WAAW,GAAKZ,cAAF,IAAsB;AACzC,UAAMa,OAAO,GAAG,EAAhB;AACA9G,IAAAA,eAAe,CAACrB,OAAhB,CAAyB,UAAgB;AAAA,UAAd;AAAEsC,QAAAA;AAAF,OAAc;AACxC,YAAMM,KAAK,GAAG3C,GAAG,CAAEqH,cAAF,EAAkBhF,IAAlB,EAAwB,KAAxB,CAAjB;;AACA,UAAKM,KAAK,KAAK,KAAf,EAAuB;AACtBtC,QAAAA,GAAG,CAAE6H,OAAF,EAAW7F,IAAX,EAAiBM,KAAjB,CAAH;AACA;AACD,KALD;AAMA,WAAOuF,OAAP;AACA,GATD,CAP+D,CAkB/D;;;AACA,QAAMA,OAAO,GAAGD,WAAW,CAAEzC,IAAI,CAACS,QAAP,CAA3B;AACA,QAAMkC,MAAM,sBAAG3C,IAAI,CAACS,QAAR,oDAAG,gBAAekC,MAA9B;;AACA,MAAK,CAAElI,OAAO,CAAEiI,OAAF,CAAT,IAAwB,CAAC,CAAEC,MAAhC,EAAyC;AACxCjB,IAAAA,KAAK,CAACtE,IAAN,CAAY;AACXsF,MAAAA,OADW;AAEXC,MAAAA,MAFW;AAGX7E,MAAAA,QAAQ,EAAEjC;AAHC,KAAZ;AAKA,GA3B8D,CA6B/D;;;AACAtB,EAAAA,OAAO,oBAAEyF,IAAI,CAACS,QAAP,oDAAE,gBAAesB,MAAjB,EAAyB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AACtD,UAAMtF,YAAY,GAAG8F,WAAW,CAAET,IAAF,CAAhC;AACA,UAAMY,WAAW,GAAGZ,IAAI,CAACW,MAAzB;;AACA,QAAK,CAAElI,OAAO,CAAEkC,YAAF,CAAT,IAA6B,CAAC,CAAEiG,WAArC,EAAmD;AAClDlB,MAAAA,KAAK,CAACtE,IAAN,CAAY;AACXsF,QAAAA,OAAO,EAAE/F,YADE;AAEXgG,QAAAA,MAAM,EAAEC,WAFG;AAGX9E,QAAAA,QAAQ,EAAE2D,cAAc,CAAEQ,SAAF,CAAd,CAA4BnE;AAH3B,OAAZ;AAKA;AACD,GAVM,CAAP;AAYA,SAAO4D,KAAP;AACA,CA3CM;AA6CP,OAAO,MAAMmB,kBAAkB,GAAG,CAAE7C,IAAF,EAAQyB,cAAR,KAA4B;AAC7D,QAAMhB,QAAQ,GAAG+B,oBAAoB,CAAExC,IAAF,EAAQyB,cAAR,CAArC;AAEA,MAAIpB,OAAO,GAAG,EAAd;AACAI,EAAAA,QAAQ,CAAClG,OAAT,CAAkB,UAAqC;AAAA,QAAnC;AAAEmI,MAAAA,OAAF;AAAWC,MAAAA,MAAX;AAAmB7E,MAAAA;AAAnB,KAAmC;AACtD,UAAMlB,YAAY,GAAGF,sBAAsB,CAAEgG,OAAF,CAA3C;AACA,UAAMI,WAAW,GAAGzE,WAAW,CAAEsE,MAAF,EAAU,gBAAV,EAA4B,IAA5B,CAA/B;;AACA,QAAKG,WAAW,CAACvG,MAAZ,GAAqB,CAA1B,EAA8B;AAC7BK,MAAAA,YAAY,CAACQ,IAAb,CAAmB,GAAG0F,WAAtB;AACA;;AAED,QAAKlG,YAAY,CAACL,MAAb,GAAsB,CAA3B,EAA+B;AAC9B8D,MAAAA,OAAO,GAAGA,OAAO,GAAI,GAAGvC,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IAAhE;AACA;AACD,GAVD;AAYA,SAAO4D,OAAP;AACA,CAjBM;AAmBP,OAAO,MAAM0C,QAAQ,GAAG,CACvB/C,IADuB,EAEvByB,cAFuB,EAGvBvB,kBAHuB,EAIvBC,qBAJuB,KAKnB;AACJ,QAAM6C,eAAe,GAAGxB,kBAAkB,CAAExB,IAAF,EAAQyB,cAAR,CAA1C;AACA,QAAMwB,iBAAiB,GAAGT,oBAAoB,CAAExC,IAAF,EAAQyB,cAAR,CAA9C;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,MAAIpB,OAAO,GAAG,mBAAd;AACA2C,EAAAA,eAAe,CAACzI,OAAhB,CACC,UAMO;AAAA,QANL;AACDuD,MAAAA,QADC;AAEDoE,MAAAA,eAFC;AAGDP,MAAAA,MAHC;AAIDvB,MAAAA,gBAJC;AAKD+B,MAAAA;AALC,KAMK;AACN,UAAMe,aAAa,GAAG,EAAtB;;AACA,QAAKvB,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAE3D,MAAb,EAAsB;AACrBkF,MAAAA,aAAa,CAAClF,MAAd,GAAuB2D,MAAM,CAAC3D,MAA9B;AACA,aAAO2D,MAAM,CAAC3D,MAAd;AACA,KALK,CAON;;;AACA,QAAKkE,eAAL,EAAuB;AACtB,YAAMiB,mBAAmB,GACxBlE,qBAAqB,CAAEiE,aAAF,CADtB;;AAEA,UAAKC,mBAAmB,CAAC5G,MAApB,KAA+B,CAApC,EAAwC;AACvC;AACA;;AACD8D,MAAAA,OAAO,GACNA,OAAO,GACN,GAAG6B,eAAiB,IAAIiB,mBAAmB,CAAC1G,IAApB,CACxB,GADwB,CAEtB,IAJJ;AAKA,KAnBK,CAqBN;;;AACA,QAAKZ,mBAAmB,KAAKiC,QAAxB,IAAoCqE,gBAAzC,EAA4D;AAC3D9B,MAAAA,OAAO,IAAIN,eAAe,CAAE;AAC3BC,QAAAA,IAD2B;AAE3BC,QAAAA,KAAK,EAAE0B,MAFoB;AAG3B7D,QAAAA,QAH2B;AAI3BoC,QAAAA,kBAJ2B;AAK3BC,QAAAA,qBAL2B;AAM3BC,QAAAA;AAN2B,OAAF,CAA1B;AAQA,KA/BK,CAiCN;;;AACA,UAAMxD,YAAY,GAAGqC,qBAAqB,CAAE0C,MAAF,CAA1C;;AACA,QAAK/E,YAAL,aAAKA,YAAL,eAAKA,YAAY,CAAEL,MAAnB,EAA4B;AAC3B8D,MAAAA,OAAO,GACNA,OAAO,GAAI,GAAGvC,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IADvD;AAEA,KAtCK,CAwCN;;;AACA,UAAM2G,oBAAoB,GAAG1E,MAAM,CAACc,OAAP,CAAgBmC,MAAhB,EAAyB3D,MAAzB,CAC5B;AAAA,UAAE,CAAEY,GAAF,CAAF;AAAA,aAAeA,GAAG,CAAC9D,UAAJ,CAAgB,GAAhB,CAAf;AAAA,KAD4B,CAA7B;;AAIA,QAAKsI,oBAAL,aAAKA,oBAAL,eAAKA,oBAAoB,CAAE7G,MAA3B,EAAoC;AACnC6G,MAAAA,oBAAoB,CAAC7I,OAArB,CACC,UAAkC;AAAA,YAAhC,CAAE8I,SAAF,EAAaC,WAAb,CAAgC;AACjC,cAAMC,kBAAkB,GACvBtE,qBAAqB,CAAEqE,WAAF,CADtB;;AAGA,YAAK,EAAEC,kBAAF,aAAEA,kBAAF,eAAEA,kBAAkB,CAAEhH,MAAtB,CAAL,EAAoC;AACnC;AACA,SANgC,CAQjC;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,cAAMiH,SAAS,GAAG1F,QAAQ,CACxBtB,KADgB,CACT,GADS,EAEhBqB,GAFgB,CAETwE,GAAF,IAAWA,GAAG,GAAGgB,SAFN,EAGhB5G,IAHgB,CAGV,GAHU,CAAlB;;AAKA,cAAMgH,UAAU,GAAI,GAAGD,SAAW,IAAID,kBAAkB,CAAC9G,IAAnB,CACrC,GADqC,CAEnC,IAFH;AAIA4D,QAAAA,OAAO,GAAGA,OAAO,GAAGoD,UAApB;AACA,OA1BF;AA4BA;AACD,GAlFF;AAqFA;;AACApD,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,GACb3E,cAAc,CAAEqE,IAAF,aAAEA,IAAF,wCAAEA,IAAI,CAAE2B,MAAR,2EAAE,cAAcpB,OAAhB,0DAAE,sBAAuBC,QAAzB,CAAd,IAAqD,OADtD;AAEAH,IAAAA,OAAO,GACNA,OAAO,GACP,qEAFD;AAGAA,IAAAA,OAAO,GACNA,OAAO,GACN,iDAAiDC,QAAU,KAF7D;AAGA;;AAED2C,EAAAA,iBAAiB,CAAC1I,OAAlB,CAA2B,UAA6B;AAAA,QAA3B;AAAEuD,MAAAA,QAAF;AAAY4E,MAAAA;AAAZ,KAA2B;;AACvD,QAAK7G,mBAAmB,KAAKiC,QAA7B,EAAwC;AACvC;AACAA,MAAAA,QAAQ,GAAG,EAAX;AACA;;AAED,UAAMN,OAAO,GAAGF,iBAAiB,CAAEQ,QAAF,EAAY4E,OAAZ,CAAjC;;AACA,QAAK,CAAEjI,OAAO,CAAE+C,OAAF,CAAd,EAA4B;AAC3B6C,MAAAA,OAAO,GAAGA,OAAO,GAAG7C,OAApB;AACA;AACD,GAVD;AAYA,SAAO6C,OAAP;AACA,CA3IM;AA6IP,OAAO,SAASqD,YAAT,CAAuB1D,IAAvB,EAA6ByB,cAA7B,EAA8C;AACpD,QAAMwB,iBAAiB,GAAGT,oBAAoB,CAAExC,IAAF,EAAQyB,cAAR,CAA9C;AACA,SAAOwB,iBAAiB,CAAC9E,OAAlB,CAA2B,UAAmB;AAAA,QAAjB;AAAEuE,MAAAA;AAAF,KAAiB;AACpD,WAAO3E,oBAAoB,CAAE2E,OAAF,CAA3B;AACA,GAFM,CAAP;AAGA;;AAED,MAAMiB,iBAAiB,GAAKC,UAAF,IAAkB;AAC3C,QAAMnF,MAAM,GAAG,EAAf;AACAmF,EAAAA,UAAU,CAACrJ,OAAX,CAAsBsJ,SAAF,IAAiB;AAAA;;AACpC,UAAMnE,IAAI,GAAGmE,SAAS,CAACnE,IAAvB;AACA,UAAM5B,QAAQ,4BACb+F,SADa,aACbA,SADa,8CACbA,SAAS,CAAEC,QADE,wDACb,oBAAqBC,sBADR,yEAEb,eAAerE,IAAI,CAACZ,OAAL,CAAc,OAAd,EAAuB,EAAvB,EAA4BA,OAA5B,CAAqC,GAArC,EAA0C,GAA1C,CAFhB;AAGA,UAAMoD,eAAe,4BACpB2B,SADoB,aACpBA,SADoB,+CACpBA,SAAS,CAAEC,QADS,kFACpB,qBAAqBE,KADD,0DACpB,sBAA4BC,qBADR,yEACiC,IADtD;AAEA,UAAM9B,gBAAgB,GAAG,CAAC,EAAE0B,SAAF,aAAEA,SAAF,uCAAEA,SAAS,CAAEC,QAAb,iDAAE,qBAAqBI,oBAAvB,CAA1B;AACA,UAAM9D,gBAAgB,GACrByD,SADqB,aACrBA,SADqB,+CACrBA,SAAS,CAAEC,QADU,kFACrB,qBAAqBvD,OADA,oFACrB,sBAA8BC,QADT,2DACrB,uBAAwC2D,qBADzC;AAEA1F,IAAAA,MAAM,CAAEiB,IAAF,CAAN,GAAiB;AAChBwC,MAAAA,eADgB;AAEhB9B,MAAAA,gBAFgB;AAGhB+B,MAAAA,gBAHgB;AAIhBzC,MAAAA,IAJgB;AAKhB5B,MAAAA;AALgB,KAAjB;AAOA,GAjBD;AAmBA,SAAOW,MAAP;AACA,CAtBD;;AAwBA,OAAO,SAAS2F,qBAAT,GAAiC;AACvC,QAAM,CAAEC,WAAF,EAAeC,cAAf,IAAkCjJ,QAAQ,CAAE,EAAF,CAAhD;AACA,QAAM,CAAEoF,QAAF,EAAY8D,WAAZ,IAA4BlJ,QAAQ,CAAE,EAAF,CAA1C;AACA,QAAM,CAAEmJ,UAAF,EAAcC,aAAd,IAAgCpJ,QAAQ,CAAE,EAAF,CAA9C;AACA,QAAM;AAAEqJ,IAAAA,MAAM,EAAEC;AAAV,MAA2BrJ,UAAU,CAAEQ,mBAAF,CAA3C;AACA,QAAM,CAAE0E,QAAF,IAAezE,UAAU,CAAE,kBAAF,CAA/B;AACA,QAAMmE,kBAAkB,GAAGM,QAAQ,KAAK,IAAxC;AACA,QAAML,qBAAqB,GAAG,CAAED,kBAAhC,CAPuC,CAOa;;AAEpD9E,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK,EAAEuJ,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAEhD,MAAhB,KAA0B,EAAEgD,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAElE,QAAhB,CAA/B,EAA0D;AACzD;AACA;;AAED,UAAMgB,cAAc,GAAGkC,iBAAiB,CAAExI,aAAa,EAAf,CAAxC;AACA,UAAMyJ,gBAAgB,GAAG/B,kBAAkB,CAC1C8B,YAD0C,EAE1ClD,cAF0C,CAA3C;AAIA,UAAMoD,YAAY,GAAG9B,QAAQ,CAC5B4B,YAD4B,EAE5BlD,cAF4B,EAG5BvB,kBAH4B,EAI5BC,qBAJ4B,CAA7B;AAMA,UAAM2E,OAAO,GAAGpB,YAAY,CAAEiB,YAAF,EAAgBlD,cAAhB,CAA5B;AACA6C,IAAAA,cAAc,CAAE,CACf;AACCS,MAAAA,GAAG,EAAEH,gBADN;AAECI,MAAAA,cAAc,EAAE;AAFjB,KADe,EAKf;AACCD,MAAAA,GAAG,EAAEF,YADN;AAECG,MAAAA,cAAc,EAAE;AAFjB,KALe,CAAF,CAAd;AAUAT,IAAAA,WAAW,CAAEI,YAAY,CAAClE,QAAf,CAAX;AACAgE,IAAAA,aAAa,CAAEK,OAAF,CAAb;AACA,GA7BQ,EA6BN,CAAE5E,kBAAF,EAAsBC,qBAAtB,EAA6CwE,YAA7C,CA7BM,CAAT;AA+BA,SAAO,CAAEN,WAAF,EAAe5D,QAAf,EAAyB+D,UAAzB,EAAqCtE,kBAArC,CAAP;AACA","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 } from './utils';\nimport { GlobalStylesContext } from './context';\nimport { useSetting } from './hooks';\n\nfunction compileStyleValue( uncompiledValue ) {\n\tconst VARIABLE_REFERENCE_PREFIX = 'var:';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';\n\tconst VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';\n\tif ( startsWith( uncompiledValue, VARIABLE_REFERENCE_PREFIX ) ) {\n\t\tconst variable = uncompiledValue\n\t\t\t.slice( VARIABLE_REFERENCE_PREFIX.length )\n\t\t\t.split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )\n\t\t\t.join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );\n\t\treturn `var(--wp--${ variable })`;\n\t}\n\treturn uncompiledValue;\n}\n\n/**\n * Transform given preset tree into a set of style declarations.\n *\n * @param {Object} blockPresets\n *\n * @return {Array} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, valueKey, valueFunc, cssVarInfix } ) => {\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( value ) => {\n\t\t\t\t\t\tif ( valueKey ) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ value[ valueKey ] }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tvalueFunc &&\n\t\t\t\t\t\t\ttypeof valueFunc === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ valueFunc( value ) }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n}\n\n/**\n * Transform given preset tree into a set of preset class declarations.\n *\n * @param {string} blockSelector\n * @param {Object} blockPresets\n * @return {string} CSS declarations for the preset classes.\n */\nfunction getPresetsClasses( blockSelector, blockPresets = {} ) {\n\treturn reduce(\n\t\tPRESET_METADATA,\n\t\t( declarations, { path, cssVarInfix, classes } ) => {\n\t\t\tif ( ! classes ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst presetByOrigin = get( blockPresets, path, [] );\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( { slug } ) => {\n\t\t\t\t\t\tclasses.forEach( ( { classSuffix, propertyName } ) => {\n\t\t\t\t\t\t\tconst classSelectorToUse = `.has-${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) }-${ classSuffix }`;\n\t\t\t\t\t\t\tconst selectorToUse = blockSelector\n\t\t\t\t\t\t\t\t.split( ',' ) // Selector can be \"h1, h2, h3\"\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t`${ selector }${ classSelectorToUse }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ',' );\n\t\t\t\t\t\t\tconst value = `var(--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) })`;\n\t\t\t\t\t\t\tdeclarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn declarations;\n\t\t},\n\t\t''\n\t);\n}\n\nfunction getPresetsSvgFilters( blockPresets = {} ) {\n\treturn PRESET_METADATA.filter(\n\t\t// Duotone are the only type of filters for now.\n\t\t( metadata ) => metadata.path.at( -1 ) === 'duotone'\n\t).flatMap( ( metadata ) => {\n\t\tconst presetByOrigin = get( blockPresets, metadata.path, {} );\n\t\treturn [ 'default', 'theme' ]\n\t\t\t.filter( ( origin ) => presetByOrigin[ origin ] )\n\t\t\t.flatMap( ( origin ) =>\n\t\t\t\tpresetByOrigin[ origin ].map( ( preset ) => (\n\t\t\t\t\t<PresetDuotoneFilter\n\t\t\t\t\t\tpreset={ preset }\n\t\t\t\t\t\tkey={ preset.slug }\n\t\t\t\t\t/>\n\t\t\t\t) )\n\t\t\t);\n\t} );\n}\n\nfunction flattenTree( input = {}, prefix, token ) {\n\tlet result = [];\n\tObject.keys( input ).forEach( ( key ) => {\n\t\tconst newKey = prefix + kebabCase( key.replace( '/', '-' ) );\n\t\tconst newLeaf = input[ key ];\n\n\t\tif ( newLeaf instanceof Object ) {\n\t\t\tconst newPrefix = newKey + token;\n\t\t\tresult = [ ...result, ...flattenTree( newLeaf, newPrefix, token ) ];\n\t\t} else {\n\t\t\tresult.push( `${ newKey }: ${ newLeaf }` );\n\t\t}\n\t} );\n\treturn result;\n}\n\n/**\n * Transform given style tree into a set of style declarations.\n *\n * @param {Object} blockStyles Block styles.\n *\n * @return {Array} An array of style declarations.\n */\nfunction getStylesDeclarations( blockStyles = {} ) {\n\tconst output = reduce(\n\t\tSTYLE_PROPERTY,\n\t\t( declarations, { value, properties, useEngine }, key ) => {\n\t\t\tconst pathToValue = value;\n\t\t\tif ( first( pathToValue ) === 'elements' || useEngine ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst styleValue = get( blockStyles, pathToValue );\n\n\t\t\tif ( !! properties && 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 = 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\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} );\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\n\t/*\n\t * Reset default browser margin on the root body element.\n\t * This is set on the root selector **before** generating the ruleset\n\t * from the `theme.json`. This is to ensure that if the `theme.json` declares\n\t * `margin` in its `spacing` declaration for the `body` element then these\n\t * user-generated values take precedence in the CSS cascade.\n\t * @link https://github.com/WordPress/gutenberg/issues/36147.\n\t */\n\tlet ruleset = 'body {margin: 0;}';\n\tnodesWithStyles.forEach(\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} ) => {\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( styles );\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 seperated\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\nconst getBlockSelectors = ( blockTypes ) => {\n\tconst result = {};\n\tblockTypes.forEach( ( blockType ) => {\n\t\tconst name = blockType.name;\n\t\tconst selector =\n\t\t\tblockType?.supports?.__experimentalSelector ??\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t\tconst duotoneSelector =\n\t\t\tblockType?.supports?.color?.__experimentalDuotone ?? null;\n\t\tconst hasLayoutSupport = !! blockType?.supports?.__experimentalLayout;\n\t\tconst fallbackGapValue =\n\t\t\tblockType?.supports?.spacing?.blockGap?.__experimentalDefault;\n\t\tresult[ name ] = {\n\t\t\tduotoneSelector,\n\t\t\tfallbackGapValue,\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","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":";;AAAA;AACA;AACA;AACA,SACCA,KADD,EAECC,OAFD,EAGCC,GAHD,EAICC,OAJD,EAKCC,SALD,EAMCC,MAND,EAOCC,MAPD,EAQCC,GARD,EASCC,UATD,QAUO,QAVP;AAYA;AACA;AACA;;AACA,SACCC,6BAA6B,IAAIC,cADlC,EAECC,uBAAuB,IAAIC,QAF5B,EAGCC,aAHD,QAIO,mBAJP;AAKA,SAASC,SAAT,EAAoBC,QAApB,EAA8BC,UAA9B,QAAgD,oBAAhD;AACA,SAASC,WAAT,QAA4B,yBAA5B;AACA,SACCC,6BAA6B,IAAIC,mBADlC,EAECC,4BAA4B,IAAIC,cAFjC,QAGO,yBAHP;AAKA;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;AAC7C,QAAMC,yBAAyB,GAAG,MAAlC;AACA,QAAMC,uCAAuC,GAAG,GAAhD;AACA,QAAMC,mCAAmC,GAAG,IAA5C;;AACA,MAAK5B,UAAU,CAAEyB,eAAF,EAAmBC,yBAAnB,CAAf,EAAgE;AAC/D,UAAMG,QAAQ,GAAGJ,eAAe,CAC9BK,KADe,CACRJ,yBAAyB,CAACK,MADlB,EAEfC,KAFe,CAERL,uCAFQ,EAGfM,IAHe,CAGTL,mCAHS,CAAjB;AAIA,WAAQ,aAAaC,QAAU,GAA/B;AACA;;AACD,SAAOJ,eAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASS,sBAAT,GAAqD;AAAA,MAApBC,YAAoB,uEAAL,EAAK;AACpD,SAAOrC,MAAM,CACZgB,eADY,EAEZ,CAAEsB,YAAF,WAAgE;AAAA,QAAhD;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,QAAR;AAAkBC,MAAAA,SAAlB;AAA6BC,MAAAA;AAA7B,KAAgD;AAC/D,UAAMC,cAAc,GAAG/C,GAAG,CAAEyC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiC5C,OAAjC,CAA4CiD,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBjD,OAAzB,CAAoCkD,KAAF,IAAa;AAC9C,cAAKL,QAAL,EAAgB;AACfF,YAAAA,YAAY,CAACQ,IAAb,CACE,iBAAiBJ,WAAa,KAAK5C,SAAS,CAC5C+C,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,KAAK5C,SAAS,CAC5C+C,KAAK,CAACE,IADsC,CAE1C,KAAKN,SAAS,CAAEI,KAAF,CAAW,EAH7B;AAKA;AACD,SAjBD;AAkBA;AACD,KArBD;AAuBA,WAAOP,YAAP;AACA,GA5BW,EA6BZ,EA7BY,CAAb;AA+BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASU,iBAAT,CAA4BC,aAA5B,EAA+D;AAAA,MAApBZ,YAAoB,uEAAL,EAAK;AAC9D,SAAOrC,MAAM,CACZgB,eADY,EAEZ,CAAEsB,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,GAAG/C,GAAG,CAAEyC,YAAF,EAAgBE,IAAhB,EAAsB,EAAtB,CAA1B;AACA,KAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiC5C,OAAjC,CAA4CiD,MAAF,IAAc;AACvD,UAAKD,cAAc,CAAEC,MAAF,CAAnB,EAAgC;AAC/BD,QAAAA,cAAc,CAAEC,MAAF,CAAd,CAAyBjD,OAAzB,CAAkC,SAAgB;AAAA,cAAd;AAAEoD,YAAAA;AAAF,WAAc;AACjDG,UAAAA,OAAO,CAACvD,OAAR,CAAiB,SAAqC;AAAA,gBAAnC;AAAEwD,cAAAA,WAAF;AAAeC,cAAAA;AAAf,aAAmC;AACrD,kBAAMC,kBAAkB,GAAI,QAAQvD,SAAS,CAC5CiD,IAD4C,CAE1C,IAAII,WAAa,EAFpB;AAGA,kBAAMG,aAAa,GAAGL,aAAa,CACjCf,KADoB,CACb,GADa,EACP;AADO,aAEpBqB,GAFoB,CAGlBC,QAAF,IACE,GAAGA,QAAU,GAAGH,kBAAoB,EAJlB,EAMpBlB,IANoB,CAMd,GANc,CAAtB;AAOA,kBAAMU,KAAK,GAAI,qBAAqBH,WAAa,KAAK5C,SAAS,CAC9DiD,IAD8D,CAE5D,GAFH;AAGAT,YAAAA,YAAY,IAAK,GAAGgB,aAAe,IAAIF,YAAc,KAAKP,KAAO,eAAjE;AACA,WAfD;AAgBA,SAjBD;AAkBA;AACD,KArBD;AAsBA,WAAOP,YAAP;AACA,GA/BW,EAgCZ,EAhCY,CAAb;AAkCA;;AAED,SAASmB,oBAAT,GAAmD;AAAA,MAApBpB,YAAoB,uEAAL,EAAK;AAClD,SAAOrB,eAAe,CAAC0C,MAAhB,EACN;AACEC,EAAAA,QAAF,IAAgBA,QAAQ,CAACpB,IAAT,CAAcqB,EAAd,CAAkB,CAAC,CAAnB,MAA2B,SAFrC,EAGLC,OAHK,CAGMF,QAAF,IAAgB;AAC1B,UAAMhB,cAAc,GAAG/C,GAAG,CAAEyC,YAAF,EAAgBsB,QAAQ,CAACpB,IAAzB,EAA+B,EAA/B,CAA1B;AACA,WAAO,CAAE,SAAF,EAAa,OAAb,EACLmB,MADK,CACKd,MAAF,IAAcD,cAAc,CAAEC,MAAF,CAD/B,EAELiB,OAFK,CAEMjB,MAAF,IACTD,cAAc,CAAEC,MAAF,CAAd,CAAyBW,GAAzB,CAAgCO,MAAF,IAC7B,cAAC,mBAAD;AACC,MAAA,MAAM,EAAGA,MADV;AAEC,MAAA,GAAG,EAAGA,MAAM,CAACf;AAFd,MADD,CAHK,CAAP;AAUA,GAfM,CAAP;AAgBA;;AAED,SAASgB,WAAT,GAAkD;AAAA,MAA5BC,KAA4B,uEAApB,EAAoB;AAAA,MAAhBC,MAAgB;AAAA,MAARC,KAAQ;AACjD,MAAIC,MAAM,GAAG,EAAb;AACAC,EAAAA,MAAM,CAACC,IAAP,CAAaL,KAAb,EAAqBrE,OAArB,CAAgC2E,GAAF,IAAW;AACxC,UAAMC,MAAM,GAAGN,MAAM,GAAGnE,SAAS,CAAEwE,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,SAASQ,qBAAT,GAIE;AAAA,MAHDC,WAGC,uEAHa,EAGb;AAAA,MAFDpB,QAEC,uEAFU,EAEV;AAAA,MADDqB,mBACC;AACD,QAAMC,MAAM,GAAG7D,mBAAmB,KAAKuC,QAAvC;AACA,QAAMuB,MAAM,GAAG/E,MAAM,CACpBI,cADoB,EAEpB,CAAEkC,YAAF,SAA4DgC,GAA5D,KAAqE;AAAA,QAArD;AAAEzB,MAAAA,KAAF;AAASmC,MAAAA,UAAT;AAAqBC,MAAAA,SAArB;AAAgCC,MAAAA;AAAhC,KAAqD;;AACpE,QAAKA,QAAQ,IAAI,CAAEJ,MAAnB,EAA4B;AAC3B,aAAOxC,YAAP;AACA;;AACD,UAAM6C,WAAW,GAAGtC,KAApB;;AACA,QAAKnD,KAAK,CAAEyF,WAAF,CAAL,KAAyB,UAAzB,IAAuCF,SAA5C,EAAwD;AACvD,aAAO3C,YAAP;AACA;;AAED,UAAM8C,UAAU,GAAGxF,GAAG,CAAEgF,WAAF,EAAeO,WAAf,CAAtB;;AAEA,QAAK,CAAC,CAAEH,UAAH,IAAiB,OAAOI,UAAP,KAAsB,QAA5C,EAAuD;AACtDhB,MAAAA,MAAM,CAACiB,OAAP,CAAgBL,UAAhB,EAA6BrF,OAA7B,CAAwC2F,KAAF,IAAa;AAClD,cAAM,CAAEC,IAAF,EAAQC,IAAR,IAAiBF,KAAvB;;AAEA,YAAK,CAAE1F,GAAG,CAAEwF,UAAF,EAAc,CAAEI,IAAF,CAAd,EAAwB,KAAxB,CAAV,EAA4C;AAC3C;AACA;AACA;AACA;;AAED,cAAMC,WAAW,GAAGF,IAAI,CAACrF,UAAL,CAAiB,IAAjB,IACjBqF,IADiB,GAEjBzF,SAAS,CAAEyF,IAAF,CAFZ;AAGAjD,QAAAA,YAAY,CAACQ,IAAb,CACE,GAAG2C,WAAa,KAAK/D,iBAAiB,CACtC9B,GAAG,CAAEwF,UAAF,EAAc,CAAEI,IAAF,CAAd,CADmC,CAEpC,EAHJ;AAKA,OAjBD;AAkBA,KAnBD,MAmBO,IACNlB,GAAG,KAAK,4BAAR,IACA,OAAOc,UAAP,KAAsB,QAFhB,EAGL;AACD;AACA;AACA,aAAO9C,YAAP;AACA,KAPM,MAOA,IAAK1C,GAAG,CAAEgF,WAAF,EAAeO,WAAf,EAA4B,KAA5B,CAAR,EAA8C;AACpD,YAAMM,WAAW,GAAGnB,GAAG,CAACpE,UAAJ,CAAgB,IAAhB,IACjBoE,GADiB,GAEjBxE,SAAS,CAAEwE,GAAF,CAFZ;AAGAhC,MAAAA,YAAY,CAACQ,IAAb,CACE,GAAG2C,WAAa,KAAK/D,iBAAiB,CACtC9B,GAAG,CAAEgF,WAAF,EAAeO,WAAf,CADmC,CAEpC,EAHJ;AAKA;;AAED,WAAO7C,YAAP;AACA,GAnDmB,EAoDpB,EApDoB,CAArB;;AAuDA,MAAKwC,MAAM,IAAID,mBAAf,EAAqC;AACpC,WAAOE,MAAP;AACA,GA3DA,CA6DD;AACA;;;AACA,QAAMW,UAAU,GAAG/E,WAAW,CAAEiE,WAAF,CAA9B;AACAc,EAAAA,UAAU,CAAC/F,OAAX,CAAsBgG,IAAF,IAAY;AAC/B,UAAMF,WAAW,GAAGE,IAAI,CAACrB,GAAL,CAASpE,UAAT,CAAqB,IAArB,IACjByF,IAAI,CAACrB,GADY,GAEjBxE,SAAS,CAAE6F,IAAI,CAACrB,GAAP,CAFZ;AAGAS,IAAAA,MAAM,CAACjC,IAAP,CAAc,GAAG2C,WAAa,KAAK/D,iBAAiB,CAAEiE,IAAI,CAAC9C,KAAP,CAAgB,EAApE;AACA,GALD;AAOA,SAAOkC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASa,eAAT,QAOH;AAAA;;AAAA,MAP6B;AAChCC,IAAAA,IADgC;AAEhCC,IAAAA,KAFgC;AAGhCtC,IAAAA,QAHgC;AAIhCuC,IAAAA,kBAJgC;AAKhCC,IAAAA,qBALgC;AAMhCC,IAAAA;AANgC,GAO7B;AACH,MAAIC,OAAO,GAAG,EAAd;AACA,MAAIC,QAAQ,GAAGJ,kBAAkB,GAC9BhF,cAAc,CAAE+E,KAAF,aAAEA,KAAF,yCAAEA,KAAK,CAAEtE,OAAT,mDAAE,eAAgB4E,QAAlB,CADgB,GAE9B,EAFH,CAFG,CAMH;AACA;;AACA,MAAKJ,qBAAL,EAA6B;AAC5B,QAAKxC,QAAQ,KAAKvC,mBAAlB,EAAwC;AACvCkF,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,IAAIN,IAAJ,aAAIA,IAAJ,iCAAIA,IAAI,CAAEQ,QAAV,oEAAI,eAAgBC,MAApB,kDAAI,sBAAwBC,WAAzC,EAAuD;AACtDnC,IAAAA,MAAM,CAACoC,MAAP,CAAeX,IAAI,CAACQ,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkD5G,OAAlD,CACC,SAA0C;AAAA,UAAxC;AAAE8G,QAAAA,SAAF;AAAalB,QAAAA,IAAb;AAAmBmB,QAAAA;AAAnB,OAAwC;;AACzC;AACA,UAAK,CAAEX,kBAAF,IAAwB,cAAcR,IAA3C,EAAkD;AACjD;AACA;;AAED,UAAKmB,aAAL,aAAKA,aAAL,eAAKA,aAAa,CAAEzE,MAApB,EAA6B;AAC5ByE,QAAAA,aAAa,CAAC/G,OAAd,CAAyBgH,YAAF,IAAoB;AAC1C,gBAAMrE,YAAY,GAAG,EAArB;;AAEA,cAAKqE,YAAY,CAACC,KAAlB,EAA0B;AACzBxC,YAAAA,MAAM,CAACiB,OAAP,CAAgBsB,YAAY,CAACC,KAA7B,EAAqCjH,OAArC,CACC,SAAiC;AAAA,kBAA/B,CAAE8F,WAAF,EAAeoB,QAAf,CAA+B;AAChCvE,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAG2C,WAAa,KAChBoB,QAAQ,GAAGA,QAAH,GAAcV,QACtB,EAHF;AAKA,aAPF;AASA;;AAED,cAAK7D,YAAY,CAACL,MAAlB,EAA2B;AAC1B,kBAAM6E,gBAAgB,GACrBtD,QAAQ,KAAKvC,mBAAb,GACI,GAAGuC,QAAU,KAAKiD,SAAW,GAC9B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEnD,QAAd,KAA0B,EACzB,EAHJ,GAII,GAAGA,QAAU,IAAIiD,SAAW,GAC7B,CAAAE,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEnD,QAAd,KAA0B,EACzB,EAPL;AAQA0C,YAAAA,OAAO,IAAK,GAAGY,gBAAkB,MAAMxE,YAAY,CAACH,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SA5BD;AA6BA;AACD,KAtCF,EADsD,CAyCtD;;AACA,QAAKqB,QAAQ,KAAKvC,mBAAb,IAAoC8E,kBAAzC,EAA8D;AAC7DG,MAAAA,OAAO,IAAK,GAAG1C,QAAU,8BAA8B2C,QAAU,KAAjE;AACA;AACD,GA7DE,CA+DH;;;AACA,MACC3C,QAAQ,KAAKvC,mBAAb,IACA4E,IADA,aACAA,IADA,kCACAA,IAAI,CAAEQ,QADN,qEACA,gBAAgBC,MADhB,kDACA,sBAAwBC,WAFzB,EAGE;AACD,UAAMQ,iBAAiB,GAAG,CAAE,OAAF,EAAW,MAAX,EAAmB,MAAnB,CAA1B;AACA3C,IAAAA,MAAM,CAACoC,MAAP,CAAeX,IAAI,CAACQ,QAAL,CAAcC,MAAd,CAAqBC,WAApC,EAAkD5G,OAAlD,CACC,SAA8C;AAAA,UAA5C;AAAE8G,QAAAA,SAAF;AAAaO,QAAAA,WAAb;AAA0BC,QAAAA;AAA1B,OAA4C;;AAC7C,UACCD,WAAW,IACXD,iBAAiB,CAACG,QAAlB,CAA4BF,WAA5B,CAFD,EAGE;AACDd,QAAAA,OAAO,IAAK,GAAG1C,QAAU,KAAKiD,SAAW,cAAcO,WAAa,KAApE;AACA;;AAED,UAAKC,UAAL,aAAKA,UAAL,eAAKA,UAAU,CAAEhF,MAAjB,EAA0B;AACzBgF,QAAAA,UAAU,CAACtH,OAAX,CAAsBwH,SAAF,IAAiB;AACpC,gBAAM7E,YAAY,GAAG,EAArB;;AAEA,cAAK6E,SAAS,CAACP,KAAf,EAAuB;AACtBxC,YAAAA,MAAM,CAACiB,OAAP,CAAgB8B,SAAS,CAACP,KAA1B,EAAkCjH,OAAlC,CACC,UAAiC;AAAA,kBAA/B,CAAE8F,WAAF,EAAeoB,QAAf,CAA+B;AAChCvE,cAAAA,YAAY,CAACQ,IAAb,CACE,GAAG2C,WAAa,KAAKoB,QAAU,EADjC;AAGA,aALF;AAOA;;AAED,cAAKvE,YAAY,CAACL,MAAlB,EAA2B;AAC1B,kBAAM6E,gBAAgB,GAAI,GAAGtD,QAAU,KAAKiD,SAAW,GACtD,CAAAU,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAE3D,QAAX,KAAuB,EACvB,EAFD;AAGA0C,YAAAA,OAAO,IAAK,GAAGY,gBAAkB,MAAMxE,YAAY,CAACH,IAAb,CACtC,IADsC,CAEpC,KAFH;AAGA;AACD,SArBD;AAsBA;AACD,KAjCF;AAmCA;;AAED,SAAO+D,OAAP;AACA;AAED,OAAO,MAAMkB,kBAAkB,GAAG,CAAEvB,IAAF,EAAQwB,cAAR,KAA4B;AAAA;;AAC7D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAEzB,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAE0B,MAAR,CAAL,EAAsB;AACrB,WAAOD,KAAP;AACA;;AAED,QAAME,aAAa,GAAKC,cAAF,IACrB1H,MAAM,CAAE0H,cAAF,EAAkB,CAAE5E,KAAF,EAASyB,GAAT,KACvB,CAAE,QAAF,EAAY,OAAZ,EAAqB,SAArB,EAAgC,YAAhC,EAA8C,QAA9C,EAAyD4C,QAAzD,CACC5C,GADD,CADK,CADP,CAP6D,CAc7D;;;AACA,QAAMiD,MAAM,GAAGC,aAAa,CAAE3B,IAAI,CAAC0B,MAAP,CAA5B;;AACA,MAAK,CAAC,CAAEA,MAAR,EAAiB;AAChBD,IAAAA,KAAK,CAACxE,IAAN,CAAY;AACXyE,MAAAA,MADW;AAEX/D,MAAAA,QAAQ,EAAEvC;AAFC,KAAZ;AAIA;;AACDtB,EAAAA,OAAO,iBAAEkG,IAAI,CAAC0B,MAAP,iDAAE,aAAaG,QAAf,EAAyB,CAAE7E,KAAF,EAASyB,GAAT,KAAkB;AACjD,QAAK,CAAC,CAAEzB,KAAH,IAAY,CAAC,CAAEvC,QAAQ,CAAEgE,GAAF,CAA5B,EAAsC;AACrCgD,MAAAA,KAAK,CAACxE,IAAN,CAAY;AACXyE,QAAAA,MAAM,EAAE1E,KADG;AAEXW,QAAAA,QAAQ,EAAElD,QAAQ,CAAEgE,GAAF;AAFP,OAAZ;AAIA;AACD,GAPM,CAAP,CAtB6D,CA+B7D;;AACA3E,EAAAA,OAAO,kBAAEkG,IAAI,CAAC0B,MAAP,kDAAE,cAAaI,MAAf,EAAuB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AAAA;;AACpD,UAAMjD,WAAW,GAAG4C,aAAa,CAAEI,IAAF,CAAjC;;AACA,QAAK,CAAC,CAAEhD,WAAH,IAAkB,CAAC,EAAEyC,cAAF,aAAEA,cAAF,wCAAEA,cAAc,CAAIQ,SAAJ,CAAhB,kDAAE,sBAA+BrE,QAAjC,CAAxB,EAAoE;AACnE8D,MAAAA,KAAK,CAACxE,IAAN,CAAY;AACXgF,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;AAIXvE,QAAAA,QAAQ,EAAE6D,cAAc,CAAEQ,SAAF,CAAd,CAA4BrE,QAJ3B;AAKX+D,QAAAA,MAAM,EAAE3C,WALG;AAMXoD,QAAAA,gBAAgB,EAAEX,cAAc,CAAEQ,SAAF,CAAd,CAA4BG;AANnC,OAAZ;AAQA;;AAEDrI,IAAAA,OAAO,CAAEiI,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEF,QAAR,EAAkB,CAAE7E,KAAF,EAASoF,WAAT,KAA0B;AAClD,UACC,CAAC,CAAEpF,KAAH,IACA,CAAC,EAAEwE,cAAF,aAAEA,cAAF,eAAEA,cAAc,CAAIQ,SAAJ,CAAhB,CADD,IAEA,CAAC,EAAEvH,QAAF,aAAEA,QAAF,eAAEA,QAAQ,CAAI2H,WAAJ,CAAV,CAHF,EAIE;AACDX,QAAAA,KAAK,CAACxE,IAAN,CAAY;AACXyE,UAAAA,MAAM,EAAE1E,KADG;AAEXW,UAAAA,QAAQ,EAAE6D,cAAc,CAAEQ,SAAF,CAAd,CAA4BrE,QAA5B,CACRtB,KADQ,CACD,GADC,EAERqB,GAFQ,CAED2E,GAAF,IAAW;AAChB,kBAAMC,gBAAgB,GACrB7H,QAAQ,CAAE2H,WAAF,CAAR,CAAwB/F,KAAxB,CAA+B,GAA/B,CADD;AAEA,mBAAOiG,gBAAgB,CAAC5E,GAAjB,CACJ6E,eAAF,IACCF,GAAG,GAAG,GAAN,GAAYE,eAFP,CAAP;AAIA,WATQ,EAURjG,IAVQ,CAUF,GAVE;AAFC,SAAZ;AAcA;AACD,KArBM,CAAP;AAsBA,GAnCM,CAAP;AAqCA,SAAOmF,KAAP;AACA,CAtEM;AAwEP,OAAO,MAAMe,oBAAoB,GAAG,CAAExC,IAAF,EAAQwB,cAAR,KAA4B;AAAA;;AAC/D,QAAMC,KAAK,GAAG,EAAd;;AAEA,MAAK,EAAEzB,IAAF,aAAEA,IAAF,eAAEA,IAAI,CAAEQ,QAAR,CAAL,EAAwB;AACvB,WAAOiB,KAAP;AACA;;AAED,QAAMgB,WAAW,GAAKb,cAAF,IAAsB;AACzC,UAAMc,OAAO,GAAG,EAAhB;AACAvH,IAAAA,eAAe,CAACrB,OAAhB,CAAyB,UAAgB;AAAA,UAAd;AAAE4C,QAAAA;AAAF,OAAc;AACxC,YAAMM,KAAK,GAAGjD,GAAG,CAAE6H,cAAF,EAAkBlF,IAAlB,EAAwB,KAAxB,CAAjB;;AACA,UAAKM,KAAK,KAAK,KAAf,EAAuB;AACtB5C,QAAAA,GAAG,CAAEsI,OAAF,EAAWhG,IAAX,EAAiBM,KAAjB,CAAH;AACA;AACD,KALD;AAMA,WAAO0F,OAAP;AACA,GATD,CAP+D,CAkB/D;;;AACA,QAAMA,OAAO,GAAGD,WAAW,CAAEzC,IAAI,CAACQ,QAAP,CAA3B;AACA,QAAMmC,MAAM,sBAAG3C,IAAI,CAACQ,QAAR,oDAAG,gBAAemC,MAA9B;;AACA,MAAK,CAAE3I,OAAO,CAAE0I,OAAF,CAAT,IAAwB,CAAC,CAAEC,MAAhC,EAAyC;AACxClB,IAAAA,KAAK,CAACxE,IAAN,CAAY;AACXyF,MAAAA,OADW;AAEXC,MAAAA,MAFW;AAGXhF,MAAAA,QAAQ,EAAEvC;AAHC,KAAZ;AAKA,GA3B8D,CA6B/D;;;AACAtB,EAAAA,OAAO,oBAAEkG,IAAI,CAACQ,QAAP,oDAAE,gBAAesB,MAAjB,EAAyB,CAAEC,IAAF,EAAQC,SAAR,KAAuB;AACtD,UAAMxF,YAAY,GAAGiG,WAAW,CAAEV,IAAF,CAAhC;AACA,UAAMa,WAAW,GAAGb,IAAI,CAACY,MAAzB;;AACA,QAAK,CAAE3I,OAAO,CAAEwC,YAAF,CAAT,IAA6B,CAAC,CAAEoG,WAArC,EAAmD;AAClDnB,MAAAA,KAAK,CAACxE,IAAN,CAAY;AACXyF,QAAAA,OAAO,EAAElG,YADE;AAEXmG,QAAAA,MAAM,EAAEC,WAFG;AAGXjF,QAAAA,QAAQ,EAAE6D,cAAc,CAAEQ,SAAF,CAAd,CAA4BrE;AAH3B,OAAZ;AAKA;AACD,GAVM,CAAP;AAYA,SAAO8D,KAAP;AACA,CA3CM;AA6CP,OAAO,MAAMoB,kBAAkB,GAAG,CAAE7C,IAAF,EAAQwB,cAAR,KAA4B;AAC7D,QAAMhB,QAAQ,GAAGgC,oBAAoB,CAAExC,IAAF,EAAQwB,cAAR,CAArC;AAEA,MAAInB,OAAO,GAAG,EAAd;AACAG,EAAAA,QAAQ,CAAC1G,OAAT,CAAkB,UAAqC;AAAA,QAAnC;AAAE4I,MAAAA,OAAF;AAAWC,MAAAA,MAAX;AAAmBhF,MAAAA;AAAnB,KAAmC;AACtD,UAAMlB,YAAY,GAAGF,sBAAsB,CAAEmG,OAAF,CAA3C;AACA,UAAMI,WAAW,GAAG5E,WAAW,CAAEyE,MAAF,EAAU,gBAAV,EAA4B,IAA5B,CAA/B;;AACA,QAAKG,WAAW,CAAC1G,MAAZ,GAAqB,CAA1B,EAA8B;AAC7BK,MAAAA,YAAY,CAACQ,IAAb,CAAmB,GAAG6F,WAAtB;AACA;;AAED,QAAKrG,YAAY,CAACL,MAAb,GAAsB,CAA3B,EAA+B;AAC9BiE,MAAAA,OAAO,GAAGA,OAAO,GAAI,GAAG1C,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IAAhE;AACA;AACD,GAVD;AAYA,SAAO+D,OAAP;AACA,CAjBM;AAmBP,OAAO,MAAM0C,QAAQ,GAAG,CACvB/C,IADuB,EAEvBwB,cAFuB,EAGvBtB,kBAHuB,EAIvBC,qBAJuB,KAKnB;AAAA;;AACJ,QAAM6C,eAAe,GAAGzB,kBAAkB,CAAEvB,IAAF,EAAQwB,cAAR,CAA1C;AACA,QAAMyB,iBAAiB,GAAGT,oBAAoB,CAAExC,IAAF,EAAQwB,cAAR,CAA9C;AACA,QAAMxC,mBAAmB,GAAGgB,IAAH,aAAGA,IAAH,0CAAGA,IAAI,CAAEQ,QAAT,oDAAG,gBAAgB0C,6BAA5C;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,MAAI7C,OAAO,GAAG,mBAAd;;AAEA,MAAKrB,mBAAL,EAA2B;AAC1BqB,IAAAA,OAAO,GACN,irBADD;AAEA;;AAED2C,EAAAA,eAAe,CAAClJ,OAAhB,CACC,UAOO;AAAA,QAPL;AACD6D,MAAAA,QADC;AAEDsE,MAAAA,eAFC;AAGDP,MAAAA,MAHC;AAIDtB,MAAAA,gBAJC;AAKD8B,MAAAA,gBALC;AAMDC,MAAAA;AANC,KAOK;;AACN;AACA;AACA,QAAKA,gBAAL,EAAwB;AACvB5D,MAAAA,MAAM,CAACiB,OAAP,CAAgB2C,gBAAhB,EAAmCrI,OAAnC,CACC,UAAwC;AAAA,YAAtC,CAAEqJ,WAAF,EAAeC,eAAf,CAAsC;;AACvC,YAAK1B,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAIyB,WAAJ,CAAX,EAA+B;AAC9B,gBAAME,aAAa,GAAG;AACrB,aAAEF,WAAF,GAAiBzB,MAAM,CAAEyB,WAAF;AADF,WAAtB;AAGA,gBAAMG,mBAAmB,GACxBxE,qBAAqB,CAAEuE,aAAF,CADtB;AAEA,iBAAO3B,MAAM,CAAEyB,WAAF,CAAb;;AAEA,cAAK,CAAC,CAAEG,mBAAmB,CAAClH,MAA5B,EAAqC;AACpCiE,YAAAA,OAAO,GACNA,OAAO,GACN,GAAG+C,eAAiB,IAAIE,mBAAmB,CAAChH,IAApB,CACxB,GADwB,CAEtB,IAJJ;AAKA;AACD;AACD,OAlBF;AAoBA;;AAED,UAAMiH,aAAa,GAAG,EAAtB;;AACA,QAAK7B,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAE7D,MAAb,EAAsB;AACrB0F,MAAAA,aAAa,CAAC1F,MAAd,GAAuB6D,MAAM,CAAC7D,MAA9B;AACA,aAAO6D,MAAM,CAAC7D,MAAd;AACA,KA9BK,CAgCN;;;AACA,QAAKoE,eAAL,EAAuB;AACtB,YAAMuB,mBAAmB,GACxB1E,qBAAqB,CAAEyE,aAAF,CADtB;;AAEA,UAAKC,mBAAmB,CAACpH,MAApB,KAA+B,CAApC,EAAwC;AACvC;AACA;;AACDiE,MAAAA,OAAO,GACNA,OAAO,GACN,GAAG4B,eAAiB,IAAIuB,mBAAmB,CAAClH,IAApB,CACxB,GADwB,CAEtB,IAJJ;AAKA,KA5CK,CA8CN;;;AACA,QAAKlB,mBAAmB,KAAKuC,QAAxB,IAAoCuE,gBAAzC,EAA4D;AAC3D7B,MAAAA,OAAO,IAAIN,eAAe,CAAE;AAC3BC,QAAAA,IAD2B;AAE3BC,QAAAA,KAAK,EAAEyB,MAFoB;AAG3B/D,QAAAA,QAH2B;AAI3BuC,QAAAA,kBAJ2B;AAK3BC,QAAAA,qBAL2B;AAM3BC,QAAAA;AAN2B,OAAF,CAA1B;AAQA,KAxDK,CA0DN;;;AACA,UAAM3D,YAAY,GAAGqC,qBAAqB,CACzC4C,MADyC,EAEzC/D,QAFyC,EAGzCqB,mBAHyC,CAA1C;;AAKA,QAAKvC,YAAL,aAAKA,YAAL,eAAKA,YAAY,CAAEL,MAAnB,EAA4B;AAC3BiE,MAAAA,OAAO,GACNA,OAAO,GAAI,GAAG1C,QAAU,IAAIlB,YAAY,CAACH,IAAb,CAAmB,GAAnB,CAA0B,IADvD;AAEA,KAnEK,CAqEN;;;AACA,UAAMmH,oBAAoB,GAAGlF,MAAM,CAACiB,OAAP,CAAgBkC,MAAhB,EAAyB7D,MAAzB,CAC5B;AAAA,UAAE,CAAEY,GAAF,CAAF;AAAA,aAAeA,GAAG,CAACpE,UAAJ,CAAgB,GAAhB,CAAf;AAAA,KAD4B,CAA7B;;AAIA,QAAKoJ,oBAAL,aAAKA,oBAAL,eAAKA,oBAAoB,CAAErH,MAA3B,EAAoC;AACnCqH,MAAAA,oBAAoB,CAAC3J,OAArB,CACC,UAAkC;AAAA,YAAhC,CAAE4J,SAAF,EAAaC,WAAb,CAAgC;AACjC,cAAMC,kBAAkB,GACvB9E,qBAAqB,CAAE6E,WAAF,CADtB;;AAGA,YAAK,EAAEC,kBAAF,aAAEA,kBAAF,eAAEA,kBAAkB,CAAExH,MAAtB,CAAL,EAAoC;AACnC;AACA,SANgC,CAQjC;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,cAAMyH,SAAS,GAAGlG,QAAQ,CACxBtB,KADgB,CACT,GADS,EAEhBqB,GAFgB,CAET2E,GAAF,IAAWA,GAAG,GAAGqB,SAFN,EAGhBpH,IAHgB,CAGV,GAHU,CAAlB;;AAKA,cAAMwH,UAAU,GAAI,GAAGD,SAAW,IAAID,kBAAkB,CAACtH,IAAnB,CACrC,GADqC,CAEnC,IAFH;AAIA+D,QAAAA,OAAO,GAAGA,OAAO,GAAGyD,UAApB;AACA,OA1BF;AA4BA;AACD,GAhHF;AAmHA;;AACAzD,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,GACbpF,cAAc,CAAE8E,IAAF,aAAEA,IAAF,wCAAEA,IAAI,CAAE0B,MAAR,2EAAE,cAAc/F,OAAhB,0DAAE,sBAAuB4E,QAAzB,CAAd,IAAqD,OADtD;AAEAF,IAAAA,OAAO,GACNA,OAAO,GACP,qEAFD;AAGAA,IAAAA,OAAO,GACNA,OAAO,GACN,iDAAiDC,QAAU,KAF7D;AAGA;;AAED2C,EAAAA,iBAAiB,CAACnJ,OAAlB,CAA2B,UAA6B;AAAA,QAA3B;AAAE6D,MAAAA,QAAF;AAAY+E,MAAAA;AAAZ,KAA2B;;AACvD,QAAKtH,mBAAmB,KAAKuC,QAA7B,EAAwC;AACvC;AACAA,MAAAA,QAAQ,GAAG,EAAX;AACA;;AAED,UAAMN,OAAO,GAAGF,iBAAiB,CAAEQ,QAAF,EAAY+E,OAAZ,CAAjC;;AACA,QAAK,CAAE1I,OAAO,CAAEqD,OAAF,CAAd,EAA4B;AAC3BgD,MAAAA,OAAO,GAAGA,OAAO,GAAGhD,OAApB;AACA;AACD,GAVD;AAYA,SAAOgD,OAAP;AACA,CAhLM;AAkLP,OAAO,SAAS0D,YAAT,CAAuB/D,IAAvB,EAA6BwB,cAA7B,EAA8C;AACpD,QAAMyB,iBAAiB,GAAGT,oBAAoB,CAAExC,IAAF,EAAQwB,cAAR,CAA9C;AACA,SAAOyB,iBAAiB,CAACjF,OAAlB,CAA2B,UAAmB;AAAA,QAAjB;AAAE0E,MAAAA;AAAF,KAAiB;AACpD,WAAO9E,oBAAoB,CAAE8E,OAAF,CAA3B;AACA,GAFM,CAAP;AAGA;AAED,OAAO,MAAMsB,iBAAiB,GAAKC,UAAF,IAAkB;AAClD,QAAM3F,MAAM,GAAG,EAAf;AACA2F,EAAAA,UAAU,CAACnK,OAAX,CAAsBoK,SAAF,IAAiB;AAAA;;AACpC,UAAMxE,IAAI,GAAGwE,SAAS,CAACxE,IAAvB;AACA,UAAM/B,QAAQ,4BACbuG,SADa,aACbA,SADa,8CACbA,SAAS,CAAEC,QADE,wDACb,oBAAqBC,sBADR,yEAEb,eAAe1E,IAAI,CAACf,OAAL,CAAc,OAAd,EAAuB,EAAvB,EAA4BA,OAA5B,CAAqC,GAArC,EAA0C,GAA1C,CAFhB;AAGA,UAAMsD,eAAe,4BACpBiC,SADoB,aACpBA,SADoB,+CACpBA,SAAS,CAAEC,QADS,kFACpB,qBAAqBzI,KADD,0DACpB,sBAA4B2I,qBADR,yEACiC,IADtD;AAEA,UAAMnC,gBAAgB,GAAG,CAAC,EAAEgC,SAAF,aAAEA,SAAF,uCAAEA,SAAS,CAAEC,QAAb,iDAAE,qBAAqBG,oBAAvB,CAA1B;AACA,UAAMlE,gBAAgB,GACrB8D,SADqB,aACrBA,SADqB,+CACrBA,SAAS,CAAEC,QADU,kFACrB,qBAAqBxI,OADA,oFACrB,sBAA8B4E,QADT,2DACrB,uBAAwCgE,qBADzC,CARoC,CAWpC;;AACA,UAAMpC,gBAAgB,GAAG,EAAzB;AACA5D,IAAAA,MAAM,CAACiB,OAAP,CAAgBhE,qCAAhB,EAAwD1B,OAAxD,CACC,UAAmC;AAAA;;AAAA,UAAjC,CAAE0K,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;AACtBjB,QAAAA,gBAAgB,CAAEgB,WAAF,CAAhB,GAAkC9H,aAAa,CAC9CsC,QAD8C,EAE9CyF,eAF8C,CAA/C;AAIA;AACD,KAXF;AAcA9E,IAAAA,MAAM,CAAEoB,IAAF,CAAN,GAAiB;AAChBuC,MAAAA,eADgB;AAEhB7B,MAAAA,gBAFgB;AAGhB+B,MAAAA,gBAAgB,EAAE5D,MAAM,CAACC,IAAP,CAAa2D,gBAAb,EAAgC/F,MAAhC,GACf+F,gBADe,GAEfsC,SALa;AAMhBvC,MAAAA,gBANgB;AAOhBxC,MAAAA,IAPgB;AAQhB/B,MAAAA;AARgB,KAAjB;AAUA,GArCD;AAuCA,SAAOW,MAAP;AACA,CA1CM;AA4CP,OAAO,SAASoG,qBAAT,GAAiC;AACvC,QAAM,CAAEC,WAAF,EAAeC,cAAf,IAAkChK,QAAQ,CAAE,EAAF,CAAhD;AACA,QAAM,CAAE4F,QAAF,EAAYqE,WAAZ,IAA4BjK,QAAQ,CAAE,EAAF,CAA1C;AACA,QAAM,CAAEkK,UAAF,EAAcC,aAAd,IAAgCnK,QAAQ,CAAE,EAAF,CAA9C;AACA,QAAM;AAAEoK,IAAAA,MAAM,EAAEC;AAAV,MAA2BpK,UAAU,CAAES,mBAAF,CAA3C;AACA,QAAM,CAAEiF,QAAF,IAAehF,UAAU,CAAE,kBAAF,CAA/B;AACA,QAAM2E,kBAAkB,GAAGK,QAAQ,KAAK,IAAxC;AACA,QAAMJ,qBAAqB,GAAG,CAAED,kBAAhC,CAPuC,CAOa;;AAEpDvF,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK,EAAEsK,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAEvD,MAAhB,KAA0B,EAAEuD,YAAF,aAAEA,YAAF,eAAEA,YAAY,CAAEzE,QAAhB,CAA/B,EAA0D;AACzD;AACA;;AAED,UAAMgB,cAAc,GAAGwC,iBAAiB,CAAEtJ,aAAa,EAAf,CAAxC;AACA,UAAMwK,gBAAgB,GAAGrC,kBAAkB,CAC1CoC,YAD0C,EAE1CzD,cAF0C,CAA3C;AAIA,UAAM2D,YAAY,GAAGpC,QAAQ,CAC5BkC,YAD4B,EAE5BzD,cAF4B,EAG5BtB,kBAH4B,EAI5BC,qBAJ4B,CAA7B;AAMA,UAAMiF,OAAO,GAAGrB,YAAY,CAAEkB,YAAF,EAAgBzD,cAAhB,CAA5B;AACAoD,IAAAA,cAAc,CAAE,CACf;AACCS,MAAAA,GAAG,EAAEH,gBADN;AAECI,MAAAA,cAAc,EAAE;AAFjB,KADe,EAKf;AACCD,MAAAA,GAAG,EAAEF,YADN;AAECG,MAAAA,cAAc,EAAE;AAFjB,KALe,CAAF,CAAd;AAUAT,IAAAA,WAAW,CAAEI,YAAY,CAACzE,QAAf,CAAX;AACAuE,IAAAA,aAAa,CAAEK,OAAF,CAAb;AACA,GA7BQ,EA6BN,CAAElF,kBAAF,EAAsBC,qBAAtB,EAA6C8E,YAA7C,CA7BM,CAAT;AA+BA,SAAO,CAAEN,WAAF,EAAenE,QAAf,EAAyBsE,UAAzB,EAAqC5E,kBAArC,CAAP;AACA","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"]}
|
|
@@ -196,4 +196,33 @@ export function getValueFromVariable(features, blockName, variable) {
|
|
|
196
196
|
|
|
197
197
|
return variable;
|
|
198
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Function that scopes a selector with another one. This works a bit like
|
|
201
|
+
* SCSS nesting except the `&` operator isn't supported.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```js
|
|
205
|
+
* const scope = '.a, .b .c';
|
|
206
|
+
* const selector = '> .x, .y';
|
|
207
|
+
* const merged = scopeSelector( scope, selector );
|
|
208
|
+
* // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* @param {string} scope Selector to scope to.
|
|
212
|
+
* @param {string} selector Original selector.
|
|
213
|
+
*
|
|
214
|
+
* @return {string} Scoped selector.
|
|
215
|
+
*/
|
|
216
|
+
|
|
217
|
+
export function scopeSelector(scope, selector) {
|
|
218
|
+
const scopes = scope.split(',');
|
|
219
|
+
const selectors = selector.split(',');
|
|
220
|
+
const selectorsScoped = [];
|
|
221
|
+
scopes.forEach(outer => {
|
|
222
|
+
selectors.forEach(inner => {
|
|
223
|
+
selectorsScoped.push(`${outer.trim()} ${inner.trim()}`);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
return selectorsScoped.join(', ');
|
|
227
|
+
}
|
|
199
228
|
//# sourceMappingURL=utils.js.map
|