| @@ -124,8 +124,9 @@ | ||
| 124 | 124 | * `prevent_override` value for `color.duotone` to use `color.defaultDuotone`. |
| 125 | 125 | * @since 6.2.0 Added 'shadow' presets. |
| 126 | 126 | * @since 6.6.0 Updated the 'prevent_override' value for font size presets to use 'typography.defaultFontSizes' and spacing size presets to use `spacing.defaultSpacingSizes`. |
| 127 | 127 | * @since 6.6.0 Added `aspectRatios`. |
| 128 | + * @since 7.2.0 Added 'textShadow' presets. | |
| 128 | 129 | * @var array |
| 129 | 130 | */ |
| 130 | 131 | const PRESETS_METADATA = array( |
| 131 | 132 | array( |
| @@ -186,8 +187,17 @@ | ||
| 186 | 187 | 'classes' => array( '.has-$slug-font-family' => 'font-family' ), |
| 187 | 188 | 'properties' => array( 'font-family' ), |
| 188 | 189 | ), |
| 189 | 190 | array( |
| 191 | + 'path' => array( 'typography', 'textShadowPresets' ), | |
| 192 | + 'prevent_override' => array( 'typography', 'defaultTextShadowPresets' ), | |
| 193 | + 'use_default_names' => false, | |
| 194 | + 'value_key' => 'textShadow', | |
| 195 | + 'css_vars' => '--wp--preset--text-shadow--$slug', | |
| 196 | + 'classes' => array( '.has-$slug-text-shadow' => 'text-shadow' ), | |
| 197 | + 'properties' => array( 'text-shadow' ), | |
| 198 | + ), | |
| 199 | + array( | |
| 190 | 200 | 'path' => array( 'spacing', 'spacingSizes' ), |
| 191 | 201 | 'prevent_override' => array( 'spacing', 'defaultSpacingSizes' ), |
| 192 | 202 | 'use_default_names' => true, |
| 193 | 203 | 'value_key' => 'size', |
| @@ -392,8 +402,10 @@ | ||
| 392 | 402 | * @since 7.0.0 Added type markers to the schema for boolean values. |
| 393 | 403 | * @since 7.0.0 Added `dimensions.width`, `dimensions.height`, and |
| 394 | 404 | * `typography.textIndent` properties. |
| 395 | 405 | * @since 7.1.0 Added `viewport` property. |
| 406 | + * @since 7.2.0 Added `typography.textShadow`, `typography.textShadowPresets`, | |
| 407 | + * and `typography.defaultTextShadowPresets`. | |
| 396 | 408 | * @var array |
| 397 | 409 | */ |
| 398 | 410 | const VALID_SETTINGS = array( |
| 399 | 411 | 'appearanceTools' => null, |
| @@ -469,24 +481,27 @@ | ||
| 469 | 481 | 'presets' => null, |
| 470 | 482 | 'defaultPresets' => null, |
| 471 | 483 | ), |
| 472 | 484 | 'typography' => array( |
| 473 | - 'fluid' => null, | |
| 474 | - 'customFontSize' => null, | |
| 475 | - 'defaultFontSizes' => null, | |
| 476 | - 'dropCap' => null, | |
| 477 | - 'fontFamilies' => null, | |
| 478 | - 'fontSizes' => null, | |
| 479 | - 'fontStyle' => null, | |
| 480 | - 'fontWeight' => null, | |
| 481 | - 'letterSpacing' => null, | |
| 482 | - 'lineHeight' => null, | |
| 483 | - 'textAlign' => null, | |
| 484 | - 'textColumns' => null, | |
| 485 | - 'textDecoration' => null, | |
| 486 | - 'textIndent' => null, | |
| 487 | - 'textTransform' => null, | |
| 488 | - 'writingMode' => null, | |
| 485 | + 'fluid' => null, | |
| 486 | + 'customFontSize' => null, | |
| 487 | + 'defaultFontSizes' => null, | |
| 488 | + 'dropCap' => null, | |
| 489 | + 'fontFamilies' => null, | |
| 490 | + 'fontSizes' => null, | |
| 491 | + 'fontStyle' => null, | |
| 492 | + 'fontWeight' => null, | |
| 493 | + 'letterSpacing' => null, | |
| 494 | + 'lineHeight' => null, | |
| 495 | + 'textAlign' => null, | |
| 496 | + 'textColumns' => null, | |
| 497 | + 'textDecoration' => null, | |
| 498 | + 'textIndent' => null, | |
| 499 | + 'textTransform' => null, | |
| 500 | + 'textShadow' => null, | |
| 501 | + 'defaultTextShadowPresets' => null, | |
| 502 | + 'textShadowPresets' => null, | |
| 503 | + 'writingMode' => null, | |
| 489 | 504 | ), |
| 490 | 505 | 'viewport' => array( |
| 491 | 506 | 'mobile' => null, |
| 492 | 507 | 'tablet' => null, |
| @@ -651,9 +666,9 @@ | ||
| 651 | 666 | * |
| 652 | 667 | * @since 7.1.0 |
| 653 | 668 | * |
| 654 | 669 | * @param mixed $viewport_settings Viewport settings from theme.json. |
| 655 | - * @param array $options { | |
| 670 | + * @param array $options { | |
| 656 | 671 | * Optional. Options for generating media queries. |
| 657 | 672 | * |
| 658 | 673 | * @type bool $include_desktop Whether to include the desktop media query. Default false. |
| 659 | 674 | * } |
| @@ -916,13 +931,15 @@ | ||
| 916 | 931 | |
| 917 | 932 | /** |
| 918 | 933 | * Processes pseudo-selectors for any node (block or variation). |
| 919 | 934 | * |
| 920 | - * @param array $node The node data (block or variation). | |
| 921 | - * @param string $base_selector The base selector. | |
| 922 | - * @param array $settings The theme settings. | |
| 923 | - * @param string $block_name The block name. | |
| 924 | - * @param array|null $block_metadata Metadata about the block to get styles for. | |
| 935 | + * @since 7.0.0 | |
| 936 | + * | |
| 937 | + * @param array $node The node data (block or variation). | |
| 938 | + * @param string $base_selector The base selector. | |
| 939 | + * @param array $settings The theme settings. | |
| 940 | + * @param string $block_name The block name. | |
| 941 | + * @param array|null $block_metadata Metadata about the block to get styles for. | |
| 925 | 942 | * @param array|null $style_variation Style variation metadata. |
| 926 | 943 | * @return array Array of pseudo-selector declarations. |
| 927 | 944 | */ |
| 928 | 945 | private function process_pseudo_selectors( $node, $base_selector, $settings, $block_name, $block_metadata = null, $style_variation = null ) { |
| @@ -1230,8 +1247,10 @@ | ||
| 1230 | 1247 | * |
| 1231 | 1248 | * @since 5.8.0 |
| 1232 | 1249 | * @since 5.9.0 Added the `$valid_block_names` and `$valid_element_name` parameters. |
| 1233 | 1250 | * @since 6.6.0 Extended schema definition to allow enhanced block style variations. |
| 1251 | + * @since 7.1.1 Updated schema to allow responsive breakpoint states and pseudo-selectors | |
| 1252 | + * at the top level of `styles` for block style variation partials. | |
| 1234 | 1253 | * |
| 1235 | 1254 | * @param array $input Structure to sanitize. |
| 1236 | 1255 | * @param array $valid_block_names List of valid block names. |
| 1237 | 1256 | * @param array $valid_element_names List of valid element names. |
| @@ -1295,9 +1314,17 @@ | ||
| 1295 | 1314 | } |
| 1296 | 1315 | |
| 1297 | 1316 | $schema_styles_blocks = array(); |
| 1298 | 1317 | $schema_settings_blocks = array(); |
| 1318 | + $breakpoint_states = array_keys( $responsive_media_queries ); | |
| 1299 | 1319 | |
| 1320 | + $common_block_settings = static::VALID_SETTINGS; | |
| 1321 | + // `viewport` and `blockVisibility` are global-only settings and cannot be set per block for now. | |
| 1322 | + unset( | |
| 1323 | + $common_block_settings['viewport'], | |
| 1324 | + $common_block_settings['blockVisibility'] | |
| 1325 | + ); | |
| 1326 | + | |
| 1300 | 1327 | /* |
| 1301 | 1328 | * Generate a schema for blocks. |
| 1302 | 1329 | * - Block styles can contain `elements`, `variations`, and responsive breakpoint state definitions. |
| 1303 | 1330 | * - Variations definitions cannot be nested. |
| @@ -1305,23 +1332,29 @@ | ||
| 1305 | 1332 | * - Variation inner `blocks` styles can contain `elements` and responsive breakpoint states. |
| 1306 | 1333 | * |
| 1307 | 1334 | * As each variation needs both a `blocks` schema and responsive `blocks` schemas |
| 1308 | 1335 | * for further nested inner `blocks`, the overall schema is generated in multiple passes. |
| 1336 | + * | |
| 1337 | + * All blocks start with the same style schema. Build that common schema | |
| 1338 | + * once, then add block-specific pseudo and custom states below. | |
| 1309 | 1339 | */ |
| 1340 | + $responsive_block_schema = $styles_non_top_level; | |
| 1341 | + $responsive_block_schema['elements'] = $schema_styles_elements; | |
| 1342 | + | |
| 1343 | + $common_block_schema = $styles_non_top_level; | |
| 1344 | + $common_block_schema['elements'] = $schema_styles_elements; | |
| 1345 | + | |
| 1346 | + foreach ( $breakpoint_states as $breakpoint_state ) { | |
| 1347 | + $common_block_schema[ $breakpoint_state ] = $responsive_block_schema; | |
| 1348 | + } | |
| 1349 | + | |
| 1310 | 1350 | foreach ( $valid_block_names as $block ) { |
| 1311 | - $schema_settings_blocks[ $block ] = static::VALID_SETTINGS; | |
| 1312 | - // `viewport` and `blockVisibility` are global-only settings and cannot be set per block for now. | |
| 1313 | - unset( $schema_settings_blocks[ $block ]['viewport'] ); | |
| 1314 | - unset( $schema_settings_blocks[ $block ]['blockVisibility'] ); | |
| 1315 | - $schema_styles_blocks[ $block ] = $styles_non_top_level; | |
| 1316 | - $schema_styles_blocks[ $block ]['elements'] = $schema_styles_elements; | |
| 1351 | + $schema_settings_blocks[ $block ] = $common_block_settings; | |
| 1352 | + $schema_styles_blocks[ $block ] = $common_block_schema; | |
| 1317 | 1353 | |
| 1318 | - // Add responsive breakpoint states for all blocks. | |
| 1319 | - foreach ( array_keys( $responsive_media_queries ) as $breakpoint_state ) { | |
| 1320 | - $schema_styles_blocks[ $block ][ $breakpoint_state ] = $styles_non_top_level; | |
| 1321 | - $schema_styles_blocks[ $block ][ $breakpoint_state ]['elements'] = $schema_styles_elements; | |
| 1322 | - | |
| 1323 | - if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] ) ) { | |
| 1354 | + // Add responsive pseudo-selectors only to blocks that support them. | |
| 1355 | + if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] ) ) { | |
| 1356 | + foreach ( $breakpoint_states as $breakpoint_state ) { | |
| 1324 | 1357 | foreach ( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] as $pseudo_selector ) { |
| 1325 | 1358 | $schema_styles_blocks[ $block ][ $breakpoint_state ][ $pseudo_selector ] = $styles_non_top_level; |
| 1326 | 1359 | } |
| 1327 | 1360 | } |
| @@ -1376,9 +1409,8 @@ | ||
| 1376 | 1409 | // Add responsive breakpoint states to block style variations. |
| 1377 | 1410 | foreach ( array_keys( $responsive_media_queries ) as $breakpoint_state ) { |
| 1378 | 1411 | $variation_schema[ $breakpoint_state ] = $styles_non_top_level; |
| 1379 | 1412 | $variation_schema[ $breakpoint_state ]['elements'] = $schema_styles_elements; |
| 1380 | - $variation_schema[ $breakpoint_state ]['blocks'] = $schema_styles_blocks; | |
| 1381 | 1413 | |
| 1382 | 1414 | if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] ) ) { |
| 1383 | 1415 | foreach ( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] as $pseudo_selector ) { |
| 1384 | 1416 | $variation_schema[ $breakpoint_state ][ $pseudo_selector ] = $styles_non_top_level; |
| @@ -1406,8 +1438,49 @@ | ||
| 1406 | 1438 | $schema['settings'] = static::VALID_SETTINGS; |
| 1407 | 1439 | $schema['settings']['blocks'] = $schema_settings_blocks; |
| 1408 | 1440 | $schema['settings']['typography']['fontFamilies'] = static::schema_in_root_and_per_origin( static::FONT_FAMILY_SCHEMA ); |
| 1409 | 1441 | |
| 1442 | + /* | |
| 1443 | + * Add block style variation states to the top-level styles schema. | |
| 1444 | + * | |
| 1445 | + * Block style variations defined in a standalone JSON partial within a | |
| 1446 | + * theme's `styles` directory declare their styles at the root of the | |
| 1447 | + * `styles` object, so they are sanitized against the top-level schema. | |
| 1448 | + * It needs to allow the same states that are allowed for variations | |
| 1449 | + * declared inline in theme.json, otherwise those states are silently | |
| 1450 | + * removed as unknown keys. | |
| 1451 | + * | |
| 1452 | + * The `blockTypes` property is only present on block style variation | |
| 1453 | + * partials, so it both identifies the config as a variation and | |
| 1454 | + * determines which pseudo-selectors are valid for it. Regular | |
| 1455 | + * theme.json files are unaffected. | |
| 1456 | + */ | |
| 1457 | + if ( ! empty( $input['blockTypes'] ) && is_array( $input['blockTypes'] ) ) { | |
| 1458 | + $variation_pseudo_selectors = array(); | |
| 1459 | + foreach ( $input['blockTypes'] as $variation_block_type ) { | |
| 1460 | + if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $variation_block_type ] ) ) { | |
| 1461 | + $variation_pseudo_selectors = array_merge( | |
| 1462 | + $variation_pseudo_selectors, | |
| 1463 | + static::VALID_BLOCK_PSEUDO_SELECTORS[ $variation_block_type ] | |
| 1464 | + ); | |
| 1465 | + } | |
| 1466 | + } | |
| 1467 | + $variation_pseudo_selectors = array_unique( $variation_pseudo_selectors ); | |
| 1468 | + | |
| 1469 | + foreach ( $breakpoint_states as $breakpoint_state ) { | |
| 1470 | + $schema['styles'][ $breakpoint_state ] = $styles_non_top_level; | |
| 1471 | + $schema['styles'][ $breakpoint_state ]['elements'] = $schema_styles_elements; | |
| 1472 | + | |
| 1473 | + foreach ( $variation_pseudo_selectors as $pseudo_selector ) { | |
| 1474 | + $schema['styles'][ $breakpoint_state ][ $pseudo_selector ] = $styles_non_top_level; | |
| 1475 | + } | |
| 1476 | + } | |
| 1477 | + | |
| 1478 | + foreach ( $variation_pseudo_selectors as $pseudo_selector ) { | |
| 1479 | + $schema['styles'][ $pseudo_selector ] = $styles_non_top_level; | |
| 1480 | + } | |
| 1481 | + } | |
| 1482 | + | |
| 1410 | 1483 | // Remove anything that's not present in the schema. |
| 1411 | 1484 | foreach ( array( 'styles', 'settings' ) as $subtree ) { |
| 1412 | 1485 | if ( ! isset( $input[ $subtree ] ) ) { |
| 1413 | 1486 | continue; |
| @@ -2110,9 +2183,9 @@ | ||
| 2110 | 2183 | /** |
| 2111 | 2184 | * Returns the global styles custom CSS for a single block. |
| 2112 | 2185 | * This function is deprecated; please do not sync to core. |
| 2113 | 2186 | * |
| 2114 | - * @param array $css The block css node. | |
| 2187 | + * @param array $css The block css node. | |
| 2115 | 2188 | * @param string $selector The block selector. |
| 2116 | 2189 | * |
| 2117 | 2190 | * @return string The global styles custom CSS for the block. |
| 2118 | 2191 | */ |
| @@ -3004,15 +3077,15 @@ | ||
| 3004 | 3077 | * @since 6.5.0 Output a `min-height: unset` rule when `aspect-ratio` is set. |
| 3005 | 3078 | * @since 6.6.0 Passing current theme JSON settings to wp_get_typography_font_size_value(). Using style engine to correctly fetch background CSS values. |
| 3006 | 3079 | * @since 6.7.0 Allow ref resolution of background properties. |
| 3007 | 3080 | * |
| 3008 | - * @param array $styles Styles to process. | |
| 3009 | - * @param array $settings Theme settings. | |
| 3010 | - * @param array $properties Properties metadata. | |
| 3011 | - * @param array $theme_json Theme JSON array. | |
| 3012 | - * @param string $selector The style block selector. | |
| 3081 | + * @param array $styles Styles to process. | |
| 3082 | + * @param array $settings Theme settings. | |
| 3083 | + * @param array $properties Properties metadata. | |
| 3084 | + * @param array $theme_json Theme JSON array. | |
| 3085 | + * @param string $selector The style block selector. | |
| 3013 | 3086 | * @param boolean $use_root_padding Whether to add custom properties at root level. |
| 3014 | - * @return array Returns the modified $declarations. | |
| 3087 | + * @return array Returns the modified $declarations. | |
| 3015 | 3088 | */ |
| 3016 | 3089 | protected static function compute_style_properties( $styles, $settings = array(), $properties = null, $theme_json = null, $selector = null, $use_root_padding = null ) { |
| 3017 | 3090 | if ( empty( $styles ) ) { |
| 3018 | 3091 | return array(); |
| @@ -3136,10 +3209,10 @@ | ||
| 3136 | 3209 | * @since 5.9.0 Added support for values of array type, which are returned as is. |
| 3137 | 3210 | * @since 6.1.0 Added the `$theme_json` parameter. |
| 3138 | 3211 | * @since 6.7.0 Added support for background image refs |
| 3139 | 3212 | * |
| 3140 | - * @param array $styles Styles subtree. | |
| 3141 | - * @param array $path Which property to process. | |
| 3213 | + * @param array $styles Styles subtree. | |
| 3214 | + * @param array $path Which property to process. | |
| 3142 | 3215 | * @param array $theme_json Theme JSON array. |
| 3143 | 3216 | * @return string|array Style property value. |
| 3144 | 3217 | */ |
| 3145 | 3218 | protected static function get_property_value( $styles, $path, $theme_json = null ) { |
| @@ -3511,9 +3584,9 @@ | ||
| 3511 | 3584 | * @since 6.1.0 |
| 3512 | 3585 | * |
| 3513 | 3586 | * @param array $theme_json The theme.json converted to an array. |
| 3514 | 3587 | * @param array $selectors Optional list of selectors per block. |
| 3515 | - * @param array $options { | |
| 3588 | + * @param array $options { | |
| 3516 | 3589 | * Optional. An array of options for now used for internal purposes only (may change without notice). |
| 3517 | 3590 | * |
| 3518 | 3591 | * @type bool $include_block_style_variations Includes nodes for block style variations. Default false. |
| 3519 | 3592 | * @type bool $include_node_paths_only Return only block nodes node paths. Default false. |
| @@ -3878,10 +3951,20 @@ | ||
| 3878 | 3951 | // Store variation metadata and node for layout styles generation. |
| 3879 | 3952 | // Only store if the variation has blockGap defined. |
| 3880 | 3953 | if ( isset( $style_variation_node['spacing']['blockGap'] ) ) { |
| 3881 | 3954 | // Append block selector to the variation selector for proper targeting. |
| 3882 | - $variation_metadata_with_selector = $style_variation; | |
| 3883 | - $variation_metadata_with_selector['selector'] = $style_variation['selector'] . $block_metadata['css']; | |
| 3955 | + $variation_metadata_with_selector = $style_variation; | |
| 3956 | + $variation_metadata_with_selector['selector'] = $style_variation['selector'] . $block_metadata['css']; | |
| 3957 | + | |
| 3958 | + /* | |
| 3959 | + * `get_layout_styles()` reads `name` as a block name, to check that the block | |
| 3960 | + * supports layout at all. A variation node's `name` is the variation slug, | |
| 3961 | + * which is never a registered block, so the check fails and every variation | |
| 3962 | + * gap rule is discarded. Pass the block the variation belongs to, so the | |
| 3963 | + * support check answers the question it is actually asking. | |
| 3964 | + */ | |
| 3965 | + $variation_metadata_with_selector['name'] = $block_name; | |
| 3966 | + | |
| 3884 | 3967 | $style_variation_layout_metadata[ $style_variation['selector'] ] = array( |
| 3885 | 3968 | 'metadata' => $variation_metadata_with_selector, |
| 3886 | 3969 | 'node' => $style_variation_node, |
| 3887 | 3970 | ); |
| @@ -3935,9 +4018,13 @@ | ||
| 3935 | 4018 | // Process blockGap responsive layout styles for this variation. |
| 3936 | 4019 | if ( isset( $breakpoint_node['spacing']['blockGap'] ) ) { |
| 3937 | 4020 | $variation_layout_metadata = $style_variation; |
| 3938 | 4021 | $variation_layout_metadata['selector'] = $style_variation['selector'] . $block_metadata['css']; |
| 3939 | - $variation_responsive_css .= $this->get_layout_styles( | |
| 4022 | + | |
| 4023 | + // The variation slug is not a block name here either. See above. | |
| 4024 | + $variation_layout_metadata['name'] = $block_name; | |
| 4025 | + | |
| 4026 | + $variation_responsive_css .= $this->get_layout_styles( | |
| 3940 | 4027 | $variation_layout_metadata, |
| 3941 | 4028 | array( |
| 3942 | 4029 | 'node' => $breakpoint_node, |
| 3943 | 4030 | 'media_query' => $breakpoint_media, |
| @@ -4600,9 +4687,9 @@ | ||
| 4600 | 4687 | * Gets a `default`'s preset name by a provided slug. |
| 4601 | 4688 | * |
| 4602 | 4689 | * @since 5.9.0 |
| 4603 | 4690 | * |
| 4604 | - * @param string $slug The slug we want to find a match from default presets. | |
| 4691 | + * @param string $slug The slug we want to find a match from default presets. | |
| 4605 | 4692 | * @param array $base_path The path to inspect. It's 'settings' by default. |
| 4606 | 4693 | * @return string|null |
| 4607 | 4694 | */ |
| 4608 | 4695 | protected function get_name_from_defaults( $slug, $base_path ) { |
| @@ -4650,10 +4737,10 @@ | ||
| 4650 | 4737 | * @since 5.9.0 |
| 4651 | 4738 | * @since 6.6.0 Added support for block style variation element styles and $origin parameter. |
| 4652 | 4739 | * |
| 4653 | 4740 | * @param array $theme_json Structure to sanitize. |
| 4654 | - * @param string $origin Optional. What source of data this object represents. | |
| 4655 | - * One of 'blocks', 'default', 'theme', or 'custom'. Default 'theme'. | |
| 4741 | + * @param string $origin Optional. What source of data this object represents. | |
| 4742 | + * One of 'blocks', 'default', 'theme', or 'custom'. Default 'theme'. | |
| 4656 | 4743 | * @return array Sanitized structure. |
| 4657 | 4744 | */ |
| 4658 | 4745 | public static function remove_insecure_properties( $theme_json, $origin = 'theme' ) { |
| 4659 | 4746 | if ( ! in_array( $origin, static::VALID_ORIGINS, true ) ) { |
| @@ -5740,9 +5827,9 @@ | ||
| 5740 | 5827 | * Given a tree, converts the internal representation of variables to the CSS representation. |
| 5741 | 5828 | * It is recursive and modifies the input in-place. |
| 5742 | 5829 | * |
| 5743 | 5830 | * @since 6.3.0 |
| 5744 | - * @param array $tree Input to process. | |
| 5831 | + * @param array $tree Input to process. | |
| 5745 | 5832 | * @return array The modified $tree. |
| 5746 | 5833 | */ |
| 5747 | 5834 | private static function resolve_custom_css_format( $tree ) { |
| 5748 | 5835 | $prefix = 'var:'; |
| @@ -5890,9 +5977,9 @@ | ||
| 5890 | 5977 | * the variation class directly to the selector that will receive the |
| 5891 | 5978 | * declarations instead of deriving it by subtracting the root selector from |
| 5892 | 5979 | * the feature selector. |
| 5893 | 5980 | * |
| 5894 | - * @param array $style_variation Style variation metadata. | |
| 5981 | + * @param array $style_variation Style variation metadata. | |
| 5895 | 5982 | * @param string $feature_selector CSS selector for the feature. |
| 5896 | 5983 | * @return string Feature selector with block style variation selector added. |
| 5897 | 5984 | */ |
| 5898 | 5985 | protected static function get_block_style_variation_feature_selector( $style_variation, $feature_selector ) { |